Merge pull request #469 from blinkseb/master
authorSébastien Brochet <blinkseb@gmail.com>
Tue, 27 Mar 2012 17:24:15 +0000 (10:24 -0700)
committerSébastien Brochet <blinkseb@gmail.com>
Tue, 27 Mar 2012 17:24:15 +0000 (10:24 -0700)
[WIN32] upgrade libass to v0.10.0. Harfbuzz support is coming later

1052 files changed:
.gitignore
.gitmodules [new file with mode: 0644]
Makefile.in [changed mode: 0644->0755]
Makefile.include.in
README.ios
README.linux
README.osx
README.ubuntu
XBMC-ATV2.xcodeproj/project.pbxproj
XBMC-IOS.xcodeproj/project.pbxproj
XBMC.xcodeproj/project.pbxproj
addons/metadata.albums.allmusic.com/addon.xml
addons/metadata.albums.allmusic.com/resources/language/Romanian/strings.xml [deleted file]
addons/metadata.albums.allmusic.com/resources/language/Spanish/strings.xml
addons/metadata.artists.allmusic.com/addon.xml
addons/metadata.artists.allmusic.com/allmusic.xml
addons/metadata.artists.allmusic.com/resources/language/Romanian/strings.xml [deleted file]
addons/metadata.artists.allmusic.com/resources/language/Spanish/strings.xml
addons/metadata.artists.allmusic.com/resources/language/Swedish/strings.xml
addons/metadata.common.allmusic.com/addon.xml
addons/metadata.common.allmusic.com/allmusic.xml
addons/metadata.common.hdtrailers.net/addon.xml
addons/metadata.common.hdtrailers.net/hdtrailers.xml
addons/metadata.common.htbackdrops.com/addon.xml
addons/metadata.common.imdb.com/addon.xml
addons/metadata.common.imdb.com/changelog.txt
addons/metadata.common.imdb.com/imdb.xml
addons/metadata.common.last.fm/addon.xml
addons/metadata.common.last.fm/lastfm.xml
addons/metadata.common.themoviedb.org/addon.xml
addons/metadata.common.themoviedb.org/tmdb.xml
addons/metadata.mtv.com/addon.xml [deleted file]
addons/metadata.mtv.com/icon.png [deleted file]
addons/metadata.mtv.com/mtv.xml [deleted file]
addons/metadata.themoviedb.org/addon.xml
addons/metadata.themoviedb.org/changelog.txt
addons/metadata.themoviedb.org/resources/language/Chinese (Simple)/strings.xml
addons/metadata.themoviedb.org/resources/language/Dutch/strings.xml
addons/metadata.themoviedb.org/resources/language/English/strings.xml
addons/metadata.themoviedb.org/resources/language/Finnish/strings.xml
addons/metadata.themoviedb.org/resources/language/German/strings.xml
addons/metadata.themoviedb.org/resources/language/Hungarian/strings.xml
addons/metadata.themoviedb.org/resources/language/Portuguese/strings.xml
addons/metadata.themoviedb.org/resources/language/Romanian/strings.xml
addons/metadata.themoviedb.org/resources/language/Spanish/strings.xml
addons/metadata.themoviedb.org/resources/language/Swedish/strings.xml
addons/metadata.themoviedb.org/resources/settings.xml
addons/metadata.themoviedb.org/tmdb.xml
addons/metadata.tvdb.com/addon.xml
addons/metadata.tvdb.com/changelog.txt
addons/metadata.tvdb.com/resources/language/Portuguese/strings.xml
addons/metadata.tvdb.com/resources/language/Romanian/strings.xml [deleted file]
addons/metadata.tvdb.com/resources/language/Spanish/strings.xml
addons/metadata.tvdb.com/resources/language/Swedish/strings.xml
addons/metadata.tvdb.com/tvdb.xml
addons/metadata.yahoomusic.com/addon.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/icon.png [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/language/Dutch/strings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/language/English/strings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/language/Finnish/strings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/language/Hungarian/strings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/language/Korean/strings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/language/Polish/strings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/language/Portuguese/strings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/language/Swedish/strings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/resources/settings.xml [new file with mode: 0644]
addons/metadata.yahoomusic.com/yahoomusic.xml [new file with mode: 0644]
addons/repository.xbmc.org/addon.xml
addons/screensaver.rsxs.euphoria/addon.xml
addons/screensaver.rsxs.plasma/addon.xml
addons/screensaver.rsxs.solarwinds/addon.xml
addons/screensaver.xbmc.builtin.black/addon.xml
addons/screensaver.xbmc.builtin.dim/addon.xml
addons/screensaver.xbmc.builtin.dim/resources/language/Romanian/strings.xml [new file with mode: 0644]
addons/screensaver.xbmc.builtin.dim/resources/language/Slovenian/strings.xml [new file with mode: 0644]
addons/screensaver.xbmc.builtin.dim/resources/settings.xml
addons/screensaver.xbmc.builtin.slideshow/addon.xml
addons/screensaver.xbmc.builtin.slideshow/resources/language/Romanian/strings.xml [new file with mode: 0644]
addons/screensaver.xbmc.builtin.slideshow/resources/language/Slovenian/strings.xml [new file with mode: 0644]
addons/screensaver.xbmc.builtin.slideshow/resources/language/Swedish/strings.xml
addons/screensaver.xbmc.builtin.slideshow/resources/settings.xml
addons/script.module.simplejson/addon.xml [new file with mode: 0644]
addons/script.module.simplejson/lib/LICENSE.txt [new file with mode: 0644]
addons/script.module.simplejson/lib/simplejson/__init__.py [new file with mode: 0644]
addons/script.module.simplejson/lib/simplejson/decoder.py [new file with mode: 0644]
addons/script.module.simplejson/lib/simplejson/encoder.py [new file with mode: 0644]
addons/script.module.simplejson/lib/simplejson/scanner.py [new file with mode: 0644]
addons/script.module.simplejson/lib/simplejson/tool.py [new file with mode: 0644]
addons/skin.confluence/720p/DialogButtonMenu.xml
addons/skin.confluence/720p/DialogPeripheralManager.xml
addons/skin.confluence/720p/DialogPeripheralSettings.xml
addons/skin.confluence/720p/Home.xml
addons/skin.confluence/720p/IncludesCodecFlagging.xml
addons/skin.confluence/720p/IncludesHomeMenuItems.xml
addons/skin.confluence/720p/IncludesHomeRecentlyAdded.xml
addons/skin.confluence/720p/MyMusicNav.xml
addons/skin.confluence/720p/MyWeather.xml
addons/skin.confluence/720p/Settings.xml
addons/skin.confluence/720p/SettingsSystemInfo.xml
addons/skin.confluence/720p/ViewsMusicLibrary.xml
addons/skin.confluence/720p/ViewsVideoLibrary.xml
addons/skin.confluence/720p/custom_SkinSetting_1111.xml
addons/skin.confluence/720p/includes.xml
addons/skin.confluence/720p/weather+/10DayForecast.xml
addons/skin.confluence/720p/weather+/MapsVideo.xml
addons/skin.confluence/addon.xml
addons/skin.confluence/backgrounds/network.jpg [deleted file]
addons/skin.confluence/backgrounds/services.jpg [new file with mode: 0644]
addons/skin.confluence/language/Arabic/strings.xml [new file with mode: 0644]
addons/skin.confluence/language/Bulgarian/strings.xml
addons/skin.confluence/language/Catalan/strings.xml
addons/skin.confluence/language/Chinese (Simple)/strings.xml
addons/skin.confluence/language/Chinese (Traditional)/strings.xml
addons/skin.confluence/language/Czech/strings.xml
addons/skin.confluence/language/English/strings.xml
addons/skin.confluence/language/Finnish/strings.xml
addons/skin.confluence/language/German/strings.xml
addons/skin.confluence/language/Greek/strings.xml
addons/skin.confluence/language/Hungarian/strings.xml
addons/skin.confluence/language/Icelandic/strings.xml
addons/skin.confluence/language/Italian/strings.xml
addons/skin.confluence/language/Korean/strings.xml
addons/skin.confluence/language/Lithuanian/strings.xml [new file with mode: 0644]
addons/skin.confluence/language/Polish/strings.xml
addons/skin.confluence/language/Portuguese (Brazil)/strings.xml
addons/skin.confluence/language/Romanian/strings.xml
addons/skin.confluence/language/Russian/strings.xml
addons/skin.confluence/language/Slovenian/strings.xml
addons/skin.confluence/language/Spanish/strings.xml
addons/skin.confluence/language/Swedish/strings.xml
addons/skin.confluence/language/Turkish/strings.xml
addons/skin.confluence/media/flagging/audio/vorbis.png [new file with mode: 0644]
addons/skin.touched [new submodule]
addons/skin.touched/4x3Hirez/AddonBrowser.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogAddonInfo.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogAddonSettings.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogAlbumInfo.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogBusy.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogButtonMenu.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogContentSettings.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogContextMenu.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogFavourites.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogFileStacking.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogGamepad.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogKaiToast.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogKaraokeSongSelector.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogKaraokeSongSelectorLarge.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogKeyboard.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogMediaSource.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogMusicScan.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogMuteBug.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogNetworkSetup.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogNumeric.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogOK.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogPictureInfo.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogProgress.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogSeekBar.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogSelect.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogSongInfo.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogTextViewer.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogVideoInfo.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogVideoScan.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogVolumeBar.xml [deleted file]
addons/skin.touched/4x3Hirez/DialogYesNo.xml [deleted file]
addons/skin.touched/4x3Hirez/FileBrowser.xml [deleted file]
addons/skin.touched/4x3Hirez/FileManager.xml [deleted file]
addons/skin.touched/4x3Hirez/Font.xml [deleted file]
addons/skin.touched/4x3Hirez/Home.xml [deleted file]
addons/skin.touched/4x3Hirez/IncludesCodecFlagging.xml [deleted file]
addons/skin.touched/4x3Hirez/IncludesKeypad.xml [deleted file]
addons/skin.touched/4x3Hirez/IncludesPlayerControls.xml [deleted file]
addons/skin.touched/4x3Hirez/LockSettings.xml [deleted file]
addons/skin.touched/4x3Hirez/LoginScreen.xml [deleted file]
addons/skin.touched/4x3Hirez/MusicKaraokeLyrics.xml [deleted file]
addons/skin.touched/4x3Hirez/MusicOSD.xml [deleted file]
addons/skin.touched/4x3Hirez/MusicOverlay.xml [deleted file]
addons/skin.touched/4x3Hirez/MusicVisualisation.xml [deleted file]
addons/skin.touched/4x3Hirez/MyMusicNav.xml [deleted file]
addons/skin.touched/4x3Hirez/MyMusicPlaylist.xml [deleted file]
addons/skin.touched/4x3Hirez/MyMusicPlaylistEditor.xml [deleted file]
addons/skin.touched/4x3Hirez/MyMusicSongs.xml [deleted file]
addons/skin.touched/4x3Hirez/MyPics.xml [deleted file]
addons/skin.touched/4x3Hirez/MyPrograms.xml [deleted file]
addons/skin.touched/4x3Hirez/MyVideoNav.xml [deleted file]
addons/skin.touched/4x3Hirez/MyVideoPlaylist.xml [deleted file]
addons/skin.touched/4x3Hirez/MyWeather.xml [deleted file]
addons/skin.touched/4x3Hirez/PlayerControls.xml [deleted file]
addons/skin.touched/4x3Hirez/Pointer.xml [deleted file]
addons/skin.touched/4x3Hirez/ProfileSettings.xml [deleted file]
addons/skin.touched/4x3Hirez/Settings.xml [deleted file]
addons/skin.touched/4x3Hirez/SettingsCategory.xml [deleted file]
addons/skin.touched/4x3Hirez/SettingsProfile.xml [deleted file]
addons/skin.touched/4x3Hirez/SettingsScreenCalibration.xml [deleted file]
addons/skin.touched/4x3Hirez/SettingsSystemInfo.xml [deleted file]
addons/skin.touched/4x3Hirez/SlideShow.xml [deleted file]
addons/skin.touched/4x3Hirez/SmartPlaylistEditor.xml [deleted file]
addons/skin.touched/4x3Hirez/SmartPlaylistRule.xml [deleted file]
addons/skin.touched/4x3Hirez/Startup.xml [deleted file]
addons/skin.touched/4x3Hirez/VideoFullScreen.xml [deleted file]
addons/skin.touched/4x3Hirez/VideoOSD.xml [deleted file]
addons/skin.touched/4x3Hirez/VideoOSDBookmarks.xml [deleted file]
addons/skin.touched/4x3Hirez/VideoOSDSettings.xml [deleted file]
addons/skin.touched/4x3Hirez/VideoOverlay.xml [deleted file]
addons/skin.touched/4x3Hirez/ViewsAddonBrowser.xml [deleted file]
addons/skin.touched/4x3Hirez/ViewsCommon.xml [deleted file]
addons/skin.touched/4x3Hirez/ViewsMetaData.xml [deleted file]
addons/skin.touched/4x3Hirez/VisualisationPresetList.xml [deleted file]
addons/skin.touched/4x3Hirez/custom_skinsettings_1113.xml [deleted file]
addons/skin.touched/4x3Hirez/custom_volume_1112.xml [deleted file]
addons/skin.touched/4x3Hirez/defaults.xml [deleted file]
addons/skin.touched/4x3Hirez/includes.xml [deleted file]
addons/skin.touched/4x3Hirez/script-XBMC-Subtitles-main.xml [deleted file]
addons/skin.touched/addon.xml [deleted file]
addons/skin.touched/background/background.png [deleted file]
addons/skin.touched/background/movies.png [deleted file]
addons/skin.touched/background/music.png [deleted file]
addons/skin.touched/background/pictures.png [deleted file]
addons/skin.touched/background/programs.png [deleted file]
addons/skin.touched/background/tvshows.png [deleted file]
addons/skin.touched/background/videos.png [deleted file]
addons/skin.touched/colors/defaults.xml [deleted file]
addons/skin.touched/fonts/DejaVuSans-Bold-Caps.ttf [deleted file]
addons/skin.touched/fonts/DejaVuSans-Bold.ttf [deleted file]
addons/skin.touched/icon.png [deleted file]
addons/skin.touched/language/Chinese (Simple)/strings.xml [deleted file]
addons/skin.touched/language/Dutch/strings.xml [deleted file]
addons/skin.touched/language/English/strings.xml [deleted file]
addons/skin.touched/language/Korean/strings.xml [deleted file]
addons/skin.touched/media/Textures.xbt [deleted file]
addons/visualization.dxspectrum/addon.xml
addons/visualization.dxspectrum/resources/language/Slovenian/strings.xml [new file with mode: 0644]
addons/visualization.glspectrum/addon.xml
addons/visualization.glspectrum/resources/language/Romanian/strings.xml [new file with mode: 0644]
addons/visualization.glspectrum/resources/language/Slovenian/strings.xml [new file with mode: 0644]
addons/visualization.itunes/addon.xml
addons/visualization.milkdrop/addon.xml
addons/visualization.milkdrop/resources/language/Slovenian/strings.xml [new file with mode: 0644]
addons/visualization.milkdrop/resources/language/Swedish/strings.xml
addons/visualization.projectm/addon.xml
addons/visualization.projectm/resources/language/Romanian/strings.xml [new file with mode: 0644]
addons/visualization.projectm/resources/language/Slovenian/strings.xml [new file with mode: 0644]
addons/visualization.projectm/resources/language/Swedish/strings.xml
addons/visualization.waveform/addon.xml
addons/weather.wunderground/LICENSE.txt [new file with mode: 0644]
addons/weather.wunderground/addon.xml [new file with mode: 0644]
addons/weather.wunderground/changelog.txt [new file with mode: 0644]
addons/weather.wunderground/default.py [new file with mode: 0644]
addons/weather.wunderground/icon.png [new file with mode: 0644]
addons/weather.wunderground/resources/language/Chinese (Simple)/strings.xml [new file with mode: 0644]
addons/weather.wunderground/resources/language/Dutch/strings.xml [new file with mode: 0644]
addons/weather.wunderground/resources/language/English/strings.xml [new file with mode: 0644]
addons/weather.wunderground/resources/language/Finnish/strings.xml [new file with mode: 0644]
addons/weather.wunderground/resources/language/German/strings.xml [new file with mode: 0644]
addons/weather.wunderground/resources/language/Swedish/strings.xml [new file with mode: 0644]
addons/weather.wunderground/resources/lib/utilities.py [new file with mode: 0644]
addons/weather.wunderground/resources/settings.xml [new file with mode: 0644]
addons/weather.xbmc.builtin/addon.xml [deleted file]
addons/weather.xbmc.builtin/icon.png [deleted file]
addons/webinterface.debug/addon.xml [deleted file]
addons/webinterface.debug/favicon.ico [deleted file]
addons/webinterface.debug/index.html [deleted file]
addons/webinterface.debug/js/jquery-1.4.2.js [deleted file]
addons/webinterface.debug/js/testinvoker.js [deleted file]
addons/webinterface.default/addon.xml
addons/webinterface.default/index.html
addons/webinterface.default/js/Core.js
addons/webinterface.default/js/Launcher.js
addons/webinterface.default/js/MediaLibrary.js
addons/webinterface.default/js/NowPlayingManager.js
addons/xbmc.addon/addon.xml
addons/xbmc.gui/addon.xml
addons/xbmc.json/addon.xml
bootstrap
configure.in
language/Arabic/langinfo.xml [new file with mode: 0644]
language/Arabic/strings.xml [new file with mode: 0644]
language/Bulgarian/langinfo.xml
language/Bulgarian/strings.xml
language/Catalan/strings.xml
language/Chinese (Simple)/strings.xml
language/Chinese (Traditional)/strings.xml
language/Czech/langinfo.xml
language/Czech/strings.xml
language/Dutch/strings.xml
language/English/langinfo.xml
language/English/strings.xml
language/Finnish/strings.xml
language/French/langinfo.xml
language/French/strings.xml
language/German/strings.xml
language/Greek/strings.xml
language/Hebrew/langinfo.xml
language/Hebrew/strings.xml
language/Hungarian/strings.xml
language/Icelandic/strings.xml
language/Italian/strings.xml
language/Korean/strings.xml
language/Lithuanian/langinfo.xml [new file with mode: 0644]
language/Lithuanian/strings.xml [new file with mode: 0644]
language/Polish/strings.xml
language/Portuguese (Brazil)/strings.xml
language/Romanian/strings.xml
language/Russian/strings.xml
language/Slovenian/strings.xml
language/Spanish (Mexico)/langinfo.xml
language/Spanish (Mexico)/strings.xml
language/Swedish/strings.xml
language/Turkish/strings.xml
lib/DllAvFormat.h
lib/DllLibbluray.h [new file with mode: 0644]
lib/UnrarXLib/extract.cpp
lib/UnrarXLib/os.hpp
lib/UnrarXLib/rar.cpp
lib/UnrarXLib/rdwrfn.cpp
lib/addons/script.module.pil/Imaging-1.1.7-access.patch [new file with mode: 0644]
lib/addons/script.module.pil/Imaging-1.1.7-crosscompiling-0.1.patch [new file with mode: 0644]
lib/addons/script.module.pil/Imaging-1.1.7-setuptools-0.1.patch [new file with mode: 0644]
lib/addons/script.module.pil/Makefile.in
lib/boost/uuid/sha1.hpp [new file with mode: 0644]
lib/cmyth/include/cmyth/cmyth.h
lib/cmyth/include/refmem/atomic.h
lib/cmyth/libcmyth/debug.c
lib/cmyth/libcmyth/mythtv_mysql.c
lib/cmyth/libcmyth/socket.c
lib/cmyth/librefmem/alloc.c
lib/cximage-6.0/CxImage/ximapng.cpp
lib/cximage-6.0/CxImage/ximapng.h
lib/ffmpeg/build_xbmc_win32.sh
lib/ffmpeg/libavcodec/arm/fft_neon.S
lib/ffmpeg/libavcodec/arm/h264idct_neon.S
lib/ffmpeg/libavcodec/arm/h264pred_neon.S
lib/ffmpeg/libavcodec/arm/simple_idct_neon.S
lib/ffmpeg/libavcodec/arm/vp3dsp_neon.S
lib/ffmpeg/libavcodec/dvbsubdec.c
lib/ffmpeg/libavcodec/dvdsubdec.c
lib/ffmpeg/libavcodec/dxva2.c
lib/ffmpeg/libavcodec/dxva2.h
lib/ffmpeg/libavcodec/dxva2_h264.c
lib/ffmpeg/libavcodec/dxva2_mpeg2.c
lib/ffmpeg/libavcodec/dxva2_vc1.c
lib/ffmpeg/libavcodec/h264.c
lib/ffmpeg/libavcodec/h264.h
lib/ffmpeg/libavcodec/vaapi_mpeg2.c
lib/ffmpeg/libavcodec/vaapi_vc1.c
lib/ffmpeg/libavcodec/x86/h264_qpel_mmx.c
lib/ffmpeg/libavfilter/vf_yadif.c
lib/ffmpeg/libavfilter/x86/yadif_template.c
lib/ffmpeg/libavfilter/yadif.h
lib/ffmpeg/libavformat/matroskadec.c
lib/ffmpeg/libavformat/mmsh.c
lib/ffmpeg/libavformat/mmst.c
lib/ffmpeg/patches/0012-dvdsub-hacks.patch
lib/ffmpeg/patches/0051-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch [new file with mode: 0644]
lib/ffmpeg/patches/0052-dxva-mpeg2-speed-up-slice-allocation.patch [new file with mode: 0644]
lib/ffmpeg/patches/0053-dxva-vc1-Take-BI-into-account-for-forward-and-backwa.patch [new file with mode: 0644]
lib/ffmpeg/patches/0054-dxva-vc1-Pass-overlapping-transforms-hint.patch [new file with mode: 0644]
lib/ffmpeg/patches/0055-dxva-h264-Fix-dxva-playback-of-streams-that-don-t-st.patch [new file with mode: 0644]
lib/ffmpeg/patches/0056-Changed-format-string-td-not-supported-by-our-MingW-.patch [new file with mode: 0644]
lib/ffmpeg/patches/0057-Fixes-neon-usage-under-iOS5.patch [new file with mode: 0644]
lib/ffmpeg/patches/0058-fixed-seeks-in-mmsh.patch [new file with mode: 0644]
lib/ffmpeg/patches/0059-fix-h264-decode-size.patch [new file with mode: 0644]
lib/ffmpeg/patches/0060-DXVA-Handle-return-value-of-BeginFrame-better.patch [new file with mode: 0644]
lib/ffmpeg/patches/0061-fix-vc1-vaapi-intel-sandy-bridge.patch [new file with mode: 0644]
lib/ffmpeg/patches/0062-fixed-crash-in-ffmpeg-matroskadec-with-some-files-fi.patch [new file with mode: 0644]
lib/ffmpeg/patches/0063-fixed-playing-mpegts-over-rtsp-caused-ffmpeg-to-read.patch [new file with mode: 0644]
lib/ffmpeg/patches/0064-ffmpeg-add-missing-check-for-NULL-pointer.patch [new file with mode: 0644]
lib/ffmpeg/patches/0065-changed-allow-yadif-deinterlacer-to-enable-and-disab.patch [new file with mode: 0644]
lib/ffmpeg/patches/0066-changed-updated-yadif-patch-to-same-as-will-be-appli.patch [new file with mode: 0644]
lib/ffmpeg/patches/0067-changed-updated-dxva-zigzag-workaround-for-ATI-based.patch [new file with mode: 0644]
lib/ffmpeg/patches/0068-fixed-yadif-should-copy-frame-properties-of-second-f.patch [new file with mode: 0644]
lib/ffmpeg/patches/0069-ffmpeg-silence-compiler-warnings.patch [new file with mode: 0644]
lib/ffmpeg/patches/0070-matroskadec-use-correct-compression-parameters-for-c.patch [new file with mode: 0644]
lib/ffmpeg/patches/0071-fixed-Typo.patch [new file with mode: 0644]
lib/ffmpeg/patches/0072-h264-Use-mismatching-frame-numbers-in-fields-to-sync.patch [new file with mode: 0644]
lib/ffmpeg/patches/0073-Don-t-fill-in-frame-gaps-with-copied-refs-after-flus.patch [new file with mode: 0644]
lib/ffmpeg/patches/0074-vaapi-do-not-assert-on-value-read-from-input-bitstre.patch [new file with mode: 0644]
lib/ffmpeg/patches/0075-fixed-playback-from-mmst-urls-would-halt-after-some-.patch [new file with mode: 0644]
lib/ffmpeg/patches/0076-Fix-dvb-subtitle-decoding-when-display-segment-is-mi.patch [new file with mode: 0644]
lib/ffmpeg/patches/0077-Change-yadif-to-not-use-out-of-picture-lines.-Fixes-.patch [new file with mode: 0644]
lib/ffmpeg/patches/0078-fixed-ffmpeg-build-with-gcc-4.7-on-x86.patch [new file with mode: 0644]
lib/libUPnP/Platinum/Source/Core/PltService.cpp
lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaBrowser.h
lib/libUPnP/Platinum/Source/Devices/MediaServer/PltSyncMediaBrowser.cpp
lib/libXDAAP/libXDAAP.c
lib/libapetag/install-sh [deleted file]
lib/libapetag/is_tag.c
lib/libcec/Makefile [new file with mode: 0644]
lib/libdvd/Makefile.in
lib/libdvd/libdvdnav/src/searching.c
lib/libexif/IptcParse.cpp
lib/libid3tag/libid3tag/Makefile.am
lib/libid3tag/libid3tag/compat.gperf
lib/libid3tag/libid3tag/compat2.c
lib/libid3tag/libid3tag/metadata.c
lib/libnfs/001_fix_hanewin.patch [new file with mode: 0644]
lib/libnfs/Makefile
lib/libshairport/007_fix_syslog_defines.patch [new file with mode: 0644]
lib/libshairport/008-add-missing-libs.patch [new file with mode: 0644]
lib/libshairport/009_fix_ipv6.patch [new file with mode: 0644]
lib/libshairport/Makefile
media/Splash.png
media/weather.zip
project/BuildDependencies/scripts/boost_d.txt
project/BuildDependencies/scripts/get_mingw_env.bat
project/BuildDependencies/scripts/get_mingw_env.txt
project/BuildDependencies/scripts/get_msys_env.txt
project/BuildDependencies/scripts/libbluray_d.bat
project/BuildDependencies/scripts/libbluray_d.txt
project/BuildDependencies/scripts/libcdio_d.bat
project/BuildDependencies/scripts/libcdio_d.txt
project/BuildDependencies/scripts/libcec_d.bat
project/BuildDependencies/scripts/libcec_d.txt
project/BuildDependencies/scripts/libcurl_d.bat
project/BuildDependencies/scripts/libcurl_d.txt
project/BuildDependencies/scripts/libnfs_d.bat
project/BuildDependencies/scripts/libnfs_d.txt
project/BuildDependencies/scripts/libplist_d.bat
project/BuildDependencies/scripts/libplist_d.txt
project/VS2010Express/XBMC.vcxproj
project/VS2010Express/XBMC.vcxproj.filters
project/Win32BuildSetup/extract_git_rev.bat
system/Lircmap.xml
system/keymaps/joystick.AppleRemote.xml
system/keymaps/keyboard.nyxboard.xml [deleted file]
system/keymaps/keyboard.xml
system/keymaps/mouse.xml
system/keymaps/nyxboard/keyboard.xml [new file with mode: 0644]
system/keymaps/remote.xml
system/peripherals.xml
system/players/dvdplayer/etc/fonts/fonts.conf
tools/EventClients/Clients/PS3 Sixaxis Controller/README.ubuntu [new file with mode: 0644]
tools/EventClients/Clients/PS3 Sixaxis Controller/ps3d.py
tools/EventClients/lib/python/bt/hid.py
tools/EventClients/lib/python/ps3/keymaps.py
tools/EventClients/lib/python/ps3/sixaxis.py
tools/EventClients/lib/python/ps3/sixpair.py [new file with mode: 0755]
tools/EventClients/lib/python/ps3/sixwatch.py [new file with mode: 0755]
tools/Linux/FEH.py
tools/Linux/xbmc-standalone.sh.in
tools/Linux/xbmc.desktop
tools/darwin/depends/Makefile.in
tools/darwin/depends/config.site_ios.in
tools/darwin/depends/config.site_ios.mk.in
tools/darwin/depends/config.site_osx.in
tools/darwin/depends/config.site_osx.mk.in
tools/darwin/depends/curl/Makefile
tools/darwin/depends/distribute/Makefile [new file with mode: 0644]
tools/darwin/depends/distutilscross/Makefile [new file with mode: 0644]
tools/darwin/depends/fontconfig/Makefile
tools/darwin/depends/freetype2/Makefile
tools/darwin/depends/libass/Makefile
tools/darwin/depends/libbluray/Makefile
tools/darwin/depends/libcec/Makefile [new file with mode: 0644]
tools/darwin/depends/libnfs/001_fix_hanewin.patch [new file with mode: 0644]
tools/darwin/depends/libnfs/Makefile
tools/darwin/depends/libplist/Makefile
tools/darwin/depends/libshairport/007_fix_syslog_defines.patch [new file with mode: 0644]
tools/darwin/depends/libshairport/008-add-missing-libs.patch [new file with mode: 0644]
tools/darwin/depends/libshairport/009_fix_ipv6.patch [new file with mode: 0644]
tools/darwin/depends/libshairport/Makefile
tools/darwin/depends/libusb/Makefile [new file with mode: 0644]
tools/darwin/depends/openssl/Makefile
tools/darwin/depends/pcre/Makefile
tools/darwin/depends/python26/Makefile.ios
tools/darwin/depends/python26/Makefile.osx
tools/darwin/depends/sed/Makefile [new file with mode: 0644]
tools/darwin/depends/tinyxml/Makefile [new file with mode: 0644]
tools/darwin/depends/xbmc/Makefile
tools/darwin/packaging/xbmc-atv2/mkdeb-xbmc-atv2.sh
tools/darwin/packaging/xbmc-ios/mkdeb-xbmc-ios.sh
tools/darwin/packaging/xbmc-osx/Makefile
xbmc/Application.cpp
xbmc/Application.h
xbmc/ApplicationMessenger.cpp
xbmc/ApplicationMessenger.h
xbmc/Autorun.cpp
xbmc/Autorun.h
xbmc/DllPaths_generated.h.in
xbmc/DllPaths_win32.h
xbmc/FileItem.cpp
xbmc/FileItem.h
xbmc/GUIInfoManager.cpp
xbmc/GUIInfoManager.h
xbmc/GUIPassword.cpp
xbmc/GUIUserMessages.h
xbmc/MediaSource.h
xbmc/NfoFile.h
xbmc/PartyModeManager.cpp
xbmc/PlayListPlayer.cpp
xbmc/ThumbLoader.cpp
xbmc/ThumbnailCache.cpp
xbmc/URL.cpp
xbmc/Util.cpp
xbmc/Util.h
xbmc/XBDateTime.cpp
xbmc/XBDateTime.h
xbmc/addons/Addon.cpp
xbmc/addons/Addon.h
xbmc/addons/AddonInstaller.cpp
xbmc/addons/AddonInstaller.h
xbmc/addons/AddonManager.cpp
xbmc/addons/AddonManager.h
xbmc/addons/AddonVersion.cpp
xbmc/addons/AddonVersion.h
xbmc/addons/GUIDialogAddonInfo.cpp
xbmc/addons/GUIDialogAddonSettings.cpp
xbmc/addons/GUIDialogAddonSettings.h
xbmc/addons/GUIWindowAddonBrowser.cpp
xbmc/addons/IAddon.h
xbmc/addons/Repository.cpp
xbmc/addons/Scraper.cpp
xbmc/addons/ScreenSaver.cpp
xbmc/addons/Skin.cpp
xbmc/addons/Skin.h
xbmc/addons/Visualisation.cpp
xbmc/cdrip/CDDARipper.cpp
xbmc/cores/AudioRenderers/ALSADirectSound.cpp
xbmc/cores/AudioRenderers/ALSADirectSound.h
xbmc/cores/AudioRenderers/AudioRendererFactory.cpp
xbmc/cores/AudioRenderers/AudioRendererFactory.h
xbmc/cores/AudioRenderers/CoreAudioRenderer.cpp
xbmc/cores/AudioRenderers/CoreAudioRenderer.h
xbmc/cores/AudioRenderers/IAudioRenderer.h
xbmc/cores/AudioRenderers/IOSAudioRenderer.cpp
xbmc/cores/AudioRenderers/IOSAudioRenderer.h
xbmc/cores/AudioRenderers/NullDirectSound.cpp
xbmc/cores/AudioRenderers/NullDirectSound.h
xbmc/cores/AudioRenderers/PulseAudioDirectSound.cpp
xbmc/cores/AudioRenderers/PulseAudioDirectSound.h
xbmc/cores/AudioRenderers/Win32DirectSound.cpp
xbmc/cores/AudioRenderers/Win32DirectSound.h
xbmc/cores/AudioRenderers/Win32WASAPI.cpp
xbmc/cores/AudioRenderers/Win32WASAPI.h
xbmc/cores/DllLoader/DllLoader.cpp
xbmc/cores/DllLoader/LibraryLoader.h
xbmc/cores/DllLoader/SoLoader.cpp
xbmc/cores/DllLoader/Win32DllLoader.cpp
xbmc/cores/DllLoader/dll.cpp
xbmc/cores/DllLoader/exports/emu_kernel32.cpp
xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
xbmc/cores/DllLoader/exports/emu_socket/emu_socket.h
xbmc/cores/DllLoader/exports/emu_socket/getaddrinfo.c
xbmc/cores/DllLoader/exports/emu_socket/getnameinfo.c
xbmc/cores/VideoRenderers/BaseRenderer.cpp
xbmc/cores/VideoRenderers/BaseRenderer.h
xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
xbmc/cores/VideoRenderers/LinuxRendererGL.h
xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
xbmc/cores/VideoRenderers/OverlayRendererDX.cpp
xbmc/cores/VideoRenderers/OverlayRendererGL.cpp
xbmc/cores/VideoRenderers/OverlayRendererUtil.cpp
xbmc/cores/VideoRenderers/RenderCapture.cpp
xbmc/cores/VideoRenderers/RenderManager.cpp
xbmc/cores/VideoRenderers/RenderManager.h
xbmc/cores/VideoRenderers/VideoShaders/WinVideoFilter.cpp
xbmc/cores/VideoRenderers/VideoShaders/WinVideoFilter.h
xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp
xbmc/cores/VideoRenderers/WinRenderer.cpp
xbmc/cores/VideoRenderers/WinRenderer.h
xbmc/cores/dvdplayer/DVDAudio.cpp
xbmc/cores/dvdplayer/DVDAudio.h
xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecTX3G.cpp
xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecTX3G.h
xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlaySpu.h
xbmc/cores/dvdplayer/DVDCodecs/Video/CrystalHD.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/CrystalHD.h
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVDA.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVideoToolBox.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.h
xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemux.h
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxVobsub.cpp
xbmc/cores/dvdplayer/DVDFileInfo.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFile.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDStateSerializer.cpp
xbmc/cores/dvdplayer/DVDOverlayRenderer.cpp
xbmc/cores/dvdplayer/DVDPlayer.cpp
xbmc/cores/dvdplayer/DVDPlayer.h
xbmc/cores/dvdplayer/DVDPlayerAudio.cpp
xbmc/cores/dvdplayer/DVDPlayerTeletext.cpp
xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
xbmc/cores/dvdplayer/DVDStreamInfo.cpp
xbmc/cores/dvdplayer/DVDStreamInfo.h
xbmc/cores/dvdplayer/DVDSubtitles/DVDSubtitlesLibass.cpp
xbmc/cores/dvdplayer/Edl.cpp
xbmc/cores/paplayer/BXAcodec.cpp
xbmc/cores/paplayer/CodecFactory.cpp
xbmc/cores/paplayer/MP3codec.cpp
xbmc/cores/paplayer/MP3codec.h
xbmc/cores/paplayer/Makefile.in
xbmc/cores/paplayer/PAPlayer.cpp
xbmc/cores/paplayer/PCMCodec.cpp [new file with mode: 0644]
xbmc/cores/paplayer/PCMCodec.h [new file with mode: 0644]
xbmc/cores/paplayer/TimidityCodec.cpp
xbmc/cores/paplayer/WAVcodec.cpp
xbmc/cores/playercorefactory/PlayerSelectionRule.cpp
xbmc/cores/playercorefactory/PlayerSelectionRule.h
xbmc/dbwrappers/Database.cpp
xbmc/dbwrappers/Database.h
xbmc/dbwrappers/dataset.h
xbmc/dbwrappers/mysqldataset.cpp
xbmc/dbwrappers/mysqldataset.h
xbmc/dbwrappers/sqlitedataset.cpp
xbmc/dbwrappers/sqlitedataset.h
xbmc/dialogs/GUIDialogContextMenu.cpp
xbmc/dialogs/GUIDialogContextMenu.h
xbmc/dialogs/GUIDialogMediaSource.cpp
xbmc/dialogs/GUIDialogMediaSource.h
xbmc/dialogs/GUIDialogSmartPlaylistEditor.cpp
xbmc/dialogs/GUIDialogSmartPlaylistRule.cpp
xbmc/filesystem/AFPDirectory.cpp
xbmc/filesystem/DirectoryCache.cpp
xbmc/filesystem/DllLibCurl.cpp
xbmc/filesystem/DllLibNfs.h
xbmc/filesystem/FTPParse.cpp
xbmc/filesystem/FTPParse.h
xbmc/filesystem/FactoryDirectory.cpp
xbmc/filesystem/File.cpp
xbmc/filesystem/FileAFP.cpp
xbmc/filesystem/FileAFP.h
xbmc/filesystem/FileCDDA.cpp
xbmc/filesystem/FileCache.cpp
xbmc/filesystem/FileCache.h
xbmc/filesystem/FileCurl.cpp
xbmc/filesystem/FileFactory.cpp
xbmc/filesystem/FileNFS.cpp
xbmc/filesystem/FileNFS.h
xbmc/filesystem/FilePipe.cpp
xbmc/filesystem/FileRTV.cpp
xbmc/filesystem/FileRar.cpp
xbmc/filesystem/FileRar.h
xbmc/filesystem/FileShoutcast.cpp
xbmc/filesystem/FileUPnP.cpp [new file with mode: 0644]
xbmc/filesystem/FileUPnP.h [new file with mode: 0644]
xbmc/filesystem/HTSPSession.cpp
xbmc/filesystem/HTTPDirectory.cpp
xbmc/filesystem/IDirectory.cpp
xbmc/filesystem/IFile.h
xbmc/filesystem/Makefile.in
xbmc/filesystem/MusicDatabaseDirectory/Makefile
xbmc/filesystem/PluginDirectory.cpp
xbmc/filesystem/RSSDirectory.cpp
xbmc/filesystem/RSSDirectory.h
xbmc/filesystem/RTVDirectory.cpp
xbmc/filesystem/RarDirectory.cpp
xbmc/filesystem/RarManager.cpp
xbmc/filesystem/RarManager.h
xbmc/filesystem/SmartPlaylistDirectory.cpp
xbmc/filesystem/SpecialProtocol.cpp
xbmc/filesystem/SpecialProtocol.h
xbmc/filesystem/UPnPDirectory.cpp
xbmc/filesystem/VideoDatabaseDirectory.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeEpisodes.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.cpp
xbmc/filesystem/VideoDatabaseDirectory/Makefile
xbmc/filesystem/VirtualDirectory.cpp
xbmc/filesystem/windows/WINFileSMB.cpp [new file with mode: 0644]
xbmc/filesystem/windows/WINFileSMB.h [new file with mode: 0644]
xbmc/filesystem/windows/WINSMBDirectory.cpp [new file with mode: 0644]
xbmc/filesystem/windows/WINSMBDirectory.h [new file with mode: 0644]
xbmc/guilib/AnimatedGif.cpp
xbmc/guilib/DirtyRegionSolvers.cpp
xbmc/guilib/DirtyRegionSolvers.h
xbmc/guilib/DirtyRegionTracker.cpp
xbmc/guilib/DirtyRegionTracker.h
xbmc/guilib/DispResource.h [new file with mode: 0644]
xbmc/guilib/GUIAction.cpp
xbmc/guilib/GUIAction.h
xbmc/guilib/GUIAudioManager.cpp
xbmc/guilib/GUIBaseContainer.cpp
xbmc/guilib/GUIButtonControl.cpp
xbmc/guilib/GUIColorManager.cpp
xbmc/guilib/GUIControl.cpp
xbmc/guilib/GUIControl.h
xbmc/guilib/GUIControlFactory.cpp
xbmc/guilib/GUIControlFactory.h
xbmc/guilib/GUIControlGroupList.cpp
xbmc/guilib/GUIFadeLabelControl.cpp
xbmc/guilib/GUIFontManager.cpp
xbmc/guilib/GUIFontTTF.cpp
xbmc/guilib/GUIImage.cpp
xbmc/guilib/GUIIncludes.cpp
xbmc/guilib/GUIIncludes.h
xbmc/guilib/GUIInfoTypes.cpp
xbmc/guilib/GUIInfoTypes.h
xbmc/guilib/GUILabelControl.cpp
xbmc/guilib/GUIListItemLayout.cpp
xbmc/guilib/GUIMessage.h
xbmc/guilib/GUIProgressControl.cpp
xbmc/guilib/GUIRenderingControl.cpp
xbmc/guilib/GUISettingsSliderControl.cpp
xbmc/guilib/GUISettingsSliderControl.h
xbmc/guilib/GUIShader.cpp
xbmc/guilib/GUISound.cpp
xbmc/guilib/GUISpinControlEx.cpp
xbmc/guilib/GUIStaticItem.cpp
xbmc/guilib/GUIStaticItem.h
xbmc/guilib/GUITextBox.cpp
xbmc/guilib/GUIToggleButtonControl.cpp
xbmc/guilib/GUIVisualisationControl.cpp
xbmc/guilib/GUIVisualisationControl.h
xbmc/guilib/GUIWindow.cpp
xbmc/guilib/GUIWindowManager.cpp
xbmc/guilib/GUIWrappingListContainer.cpp
xbmc/guilib/GraphicContext.cpp
xbmc/guilib/IDirtyRegionSolver.h
xbmc/guilib/JpegIO.cpp
xbmc/guilib/Key.cpp
xbmc/guilib/Key.h
xbmc/guilib/LocalizeStrings.cpp
xbmc/guilib/MatrixGLES.cpp
xbmc/guilib/MatrixGLES.h
xbmc/guilib/Texture.cpp
xbmc/guilib/TextureBundleXBT.cpp
xbmc/guilib/TextureBundleXPR.cpp
xbmc/guilib/TextureGL.cpp
xbmc/guilib/TextureManager.cpp
xbmc/guilib/TextureManager.h
xbmc/guilib/XBTFReader.cpp
xbmc/input/ButtonTranslator.cpp
xbmc/input/ButtonTranslator.h
xbmc/input/InertialScrollingHandler.cpp
xbmc/input/SDLJoystick.cpp
xbmc/input/SDLJoystick.h
xbmc/interfaces/AnnouncementManager.cpp
xbmc/interfaces/AnnouncementManager.h
xbmc/interfaces/AnnouncementUtils.h [deleted file]
xbmc/interfaces/Builtins.cpp
xbmc/interfaces/DbusServer.cpp [deleted file]
xbmc/interfaces/DbusServer.h [deleted file]
xbmc/interfaces/IAnnouncer.h
xbmc/interfaces/Makefile.in
xbmc/interfaces/http-api/XBMCConfiguration.cpp
xbmc/interfaces/http-api/XBMChttp.cpp
xbmc/interfaces/info/SkinVariable.cpp
xbmc/interfaces/info/SkinVariable.h
xbmc/interfaces/json-rpc/ApplicationOperations.cpp
xbmc/interfaces/json-rpc/ApplicationOperations.h
xbmc/interfaces/json-rpc/AudioLibrary.cpp
xbmc/interfaces/json-rpc/AudioLibrary.h
xbmc/interfaces/json-rpc/FileItemHandler.cpp
xbmc/interfaces/json-rpc/FileItemHandler.h
xbmc/interfaces/json-rpc/FileOperations.cpp
xbmc/interfaces/json-rpc/FileOperations.h
xbmc/interfaces/json-rpc/GUIOperations.cpp [new file with mode: 0644]
xbmc/interfaces/json-rpc/GUIOperations.h [new file with mode: 0644]
xbmc/interfaces/json-rpc/IJSONRPCAnnouncer.h [new file with mode: 0644]
xbmc/interfaces/json-rpc/ITransportLayer.h
xbmc/interfaces/json-rpc/InputOperations.cpp
xbmc/interfaces/json-rpc/InputOperations.h
xbmc/interfaces/json-rpc/JSONRPC.cpp
xbmc/interfaces/json-rpc/JSONRPC.h
xbmc/interfaces/json-rpc/JSONRPCUtils.h [new file with mode: 0644]
xbmc/interfaces/json-rpc/JSONServiceDescription.cpp
xbmc/interfaces/json-rpc/JSONServiceDescription.h
xbmc/interfaces/json-rpc/JSONUtils.h
xbmc/interfaces/json-rpc/Makefile
xbmc/interfaces/json-rpc/PlayerOperations.cpp
xbmc/interfaces/json-rpc/PlayerOperations.h
xbmc/interfaces/json-rpc/PlaylistOperations.cpp
xbmc/interfaces/json-rpc/PlaylistOperations.h
xbmc/interfaces/json-rpc/ServiceDescription.h
xbmc/interfaces/json-rpc/SystemOperations.cpp
xbmc/interfaces/json-rpc/SystemOperations.h
xbmc/interfaces/json-rpc/VideoLibrary.cpp
xbmc/interfaces/json-rpc/VideoLibrary.h
xbmc/interfaces/json-rpc/XBMCOperations.cpp
xbmc/interfaces/json-rpc/XBMCOperations.h
xbmc/interfaces/json-rpc/methods.json
xbmc/interfaces/json-rpc/notifications.json
xbmc/interfaces/json-rpc/types.json
xbmc/interfaces/python/XBPyThread.cpp
xbmc/interfaces/python/XBPyThread.h
xbmc/interfaces/python/XBPython.cpp
xbmc/interfaces/python/xbmcmodule/GUIPythonWindow.cpp
xbmc/interfaces/python/xbmcmodule/GUIPythonWindow.h
xbmc/interfaces/python/xbmcmodule/GUIPythonWindowDialog.cpp
xbmc/interfaces/python/xbmcmodule/GUIPythonWindowXML.cpp
xbmc/interfaces/python/xbmcmodule/GUIPythonWindowXML.h
xbmc/interfaces/python/xbmcmodule/GUIPythonWindowXMLDialog.cpp
xbmc/interfaces/python/xbmcmodule/PythonAddon.cpp
xbmc/interfaces/python/xbmcmodule/action.cpp
xbmc/interfaces/python/xbmcmodule/dialog.cpp
xbmc/interfaces/python/xbmcmodule/dialog.h
xbmc/interfaces/python/xbmcmodule/keyboard.cpp
xbmc/interfaces/python/xbmcmodule/keyboard.h
xbmc/interfaces/python/xbmcmodule/listitem.cpp
xbmc/interfaces/python/xbmcmodule/player.cpp
xbmc/interfaces/python/xbmcmodule/pyjsonrpc.h
xbmc/interfaces/python/xbmcmodule/pyrendercapture.cpp
xbmc/interfaces/python/xbmcmodule/pyrendercapture.h
xbmc/interfaces/python/xbmcmodule/window.cpp
xbmc/interfaces/python/xbmcmodule/window.h
xbmc/interfaces/python/xbmcmodule/xbmcmodule.cpp
xbmc/linux/ConvUtils.cpp
xbmc/linux/ConvUtils.h
xbmc/linux/HALManager.cpp
xbmc/linux/PlatformDefs.h
xbmc/linux/PosixMountProvider.cpp
xbmc/linux/XFileUtils.cpp
xbmc/linux/XLCDproc.cpp
xbmc/linux/XLCDproc.h
xbmc/linux/XSyncUtils.cpp
xbmc/linux/XSyncUtils.h
xbmc/linux/XThreadUtils.h
xbmc/music/Album.cpp
xbmc/music/Album.h
xbmc/music/Artist.cpp
xbmc/music/Artist.h
xbmc/music/MusicDatabase.cpp
xbmc/music/MusicDatabase.h
xbmc/music/infoscanner/MusicArtistInfo.h
xbmc/music/karaoke/GUIWindowKaraokeLyrics.cpp
xbmc/music/karaoke/karaokelyricscdg.cpp
xbmc/music/tags/FlacTag.cpp
xbmc/music/tags/Id3Tag.cpp
xbmc/music/tags/MusicInfoTagLoaderCDDA.cpp
xbmc/music/tags/MusicInfoTagLoaderMP3.cpp
xbmc/music/tags/MusicInfoTagLoaderMod.cpp
xbmc/music/tags/MusicInfoTagLoaderWMA.cpp
xbmc/music/windows/GUIWindowMusicBase.cpp
xbmc/music/windows/GUIWindowMusicNav.cpp
xbmc/music/windows/GUIWindowMusicPlaylistEditor.cpp
xbmc/music/windows/GUIWindowMusicSongs.cpp
xbmc/music/windows/GUIWindowVisualisation.cpp
xbmc/network/AirPlayServer.cpp
xbmc/network/AirPlayServer.h
xbmc/network/AirTunesServer.cpp
xbmc/network/DllLibPlist.h
xbmc/network/EventClient.cpp
xbmc/network/EventPacket.cpp
xbmc/network/EventServer.cpp
xbmc/network/Network.cpp
xbmc/network/TCPServer.cpp
xbmc/network/TCPServer.h
xbmc/network/UPnP.cpp
xbmc/network/WebServer.cpp
xbmc/network/WebServer.h
xbmc/network/Zeroconf.cpp
xbmc/network/Zeroconf.h
xbmc/network/cddb.cpp
xbmc/network/libscrobbler/scrobbler.cpp
xbmc/network/linux/NetworkLinux.cpp
xbmc/network/linux/ZeroconfAvahi.cpp
xbmc/network/linux/ZeroconfAvahi.h
xbmc/network/osx/ZeroconfOSX.cpp
xbmc/network/osx/ZeroconfOSX.h
xbmc/network/websocket/Makefile [new file with mode: 0644]
xbmc/network/websocket/WebSocket.cpp [new file with mode: 0644]
xbmc/network/websocket/WebSocket.h [new file with mode: 0644]
xbmc/network/websocket/WebSocketManager.cpp [new file with mode: 0644]
xbmc/network/websocket/WebSocketManager.h [new file with mode: 0644]
xbmc/network/websocket/WebSocketV13.cpp [new file with mode: 0644]
xbmc/network/websocket/WebSocketV13.h [new file with mode: 0644]
xbmc/network/websocket/WebSocketV8.cpp [new file with mode: 0644]
xbmc/network/websocket/WebSocketV8.h [new file with mode: 0644]
xbmc/network/windows/ZeroconfWIN.cpp
xbmc/network/windows/ZeroconfWIN.h
xbmc/osx/CocoaInterface.h
xbmc/osx/CocoaInterface.mm
xbmc/osx/CoreAudio.cpp
xbmc/osx/CoreAudio.h
xbmc/osx/DarwinUtils.h
xbmc/osx/DarwinUtils.mm
xbmc/osx/HotKeyController.h
xbmc/osx/HotKeyController.m
xbmc/osx/SDLMain.mm
xbmc/osx/XBMCHelper.cpp
xbmc/osx/atv2/XBMCAppliance.m
xbmc/osx/atv2/XBMCController.mm
xbmc/osx/atv2/XBMCEAGLView.mm
xbmc/osx/ios/XBMCController.h
xbmc/osx/ios/XBMCController.mm
xbmc/osx/ios/XBMCEAGLView.mm
xbmc/peripherals/PeripheralTypes.h
xbmc/peripherals/Peripherals.cpp
xbmc/peripherals/Peripherals.h
xbmc/peripherals/bus/Makefile.in
xbmc/peripherals/bus/PeripheralBus.cpp
xbmc/peripherals/bus/PeripheralBus.h
xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.cpp
xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.h
xbmc/peripherals/bus/osx/PeripheralBusUSB.cpp
xbmc/peripherals/bus/win32/PeripheralBusUSB.cpp
xbmc/peripherals/devices/Makefile.in
xbmc/peripherals/devices/Peripheral.cpp
xbmc/peripherals/devices/Peripheral.h
xbmc/peripherals/devices/PeripheralCecAdapter.cpp
xbmc/peripherals/devices/PeripheralCecAdapter.h
xbmc/peripherals/devices/PeripheralHID.cpp
xbmc/peripherals/devices/PeripheralNyxboard.cpp
xbmc/peripherals/dialogs/GUIDialogPeripheralManager.cpp
xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp
xbmc/pictures/GUIWindowPictures.cpp
xbmc/pictures/GUIWindowPictures.h
xbmc/pictures/GUIWindowSlideShow.cpp
xbmc/playlists/PlayList.cpp
xbmc/playlists/PlayListM3U.cpp
xbmc/playlists/SmartPlayList.cpp
xbmc/playlists/SmartPlayList.h
xbmc/programs/GUIWindowPrograms.cpp
xbmc/rendering/RenderSystem.h
xbmc/rendering/dx/RenderSystemDX.cpp
xbmc/rendering/dx/RenderSystemDX.h
xbmc/rendering/gl/RenderSystemGL.cpp
xbmc/rendering/gl/RenderSystemGL.h
xbmc/rendering/gles/RenderSystemGLES.cpp
xbmc/rendering/gles/RenderSystemGLES.h
xbmc/settings/AdvancedSettings.cpp
xbmc/settings/AdvancedSettings.h
xbmc/settings/GUIDialogContentSettings.cpp
xbmc/settings/GUISettings.cpp
xbmc/settings/GUISettings.h
xbmc/settings/GUIWindowSettingsCategory.cpp
xbmc/settings/GUIWindowSettingsCategory.h
xbmc/settings/GUIWindowSettingsScreenCalibration.cpp
xbmc/settings/Settings.cpp
xbmc/settings/Settings.h
xbmc/settings/VideoSettings.h
xbmc/storage/DetectDVDType.cpp
xbmc/storage/DetectDVDType.h
xbmc/storage/IoSupport.cpp
xbmc/storage/MediaManager.cpp
xbmc/storage/MediaManager.h
xbmc/storage/cdioSupport.cpp
xbmc/storage/cdioSupport.h
xbmc/storage/linux/DeviceKitDisksProvider.cpp
xbmc/storage/linux/UDisksProvider.cpp
xbmc/storage/windows/Win32StorageProvider.cpp
xbmc/storage/windows/Win32StorageProvider.h
xbmc/system.h
xbmc/threads/platform/pthreads/Condition.h
xbmc/utils/AlarmClock.cpp
xbmc/utils/Base64.cpp [new file with mode: 0644]
xbmc/utils/Base64.h [new file with mode: 0644]
xbmc/utils/CharsetConverter.cpp
xbmc/utils/CharsetConverter.h
xbmc/utils/CryptThreading.cpp [new file with mode: 0644]
xbmc/utils/CryptThreading.h [new file with mode: 0644]
xbmc/utils/EndianSwap.h
xbmc/utils/GLUtils.cpp
xbmc/utils/GLUtils.h
xbmc/utils/HttpResponse.cpp [new file with mode: 0644]
xbmc/utils/HttpResponse.h [new file with mode: 0644]
xbmc/utils/JSONVariantWriter.cpp
xbmc/utils/JobManager.cpp
xbmc/utils/LCD.cpp
xbmc/utils/LCD.h
xbmc/utils/LCDFactory.cpp
xbmc/utils/Makefile
xbmc/utils/Mime.cpp [new file with mode: 0644]
xbmc/utils/Mime.h [new file with mode: 0644]
xbmc/utils/PCMRemap.cpp
xbmc/utils/PerformanceSample.cpp
xbmc/utils/RecentlyAddedJob.cpp
xbmc/utils/RecentlyAddedJob.h
xbmc/utils/SaveFileStateJob.h
xbmc/utils/ScraperParser.cpp
xbmc/utils/ScraperParser.h
xbmc/utils/ScraperUrl.cpp
xbmc/utils/Splash.cpp
xbmc/utils/Splash.h
xbmc/utils/SystemInfo.cpp
xbmc/utils/URIUtils.cpp
xbmc/utils/URIUtils.h
xbmc/utils/Variant.cpp
xbmc/utils/Weather.cpp
xbmc/utils/Weather.h
xbmc/utils/XMLUtils.cpp
xbmc/utils/XMLUtils.h
xbmc/utils/log.cpp
xbmc/utils/ssrc.cpp
xbmc/video/GUIViewStateVideo.cpp
xbmc/video/Teletext.cpp
xbmc/video/VideoDatabase.cpp
xbmc/video/VideoDatabase.h
xbmc/video/VideoInfoDownloader.cpp
xbmc/video/VideoInfoScanner.cpp
xbmc/video/VideoInfoScanner.h
xbmc/video/VideoInfoTag.cpp
xbmc/video/VideoInfoTag.h
xbmc/video/VideoReferenceClock.cpp
xbmc/video/VideoReferenceClock.h
xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp
xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp
xbmc/video/dialogs/GUIDialogVideoInfo.cpp
xbmc/video/dialogs/GUIDialogVideoOSD.cpp
xbmc/video/windows/GUIWindowFullScreen.cpp
xbmc/video/windows/GUIWindowFullScreen.h
xbmc/video/windows/GUIWindowVideoBase.cpp
xbmc/video/windows/GUIWindowVideoBase.h
xbmc/video/windows/GUIWindowVideoNav.cpp
xbmc/visualizations/Goom/goom2k4-0/INSTALL [deleted file]
xbmc/visualizations/Goom/goom2k4-0/Makefile.in [deleted file]
xbmc/visualizations/Goom/goom2k4-0/aclocal.m4 [deleted file]
xbmc/visualizations/Goom/goom2k4-0/config.guess [deleted file]
xbmc/visualizations/Goom/goom2k4-0/config.sub [deleted file]
xbmc/visualizations/Goom/goom2k4-0/configure [deleted file]
xbmc/visualizations/Goom/goom2k4-0/sdl-goom/Makefile.in [deleted file]
xbmc/visualizations/Goom/goom2k4-0/src/Makefile.in [deleted file]
xbmc/visualizations/Goom/goom2k4-0/xmms-goom/Makefile.in [deleted file]
xbmc/visualizations/Goom/goom2k4-0/ylwrap [deleted file]
xbmc/visualizations/Goom/visualization.goom/addon.xml
xbmc/visualizations/Goom/visualization.goom/default.tbn [deleted file]
xbmc/visualizations/Goom/visualization.goom/description.xml [deleted file]
xbmc/visualizations/Goom/visualization.goom/icon.png [new file with mode: 0644]
xbmc/visualizations/XBMCProjectM/Main.cpp
xbmc/visualizations/XBMCProjectM/libprojectM/CMakeLists.txt
xbmc/win32/WIN32Util.cpp
xbmc/win32/WIN32Util.h
xbmc/win32/WINFileSMB.cpp [deleted file]
xbmc/win32/WINFileSMB.h [deleted file]
xbmc/win32/WINSMBDirectory.cpp [deleted file]
xbmc/win32/WINSMBDirectory.h [deleted file]
xbmc/win32/XBMC_PC.cpp
xbmc/win32/win32env.cpp
xbmc/windowing/WinEventsSDL.cpp
xbmc/windowing/WinSystem.cpp
xbmc/windowing/WinSystem.h
xbmc/windowing/X11/WinSystemX11.cpp
xbmc/windowing/X11/WinSystemX11.h
xbmc/windowing/X11/WinSystemX11GL.cpp
xbmc/windowing/XBMC_events.h
xbmc/windowing/osx/WinEventsIOS.h
xbmc/windowing/osx/WinEventsIOS.mm
xbmc/windowing/osx/WinSystemOSX.h
xbmc/windowing/osx/WinSystemOSX.mm
xbmc/windowing/windows/WinEventsWin32.cpp
xbmc/windowing/windows/WinSystemWin32.cpp
xbmc/windowing/windows/WinSystemWin32.h
xbmc/windowing/windows/WinSystemWin32DX.cpp
xbmc/windowing/windows/WinSystemWin32DX.h
xbmc/windows/GUIMediaWindow.cpp
xbmc/windows/GUIMediaWindow.h
xbmc/windows/GUIWindowDebugInfo.cpp
xbmc/windows/GUIWindowFileManager.cpp
xbmc/windows/GUIWindowHome.cpp
xbmc/windows/GUIWindowHome.h
xbmc/windows/GUIWindowLoginScreen.cpp
xbmc/windows/GUIWindowSystemInfo.cpp
xbmc/windows/GUIWindowWeather.cpp
xbmc/windows/GUIWindowWeather.h
xbmc/xbmc.cpp

index a425033..bcc3307 100644 (file)
@@ -175,6 +175,9 @@ lib/cmyth/Makefile
 /lib/cpluff/libcpluff/win32/Debug
 /lib/cpluff/libcpluff/win32/Release
 
+# /lib/libcec
+/lib/libcec/libcec
+
 # /lib/enca
 /lib/enca/libenca_win32/Debug
 /lib/enca/libenca_win32/Release
@@ -230,20 +233,6 @@ lib/cmyth/Makefile
 /lib/libass/m4/ltversion.m4
 /lib/libass/m4/lt~obsolete.m4
 
-# /lib/libcec
-/lib/libcec/Makefile
-/lib/libcec/Makefile.in
-/lib/libcec/aclocal.m4
-/lib/libcec/config.guess
-/lib/libcec/config.sub
-/lib/libcec/configure
-/lib/libcec/depcomp
-/lib/libcec/install-sh
-/lib/libcec/ltmain.sh
-/lib/libcec/missing
-/lib/libcec/src/lib/Makefile.in
-/lib/libcec/src/testclient/Makefile.in
-
 # /lib/libiconv
 /lib/libiconv/libiconv_win32/Debug
 /lib/libiconv/libiconv_win32/Release
@@ -304,6 +293,7 @@ lib/cmyth/Makefile
 # /lib/libapetag
 /lib/libapetag/Makefile
 /lib/libapetag/config.h
+/lib/libapetag/install-sh
 /lib/libapetag/libtool
 /lib/libapetag/stamp-h1
 
@@ -360,6 +350,7 @@ lib/cmyth/Makefile
 /system/libcmyth.dll
 /system/libcurl.dll
 /system/libeay32.dll
+/system/librtmp.dll
 /system/libexif.dll
 /system/libexpat.dll
 /system/libid3tag.dll
@@ -372,6 +363,8 @@ lib/cmyth/Makefile
 /system/libsamplerate-0.dll
 /system/libnfs.dll
 /system/dnssd.dll
+/system/libcec.dll
+/system/pthreadVC2.dll
 
 # /system/cdrip
 /system/cdrip/lame_enc.dll
@@ -1193,6 +1186,20 @@ lib/cmyth/Makefile
 /xbmc/visualizations/DirectXSpectrum/Release (DirectX)
 
 /xbmc/visualizations/Goom/Makefile
+/xbmc/visualizations/Goom/goom2k4-0/aclocal.m4
+/xbmc/visualizations/Goom/goom2k4-0/configure
+/xbmc/visualizations/Goom/goom2k4-0/INSTALL
+/xbmc/visualizations/Goom/goom2k4-0/Makefile.in
+/xbmc/visualizations/Goom/goom2k4-0/config.guess
+/xbmc/visualizations/Goom/goom2k4-0/config.sub
+/xbmc/visualizations/Goom/goom2k4-0/depcomp
+/xbmc/visualizations/Goom/goom2k4-0/install-sh
+/xbmc/visualizations/Goom/goom2k4-0/ltmain.sh
+/xbmc/visualizations/Goom/goom2k4-0/missing
+/xbmc/visualizations/Goom/goom2k4-0/sdl-goom/Makefile.in
+/xbmc/visualizations/Goom/goom2k4-0/src/Makefile.in
+/xbmc/visualizations/Goom/goom2k4-0/xmms-goom/Makefile.in
+/xbmc/visualizations/Goom/goom2k4-0/ylwrap
 
 /xbmc/visualizations/Milkdrop/Debug
 /xbmc/visualizations/Milkdrop/Release
diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..a92044b
--- /dev/null
@@ -0,0 +1,4 @@
+[submodule "touched"]
+       path = addons/skin.touched
+       url = git://github.com/xbmc/skin.touched.git
+       ignore = all
old mode 100644 (file)
new mode 100755 (executable)
index bff37e6..e541df8
@@ -1,100 +1,4 @@
 AUTOGENERATED_MAKEFILES=@OUTPUT_FILES@
-BIN_DIRS=      \
-       xbmc/guilib \
-       lib/tinyXML \
-       xbmc \
-       xbmc/addons \
-       xbmc/cdrip \
-       xbmc/cores \
-       xbmc/cores/DllLoader \
-       xbmc/cores/DllLoader/exports \
-       xbmc/cores/DllLoader/exports/util \
-       xbmc/cores/dvdplayer \
-       xbmc/cores/dvdplayer/DVDCodecs \
-       xbmc/cores/dvdplayer/DVDCodecs/Audio \
-       xbmc/cores/dvdplayer/DVDCodecs/Overlay \
-       xbmc/cores/dvdplayer/DVDCodecs/Video \
-       xbmc/cores/dvdplayer/DVDDemuxers/ \
-       xbmc/cores/dvdplayer/DVDInputStreams/ \
-       xbmc/cores/dvdplayer/DVDSubtitles/ \
-       xbmc/cores/paplayer \
-       xbmc/cores/AudioRenderers \
-       xbmc/cores/VideoRenderers \
-       xbmc/cores/VideoRenderers/VideoShaders \
-       xbmc/cores/ExternalPlayer \
-       xbmc/cores/playercorefactory \
-       xbmc/filesystem \
-       xbmc/filesystem/MusicDatabaseDirectory \
-       xbmc/filesystem/VideoDatabaseDirectory \
-       xbmc/dialogs \
-       xbmc/music \
-       xbmc/music/dialogs \
-       xbmc/music/infoscanner \
-       xbmc/music/karaoke \
-       xbmc/music/tags \
-       xbmc/music/windows \
-       xbmc/pictures \
-       xbmc/programs \
-       xbmc/video \
-       xbmc/video/dialogs \
-       xbmc/video/windows \
-       xbmc/windows \
-       xbmc/network \
-       xbmc/network/libscrobbler \
-       xbmc/network/linux \
-       xbmc/network/osx \
-       xbmc/playlists \
-       xbmc/powermanagement \
-       xbmc/powermanagement/linux \
-       xbmc/rendering \
-       xbmc/storage \
-       xbmc/storage/linux \
-       xbmc/storage/osx \
-       lib/libhts \
-       xbmc/interfaces \
-       xbmc/interfaces/http-api \
-       xbmc/interfaces/info \
-       xbmc/interfaces/json-rpc \
-       xbmc/interfaces/python \
-       xbmc/interfaces/python/xbmcmodule \
-       lib/libRTV \
-       lib/libUPnP \
-       lib/libXDAAP \
-       xbmc/dbwrappers \
-       lib/UnrarXLib \
-       lib/libsquish \
-       lib/SlingboxLib \
-       xbmc/visualizations \
-       xbmc/screensavers \
-       xbmc/utils \
-       xbmc/settings \
-       xbmc/linux \
-        xbmc/input \
-       xbmc/input/linux \
-       xbmc/osx \
-       xbmc/threads \
-       xbmc/windowing \
-       xbmc/peripherals \
-       xbmc/peripherals/bus \
-       xbmc/peripherals/devices \
-       xbmc/peripherals/dialogs \
-
-ifeq (@USE_OPENGL@,1)
-BIN_DIRS += xbmc/rendering/gl
-endif
-ifeq (@USE_OPENGLES@,1)
-BIN_DIRS += xbmc/rendering/gles
-BIN_DIRS += xbmc/windowing/egl
-endif
-
-ifeq ($(findstring osx,@ARCH@),osx)
-BIN_DIRS += xbmc/network/osx
-BIN_DIRS += xbmc/storage/osx
-BIN_DIRS += xbmc/powermanagement/osx
-BIN_DIRS += xbmc/windowing/osx
-else
-BIN_DIRS += xbmc/windowing/X11
-endif
 
 EC_DIRS= \
        tools/EventClients
@@ -115,6 +19,101 @@ DVDPLAYER_ARCHIVES=xbmc/cores/dvdplayer/DVDPlayer.a \
                    xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreams.a \
                    xbmc/cores/dvdplayer/DVDSubtitles/DVDSubtitles.a
 
+DIRECTORY_ARCHIVES=$(DVDPLAYER_ARCHIVES) \
+                   lib/SlingboxLib/SlingboxLib.a \
+                   lib/libRTV/librtv.a \
+                   lib/libUPnP/libupnp.a \
+                   lib/libXDAAP/libxdaap.a \
+                   lib/libhts/libhts.a \
+                   lib/libsquish/libsquish.a \
+                   lib/tinyXML/tinyxml.a \
+                   lib/xbmc-dll-symbols/dll-symbols.a \
+                   xbmc/addons/addons.a \
+                   xbmc/cdrip/cdrip.a \
+                   xbmc/cores/AudioRenderers/audiorenderers.a \
+                   xbmc/cores/DllLoader/dllloader.a \
+                   xbmc/cores/DllLoader/exports/exports.a \
+                   xbmc/cores/DllLoader/exports/util/exports_utils.a \
+                   xbmc/cores/ExternalPlayer/ExternalPlayer.a \
+                   xbmc/cores/VideoRenderers/VideoRenderer.a \
+                   xbmc/cores/VideoRenderers/VideoShaders/VideoShaders.a \
+                   xbmc/cores/cores.a \
+                   xbmc/cores/paplayer/paplayer.a \
+                   xbmc/cores/playercorefactory/playercorefactory.a \
+                   xbmc/dbwrappers/dbwrappers.a \
+                   xbmc/dialogs/dialogs.a \
+                   xbmc/filesystem/MusicDatabaseDirectory/musicdatabasedirectory.a \
+                   xbmc/filesystem/VideoDatabaseDirectory/videodatabasedirectory.a \
+                   xbmc/filesystem/filesystem.a \
+                   xbmc/guilib/guilib.a \
+                   xbmc/input/input.a \
+                   xbmc/interfaces/http-api/http-api.a \
+                   xbmc/interfaces/info/info.a \
+                   xbmc/interfaces/interfaces.a \
+                   xbmc/interfaces/json-rpc/json-rpc.a \
+                   xbmc/interfaces/python/python.a \
+                   xbmc/interfaces/python/xbmcmodule/xbmcmodule.a \
+                   xbmc/linux/linux.a \
+                   xbmc/music/dialogs/musicdialogs.a \
+                   xbmc/music/infoscanner/musicscanner.a \
+                   xbmc/music/karaoke/karaoke.a \
+                   xbmc/music/music.a \
+                   xbmc/music/tags/musictags.a \
+                   xbmc/music/windows/musicwindows.a \
+                   xbmc/network/libscrobbler/scrobbler.a \
+                   xbmc/network/websocket/websocket.a \
+                   xbmc/network/network.a \
+                   xbmc/peripherals/bus/peripheral-bus.a \
+                   xbmc/peripherals/devices/peripheral-devices.a \
+                   xbmc/peripherals/dialogs/peripheral-dialogs.a \
+                   xbmc/peripherals/peripherals.a \
+                   xbmc/pictures/pictures.a \
+                   xbmc/playlists/playlists.a \
+                   xbmc/powermanagement/powermanagement.a \
+                   xbmc/programs/programs.a \
+                   xbmc/rendering/rendering.a \
+                   xbmc/settings/settings.a \
+                   xbmc/storage/storage.a \
+                   xbmc/threads/threads.a \
+                   xbmc/utils/utils.a \
+                   xbmc/video/dialogs/videodialogs.a \
+                   xbmc/video/video.a \
+                   xbmc/video/windows/videowindows.a \
+                   xbmc/windowing/windowing.a \
+                   xbmc/windows/windows.a \
+                   xbmc/xbmc.a \
+
+
+ifeq (@USE_OPENGL@,1)
+DIRECTORY_ARCHIVES += xbmc/rendering/gl/rendering_gl.a
+endif
+
+ifeq (@USE_OPENGLES@,1)
+DIRECTORY_ARCHIVES += xbmc/rendering/gles/rendering_gles.a
+DIRECTORY_ARCHIVES += xbmc/windowing/egl/windowing_egl.a
+endif
+
+ifeq ($(findstring osx,@ARCH@),osx)
+DIRECTORY_ARCHIVES += xbmc/osx/osx.a
+DIRECTORY_ARCHIVES += xbmc/network/osx/network.a
+DIRECTORY_ARCHIVES += xbmc/network/linux/network_linux.a
+DIRECTORY_ARCHIVES += xbmc/powermanagement/osx/powermanagement.a
+DIRECTORY_ARCHIVES += xbmc/storage/osx/storage.a
+DIRECTORY_ARCHIVES += xbmc/windowing/osx/windowing_osx.a
+else
+DIRECTORY_ARCHIVES += xbmc/input/linux/input_linux.a
+DIRECTORY_ARCHIVES += xbmc/network/linux/network_linux.a
+DIRECTORY_ARCHIVES += xbmc/powermanagement/linux/powermanagement_linux.a
+DIRECTORY_ARCHIVES += xbmc/storage/linux/storage_linux.a
+DIRECTORY_ARCHIVES += xbmc/windowing/X11/windowing_X11.a
+endif
+
+ifeq (@HAVE_XBMC_NONFREE@,1)
+DIRECTORY_ARCHIVES += lib/UnrarXLib/UnrarXLib.a
+endif
+
+BIN_DIRS = $(dir $(DIRECTORY_ARCHIVES))
+
 PAPCODECS_DIRS= \
        lib/xbadpcm \
        lib/nosefart \
@@ -160,9 +159,12 @@ ifneq (@DISABLE_GOOM@,1)
 endif
 
 CONFLUENCE_MEDIA=addons/skin.confluence/media
+SKIN_DIRS=$(CONFLUENCE_MEDIA)
 
-SKIN_DIRS=\
-       $(CONFLUENCE_MEDIA)
+ifeq (@USE_SKIN_TOUCHED@,1)
+TOUCHED_MEDIA=addons/skin.touched/media
+SKIN_DIRS+=$(TOUCHED_MEDIA)
+endif
 
 DIRS= $(BIN_DIRS) $(EC_DIRS) $(XBMCTEX_DIRS) $(DVDPCODECS_DIRS) $(PAPCODECS_DIRS) \
        $(LIB_DIRS) $(SS_DIRS) $(VIS_DIRS) $(SKIN_DIRS)
@@ -180,6 +182,9 @@ DISTCLEAN_FILES=config.h config.log config.status tools/Linux/xbmc.sh \
         system/libcpluff-@ARCH@.so
 
 all : Makefile externals xbmc.bin xbmc-xrandr skins
+       @echo '-----------------------'
+       @echo 'XBMC built successfully'
+       @echo '-----------------------'
 
 include Makefile.include
 
@@ -205,161 +210,20 @@ configure: configure.in
 ifeq (@USE_TEXTUREPACKER@,1)
 skins: tools/TexturePacker/TexturePacker force
         $(MAKE) -C $(CONFLUENCE_MEDIA)
+ifeq (@USE_SKIN_TOUCHED@,1)
+        $(MAKE) -C $(TOUCHED_MEDIA)
+endif
 else
 skins:
 endif
 
+# Setup some dependencies for subdir makes
+xbmc/cores/paplayer/paplayer.a: papcodecs
+$(DVDPLAYER_ARCHIVES)         : dvdpcodecs
+
+$(DIRECTORY_ARCHIVES): force
+       @$(MAKE) $(if $(V),,-s) -C $(@D)
 
-xbmc/guilib/guilib.a: force
-       $(MAKE) -C xbmc/guilib
-lib/tinyXML/tinyxml.a: force
-       $(MAKE) -C lib/tinyXML
-xbmc/xbmc.a: force
-       $(MAKE) -C xbmc
-xbmc/cdrip/cdrip.a: force
-       $(MAKE) -C xbmc/cdrip
-xbmc/cores/cores.a: force
-       $(MAKE) -C xbmc/cores
-xbmc/cores/DllLoader/dllloader.a: force
-       $(MAKE) -C xbmc/cores/DllLoader/
-xbmc/cores/DllLoader/exports/exports.a: force
-       $(MAKE) -C xbmc/cores/DllLoader/exports
-xbmc/cores/DllLoader/exports/util/exports_utils.a: force
-       $(MAKE) -C xbmc/cores/DllLoader/exports/util
-$(DVDPLAYER_ARCHIVES): force dvdpcodecs
-       $(MAKE) -C $(@D)
-xbmc/cores/paplayer/paplayer.a: force papcodecs
-       $(MAKE) -C xbmc/cores/paplayer
-xbmc/cores/AudioRenderers/audiorenderers.a: force
-       $(MAKE) -C xbmc/cores/AudioRenderers
-xbmc/cores/VideoRenderers/VideoRenderer.a: force
-       $(MAKE) -C xbmc/cores/VideoRenderers
-xbmc/cores/VideoRenderers/VideoShaders/VideoShaders.a: force
-       $(MAKE) -C xbmc/cores/VideoRenderers/VideoShaders
-xbmc/cores/ExternalPlayer/ExternalPlayer.a: force
-       $(MAKE) -C xbmc/cores/ExternalPlayer
-xbmc/cores/playercorefactory/playercorefactory.a: force
-       $(MAKE) -C xbmc/cores/playercorefactory
-xbmc/filesystem/filesystem.a: force
-       $(MAKE) -C xbmc/filesystem
-xbmc/filesystem/MusicDatabaseDirectory/musicdatabasedirectory.a: force
-       $(MAKE) -C xbmc/filesystem/MusicDatabaseDirectory
-xbmc/filesystem/VideoDatabaseDirectory/videodatabasedirectory.a: force
-       $(MAKE) -C xbmc/filesystem/VideoDatabaseDirectory
-xbmc/input/input.a: force
-       $(MAKE) -C xbmc/input
-xbmc/input/linux/input_linux.a: force
-       $(MAKE) -C xbmc/input/linux
-xbmc/music/karaoke/karaoke.a: force
-       $(MAKE) -C xbmc/music/karaoke
-xbmc/network/network.a: force
-       $(MAKE) -C xbmc/network
-xbmc/network/osx/network.a: force
-       $(MAKE) -C xbmc/network/osx
-xbmc/pictures/pictures.a: force
-       $(MAKE) -C xbmc/pictures
-xbmc/programs/programs.a: force
-       $(MAKE) -C xbmc/programs
-xbmc/network/linux/network_linux.a: force
-       $(MAKE) -C xbmc/network/linux
-xbmc/playlists/playlists.a: force
-       $(MAKE) -C xbmc/playlists
-xbmc/powermanagement/powermanagement.a: force
-       $(MAKE) -C xbmc/powermanagement
-xbmc/powermanagement/linux/powermanagement_linux.a: force
-       $(MAKE) -C xbmc/powermanagement/linux
-xbmc/powermanagement/osx/powermanagement.a: force
-       $(MAKE) -C xbmc/powermanagement/osx
-xbmc/rendering/rendering.a: force
-       $(MAKE) -C xbmc/rendering
-xbmc/rendering/gl/rendering_gl.a: force
-       $(MAKE) -C xbmc/rendering/gl
-xbmc/rendering/gles/rendering_gles.a: force
-       $(MAKE) -C xbmc/rendering/gles
-xbmc/windowing/windowing.a: force
-       $(MAKE) -C xbmc/windowing
-xbmc/windowing/egl/windowing_egl.a: force
-       $(MAKE) -C xbmc/windowing/egl
-xbmc/windowing/osx/windowing_osx.a: force
-       $(MAKE) -C xbmc/windowing/osx
-xbmc/windowing/X11/windowing_X11.a: force
-       $(MAKE) -C xbmc/windowing/X11
-xbmc/storage/storage.a: force
-       $(MAKE) -C xbmc/storage
-xbmc/storage/linux/storage_linux.a: force
-       $(MAKE) -C xbmc/storage/linux
-xbmc/storage/osx/storage.a: force
-       $(MAKE) -C xbmc/storage/osx
-xbmc/threads/threads.a: force
-       $(MAKE) -C xbmc/threads
-xbmc/music/music.a: force
-       $(MAKE) -C xbmc/music
-xbmc/music/tags/musictags.a: force
-       $(MAKE) -C xbmc/music/tags
-xbmc/music/dialogs/musicdialogs.a: force
-       $(MAKE) -C xbmc/music/dialogs
-xbmc/music/windows/musicwindows.a: force
-       $(MAKE) -C xbmc/music/windows
-xbmc/music/infoscanner/musicscanner.a: force
-       $(MAKE) -C xbmc/music/infoscanner
-xbmc/video/video.a: force
-       $(MAKE) -C xbmc/video
-xbmc/video/dialogs/videodialogs.a: force
-       $(MAKE) -C xbmc/video/dialogs
-xbmc/video/windows/videowindows.a: force
-       $(MAKE) -C xbmc/video/windows
-xbmc/dialogs/dialogs.a: force
-       $(MAKE) -C xbmc/dialogs
-xbmc/windows/windows.a: force
-       $(MAKE) -C xbmc/windows
-lib/libhts/libhts.a: force
-       $(MAKE) -C lib/libhts
-xbmc/interfaces/interfaces.a: force
-       $(MAKE) -C xbmc/interfaces
-xbmc/interfaces/info/info.a: force
-       $(MAKE) -C xbmc/interfaces/info
-xbmc/interfaces/python/python.a: force
-       $(MAKE) -C xbmc/interfaces/python
-xbmc/interfaces/python/xbmcmodule/xbmcmodule.a: force
-       $(MAKE) -C xbmc/interfaces/python/xbmcmodule
-xbmc/network/libscrobbler/scrobbler.a: force
-       $(MAKE) -C xbmc/network/libscrobbler
-lib/libRTV/librtv.a: force
-       $(MAKE) -C lib/libRTV
-lib/libUPnP/libupnp.a: force
-       $(MAKE) -C lib/libUPnP
-lib/libXDAAP/libxdaap.a: force
-       $(MAKE) -C lib/libXDAAP
-xbmc/interfaces/http-api/http-api.a: force
-       $(MAKE) -C xbmc/interfaces/http-api
-xbmc/interfaces/json-rpc/json-rpc.a: force
-       $(MAKE) -C xbmc/interfaces/json-rpc
-xbmc/dbwrappers/dbwrappers.a: force
-       $(MAKE) -C xbmc/dbwrappers
-lib/UnrarXLib/UnrarXLib.a: force
-       $(MAKE) -C lib/UnrarXLib
-lib/libsquish/libsquish.a: force
-       $(MAKE) -C lib/libsquish
-lib/SlingboxLib/SlingboxLib.a: force
-       $(MAKE) -C lib/SlingboxLib
-xbmc/linux/linux.a: force
-       $(MAKE) -C xbmc/linux
-xbmc/addons/addons.a: force
-       $(MAKE) -C xbmc/addons
-xbmc/settings/settings.a: force
-       $(MAKE) -C xbmc/settings
-xbmc/utils/utils.a: force
-       $(MAKE) -C xbmc/utils
-xbmc/osx/osx.a: force
-       $(MAKE) -C xbmc/osx
-xbmc/peripherals/peripherals.a: force
-       $(MAKE) -C xbmc/peripherals
-xbmc/peripherals/bus/peripheral-bus.a: force
-       $(MAKE) -C xbmc/peripherals/bus
-xbmc/peripherals/devices/peripheral-devices.a: force
-       $(MAKE) -C xbmc/peripherals/devices
-xbmc/peripherals/dialogs/peripheral-dialogs.a: force
-       $(MAKE) -C xbmc/peripherals/dialogs
 lib/libapetag/.libs/libapetag.a: force
        $(MAKE) -C lib/libapetag
 lib/cpluff/libcpluff/.libs/libcpluff.a: force
@@ -374,8 +238,6 @@ ifeq ($(findstring osx,@ARCH@), osx)
 else
        cp lib/cpluff/libcpluff/.libs/libcpluff.so $@
 endif
-lib/xbmc-dll-symbols/dll-symbols.a: force
-       $(MAKE) -C lib/xbmc-dll-symbols
 
 exports: xbmc/cores/DllLoader/exports/exports.a xbmc/cores/DllLoader/exports/util/exports_utils.a
        $(MAKE) -C xbmc/cores/DllLoader/exports wrapper.def
@@ -443,90 +305,9 @@ xcode_depends: \
        lib/libXDAAP/libxdaap.a \
        lib/SlingboxLib/SlingboxLib.a
 
-# platform independend objects
-OBJSXBMC=      \
-       xbmc/xbmc.a \
-       xbmc/addons/addons.a \
-       xbmc/cores/playercorefactory/playercorefactory.a \
-       xbmc/cores/paplayer/paplayer.a \
-       xbmc/cores/VideoRenderers/VideoRenderer.a \
-       xbmc/cores/VideoRenderers/VideoShaders/VideoShaders.a \
-       lib/tinyXML/tinyxml.a \
-       xbmc/cores/cores.a \
-       xbmc/interfaces/python/python.a \
-       xbmc/cores/DllLoader/dllloader.a \
-       $(DVDPLAYER_ARCHIVES) \
-       xbmc/cores/AudioRenderers/audiorenderers.a \
-       xbmc/cores/ExternalPlayer/ExternalPlayer.a \
-       xbmc/filesystem/filesystem.a \
-       xbmc/filesystem/MusicDatabaseDirectory/musicdatabasedirectory.a \
-       xbmc/filesystem/VideoDatabaseDirectory/videodatabasedirectory.a \
-       xbmc/input/input.a \
-       xbmc/dialogs/dialogs.a \
-       xbmc/music/karaoke/karaoke.a \
-       xbmc/music/music.a \
-       xbmc/music/dialogs/musicdialogs.a \
-       xbmc/music/infoscanner/musicscanner.a \
-       xbmc/music/tags/musictags.a \
-       xbmc/music/windows/musicwindows.a \
-       xbmc/video/dialogs/videodialogs.a \
-       xbmc/pictures/pictures.a \
-       xbmc/playlists/playlists.a \
-       xbmc/programs/programs.a \
-       xbmc/powermanagement/powermanagement.a \
-       xbmc/storage/storage.a \
-       xbmc/threads/threads.a \
-       xbmc/windows/windows.a \
-       xbmc/interfaces/python/xbmcmodule/xbmcmodule.a \
-       xbmc/network/libscrobbler/scrobbler.a \
-       lib/libRTV/librtv.a \
-       lib/libUPnP/libupnp.a \
-       lib/libXDAAP/libxdaap.a \
-       xbmc/interfaces/interfaces.a \
-       xbmc/cdrip/cdrip.a \
-       xbmc/interfaces/json-rpc/json-rpc.a \
-       xbmc/interfaces/http-api/http-api.a \
-       xbmc/interfaces/info/info.a \
-       xbmc/dbwrappers/dbwrappers.a \
-       lib/libsquish/libsquish.a \
-       lib/SlingboxLib/SlingboxLib.a \
-       lib/libapetag/.libs/libapetag.a \
-       lib/libhts/libhts.a \
-       lib/xbmc-dll-symbols/dll-symbols.a \
-       xbmc/rendering/rendering.a \
-       xbmc/windowing/windowing.a \
-       xbmc/peripherals/peripherals.a \
-       xbmc/peripherals/bus/peripheral-bus.a \
-       xbmc/peripherals/devices/peripheral-devices.a \
-       xbmc/peripherals/dialogs/peripheral-dialogs.a 
 
-ifeq (@USE_OPENGL@,1)
-OBJSXBMC += xbmc/rendering/gl/rendering_gl.a
-endif
-ifeq (@USE_OPENGLES@,1)
-OBJSXBMC += xbmc/rendering/gles/rendering_gles.a
-OBJSXBMC += xbmc/windowing/egl/windowing_egl.a
-endif
-
-ifeq (@HAVE_XBMC_NONFREE@,1)
-OBJSXBMC += lib/UnrarXLib/UnrarXLib.a
-endif
-
-# platform dependend objects
-ifeq ($(findstring osx,@ARCH@), osx)
-OBJSXBMC += xbmc/osx/osx.a
-OBJSXBMC += xbmc/network/osx/network.a
-OBJSXBMC += xbmc/network/linux/network_linux.a
-OBJSXBMC += xbmc/powermanagement/osx/powermanagement.a
-OBJSXBMC += xbmc/storage/osx/storage.a
-OBJSXBMC += xbmc/windowing/osx/windowing_osx.a
-else
-OBJSXBMC += xbmc/input/linux/input_linux.a
-OBJSXBMC += xbmc/network/linux/network_linux.a
-OBJSXBMC += xbmc/powermanagement/linux/powermanagement_linux.a
-OBJSXBMC += xbmc/storage/linux/storage_linux.a
-OBJSXBMC += xbmc/windowing/X11/windowing_X11.a
-endif
+OBJSXBMC =$(DIRECTORY_ARCHIVES)
+OBJSXBMC+=lib/libapetag/.libs/libapetag.a
 
 DYNOBJSXBMC= \
        xbmc/linux/linux.a \
@@ -539,13 +320,15 @@ DYNOBJSXBMC= \
        xbmc/video/video.a \
        xbmc/guilib/guilib.a # must be dynamic to avoid linker errors
 
+OBJSXBMC:=$(filter-out $(DYNOBJSXBMC), $(OBJSXBMC))
+
 LIBS += @PYTHON_LDFLAGS@
 
 xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC)
 ifeq ($(findstring osx,@ARCH@), osx)
-       $(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic
+       $(SILENT_LD) $(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic
 else
-       $(CXX) $(CXXFLAGS) $(LDFLAGS) -o xbmc.bin -Wl,--whole-archive $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--no-whole-archive $(LIBS) -rdynamic
+       $(SILENT_LD) $(CXX) $(CXXFLAGS) $(LDFLAGS) -o xbmc.bin -Wl,--whole-archive $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--no-whole-archive $(LIBS) -rdynamic
 endif
 
 xbmc-xrandr: xbmc-xrandr.c
@@ -553,7 +336,7 @@ ifneq (1,@USE_XRANDR@)
        # xbmc-xrandr.c gets picked up by the default make rules
        @echo "excluding xbmc-xrandr"
 else
-       $(CC) $(CFLAGS) $(LDFLAGS) -o xbmc-xrandr xbmc-xrandr.c -lXrandr -lX11
+       $(SILENT_LD) $(CC) $(CFLAGS) $(LDFLAGS) -o xbmc-xrandr xbmc-xrandr.c -lXrandr -lX11
 endif
 
 tools/XBMCTex/XBMCTex:
@@ -645,33 +428,6 @@ uninstall:
        @rm -rf $(DESTDIR)$(datarootdir)/xsessions/XBMC.desktop
        @echo "Done!"
 
-reallyclean:
-       @echo " This will delete ALL unversioned files in"; \
-        echo " your XBMC source tree. If you aren't sure"; \
-        echo " you want to do this, answer anything but"; \
-        echo " 'Y' (case sensitive) to the following."; \
-        echo " DISCLAIMER: Team XBMC is NOT responsible"; \
-        echo " for ANYTHING lost if you execute this command!"; \
-        echo -n " Damnserious? (Y/*) "; \
-        read -n1 PROMPT; \
-        if [[ "$$PROMPT" = "Y" ]]; then \
-               SVNV=$$(svnversion -n | cut -d':' -f1); _IFS=$$IFS; IFS=$$'\t\n'; \
-               for i in `svn st --no-ignore | grep ^[I\?] | cut -d' ' -f7-`; do \
-                       if [[ $${i:(-4)} != "diff" && $${i:(-5)} != "patch" ]]; then \
-                               echo "  Deleting $$i"; \
-                               rm -rf "$$i"; \
-                       fi; \
-               done; \
-               IFS=$$_IFS; \
-               echo " Recovering any missing files."; \
-               svn up -r $${SVNV/M/} | sed -e "s/.*'\(.*\)'/  \1/p" -e d; \
-               echo " Done."; \
-               echo " The following files may need reverted (svn revert <file>)"; \
-               svn st | sed -e "s/^M */  /p" -e d; \
-        else \
-               echo; \
-        fi
-
 clean-xbmc.bin:
        rm -f xbmc.bin
        for d in $(BIN_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done
index 787c8fa..b70245d 100644 (file)
@@ -4,6 +4,7 @@ RM=rm -rf
 SHELL=@SHELL@
 ARCH=@ARCH@
 abs_top_srcdir=@abs_top_srcdir@
+rel_top_srcdir=$(subst $(abspath $(abs_top_srcdir))/,,$(abspath $(CURDIR))/)
 prefix=@prefix@
 exec_prefix=@exec_prefix@
 bindir=@bindir@
@@ -58,12 +59,13 @@ ifeq ($(ARCH), powerpc-osx)
 endif
 
 ifneq ($(V), 1)
-       SILENT_CPP=@echo "CPP     $@";
-       SILENT_CC =@echo "CC      $@";
-       SILENT_S  =@echo "S       $@";
-       SILENT_GCH=@echo "GCH     $@";
-       SILENT_MM =@echo "MM      $@";
-       SILENT_AR =@echo "AR      $@";
+       SILENT_CPP=@echo "CPP     $(rel_top_srcdir)$@";
+       SILENT_CC =@echo "CC      $(rel_top_srcdir)$@";
+       SILENT_S  =@echo "S       $(rel_top_srcdir)$@";
+       SILENT_GCH=@echo "GCH     $(rel_top_srcdir)$@";
+       SILENT_MM =@echo "MM      $(rel_top_srcdir)$@";
+       SILENT_AR =@echo "AR      $(rel_top_srcdir)$@";
+       SILENT_LD =@echo "LD      $(rel_top_srcdir)$@";
 endif
 
 OBJS+=$(filter %.o,$(SRCS:.cpp=.o))
index da92c5f..aac3a73 100644 (file)
@@ -37,6 +37,8 @@ character itself should NOT be typed as part of the command.
 
  $ cd $HOME
  $ git clone git://github.com/xbmc/xbmc.git xbmc
+ $ cd xbmc
+ $ git submodule update --init addons/skin.touched
 
 -----------------------------------------------------------------------------
 3.0 Install Xcode
index b361da6..fe7b679 100644 (file)
@@ -43,7 +43,7 @@ Build-Depends: debhelper (>= 7.0.50~), python-support, cmake,
  libgl1-mesa-dev | libgl-dev, libglu1-mesa-dev | libglu-dev, libglew-dev,
  libmad0-dev, libjpeg-dev, libsamplerate-dev, libogg-dev, libvorbis-dev,
  libfreetype6-dev, libfontconfig-dev, libbz2-dev, libfribidi-dev,
- libsqlite3-dev, libmysqlclient-dev, libasound-dev, libpng12-dev | libpng-dev,
+ libsqlite3-dev, libmysqlclient-dev, libasound2-dev, libpng12-dev | libpng-dev,
  libpcre3-dev, liblzo2-dev, libcdio-dev, libsdl-dev, libsdl-image1.2-dev,
  libsdl-mixer1.2-dev, libenca-dev, libjasper-dev, libxt-dev,
  libxmu-dev, libxinerama-dev, libcurl4-gnutls-dev | libcurl-dev,
@@ -55,7 +55,7 @@ Build-Depends: debhelper (>= 7.0.50~), python-support, cmake,
  libbluetooth-dev, zlib1g-dev, libsmbclient-dev, libboost-thread-dev
  libiso9660-dev, libssl-dev, lsb-release, libvdpau-dev, libmicrohttpd-dev,
  libmodplug-dev, librtmp-dev, libcrystalhd-dev, curl, python-dev, libyajl-dev,
- libplist-dev, libusb-dev, libudev-dev
+ libplist-dev, libusb-dev, libudev-dev, libltdl-dev
 
 *** For developers and anyone else who compiles frequently it is recommended to
 use ccache
index b4f9990..51703f4 100644 (file)
@@ -14,9 +14,9 @@ TOC
 -----------------------------------------------------------------------------
 
 This is a platform port of XBMC for the Apple OSX operating system. Both 10.5
-and 10.6 Intel development platforms are supported. The current build system
-is Xcode 3.1.2 There are two ways to build XBMC for Mac, from command-line or
-from Xcode.
+and 10.6 Intel development platforms are supported. Xcode 4.x is not supported.
+The current build system is Xcode 3.2.5 There are two ways to build XBMC for Mac,
+from command-line or from Xcode.
 
 Generally, Xcode is the easiest as it presents the build system in a GUI environment.
 The command-line build is still under development.
@@ -41,8 +41,10 @@ character itself should NOT be typed as part of the command.
 -----------------------------------------------------------------------------
 Install latest Xcode. You can download it from Apple's site after registration at
 (http://developer.apple.com/tools/download). You also need to install the 10.4
-sdk. If using Xcode 3.x, you MUST use Xcode 3.1.2 so update your existing version
-if you are running a previous Xcode 3.x version. Xcode 3.x only runs on 10.5.
+sdk. If using Xcode 3.x, you MUST use Xcode 3.1.2 or a newer version, so update
+your existing version. if you are running a previous Xcode 3.x version. 
+Xcode 3.x only runs on 10.5 and above. If you are running 10.7, DO NOT USE Xcode 4.x,
+it will fail. Use Xcode 3.x under 10.7.
 
 -----------------------------------------------------------------------------
 3.1 Install XBMC build depends
index 3d239a8..4a73574 100644 (file)
@@ -44,10 +44,10 @@ Two methods exist to install the required Ubuntu packages:
 
 For Ubuntu (all versions >= 7.04):
 
-   # sudo apt-get install git-core make g++ gcc gawk pmount libtool nasm yasm automake cmake gperf zip unzip bison libsdl-dev libsdl-image1.2-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libfribidi-dev liblzo2-dev libfreetype6-dev libsqlite3-dev libogg-dev libasound-dev python-sqlite libglew-dev libcurl3 libcurl4-gnutls-dev libxrandr-dev libxrender-dev libmad0-dev libogg-dev libvorbisenc2 libsmbclient-dev libmysqlclient-dev libpcre3-dev libdbus-1-dev libhal-dev libhal-storage-dev libjasper-dev libfontconfig-dev libbz2-dev libboost-dev libenca-dev libxt-dev libxmu-dev libpng-dev libjpeg-dev libpulse-dev mesa-utils libcdio-dev libsamplerate-dev libmpeg3-dev libflac-dev libiso9660-dev libass-dev libssl-dev fp-compiler gdc libmpeg2-4-dev libmicrohttpd-dev libmodplug-dev libssh-dev gettext cvs python-dev libyajl-dev libboost-thread-dev libplist-dev libusb-dev libudev-dev
+   # sudo apt-get install git-core make g++ gcc gawk pmount libtool nasm yasm automake cmake gperf zip unzip bison libsdl-dev libsdl-image1.2-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libfribidi-dev liblzo2-dev libfreetype6-dev libsqlite3-dev libogg-dev libasound2-dev python-sqlite libglew-dev libcurl3 libcurl4-gnutls-dev libxrandr-dev libxrender-dev libmad0-dev libogg-dev libvorbisenc2 libsmbclient-dev libmysqlclient-dev libpcre3-dev libdbus-1-dev libhal-dev libhal-storage-dev libjasper-dev libfontconfig-dev libbz2-dev libboost-dev libenca-dev libxt-dev libxmu-dev libpng-dev libjpeg-dev libpulse-dev mesa-utils libcdio-dev libsamplerate-dev libmpeg3-dev libflac-dev libiso9660-dev libass-dev libssl-dev fp-compiler gdc libmpeg2-4-dev libmicrohttpd-dev libmodplug-dev libssh-dev gettext cvs python-dev libyajl-dev libboost-thread-dev libplist-dev libusb-dev libudev-dev
 
-For Ubuntu Maverick (10.10):
-   # sudo apt-get install autopoint
+For >= 10.10:
+   # sudo apt-get install autopoint libltdl-dev
 
 On 8.10 and older versions, libcurl is outdated and thus XBMC will not compile properly.
 In this case you will have to manually compile the latest version.
index 5cd7559..f360480 100644 (file)
@@ -12,6 +12,8 @@
                18404DFD1396C44F00863BBA /* SlingboxLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18404DFC1396C44F00863BBA /* SlingboxLib.a */; };
                1840B796139968DB007C848B /* JSONVariantParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1840B792139968DB007C848B /* JSONVariantParser.cpp */; };
                1840B797139968DB007C848B /* JSONVariantWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1840B794139968DB007C848B /* JSONVariantWriter.cpp */; };
+               188F761015221809009870CE /* GUIOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188F760E15221809009870CE /* GUIOperations.cpp */; };
+               188F76291522186C009870CE /* Mime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188F76271522186C009870CE /* Mime.cpp */; };
                18968DE814155E1D005BA742 /* ApplicationOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18968DE614155E1D005BA742 /* ApplicationOperations.cpp */; };
                18ACF8E313597B0000B67371 /* RecentlyAddedJob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18ACF8E113597B0000B67371 /* RecentlyAddedJob.cpp */; };
                18B7013C13A6ABBA0009C1AF /* AddonVersion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7013A13A6ABBA0009C1AF /* AddonVersion.cpp */; };
@@ -25,6 +27,7 @@
                7C89627013B702F3003631FE /* GUIWindowScreensaverDim.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C89626E13B702F3003631FE /* GUIWindowScreensaverDim.cpp */; };
                7C99B73F133D372300FC2B16 /* CacheCircular.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C99B73D133D372300FC2B16 /* CacheCircular.cpp */; };
                7C99B7AA134072CD00FC2B16 /* GUIDialogPlayEject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C99B7A8134072CD00FC2B16 /* GUIDialogPlayEject.cpp */; };
+               7CCFD9AA1514952700211D82 /* PCMCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CCFD9A81514952700211D82 /* PCMCodec.cpp */; };
                7CEE2E6D13D6B7A8000ABF2A /* TimeSmoother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CEE2E6B13D6B7A8000ABF2A /* TimeSmoother.cpp */; };
                C807119F135DB842002F601B /* InputOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C807119D135DB842002F601B /* InputOperations.cpp */; };
                C8EC5D51136954E400CCC10D /* XBMC_keytable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C8EC5D4F136954E400CCC10D /* XBMC_keytable.cpp */; };
                DF4485341400651B0069344B /* FilePipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF4485301400651B0069344B /* FilePipe.cpp */; };
                DF4485351400651B0069344B /* PipesManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF4485321400651B0069344B /* PipesManager.cpp */; };
                DF4485381400654A0069344B /* AirTunesServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF4485361400654A0069344B /* AirTunesServer.cpp */; };
+               DF527780151BAFD600B5B63B /* WebSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527777151BAFD600B5B63B /* WebSocket.cpp */; };
+               DF527781151BAFD600B5B63B /* WebSocketManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527779151BAFD600B5B63B /* WebSocketManager.cpp */; };
+               DF527782151BAFD600B5B63B /* WebSocketV13.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52777B151BAFD600B5B63B /* WebSocketV13.cpp */; };
+               DF527783151BAFD600B5B63B /* WebSocketV8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52777D151BAFD600B5B63B /* WebSocketV8.cpp */; };
+               DF527788151BAFEE00B5B63B /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527784151BAFEE00B5B63B /* Base64.cpp */; };
+               DF527789151BAFEE00B5B63B /* HttpResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527786151BAFEE00B5B63B /* HttpResponse.cpp */; };
+               DF673A251443769300A5A509 /* FileUPnP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF673A231443769300A5A509 /* FileUPnP.cpp */; };
                DF98D9A81434F4B400A6EBE1 /* SkinVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF98D9A61434F4B400A6EBE1 /* SkinVariable.cpp */; };
                DFA6BE8713FED2A10048CC11 /* AirPlayServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFA6BE8513FED2A10048CC11 /* AirPlayServer.cpp */; };
                DFA6BE8A13FED2B40048CC11 /* HttpParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFA6BE8813FED2B40048CC11 /* HttpParser.cpp */; };
                F5AE41131341751E0004BD79 /* XBMCOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5AE41061341751E0004BD79 /* XBMCOperations.cpp */; };
                F5AE453B134D2E720004BD79 /* JSONServiceDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5AE4539134D2E720004BD79 /* JSONServiceDescription.cpp */; };
                F5B13E0113344F310045076D /* DarwinUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5B13E0013344F310045076D /* DarwinUtils.mm */; };
+               F5BD033A148D4923001B5583 /* CryptThreading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5BD0338148D4923001B5583 /* CryptThreading.cpp */; };
                F5CEE72C13D3F9AC00225F72 /* DVDOverlayCodecTX3G.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5CEE72B13D3F9AC00225F72 /* DVDOverlayCodecTX3G.cpp */; };
                F5E1131D14357B6500175026 /* PeripheralBusUSB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5E112FF14357B6500175026 /* PeripheralBusUSB.cpp */; };
                F5E1131E14357B6500175026 /* PeripheralBus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5E1130114357B6500175026 /* PeripheralBus.cpp */; };
                1840B793139968DB007C848B /* JSONVariantParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONVariantParser.h; sourceTree = "<group>"; };
                1840B794139968DB007C848B /* JSONVariantWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSONVariantWriter.cpp; sourceTree = "<group>"; };
                1840B795139968DB007C848B /* JSONVariantWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONVariantWriter.h; sourceTree = "<group>"; };
+               188F752615211773009870CE /* IJSONRPCAnnouncer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IJSONRPCAnnouncer.h; sourceTree = "<group>"; };
+               188F752715211780009870CE /* JSONRPCUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONRPCUtils.h; sourceTree = "<group>"; };
+               188F760E15221809009870CE /* GUIOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIOperations.cpp; sourceTree = "<group>"; };
+               188F760F15221809009870CE /* GUIOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIOperations.h; sourceTree = "<group>"; };
+               188F76271522186C009870CE /* Mime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mime.cpp; sourceTree = "<group>"; };
+               188F76281522186C009870CE /* Mime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mime.h; sourceTree = "<group>"; };
                18968DE614155E1D005BA742 /* ApplicationOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationOperations.cpp; sourceTree = "<group>"; };
                18968DE714155E1D005BA742 /* ApplicationOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationOperations.h; sourceTree = "<group>"; };
                18ACF8E113597B0000B67371 /* RecentlyAddedJob.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RecentlyAddedJob.cpp; sourceTree = "<group>"; };
                7C99B73E133D372300FC2B16 /* CacheCircular.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CacheCircular.h; sourceTree = "<group>"; };
                7C99B7A8134072CD00FC2B16 /* GUIDialogPlayEject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIDialogPlayEject.cpp; sourceTree = "<group>"; };
                7C99B7A9134072CD00FC2B16 /* GUIDialogPlayEject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIDialogPlayEject.h; sourceTree = "<group>"; };
+               7CCFD9A81514952700211D82 /* PCMCodec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PCMCodec.cpp; sourceTree = "<group>"; };
+               7CCFD9A91514952700211D82 /* PCMCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PCMCodec.h; sourceTree = "<group>"; };
                7CEE2E6B13D6B7A8000ABF2A /* TimeSmoother.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeSmoother.cpp; sourceTree = "<group>"; };
                7CEE2E6C13D6B7A8000ABF2A /* TimeSmoother.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeSmoother.h; sourceTree = "<group>"; };
                8316267613B670FF004AED87 /* README.ios */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.ios; sourceTree = "<group>"; };
                A192FD47135E46C800D92E9B /* IOSAudioRingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IOSAudioRingBuffer.h; path = AudioRenderers/IOSAudioRingBuffer.h; sourceTree = "<group>"; };
                C807119D135DB842002F601B /* InputOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputOperations.cpp; sourceTree = "<group>"; };
                C807119E135DB842002F601B /* InputOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputOperations.h; sourceTree = "<group>"; };
-               C80711A0135DB848002F601B /* AnnouncementUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnnouncementUtils.h; sourceTree = "<group>"; };
                C8EC5D4F136954E400CCC10D /* XBMC_keytable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XBMC_keytable.cpp; sourceTree = "<group>"; };
                C8EC5D50136954E400CCC10D /* XBMC_keytable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XBMC_keytable.h; sourceTree = "<group>"; };
                DF0DF16813A3AF82008ED511 /* FileNFS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileNFS.cpp; sourceTree = "<group>"; };
                DF4485331400651B0069344B /* PipesManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PipesManager.h; sourceTree = "<group>"; };
                DF4485361400654A0069344B /* AirTunesServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AirTunesServer.cpp; sourceTree = "<group>"; };
                DF4485371400654A0069344B /* AirTunesServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AirTunesServer.h; sourceTree = "<group>"; };
+               DF527777151BAFD600B5B63B /* WebSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocket.cpp; sourceTree = "<group>"; };
+               DF527778151BAFD600B5B63B /* WebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocket.h; sourceTree = "<group>"; };
+               DF527779151BAFD600B5B63B /* WebSocketManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketManager.cpp; sourceTree = "<group>"; };
+               DF52777A151BAFD600B5B63B /* WebSocketManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketManager.h; sourceTree = "<group>"; };
+               DF52777B151BAFD600B5B63B /* WebSocketV13.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketV13.cpp; sourceTree = "<group>"; };
+               DF52777C151BAFD600B5B63B /* WebSocketV13.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketV13.h; sourceTree = "<group>"; };
+               DF52777D151BAFD600B5B63B /* WebSocketV8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketV8.cpp; sourceTree = "<group>"; };
+               DF52777E151BAFD600B5B63B /* WebSocketV8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketV8.h; sourceTree = "<group>"; };
+               DF527784151BAFEE00B5B63B /* Base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Base64.cpp; sourceTree = "<group>"; };
+               DF527785151BAFEE00B5B63B /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = "<group>"; };
+               DF527786151BAFEE00B5B63B /* HttpResponse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HttpResponse.cpp; sourceTree = "<group>"; };
+               DF527787151BAFEE00B5B63B /* HttpResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpResponse.h; sourceTree = "<group>"; };
+               DF673A231443769300A5A509 /* FileUPnP.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileUPnP.cpp; sourceTree = "<group>"; };
+               DF673A241443769300A5A509 /* FileUPnP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileUPnP.h; sourceTree = "<group>"; };
                DF98D9A61434F4B400A6EBE1 /* SkinVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkinVariable.cpp; sourceTree = "<group>"; };
                DF98D9A71434F4B400A6EBE1 /* SkinVariable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkinVariable.h; sourceTree = "<group>"; };
                DFA6BE8513FED2A10048CC11 /* AirPlayServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AirPlayServer.cpp; sourceTree = "<group>"; };
                F5AE453A134D2E720004BD79 /* JSONServiceDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONServiceDescription.h; sourceTree = "<group>"; };
                F5B13DFF13344F2A0045076D /* DarwinUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DarwinUtils.h; sourceTree = "<group>"; };
                F5B13E0013344F310045076D /* DarwinUtils.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DarwinUtils.mm; sourceTree = "<group>"; };
+               F5BD0338148D4923001B5583 /* CryptThreading.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptThreading.cpp; sourceTree = "<group>"; };
+               F5BD0339148D4923001B5583 /* CryptThreading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptThreading.h; sourceTree = "<group>"; };
                F5CEE72B13D3F9AC00225F72 /* DVDOverlayCodecTX3G.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDOverlayCodecTX3G.cpp; sourceTree = "<group>"; };
                F5CEE72D13D3F9B300225F72 /* DVDOverlayCodecTX3G.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVDOverlayCodecTX3G.h; sourceTree = "<group>"; };
                F5E112FF14357B6500175026 /* PeripheralBusUSB.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PeripheralBusUSB.cpp; sourceTree = "<group>"; };
                        name = Documentation;
                        sourceTree = "<group>";
                };
+               DF527775151BAFD600B5B63B /* websocket */ = {
+                       isa = PBXGroup;
+                       children = (
+                               DF527777151BAFD600B5B63B /* WebSocket.cpp */,
+                               DF527778151BAFD600B5B63B /* WebSocket.h */,
+                               DF527779151BAFD600B5B63B /* WebSocketManager.cpp */,
+                               DF52777A151BAFD600B5B63B /* WebSocketManager.h */,
+                               DF52777B151BAFD600B5B63B /* WebSocketV13.cpp */,
+                               DF52777C151BAFD600B5B63B /* WebSocketV13.h */,
+                               DF52777D151BAFD600B5B63B /* WebSocketV8.cpp */,
+                               DF52777E151BAFD600B5B63B /* WebSocketV8.h */,
+                       );
+                       path = websocket;
+                       sourceTree = "<group>";
+               };
                DFD4D20C13D7286E00A47C47 /* platform */ = {
                        isa = PBXGroup;
                        children = (
                                F56C7322131EC151000AD0F6 /* OGGcodec.h */,
                                F56C7323131EC151000AD0F6 /* PAPlayer.cpp */,
                                F56C7324131EC151000AD0F6 /* PAPlayer.h */,
+                               7CCFD9A81514952700211D82 /* PCMCodec.cpp */,
+                               7CCFD9A91514952700211D82 /* PCMCodec.h */,
                                F56C7325131EC151000AD0F6 /* ReplayGain.cpp */,
                                F56C7326131EC151000AD0F6 /* ReplayGain.h */,
                                F56C7328131EC151000AD0F6 /* SIDCodec.cpp */,
                                F56C73E3131EC151000AD0F6 /* FileTuxBox.h */,
                                F56C73E4131EC151000AD0F6 /* FileUDF.cpp */,
                                F56C73E5131EC151000AD0F6 /* FileUDF.h */,
+                               DF673A231443769300A5A509 /* FileUPnP.cpp */,
+                               DF673A241443769300A5A509 /* FileUPnP.h */,
                                F56C73E8131EC151000AD0F6 /* FileZip.cpp */,
                                F56C73E9131EC151000AD0F6 /* FileZip.h */,
                                F56C73EA131EC151000AD0F6 /* FTPDirectory.cpp */,
                                F56C7564131EC152000AD0F6 /* python */,
                                F56C75A3131EC152000AD0F6 /* AnnouncementManager.cpp */,
                                F56C75A4131EC152000AD0F6 /* AnnouncementManager.h */,
-                               C80711A0135DB848002F601B /* AnnouncementUtils.h */,
                                F56C75A5131EC153000AD0F6 /* Builtins.cpp */,
                                F56C75A6131EC153000AD0F6 /* Builtins.h */,
                                F56C75A7131EC153000AD0F6 /* IAnnouncer.h */,
                                F56C7648131EC153000AD0F6 /* libscrobbler */,
                                F56C7650131EC153000AD0F6 /* linux */,
                                F56C7653131EC153000AD0F6 /* osx */,
+                               DF527775151BAFD600B5B63B /* websocket */,
                                DFA6BE8513FED2A10048CC11 /* AirPlayServer.cpp */,
                                DFA6BE8613FED2A10048CC11 /* AirPlayServer.h */,
                                DF4485361400654A0069344B /* AirTunesServer.cpp */,
                                F56C7724131EC154000AD0F6 /* AsyncFileCopy.h */,
                                F56C7725131EC154000AD0F6 /* AutoPtrHandle.cpp */,
                                F56C7726131EC154000AD0F6 /* AutoPtrHandle.h */,
+                               DF527784151BAFEE00B5B63B /* Base64.cpp */,
+                               DF527785151BAFEE00B5B63B /* Base64.h */,
                                F56C7727131EC154000AD0F6 /* BitstreamStats.cpp */,
                                F56C7728131EC154000AD0F6 /* BitstreamStats.h */,
                                F56C7729131EC154000AD0F6 /* CharsetConverter.cpp */,
                                F56C772C131EC154000AD0F6 /* CPUInfo.h */,
                                F56C7716131EC154000AD0F6 /* Crc32.cpp */,
                                F56C7717131EC154000AD0F6 /* Crc32.h */,
+                               F5BD0338148D4923001B5583 /* CryptThreading.cpp */,
+                               F5BD0339148D4923001B5583 /* CryptThreading.h */,
                                F56C772D131EC154000AD0F6 /* DownloadQueue.cpp */,
                                F56C772E131EC154000AD0F6 /* DownloadQueue.h */,
                                F56C772F131EC154000AD0F6 /* DownloadQueueManager.cpp */,
                                F56C7740131EC154000AD0F6 /* HttpHeader.h */,
                                DFA6BE8813FED2B40048CC11 /* HttpParser.cpp */,
                                DFA6BE8913FED2B40048CC11 /* HttpParser.h */,
+                               DF527786151BAFEE00B5B63B /* HttpResponse.cpp */,
+                               DF527787151BAFEE00B5B63B /* HttpResponse.h */,
                                F56C7741131EC154000AD0F6 /* InfoLoader.cpp */,
                                F56C7742131EC154000AD0F6 /* InfoLoader.h */,
                                F56C7747131EC154000AD0F6 /* Job.h */,
                                F56C770F131EC153000AD0F6 /* MathUtils.h */,
                                F56C774C131EC154000AD0F6 /* md5.cpp */,
                                F56C774D131EC154000AD0F6 /* md5.h */,
+                               188F76271522186C009870CE /* Mime.cpp */,
+                               188F76281522186C009870CE /* Mime.h */,
                                F56C774E131EC154000AD0F6 /* PCMAmplifier.cpp */,
                                F56C774F131EC154000AD0F6 /* PCMAmplifier.h */,
                                F56C7750131EC154000AD0F6 /* PCMRemap.cpp */,
                                F5AE40F41341751E0004BD79 /* FileItemHandler.h */,
                                F5AE40F51341751E0004BD79 /* FileOperations.cpp */,
                                F5AE40F61341751E0004BD79 /* FileOperations.h */,
+                               188F760E15221809009870CE /* GUIOperations.cpp */,
+                               188F760F15221809009870CE /* GUIOperations.h */,
                                F5AE40F71341751E0004BD79 /* IClient.h */,
+                               188F752615211773009870CE /* IJSONRPCAnnouncer.h */,
                                C807119D135DB842002F601B /* InputOperations.cpp */,
                                C807119E135DB842002F601B /* InputOperations.h */,
                                F5AE40F81341751E0004BD79 /* ITransportLayer.h */,
                                F5AE40F91341751E0004BD79 /* JSONRPC.cpp */,
                                F5AE40FA1341751E0004BD79 /* JSONRPC.h */,
+                               188F752715211780009870CE /* JSONRPCUtils.h */,
                                F5AE4539134D2E720004BD79 /* JSONServiceDescription.cpp */,
                                F5AE453A134D2E720004BD79 /* JSONServiceDescription.h */,
                                F5AE40FB1341751E0004BD79 /* JSONUtils.h */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/bash;
-                       shellScript = "#!/bin/bash\n\necho \"copy root files\"\n\nif [ \"$ACTION\" = build ] ; then\n\n# for external testing\nTARGET_NAME=$PRODUCT_NAME.$WRAPPER_EXTENSION\n#SRCROOT=/Users/Shared/xbmc_svn/XBMC\n#TARGET_BUILD_DIR=/Users/Shared/xbmc_svn/XBMC/build/Debug\n\n# rsync command with exclusions for items we don't want in the app package\nSYNC=\"rsync -aq --exclude .DS_Store* --exclude *.dll --exclude *.DLL --exclude *linux.* --exclude *x86-osx.* --exclude *.zlib --exclude *.a --exclude *.pyd --exclude *x86-osx.so --exclude *powerpc-osx.so\"\n\n# rsync command for excluding pngs and jpgs as well. Note that if the skin itself is not compiled\n# using XBMCTex then excluding the pngs and jpgs will most likely make the skin unusable \n#SYNCSKIN=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.* --exclude *.png --exclude *.jpg --exclude *.bat\"\nSYNCSKIN=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.*  --exclude *.bat\"\n\n# rsync command for including everything but the skins\nADDONSYNC=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude skin.confluence --exclude screensaver.rsxs* --exclude visualization.*\"\n\n# binary name is XBMC but we build XBMC.bin so to get a clean binary each time\nmv $TARGET_BUILD_DIR/$TARGET_NAME/XBMC.bin $TARGET_BUILD_DIR/$TARGET_NAME/XBMC\n\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/language\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/sounds\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/system\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/userdata\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/tools/osx\"\n\n${SYNC} \"$SRCROOT/LICENSE.GPL\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/\"\n${SYNC} \"$SRCROOT/xbmc/osx/Credits.html\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/\"\n#${SYNC} \"$SRCROOT/tools/osx\"\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/tools\"\n${ADDONSYNC} \"$SRCROOT/addons\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/addons/visualization.glspectrum\"   \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/visualization.waveform\"    \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/language\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/media\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNCSKIN} \"$SRCROOT/addons/skin.confluence\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/sounds\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/system\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/userdata\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n\n# copy extra packages if applicable\nif [ -d \"$SRCROOT/extras/system\" ]; then\n\t${SYNC} \"$SRCROOT/extras/system/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\nfi\n\n# copy extra user packages if applicable\nif [ -d \"$SRCROOT/extras/user\" ]; then\n\tmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Resources/XBMC/extras/user\"\n\t${SYNC} \"$SRCROOT/extras/user/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/extras/user\"\nfi\n\nfi";
+                       shellScript = "#!/bin/bash\n\necho \"copy root files\"\n\nif [ \"$ACTION\" = build ] ; then\n\n# for external testing\nTARGET_NAME=$PRODUCT_NAME.$WRAPPER_EXTENSION\n#SRCROOT=/Users/Shared/xbmc_svn/XBMC\n#TARGET_BUILD_DIR=/Users/Shared/xbmc_svn/XBMC/build/Debug\n\n# rsync command with exclusions for items we don't want in the app package\nSYNC=\"rsync -aq --exclude .DS_Store* --exclude *.dll --exclude *.DLL --exclude *linux.* --exclude *x86-osx.* --exclude *.zlib --exclude *.a --exclude *.pyd --exclude *x86-osx.so --exclude *powerpc-osx.so\"\n\n# rsync command for skins. jpg, png exclusion is handled during sync\n# if a Textures.xbt file is found \nSKINSYNC=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.*  --exclude *.bat\"\n\n# rsync command for including everything but the skins\nADDONSYNC=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude skin.confluence --exclude skin.touched --exclude screensaver.rsxs* --exclude visualization.*\"\n\n# binary name is XBMC but we build XBMC.bin so to get a clean binary each time\nmv $TARGET_BUILD_DIR/$TARGET_NAME/XBMC.bin $TARGET_BUILD_DIR/$TARGET_NAME/XBMC\n\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/language\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/sounds\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/system\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/userdata\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/tools/darwin/runtime\"\n\n${SYNC} \"$SRCROOT/LICENSE.GPL\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/\"\n${SYNC} \"$SRCROOT/xbmc/osx/Credits.html\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/\"\n${ADDONSYNC} \"$SRCROOT/addons\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/addons/visualization.glspectrum\"   \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/visualization.waveform\"    \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/language\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/media\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n\nSYNCSKIN_A=${SKINSYNC}\nif [ -f \"$SRCROOT/addons/skin.confluence/media/Textures.xbt\" ]; then\nSYNCSKIN_A=\"${SKINSYNC} --exclude *.png --exclude *.jpg\"\nfi\n${SYNCSKIN_A} \"$SRCROOT/addons/skin.confluence\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.confluence\"\n\n${SYNC} \"$SRCROOT/sounds\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/system\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/userdata\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n\nfi";
                        showEnvVarsInLog = 0;
                };
                F589B48D128A697C00D8079E /* copy frameworks */ = {
                                F5E1132814357B6500175026 /* GUIDialogPeripheralSettings.cpp in Sources */,
                                F5E1132914357B6500175026 /* Peripherals.cpp in Sources */,
                                F5E113AD1435882400175026 /* pyrendercapture.cpp in Sources */,
+                               DF673A251443769300A5A509 /* FileUPnP.cpp in Sources */,
+                               F5BD033A148D4923001B5583 /* CryptThreading.cpp in Sources */,
+                               7CCFD9AA1514952700211D82 /* PCMCodec.cpp in Sources */,
+                               DF527780151BAFD600B5B63B /* WebSocket.cpp in Sources */,
+                               DF527781151BAFD600B5B63B /* WebSocketManager.cpp in Sources */,
+                               DF527782151BAFD600B5B63B /* WebSocketV13.cpp in Sources */,
+                               DF527783151BAFD600B5B63B /* WebSocketV8.cpp in Sources */,
+                               DF527788151BAFEE00B5B63B /* Base64.cpp in Sources */,
+                               DF527789151BAFEE00B5B63B /* HttpResponse.cpp in Sources */,
+                               188F761015221809009870CE /* GUIOperations.cpp in Sources */,
+                               188F76291522186C009870CE /* Mime.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                        "\"$(SRCROOT)/lib/cmyth/librefmem\"",
                                        "\"$(SRCROOT)/lib/libapetag/.libs\"",
                                        "\"$(SRCROOT)/lib/libsquish\"",
-                                       "\"$(SRCROOT)/lib/jsoncpp/src/lib_json\"",
+                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                        "\"$(SRCROOT)/xbmc/interfaces/json-rpc\"",
                                        "\"$(SRCROOT)/xbmc/interfaces/http-api\"",
-                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                );
                                OTHER_LDFLAGS = (
                                        "-Wl,-headerpad_max_install_names",
                                        "-lpython2.6",
                                        "-lyajl",
                                        "-ljpeg",
+                                       "-lgcrypt",
+                                       "-lcrypto",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
                                );
                                        "\"$(SRCROOT)/lib/cmyth/librefmem\"",
                                        "\"$(SRCROOT)/lib/libapetag/.libs\"",
                                        "\"$(SRCROOT)/lib/libsquish\"",
-                                       "\"$(SRCROOT)/lib/jsoncpp/src/lib_json\"",
+                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                        "\"$(SRCROOT)/xbmc/interfaces/json-rpc\"",
                                        "\"$(SRCROOT)/xbmc/interfaces/http-api\"",
-                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                );
                                OTHER_LDFLAGS = (
                                        "-Wl,-headerpad_max_install_names",
                                        "-lpython2.6",
                                        "-lyajl",
                                        "-ljpeg",
+                                       "-lgcrypt",
+                                       "-lcrypto",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
                                );
index bb66183..df87251 100644 (file)
@@ -12,6 +12,8 @@
                18404DD61396C3F300863BBA /* Slingbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18404DD41396C3F300863BBA /* Slingbox.cpp */; };
                1840B77A1399616D007C848B /* JSONVariantParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1840B7761399616D007C848B /* JSONVariantParser.cpp */; };
                1840B77B1399616D007C848B /* JSONVariantWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1840B7781399616D007C848B /* JSONVariantWriter.cpp */; };
+               188F761E1522182F009870CE /* GUIOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188F761C1522182F009870CE /* GUIOperations.cpp */; };
+               188F76211522184E009870CE /* Mime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188F761F1522184E009870CE /* Mime.cpp */; };
                18968DDE14155E01005BA742 /* ApplicationOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18968DDC14155E01005BA742 /* ApplicationOperations.cpp */; };
                18ACF8FD13597B5700B67371 /* RecentlyAddedJob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18ACF8FB13597B5700B67371 /* RecentlyAddedJob.cpp */; };
                18B700F613A6A7850009C1AF /* AddonVersion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B700F413A6A7850009C1AF /* AddonVersion.cpp */; };
@@ -26,6 +28,7 @@
                7C89628013B7031E003631FE /* GUIWindowScreensaverDim.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C89627E13B7031E003631FE /* GUIWindowScreensaverDim.cpp */; };
                7C99B6E9133D36E200FC2B16 /* CacheCircular.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C99B6E7133D36E200FC2B16 /* CacheCircular.cpp */; };
                7C99B7BE1340730000FC2B16 /* GUIDialogPlayEject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C99B7BC1340730000FC2B16 /* GUIDialogPlayEject.cpp */; };
+               7CCFD9991514950700211D82 /* PCMCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CCFD9971514950700211D82 /* PCMCodec.cpp */; };
                7CEE2E7F13D6B7D4000ABF2A /* TimeSmoother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CEE2E7D13D6B7D4000ABF2A /* TimeSmoother.cpp */; };
                C80711AD135DB85F002F601B /* InputOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C80711AB135DB85F002F601B /* InputOperations.cpp */; };
                C8EC5D26136953E100CCC10D /* XBMC_keytable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C8EC5D24136953E100CCC10D /* XBMC_keytable.cpp */; };
                DF448571140065E10069344B /* FilePipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF44856D140065E10069344B /* FilePipe.cpp */; };
                DF448572140065E10069344B /* PipesManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF44856F140065E10069344B /* PipesManager.cpp */; };
                DF4485751400662D0069344B /* AirTunesServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF4485731400662D0069344B /* AirTunesServer.cpp */; };
+               DF527757151BAF8200B5B63B /* WebSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52774E151BAF8200B5B63B /* WebSocket.cpp */; };
+               DF527758151BAF8200B5B63B /* WebSocketManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527750151BAF8200B5B63B /* WebSocketManager.cpp */; };
+               DF527759151BAF8200B5B63B /* WebSocketV13.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527752151BAF8200B5B63B /* WebSocketV13.cpp */; };
+               DF52775A151BAF8200B5B63B /* WebSocketV8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527754151BAF8200B5B63B /* WebSocketV8.cpp */; };
+               DF527760151BAFA000B5B63B /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52775C151BAFA000B5B63B /* Base64.cpp */; };
+               DF527761151BAFA000B5B63B /* HttpResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52775E151BAFA000B5B63B /* HttpResponse.cpp */; };
+               DF6739E21443765F00A5A509 /* FileUPnP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF6739E01443765F00A5A509 /* FileUPnP.cpp */; };
                DF98D9991434F49500A6EBE1 /* SkinVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF98D9971434F49500A6EBE1 /* SkinVariable.cpp */; };
                DFA6BE4313FECA010048CC11 /* AirPlayServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFA6BE4113FECA010048CC11 /* AirPlayServer.cpp */; };
                DFA6BE7713FED09C0048CC11 /* HttpParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFA6BE7513FED09C0048CC11 /* HttpParser.cpp */; };
                F5AE4166134175520004BD79 /* XBMCOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5AE4159134175520004BD79 /* XBMCOperations.cpp */; };
                F5AE4530134D2E3E0004BD79 /* JSONServiceDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5AE452E134D2E3E0004BD79 /* JSONServiceDescription.cpp */; };
                F5B13DCF1334490D0045076D /* DarwinUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5B13DCE1334490D0045076D /* DarwinUtils.mm */; };
+               F5BD034F148D496A001B5583 /* CryptThreading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5BD034D148D496A001B5583 /* CryptThreading.cpp */; };
                F5CEE73013D3F9D100225F72 /* DVDOverlayCodecTX3G.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5CEE72F13D3F9D100225F72 /* DVDOverlayCodecTX3G.cpp */; };
                F5E1127B14356C4600175026 /* pyrendercapture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5E1127A14356C4600175026 /* pyrendercapture.cpp */; };
                F5E112DB143577A000175026 /* PeripheralBusUSB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5E112B2143577A000175026 /* PeripheralBusUSB.cpp */; };
                1840B7771399616D007C848B /* JSONVariantParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONVariantParser.h; sourceTree = "<group>"; };
                1840B7781399616D007C848B /* JSONVariantWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSONVariantWriter.cpp; sourceTree = "<group>"; };
                1840B7791399616D007C848B /* JSONVariantWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONVariantWriter.h; sourceTree = "<group>"; };
+               188F7535152117AA009870CE /* IJSONRPCAnnouncer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IJSONRPCAnnouncer.h; sourceTree = "<group>"; };
+               188F7536152117B2009870CE /* JSONRPCUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONRPCUtils.h; sourceTree = "<group>"; };
+               188F761C1522182F009870CE /* GUIOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIOperations.cpp; sourceTree = "<group>"; };
+               188F761D1522182F009870CE /* GUIOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIOperations.h; sourceTree = "<group>"; };
+               188F761F1522184E009870CE /* Mime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mime.cpp; sourceTree = "<group>"; };
+               188F76201522184E009870CE /* Mime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mime.h; sourceTree = "<group>"; };
                18968DDC14155E01005BA742 /* ApplicationOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationOperations.cpp; sourceTree = "<group>"; };
                18968DDD14155E01005BA742 /* ApplicationOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationOperations.h; sourceTree = "<group>"; };
                18ACF8FB13597B5700B67371 /* RecentlyAddedJob.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RecentlyAddedJob.cpp; sourceTree = "<group>"; };
                7C99B6E8133D36E200FC2B16 /* CacheCircular.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CacheCircular.h; sourceTree = "<group>"; };
                7C99B7BC1340730000FC2B16 /* GUIDialogPlayEject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIDialogPlayEject.cpp; sourceTree = "<group>"; };
                7C99B7BD1340730000FC2B16 /* GUIDialogPlayEject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIDialogPlayEject.h; sourceTree = "<group>"; };
+               7CCFD9971514950700211D82 /* PCMCodec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PCMCodec.cpp; sourceTree = "<group>"; };
+               7CCFD9981514950700211D82 /* PCMCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PCMCodec.h; sourceTree = "<group>"; };
                7CEE2E7D13D6B7D4000ABF2A /* TimeSmoother.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeSmoother.cpp; sourceTree = "<group>"; };
                7CEE2E7E13D6B7D4000ABF2A /* TimeSmoother.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeSmoother.h; sourceTree = "<group>"; };
                83D619BB13C0D25300418A0F /* README.ios */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.ios; sourceTree = "<group>"; };
                8D576316048677EA00EA77CD /* XBMC.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XBMC.app; sourceTree = BUILT_PRODUCTS_DIR; };
                C80711AB135DB85F002F601B /* InputOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputOperations.cpp; sourceTree = "<group>"; };
                C80711AC135DB85F002F601B /* InputOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputOperations.h; sourceTree = "<group>"; };
-               C80711AE135DB865002F601B /* AnnouncementUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnnouncementUtils.h; sourceTree = "<group>"; };
                C8EC5D24136953E100CCC10D /* XBMC_keytable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XBMC_keytable.cpp; sourceTree = "<group>"; };
                C8EC5D25136953E100CCC10D /* XBMC_keytable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XBMC_keytable.h; sourceTree = "<group>"; };
                DF0DF17B13A3AF9F008ED511 /* FileNFS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileNFS.cpp; sourceTree = "<group>"; };
                DF448570140065E10069344B /* PipesManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PipesManager.h; sourceTree = "<group>"; };
                DF4485731400662D0069344B /* AirTunesServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AirTunesServer.cpp; sourceTree = "<group>"; };
                DF4485741400662D0069344B /* AirTunesServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AirTunesServer.h; sourceTree = "<group>"; };
+               DF52774E151BAF8200B5B63B /* WebSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocket.cpp; sourceTree = "<group>"; };
+               DF52774F151BAF8200B5B63B /* WebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocket.h; sourceTree = "<group>"; };
+               DF527750151BAF8200B5B63B /* WebSocketManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketManager.cpp; sourceTree = "<group>"; };
+               DF527751151BAF8200B5B63B /* WebSocketManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketManager.h; sourceTree = "<group>"; };
+               DF527752151BAF8200B5B63B /* WebSocketV13.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketV13.cpp; sourceTree = "<group>"; };
+               DF527753151BAF8200B5B63B /* WebSocketV13.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketV13.h; sourceTree = "<group>"; };
+               DF527754151BAF8200B5B63B /* WebSocketV8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketV8.cpp; sourceTree = "<group>"; };
+               DF527755151BAF8200B5B63B /* WebSocketV8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketV8.h; sourceTree = "<group>"; };
+               DF52775C151BAFA000B5B63B /* Base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Base64.cpp; sourceTree = "<group>"; };
+               DF52775D151BAFA000B5B63B /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = "<group>"; };
+               DF52775E151BAFA000B5B63B /* HttpResponse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HttpResponse.cpp; sourceTree = "<group>"; };
+               DF52775F151BAFA000B5B63B /* HttpResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpResponse.h; sourceTree = "<group>"; };
+               DF6739E01443765F00A5A509 /* FileUPnP.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileUPnP.cpp; sourceTree = "<group>"; };
+               DF6739E11443765F00A5A509 /* FileUPnP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileUPnP.h; sourceTree = "<group>"; };
                DF98D9971434F49500A6EBE1 /* SkinVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkinVariable.cpp; sourceTree = "<group>"; };
                DF98D9981434F49500A6EBE1 /* SkinVariable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkinVariable.h; sourceTree = "<group>"; };
                DFA6BE4113FECA010048CC11 /* AirPlayServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AirPlayServer.cpp; sourceTree = "<group>"; };
                F5AE539813673FC70004BD79 /* IOSAudioRingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IOSAudioRingBuffer.h; path = AudioRenderers/IOSAudioRingBuffer.h; sourceTree = "<group>"; };
                F5B13DCD1334490D0045076D /* DarwinUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DarwinUtils.h; sourceTree = "<group>"; };
                F5B13DCE1334490D0045076D /* DarwinUtils.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DarwinUtils.mm; sourceTree = "<group>"; };
+               F5BD034D148D496A001B5583 /* CryptThreading.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptThreading.cpp; sourceTree = "<group>"; };
+               F5BD034E148D496A001B5583 /* CryptThreading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptThreading.h; sourceTree = "<group>"; };
                F5CEE72F13D3F9D100225F72 /* DVDOverlayCodecTX3G.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDOverlayCodecTX3G.cpp; sourceTree = "<group>"; };
                F5CEE73113D3F9D800225F72 /* DVDOverlayCodecTX3G.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVDOverlayCodecTX3G.h; sourceTree = "<group>"; };
                F5E1127A14356C4600175026 /* pyrendercapture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pyrendercapture.cpp; sourceTree = "<group>"; };
                        name = Documentation;
                        sourceTree = "<group>";
                };
+               DF52774C151BAF8200B5B63B /* websocket */ = {
+                       isa = PBXGroup;
+                       children = (
+                               DF52774E151BAF8200B5B63B /* WebSocket.cpp */,
+                               DF52774F151BAF8200B5B63B /* WebSocket.h */,
+                               DF527750151BAF8200B5B63B /* WebSocketManager.cpp */,
+                               DF527751151BAF8200B5B63B /* WebSocketManager.h */,
+                               DF527752151BAF8200B5B63B /* WebSocketV13.cpp */,
+                               DF527753151BAF8200B5B63B /* WebSocketV13.h */,
+                               DF527754151BAF8200B5B63B /* WebSocketV8.cpp */,
+                               DF527755151BAF8200B5B63B /* WebSocketV8.h */,
+                       );
+                       path = websocket;
+                       sourceTree = "<group>";
+               };
                DFD4D1D013D725ED00A47C47 /* platform */ = {
                        isa = PBXGroup;
                        children = (
                                F56C8323131F42E7000AD0F6 /* OGGcodec.h */,
                                F56C8324131F42E7000AD0F6 /* PAPlayer.cpp */,
                                F56C8325131F42E7000AD0F6 /* PAPlayer.h */,
+                               7CCFD9971514950700211D82 /* PCMCodec.cpp */,
+                               7CCFD9981514950700211D82 /* PCMCodec.h */,
                                F56C8326131F42E7000AD0F6 /* ReplayGain.cpp */,
                                F56C8327131F42E7000AD0F6 /* ReplayGain.h */,
                                F56C8328131F42E7000AD0F6 /* SIDCodec.cpp */,
                                F56C83C6131F42E8000AD0F6 /* FileTuxBox.h */,
                                F56C83C7131F42E8000AD0F6 /* FileUDF.cpp */,
                                F56C83C8131F42E8000AD0F6 /* FileUDF.h */,
+                               DF6739E01443765F00A5A509 /* FileUPnP.cpp */,
+                               DF6739E11443765F00A5A509 /* FileUPnP.h */,
                                F56C83CB131F42E8000AD0F6 /* FileZip.cpp */,
                                F56C83CC131F42E8000AD0F6 /* FileZip.h */,
                                F56C83CD131F42E8000AD0F6 /* FTPDirectory.cpp */,
                                F56C8547131F42E9000AD0F6 /* python */,
                                F56C8586131F42EA000AD0F6 /* AnnouncementManager.cpp */,
                                F56C8587131F42EA000AD0F6 /* AnnouncementManager.h */,
-                               C80711AE135DB865002F601B /* AnnouncementUtils.h */,
                                F56C8588131F42EA000AD0F6 /* Builtins.cpp */,
                                F56C8589131F42EA000AD0F6 /* Builtins.h */,
                                F56C858A131F42EA000AD0F6 /* IAnnouncer.h */,
                                F56C862B131F42EA000AD0F6 /* libscrobbler */,
                                F56C8633131F42EA000AD0F6 /* linux */,
                                F56C8636131F42EA000AD0F6 /* osx */,
+                               DF52774C151BAF8200B5B63B /* websocket */,
                                DFA6BE4113FECA010048CC11 /* AirPlayServer.cpp */,
                                DFA6BE4213FECA010048CC11 /* AirPlayServer.h */,
                                DF4485731400662D0069344B /* AirTunesServer.cpp */,
                                F56C8713131F42EC000AD0F6 /* AsyncFileCopy.h */,
                                F56C8714131F42EC000AD0F6 /* AutoPtrHandle.cpp */,
                                F56C8715131F42EC000AD0F6 /* AutoPtrHandle.h */,
+                               DF52775C151BAFA000B5B63B /* Base64.cpp */,
+                               DF52775D151BAFA000B5B63B /* Base64.h */,
                                F56C8716131F42EC000AD0F6 /* BitstreamStats.cpp */,
                                F56C8717131F42EC000AD0F6 /* BitstreamStats.h */,
                                F56C8718131F42EC000AD0F6 /* CharsetConverter.cpp */,
                                F56C871B131F42EC000AD0F6 /* CPUInfo.h */,
                                F56C8705131F42EB000AD0F6 /* Crc32.cpp */,
                                F56C8706131F42EB000AD0F6 /* Crc32.h */,
+                               F5BD034D148D496A001B5583 /* CryptThreading.cpp */,
+                               F5BD034E148D496A001B5583 /* CryptThreading.h */,
                                F56C871C131F42EC000AD0F6 /* DownloadQueue.cpp */,
                                F56C871D131F42EC000AD0F6 /* DownloadQueue.h */,
                                F56C871E131F42EC000AD0F6 /* DownloadQueueManager.cpp */,
                                F56C872F131F42EC000AD0F6 /* HttpHeader.h */,
                                DFA6BE7513FED09C0048CC11 /* HttpParser.cpp */,
                                DFA6BE7613FED09C0048CC11 /* HttpParser.h */,
+                               DF52775E151BAFA000B5B63B /* HttpResponse.cpp */,
+                               DF52775F151BAFA000B5B63B /* HttpResponse.h */,
                                F56C8730131F42EC000AD0F6 /* InfoLoader.cpp */,
                                F56C8731131F42EC000AD0F6 /* InfoLoader.h */,
                                F56C8736131F42EC000AD0F6 /* Job.h */,
                                F56C86FE131F42EB000AD0F6 /* MathUtils.h */,
                                F56C873B131F42EC000AD0F6 /* md5.cpp */,
                                F56C873C131F42EC000AD0F6 /* md5.h */,
+                               188F761F1522184E009870CE /* Mime.cpp */,
+                               188F76201522184E009870CE /* Mime.h */,
                                F56C873D131F42EC000AD0F6 /* PCMAmplifier.cpp */,
                                F56C873E131F42EC000AD0F6 /* PCMAmplifier.h */,
                                F56C873F131F42EC000AD0F6 /* PCMRemap.cpp */,
                                F5AE4147134175520004BD79 /* FileItemHandler.h */,
                                F5AE4148134175520004BD79 /* FileOperations.cpp */,
                                F5AE4149134175520004BD79 /* FileOperations.h */,
+                               188F761C1522182F009870CE /* GUIOperations.cpp */,
+                               188F761D1522182F009870CE /* GUIOperations.h */,
                                F5AE414A134175520004BD79 /* IClient.h */,
+                               188F7535152117AA009870CE /* IJSONRPCAnnouncer.h */,
                                C80711AB135DB85F002F601B /* InputOperations.cpp */,
                                C80711AC135DB85F002F601B /* InputOperations.h */,
                                F5AE414B134175520004BD79 /* ITransportLayer.h */,
                                F5AE414C134175520004BD79 /* JSONRPC.cpp */,
                                F5AE414D134175520004BD79 /* JSONRPC.h */,
+                               188F7536152117B2009870CE /* JSONRPCUtils.h */,
                                F5AE452E134D2E3E0004BD79 /* JSONServiceDescription.cpp */,
                                F5AE452F134D2E3E0004BD79 /* JSONServiceDescription.h */,
                                F5AE414E134175520004BD79 /* JSONUtils.h */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/bash;
-                       shellScript = "#!/bin/bash\n\necho \"copy root files\"\n\nif [ \"$ACTION\" = build ] ; then\n\n# for external testing\nTARGET_NAME=$PRODUCT_NAME.$WRAPPER_EXTENSION\n#SRCROOT=/Users/Shared/xbmc_svn/XBMC\n#TARGET_BUILD_DIR=/Users/Shared/xbmc_svn/XBMC/build/Debug\n\n# rsync command with exclusions for items we don't want in the app package\nSYNC=\"rsync -aq --exclude .DS_Store* --exclude *.dll --exclude *.DLL --exclude *linux.* --exclude *x86-osx.so --exclude *.zlib --exclude *.a\"\n\n# rsync command for excluding pngs and jpgs as well. Note that if the skin itself is not compiled\n# using XBMCTex then excluding the pngs and jpgs will most likely make the skin unusable \n#SYNCSKIN=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.* --exclude *.png --exclude *.jpg --exclude *.bat\"\nSYNCSKIN=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.*  --exclude *.bat\"\n\n# rsync command for including everything but the skins\nADDONSYNC=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude skin.confluence --exclude screensaver.rsxs* --exclude visualization.*\"\n\n# binary name is XBMC but we build XBMC.bin so to get a clean binary each time\nmv $TARGET_BUILD_DIR/$TARGET_NAME/XBMC.bin $TARGET_BUILD_DIR/$TARGET_NAME/XBMC\n\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/language\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/sounds\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/system\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/userdata\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/tools/osx\"\n\n${SYNC} \"$SRCROOT/LICENSE.GPL\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/\"\n${SYNC} \"$SRCROOT/xbmc/osx/Credits.html\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/\"\n${ADDONSYNC} \"$SRCROOT/addons\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/addons/visualization.glspectrum\"  \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/visualization.waveform\"    \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/language\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/media\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNCSKIN} \"$SRCROOT/addons/skin.touched\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/skin.touched/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.touched\"\n${SYNC} \"$SRCROOT/addons/skin.touched/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.touched\"\n${SYNCSKIN} \"$SRCROOT/addons/skin.confluence\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/sounds\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/system\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/userdata\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n\n# copy extra packages if applicable\nif [ -d \"$SRCROOT/extras/system\" ]; then\n\t${SYNC} \"$SRCROOT/extras/system/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\nfi\n\n# copy extra user packages if applicable\nif [ -d \"$SRCROOT/extras/user\" ]; then\n\tmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Resources/XBMC/extras/user\"\n\t${SYNC} \"$SRCROOT/extras/user/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/extras/user\"\nfi\n\nfi";
+                       shellScript = "#!/bin/bash\n\necho \"copy root files\"\n\nif [ \"$ACTION\" = build ] ; then\n\n# for external testing\nTARGET_NAME=$PRODUCT_NAME.$WRAPPER_EXTENSION\n#SRCROOT=/Users/Shared/xbmc_svn/XBMC\n#TARGET_BUILD_DIR=/Users/Shared/xbmc_svn/XBMC/build/Debug\n\n# rsync command with exclusions for items we don't want in the app package\nSYNC=\"rsync -aq --exclude .DS_Store* --exclude *.dll --exclude *.DLL --exclude *linux.* --exclude *x86-osx.so --exclude *.zlib --exclude *.a\"\n\n# rsync command for skins. jpg, png exclusion is handled during sync\n# if a Textures.xbt file is found \nSKINSYNC=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.*  --exclude *.bat\"\n\n# rsync command for including everything but the skins\nADDONSYNC=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude skin.confluence --exclude skin.touched --exclude screensaver.rsxs* --exclude visualization.*\"\n\n# binary name is XBMC but we build XBMC.bin so to get a clean binary each time\nmv $TARGET_BUILD_DIR/$TARGET_NAME/XBMC.bin $TARGET_BUILD_DIR/$TARGET_NAME/XBMC\n\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/language\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/sounds\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/system\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/userdata\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/tools/darwin/runtime\"\n\n${SYNC} \"$SRCROOT/LICENSE.GPL\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/\"\n${SYNC} \"$SRCROOT/xbmc/osx/Credits.html\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/\"\n${ADDONSYNC} \"$SRCROOT/addons\"\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/addons/visualization.glspectrum\"  \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/visualization.waveform\"    \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/language\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/media\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n\n# sync skin.touched if it exists\nif [ -f \"$SRCROOT/addons/skin.touched/addon.xml\" ]; then\nSYNCSKIN_A=${SKINSYNC}\nif [ -f \"$SRCROOT/addons/skin.touched/media/Textures.xbt\" ]; then\nSYNCSKIN_A=\"${SKINSYNC} --exclude *.png --exclude *.jpg\"\nfi\n${SYNCSKIN_A} \"$SRCROOT/addons/skin.touched\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/skin.touched/background\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.touched\"\n${SYNC} \"$SRCROOT/addons/skin.touched/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.touched\"\nfi\n\n# sync skin.confluence\nSYNCSKIN_B=${SKINSYNC}\nif [ -f \"$SRCROOT/addons/skin.confluence/media/Textures.xbt\" ]; then\nSYNCSKIN_B=\"${SKINSYNC} --exclude *.png --exclude *.jpg\"\nfi\n${SYNCSKIN_B} \"$SRCROOT/addons/skin.confluence\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/icon.png\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome/addons/skin.confluence\"\n\n${SYNC} \"$SRCROOT/sounds\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/system\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n${SYNC} \"$SRCROOT/userdata\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/XBMCData/XBMCHome\"\n\nfi";
                        showEnvVarsInLog = 0;
                };
                F589B48D128A697C00D8079E /* copy frameworks */ = {
                                F5E112E8143577A000175026 /* GUIDialogPeripheralManager.cpp in Sources */,
                                F5E112E9143577A000175026 /* GUIDialogPeripheralSettings.cpp in Sources */,
                                F5E112EC143577A000175026 /* Peripherals.cpp in Sources */,
+                               DF6739E21443765F00A5A509 /* FileUPnP.cpp in Sources */,
+                               F5BD034F148D496A001B5583 /* CryptThreading.cpp in Sources */,
+                               7CCFD9991514950700211D82 /* PCMCodec.cpp in Sources */,
+                               DF527757151BAF8200B5B63B /* WebSocket.cpp in Sources */,
+                               DF527758151BAF8200B5B63B /* WebSocketManager.cpp in Sources */,
+                               DF527759151BAF8200B5B63B /* WebSocketV13.cpp in Sources */,
+                               DF52775A151BAF8200B5B63B /* WebSocketV8.cpp in Sources */,
+                               DF527760151BAFA000B5B63B /* Base64.cpp in Sources */,
+                               DF527761151BAFA000B5B63B /* HttpResponse.cpp in Sources */,
+                               188F761E1522182F009870CE /* GUIOperations.cpp in Sources */,
+                               188F76211522184E009870CE /* Mime.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                        "\"$(SRCROOT)/lib/cmyth/librefmem\"",
                                        "\"$(SRCROOT)/lib/libapetag/.libs\"",
                                        "\"$(SRCROOT)/lib/libsquish\"",
-                                       "\"$(SRCROOT)/lib/jsoncpp/src/lib_json\"",
+                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                        "\"$(SRCROOT)/xbmc/interfaces/http-api\"",
                                        "\"$(SRCROOT)/xbmc/interfaces/json-rpc\"",
-                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                );
                                OTHER_LDFLAGS = (
                                        "-Wl,-headerpad_max_install_names",
                                        "-lpython2.6",
                                        "-lyajl",
                                        "-ljpeg",
+                                       "-lcrypto",
+                                       "-lgcrypt",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
                                );
                                        "\"$(SRCROOT)/lib/cmyth/librefmem\"",
                                        "\"$(SRCROOT)/lib/libapetag/.libs\"",
                                        "\"$(SRCROOT)/lib/libsquish\"",
-                                       "\"$(SRCROOT)/lib/jsoncpp/src/lib_json\"",
+                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                        "\"$(SRCROOT)/xbmc/interfaces/http-api\"",
                                        "\"$(SRCROOT)/xbmc/interfaces/json-rpc\"",
-                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                );
                                OTHER_LDFLAGS = (
                                        "-Wl,-headerpad_max_install_names",
                                        "-lpython2.6",
                                        "-lyajl",
                                        "-ljpeg",
+                                       "-lcrypto",
+                                       "-lgcrypt",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
                                );
index 9f36f8f..d86b156 100644 (file)
                1840B75413993DA0007C848B /* JSONVariantWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1840B75113993DA0007C848B /* JSONVariantWriter.cpp */; };
                184C472F1296BC6E0006DB3E /* Service.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 184C472D1296BC6E0006DB3E /* Service.cpp */; };
                184C47301296BC6E0006DB3E /* Service.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 184C472D1296BC6E0006DB3E /* Service.cpp */; };
+               188F75FE152217BC009870CE /* Mime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188F75FC152217BC009870CE /* Mime.cpp */; };
+               188F75FF152217BC009870CE /* Mime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188F75FC152217BC009870CE /* Mime.cpp */; };
+               188F7602152217DF009870CE /* GUIOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188F7600152217DF009870CE /* GUIOperations.cpp */; };
+               188F7603152217DF009870CE /* GUIOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188F7600152217DF009870CE /* GUIOperations.cpp */; };
                18968DC814155D7C005BA742 /* ApplicationOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18968DC614155D7C005BA742 /* ApplicationOperations.cpp */; };
                18968DC914155D7C005BA742 /* ApplicationOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18968DC614155D7C005BA742 /* ApplicationOperations.cpp */; };
                18ACF84313596C9B00B67371 /* RecentlyAddedJob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18ACF84113596C9B00B67371 /* RecentlyAddedJob.cpp */; };
                18B4A0021152BFA5001AF8A6 /* Addon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B49FF11152BFA5001AF8A6 /* Addon.cpp */; };
-               18B4A0031152BFA5001AF8A6 /* AddonManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B49FF41152BFA5001AF8A6 /* AddonManager.cpp */; };
                18B4A0041152BFA5001AF8A6 /* fft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B49FF91152BFA5001AF8A6 /* fft.cpp */; };
                18B4A0051152BFA5001AF8A6 /* Scraper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B49FFC1152BFA5001AF8A6 /* Scraper.cpp */; };
                18B4A0061152BFA5001AF8A6 /* ScreenSaver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B49FFE1152BFA5001AF8A6 /* ScreenSaver.cpp */; };
                7CCF7F1E1069F3AE00992676 /* Builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CCF7F1B1069F3AE00992676 /* Builtins.cpp */; };
                7CCF7FC9106A0DF500992676 /* TimeUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CCF7FC7106A0DF500992676 /* TimeUtils.cpp */; };
                7CCF7FCA106A0DF500992676 /* TimeUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CCF7FC7106A0DF500992676 /* TimeUtils.cpp */; };
+               7CCFD98C151494E100211D82 /* PCMCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CCFD98A151494E100211D82 /* PCMCodec.cpp */; };
+               7CCFD98D151494E100211D82 /* PCMCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CCFD98A151494E100211D82 /* PCMCodec.cpp */; };
                7CD2C3AA11940B270009EFC1 /* DirectoryNodeCountry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CD2C3A811940B270009EFC1 /* DirectoryNodeCountry.cpp */; };
                7CD2C3AB11940B270009EFC1 /* DirectoryNodeCountry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CD2C3A811940B270009EFC1 /* DirectoryNodeCountry.cpp */; };
                7CD2CD0111B38B000009EFC1 /* PythonAddon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CD2CCFE11B38B000009EFC1 /* PythonAddon.cpp */; };
                DF448460140048C80069344B /* PipesManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF44845B140048C80069344B /* PipesManager.cpp */; };
                DF4484EE140054530069344B /* BXAcodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF4484EC140054530069344B /* BXAcodec.cpp */; };
                DF4484EF140054530069344B /* BXAcodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF4484EC140054530069344B /* BXAcodec.cpp */; };
+               DF5276E1151BAEDA00B5B63B /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52769A151BAEDA00B5B63B /* Base64.cpp */; };
+               DF5276E2151BAEDA00B5B63B /* HttpResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52769C151BAEDA00B5B63B /* HttpResponse.cpp */; };
+               DF527726151BAEDA00B5B63B /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52769A151BAEDA00B5B63B /* Base64.cpp */; };
+               DF527727151BAEDA00B5B63B /* HttpResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52769C151BAEDA00B5B63B /* HttpResponse.cpp */; };
+               DF527734151BAF4C00B5B63B /* WebSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52772B151BAF4C00B5B63B /* WebSocket.cpp */; };
+               DF527735151BAF4C00B5B63B /* WebSocketManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52772D151BAF4C00B5B63B /* WebSocketManager.cpp */; };
+               DF527736151BAF4C00B5B63B /* WebSocketV13.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52772F151BAF4C00B5B63B /* WebSocketV13.cpp */; };
+               DF527737151BAF4C00B5B63B /* WebSocketV8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527731151BAF4C00B5B63B /* WebSocketV8.cpp */; };
+               DF527739151BAF4C00B5B63B /* WebSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52772B151BAF4C00B5B63B /* WebSocket.cpp */; };
+               DF52773A151BAF4C00B5B63B /* WebSocketManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52772D151BAF4C00B5B63B /* WebSocketManager.cpp */; };
+               DF52773B151BAF4C00B5B63B /* WebSocketV13.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF52772F151BAF4C00B5B63B /* WebSocketV13.cpp */; };
+               DF52773C151BAF4C00B5B63B /* WebSocketV8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF527731151BAF4C00B5B63B /* WebSocketV8.cpp */; };
+               DF673AA51443819600A5A509 /* AddonManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B49FF41152BFA5001AF8A6 /* AddonManager.cpp */; };
+               DF85BAB51443669A000686BE /* FileUPnP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF85BAB41443669A000686BE /* FileUPnP.cpp */; };
+               DF85BAB61443669A000686BE /* FileUPnP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF85BAB41443669A000686BE /* FileUPnP.cpp */; };
                DF98D98C1434F47D00A6EBE1 /* SkinVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF98D98A1434F47D00A6EBE1 /* SkinVariable.cpp */; };
                DF98D98D1434F47D00A6EBE1 /* SkinVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF98D98A1434F47D00A6EBE1 /* SkinVariable.cpp */; };
                DFAB049813F8376700B70BFB /* InertialScrollingHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAB049613F8376700B70BFB /* InertialScrollingHandler.cpp */; };
                DFAB049913F8376700B70BFB /* InertialScrollingHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAB049613F8376700B70BFB /* InertialScrollingHandler.cpp */; };
+               DFC1B8F01464840E00B1BE79 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFC1B8EF1464840E00B1BE79 /* SystemConfiguration.framework */; };
+               DFC1BA3414648D6500B1BE79 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFC1B8EF1464840E00B1BE79 /* SystemConfiguration.framework */; };
                E306D12E0DDF7B590052C2AD /* XBMCHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E306D12C0DDF7B590052C2AD /* XBMCHelper.cpp */; };
                E33206380D5070AA00435CE3 /* DVDDemuxVobsub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E33206370D5070AA00435CE3 /* DVDDemuxVobsub.cpp */; };
                E33466A60D2E5103005A65EC /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E33466A50D2E5103005A65EC /* IOKit.framework */; };
                F5B5D64D133FC2C1007A4B4C /* libsquish.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 43352CED1071634600706B8A /* libsquish.a */; };
                F5B5D64E133FC2E7007A4B4C /* librtv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E38E256C0D263A1C00618676 /* librtv.a */; };
                F5B5D650133FC312007A4B4C /* libxdaap.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E38E25680D2639F100618676 /* libxdaap.a */; };
+               F5BD02F6148D3A7E001B5583 /* CryptThreading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5BD02F4148D3A7E001B5583 /* CryptThreading.cpp */; };
+               F5BD02F7148D3A7E001B5583 /* CryptThreading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5BD02F4148D3A7E001B5583 /* CryptThreading.cpp */; };
                F5BDB80C120202F400F0B710 /* DVDSubtitleTagSami.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5BDB80B120202F400F0B710 /* DVDSubtitleTagSami.cpp */; };
                F5BDB80D120202F400F0B710 /* DVDSubtitleTagSami.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5BDB80B120202F400F0B710 /* DVDSubtitleTagSami.cpp */; };
                F5BDB81A1202032400F0B710 /* DVDSubtitleTagMicroDVD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5BDB8191202032400F0B710 /* DVDSubtitleTagMicroDVD.cpp */; };
                1840B75213993DA0007C848B /* JSONVariantWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONVariantWriter.h; sourceTree = "<group>"; };
                184C472D1296BC6E0006DB3E /* Service.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Service.cpp; sourceTree = "<group>"; };
                184C472E1296BC6E0006DB3E /* Service.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Service.h; sourceTree = "<group>"; };
+               188F751815211733009870CE /* IJSONRPCAnnouncer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IJSONRPCAnnouncer.h; sourceTree = "<group>"; };
+               188F751915211743009870CE /* JSONRPCUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONRPCUtils.h; sourceTree = "<group>"; };
+               188F75FC152217BC009870CE /* Mime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mime.cpp; sourceTree = "<group>"; };
+               188F75FD152217BC009870CE /* Mime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mime.h; sourceTree = "<group>"; };
+               188F7600152217DF009870CE /* GUIOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIOperations.cpp; sourceTree = "<group>"; };
+               188F7601152217DF009870CE /* GUIOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIOperations.h; sourceTree = "<group>"; };
                189047D11301DEAB00C11012 /* xbmcvfsmodule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xbmcvfsmodule.cpp; sourceTree = "<group>"; };
                18968DC614155D7C005BA742 /* ApplicationOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationOperations.cpp; sourceTree = "<group>"; };
                18968DC714155D7C005BA742 /* ApplicationOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationOperations.h; sourceTree = "<group>"; };
                7CCF7F1C1069F3AE00992676 /* Builtins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Builtins.h; sourceTree = "<group>"; };
                7CCF7FC7106A0DF500992676 /* TimeUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeUtils.cpp; sourceTree = "<group>"; };
                7CCF7FC8106A0DF500992676 /* TimeUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeUtils.h; sourceTree = "<group>"; };
+               7CCFD98A151494E100211D82 /* PCMCodec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PCMCodec.cpp; sourceTree = "<group>"; };
+               7CCFD98B151494E100211D82 /* PCMCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PCMCodec.h; sourceTree = "<group>"; };
                7CD2C3A811940B270009EFC1 /* DirectoryNodeCountry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryNodeCountry.cpp; sourceTree = "<group>"; };
                7CD2C3A911940B270009EFC1 /* DirectoryNodeCountry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryNodeCountry.h; sourceTree = "<group>"; };
                7CD2CCFE11B38B000009EFC1 /* PythonAddon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PythonAddon.cpp; sourceTree = "<group>"; };
                88ECB6580DE013C4003396A7 /* DiskArbitration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiskArbitration.framework; path = /System/Library/Frameworks/DiskArbitration.framework; sourceTree = "<absolute>"; };
                8DD76F7E0486A8DE00D96B5E /* XBMC */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = XBMC; sourceTree = BUILT_PRODUCTS_DIR; };
                C80425701158A0DE00D158A6 /* controlslider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = controlslider.cpp; sourceTree = "<group>"; };
-               C807114A135DB5BF002F601B /* AnnouncementUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnnouncementUtils.h; sourceTree = "<group>"; };
                C807114B135DB5CC002F601B /* InputOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputOperations.cpp; sourceTree = "<group>"; };
                C807114C135DB5CC002F601B /* InputOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputOperations.h; sourceTree = "<group>"; };
                C84BF7321349BB74006D6FC9 /* JSONServiceDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSONServiceDescription.cpp; sourceTree = "<group>"; };
                DF44845C140048C80069344B /* PipesManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PipesManager.h; sourceTree = "<group>"; };
                DF4484EC140054530069344B /* BXAcodec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BXAcodec.cpp; sourceTree = "<group>"; };
                DF4484ED140054530069344B /* BXAcodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BXAcodec.h; sourceTree = "<group>"; };
+               DF52769A151BAEDA00B5B63B /* Base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Base64.cpp; sourceTree = "<group>"; };
+               DF52769B151BAEDA00B5B63B /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = "<group>"; };
+               DF52769C151BAEDA00B5B63B /* HttpResponse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HttpResponse.cpp; sourceTree = "<group>"; };
+               DF52769D151BAEDA00B5B63B /* HttpResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpResponse.h; sourceTree = "<group>"; };
+               DF52772B151BAF4C00B5B63B /* WebSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocket.cpp; sourceTree = "<group>"; };
+               DF52772C151BAF4C00B5B63B /* WebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocket.h; sourceTree = "<group>"; };
+               DF52772D151BAF4C00B5B63B /* WebSocketManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketManager.cpp; sourceTree = "<group>"; };
+               DF52772E151BAF4C00B5B63B /* WebSocketManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketManager.h; sourceTree = "<group>"; };
+               DF52772F151BAF4C00B5B63B /* WebSocketV13.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketV13.cpp; sourceTree = "<group>"; };
+               DF527730151BAF4C00B5B63B /* WebSocketV13.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketV13.h; sourceTree = "<group>"; };
+               DF527731151BAF4C00B5B63B /* WebSocketV8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketV8.cpp; sourceTree = "<group>"; };
+               DF527732151BAF4C00B5B63B /* WebSocketV8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketV8.h; sourceTree = "<group>"; };
+               DF85BAB31443669A000686BE /* FileUPnP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileUPnP.h; sourceTree = "<group>"; };
+               DF85BAB41443669A000686BE /* FileUPnP.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileUPnP.cpp; sourceTree = "<group>"; };
                DF98D98A1434F47D00A6EBE1 /* SkinVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkinVariable.cpp; sourceTree = "<group>"; };
                DF98D98B1434F47D00A6EBE1 /* SkinVariable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkinVariable.h; sourceTree = "<group>"; };
                DFAB049613F8376700B70BFB /* InertialScrollingHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InertialScrollingHandler.cpp; sourceTree = "<group>"; };
                DFAB049713F8376700B70BFB /* InertialScrollingHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InertialScrollingHandler.h; sourceTree = "<group>"; };
+               DFC1B8EF1464840E00B1BE79 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
                E306D12C0DDF7B590052C2AD /* XBMCHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XBMCHelper.cpp; sourceTree = "<group>"; };
                E306D12D0DDF7B590052C2AD /* XBMCHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XBMCHelper.h; sourceTree = "<group>"; };
                E33206370D5070AA00435CE3 /* DVDDemuxVobsub.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDDemuxVobsub.cpp; sourceTree = "<group>"; };
                F5B13C8B1334056B0045076D /* DarwinUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DarwinUtils.h; sourceTree = "<group>"; };
                F5B13C8C1334056B0045076D /* DarwinUtils.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DarwinUtils.mm; sourceTree = "<group>"; };
                F5B413131065900C0035D105 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
+               F5BD02F4148D3A7E001B5583 /* CryptThreading.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptThreading.cpp; sourceTree = "<group>"; };
+               F5BD02F5148D3A7E001B5583 /* CryptThreading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptThreading.h; sourceTree = "<group>"; };
                F5BDB80A120202F400F0B710 /* DVDSubtitleTagSami.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVDSubtitleTagSami.h; sourceTree = "<group>"; };
                F5BDB80B120202F400F0B710 /* DVDSubtitleTagSami.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDSubtitleTagSami.cpp; sourceTree = "<group>"; };
                F5BDB8181202032400F0B710 /* DVDSubtitleTagMicroDVD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVDSubtitleTagMicroDVD.h; sourceTree = "<group>"; };
                                F56C8CF3131F5DFD000AD0F6 /* libiconv.dylib in Frameworks */,
                                F56C8CF6131F5E0B000AD0F6 /* libncurses.dylib in Frameworks */,
                                18404DA61396C31B00863BBA /* SlingboxLib.a in Frameworks */,
+                               DFC1B8F01464840E00B1BE79 /* SystemConfiguration.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                F5B5D64E133FC2E7007A4B4C /* librtv.a in Frameworks */,
                                F5B5D650133FC312007A4B4C /* libxdaap.a in Frameworks */,
                                18404E711396E06C00863BBA /* SlingboxLib.a in Frameworks */,
+                               DFC1BA3414648D6500B1BE79 /* SystemConfiguration.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                F56C8CF5131F5E0B000AD0F6 /* libncurses.dylib */,
                                F56C8CEF131F5DED000AD0F6 /* libxml2.dylib */,
                                F56C8CE6131F5DC6000AD0F6 /* libz.dylib */,
+                               DFC1B8EF1464840E00B1BE79 /* SystemConfiguration.framework */,
                                E38E23910D2626E600618676 /* OpenGL.framework */,
                                F59879070FBAA0C3008EF4FB /* QuartzCore.framework */,
                                E35EF2540D380C3D00DB5CD5 /* QuickTime.framework */,
                                4313772B12D6474F00680C15 /* libscrobbler */,
                                432D7CE112D86D4900CE4C49 /* linux */,
                                4313772312D646E300680C15 /* osx */,
+                               DF527729151BAF4C00B5B63B /* websocket */,
                                DF34892813FD9C780026A711 /* AirPlayServer.cpp */,
                                DF34892913FD9C780026A711 /* AirPlayServer.h */,
                                DF448455140048A60069344B /* AirTunesServer.cpp */,
                                E38E19820D25F9FB00618676 /* python */,
                                F5A7A700112893E50059D6AA /* AnnouncementManager.cpp */,
                                F5A7A701112893E50059D6AA /* AnnouncementManager.h */,
-                               C807114A135DB5BF002F601B /* AnnouncementUtils.h */,
                                7CCF7F1B1069F3AE00992676 /* Builtins.cpp */,
                                7CCF7F1C1069F3AE00992676 /* Builtins.h */,
                                436721A612D66A09002508E6 /* IAnnouncer.h */,
                        name = Documentation;
                        sourceTree = "<group>";
                };
+               DF527729151BAF4C00B5B63B /* websocket */ = {
+                       isa = PBXGroup;
+                       children = (
+                               DF52772B151BAF4C00B5B63B /* WebSocket.cpp */,
+                               DF52772C151BAF4C00B5B63B /* WebSocket.h */,
+                               DF52772D151BAF4C00B5B63B /* WebSocketManager.cpp */,
+                               DF52772E151BAF4C00B5B63B /* WebSocketManager.h */,
+                               DF52772F151BAF4C00B5B63B /* WebSocketV13.cpp */,
+                               DF527730151BAF4C00B5B63B /* WebSocketV13.h */,
+                               DF527731151BAF4C00B5B63B /* WebSocketV8.cpp */,
+                               DF527732151BAF4C00B5B63B /* WebSocketV8.h */,
+                       );
+                       path = websocket;
+                       sourceTree = "<group>";
+               };
                E37D5CB40D3023BB0081D327 /* osx */ = {
                        isa = PBXGroup;
                        children = (
                                E38E16240D25F9FA00618676 /* OGGcodec.h */,
                                F5987FDA0FBE2DFD008EF4FB /* PAPlayer.cpp */,
                                F5987FD90FBE2DFD008EF4FB /* PAPlayer.h */,
+                               7CCFD98A151494E100211D82 /* PCMCodec.cpp */,
+                               7CCFD98B151494E100211D82 /* PCMCodec.h */,
                                E38E162A0D25F9FA00618676 /* ReplayGain.cpp */,
                                E38E162B0D25F9FA00618676 /* ReplayGain.h */,
                                E38E16310D25F9FA00618676 /* SIDCodec.cpp */,
                                E38E16DF0D25F9FA00618676 /* FileTuxBox.h */,
                                433219D112E4C6A500CD7486 /* FileUDF.cpp */,
                                433219D212E4C6A500CD7486 /* FileUDF.h */,
+                               DF85BAB41443669A000686BE /* FileUPnP.cpp */,
+                               DF85BAB31443669A000686BE /* FileUPnP.h */,
                                E38E16E20D25F9FA00618676 /* FileZip.cpp */,
                                E38E16E30D25F9FA00618676 /* FileZip.h */,
                                E38E16E40D25F9FA00618676 /* FTPDirectory.cpp */,
                                F5FDF51B0E7218950005B0A6 /* AsyncFileCopy.h */,
                                F5BDB81F120203C200F0B710 /* AutoPtrHandle.cpp */,
                                F5BDB81E120203C200F0B710 /* AutoPtrHandle.h */,
+                               DF52769A151BAEDA00B5B63B /* Base64.cpp */,
+                               DF52769B151BAEDA00B5B63B /* Base64.h */,
                                E38E1E270D25F9FD00618676 /* BitstreamStats.cpp */,
                                E38E1E280D25F9FD00618676 /* BitstreamStats.h */,
                                E38E1E290D25F9FD00618676 /* CharsetConverter.cpp */,
                                E38E1E2C0D25F9FD00618676 /* CPUInfo.h */,
                                18B7C8E712942603009E7A26 /* Crc32.cpp */,
                                18B7C8E812942603009E7A26 /* Crc32.h */,
+                               F5BD02F4148D3A7E001B5583 /* CryptThreading.cpp */,
+                               F5BD02F5148D3A7E001B5583 /* CryptThreading.h */,
                                E38E1E310D25F9FD00618676 /* DownloadQueue.cpp */,
                                E38E1E320D25F9FD00618676 /* DownloadQueue.h */,
                                E38E1E330D25F9FD00618676 /* DownloadQueueManager.cpp */,
                                E38E1E470D25F9FD00618676 /* HttpHeader.h */,
                                DF34898113FDAAF60026A711 /* HttpParser.cpp */,
                                DF34897A13FDAA270026A711 /* HttpParser.h */,
+                               DF52769C151BAEDA00B5B63B /* HttpResponse.cpp */,
+                               DF52769D151BAEDA00B5B63B /* HttpResponse.h */,
                                E38E1E4C0D25F9FD00618676 /* InfoLoader.cpp */,
                                E38E1E4D0D25F9FD00618676 /* InfoLoader.h */,
                                7CAA205B107AFC280096DE39 /* Job.h */,
                                18B7C9E7129447B9009E7A26 /* MathUtils.h */,
                                F5F8E1E60E427F6700A8E96F /* md5.cpp */,
                                F5F8E1E70E427F6700A8E96F /* md5.h */,
+                               188F75FC152217BC009870CE /* Mime.cpp */,
+                               188F75FD152217BC009870CE /* Mime.h */,
                                E38E1E6D0D25F9FD00618676 /* PCMAmplifier.cpp */,
                                E38E1E6E0D25F9FD00618676 /* PCMAmplifier.h */,
                                18CCEAEC1112F5B800615FC6 /* PCMRemap.cpp */,
                                F5AE408713415D9E0004BD79 /* FileItemHandler.h */,
                                F5AE408813415D9E0004BD79 /* FileOperations.cpp */,
                                F5AE408913415D9E0004BD79 /* FileOperations.h */,
+                               188F7600152217DF009870CE /* GUIOperations.cpp */,
+                               188F7601152217DF009870CE /* GUIOperations.h */,
                                F5AE408A13415D9E0004BD79 /* IClient.h */,
+                               188F751815211733009870CE /* IJSONRPCAnnouncer.h */,
                                C807114B135DB5CC002F601B /* InputOperations.cpp */,
                                C807114C135DB5CC002F601B /* InputOperations.h */,
                                F5AE408B13415D9E0004BD79 /* ITransportLayer.h */,
                                F5AE408C13415D9E0004BD79 /* JSONRPC.cpp */,
                                F5AE408D13415D9E0004BD79 /* JSONRPC.h */,
+                               188F751915211743009870CE /* JSONRPCUtils.h */,
                                C84BF7321349BB74006D6FC9 /* JSONServiceDescription.cpp */,
                                C84BF7331349BB74006D6FC9 /* JSONServiceDescription.h */,
                                F5AE408E13415D9E0004BD79 /* JSONUtils.h */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/bash;
-                       shellScript = "#!/bin/bash\n\necho \"copy root files\"\n\nif [ \"$ACTION\" = build ] ; then\n\n# for external testing\n#TARGET_NAME=XBMC.app\n#SRCROOT=/Users/Shared/xbmc_svn/XBMC\n#TARGET_BUILD_DIR=/Users/Shared/xbmc_svn/XBMC/build/Debug\n# force TARGET_NAME on ppc\nTARGET_NAME=$PRODUCT_NAME\n\n# rsync command with exclusions for items we don't want in the app package\nSYNC=\"rsync -aq --exclude .DS_Store* --exclude *.dll --exclude *.DLL --exclude *linux.* --exclude *arm-osx.* --exclude *.zlib --exclude *.a\"\n\n# rsync command for excluding pngs and jpgs as well. Note that if the skin itself is not compiled\n# using XBMCTex then excluding the pngs and jpgs will most likely make the skin unusable \nSYNCSKIN=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.* --exclude *.png --exclude *.jpg --exclude *.bat\"\n\n# rsync command for including everything but the skins\nADDONSYNC=\"rsync -aq --exclude .DS_Store* --exclude skin.confluence\"\n\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/language\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/sounds\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/system\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/userdata\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/tools/darwin/runtime\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/extras/user\"\n\n${SYNC} \"$SRCROOT/LICENSE.GPL\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/\"\n${SYNC} \"$SRCROOT/xbmc/osx/Credits.html\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/\"\n${SYNC} \"$SRCROOT/tools/darwin/runtime\"\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/tools/darwin\"\n${ADDONSYNC} \"$SRCROOT/addons\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/language\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/media\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNCSKIN} \"$SRCROOT/addons/skin.confluence\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/sounds\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/system\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/userdata\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n\n# copy extra packages if applicable\nif [ -d \"$SRCROOT/extras/system\" ]; then\n\t${SYNC} \"$SRCROOT/extras/system/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\nfi\n\n# copy extra user packages if applicable\nif [ -d \"$SRCROOT/extras/user\" ]; then\n\t${SYNC} \"$SRCROOT/extras/user/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/extras/user\"\nfi\n\n\n\n# magic that gets the icon to update\ntouch \"$TARGET_BUILD_DIR/$TARGET_NAME\"\n\n# not sure we want to do this with out major testing, many scripts cannot handle the spaces in the app name\n#mv \"$TARGET_BUILD_DIR/$TARGET_NAME\" \"$TARGET_BUILD_DIR/XBMC Media Center.app\"\n\nfi";
+                       shellScript = "#!/bin/bash\n\necho \"copy root files\"\n\nif [ \"$ACTION\" = build ] ; then\n\n# for external testing\n#TARGET_NAME=XBMC.app\n#SRCROOT=/Users/Shared/xbmc_svn/XBMC\n#TARGET_BUILD_DIR=/Users/Shared/xbmc_svn/XBMC/build/Debug\n# force TARGET_NAME on ppc\nTARGET_NAME=$PRODUCT_NAME\n\n# rsync command with exclusions for items we don't want in the app package\nSYNC=\"rsync -aq --exclude .DS_Store* --exclude *.dll --exclude *.DLL --exclude *linux.* --exclude *arm-osx.* --exclude *.zlib --exclude *.a\"\n\n# rsync command for excluding pngs and jpgs as well. Note that if the skin itself is not compiled\n# using XBMCTex then excluding the pngs and jpgs will most likely make the skin unusable \nSYNCSKIN=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.* --exclude *.png --exclude *.jpg --exclude *.bat\"\n\n# rsync command for including everything but the skins\nADDONSYNC=\"rsync -aq --exclude .DS_Store* --exclude skin.confluence --exclude skin.touched\"\n\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/language\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/sounds\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/system\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/userdata\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/tools/darwin/runtime\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/extras/user\"\n\n${SYNC} \"$SRCROOT/LICENSE.GPL\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/\"\n${SYNC} \"$SRCROOT/xbmc/osx/Credits.html\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/\"\n${SYNC} \"$SRCROOT/tools/darwin/runtime\"\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/tools/darwin\"\n${ADDONSYNC} \"$SRCROOT/addons\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/language\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/media\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNCSKIN} \"$SRCROOT/addons/skin.confluence\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/sounds\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/system\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/userdata\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n\n# copy extra packages if applicable\nif [ -d \"$SRCROOT/extras/system\" ]; then\n\t${SYNC} \"$SRCROOT/extras/system/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\nfi\n\n# copy extra user packages if applicable\nif [ -d \"$SRCROOT/extras/user\" ]; then\n\t${SYNC} \"$SRCROOT/extras/user/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/extras/user\"\nfi\n\n\n\n# magic that gets the icon to update\ntouch \"$TARGET_BUILD_DIR/$TARGET_NAME\"\n\n# not sure we want to do this with out major testing, many scripts cannot handle the spaces in the app name\n#mv \"$TARGET_BUILD_DIR/$TARGET_NAME\" \"$TARGET_BUILD_DIR/XBMC Media Center.app\"\n\nfi";
                };
                F5A1CBDF0F6B0B4700A96ABD /* copy frameworks */ = {
                        isa = PBXShellScriptBuildPhase;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/bash;
-                       shellScript = "#!/bin/bash\n\necho \"copy root files\"\n\nif [ \"$ACTION\" = build ] ; then\n\n# for external testing\n#TARGET_NAME=XBMC.app\n#SRCROOT=/Users/Shared/xbmc_svn/XBMC\n#TARGET_BUILD_DIR=/Users/Shared/xbmc_svn/XBMC/build/Debug\n\n# rsync command with exclusions for items we don't want in the app package\nSYNC=\"rsync -aq --exclude .DS_Store* --exclude *.dll --exclude *.DLL --exclude *linux.* --exclude *arm-osx.* --exclude *.zlib --exclude *.a\"\n\n# rsync command for excluding pngs and jpgs as well. Note that if the skin itself is not compiled\n# using XBMCTex then excluding the pngs and jpgs will most likely make the skin unusable \nSYNCSKIN=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.* --exclude *.png --exclude *.jpg --exclude *.bat\"\n\n# rsync command for including everything but the skins\nADDONSYNC=\"rsync -aq --exclude .DS_Store* --exclude skin.confluence\"\n\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/language\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/sounds\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/system\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/userdata\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/tools/darwin/runtime\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/extras/user\"\n\n${SYNC} \"$SRCROOT/LICENSE.GPL\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/\"\n${SYNC} \"$SRCROOT/xbmc/osx/Credits.html\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/\"\n${SYNC} \"$SRCROOT/tools/darwin/runtime\"\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/tools/darwin\"\n${ADDONSYNC} \"$SRCROOT/addons\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/language\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/media\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNCSKIN} \"$SRCROOT/addons/skin.confluence\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/sounds\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/system\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/userdata\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n\n# copy extra packages if applicable\nif [ -d \"$SRCROOT/extras/system\" ]; then\n\t${SYNC} \"$SRCROOT/extras/system/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\nfi\n\n# copy extra user packages if applicable\nif [ -d \"$SRCROOT/extras/user\" ]; then\n\t${SYNC} \"$SRCROOT/extras/user/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/extras/user\"\nfi\n\n\n\n# magic that gets the icon to update\ntouch \"$TARGET_BUILD_DIR/$TARGET_NAME\"\n\n# not sure we want to do this with out major testing, many scripts cannot handle the spaces in the app name\n#mv \"$TARGET_BUILD_DIR/$TARGET_NAME\" \"$TARGET_BUILD_DIR/XBMC Media Center.app\"\n\nfi";
+                       shellScript = "#!/bin/bash\n\necho \"copy root files\"\n\nif [ \"$ACTION\" = build ] ; then\n\n# for external testing\n#TARGET_NAME=XBMC.app\n#SRCROOT=/Users/Shared/xbmc_svn/XBMC\n#TARGET_BUILD_DIR=/Users/Shared/xbmc_svn/XBMC/build/Debug\n\n# rsync command with exclusions for items we don't want in the app package\nSYNC=\"rsync -aq --exclude .DS_Store* --exclude *.dll --exclude *.DLL --exclude *linux.* --exclude *arm-osx.* --exclude *.zlib --exclude *.a\"\n\n# rsync command for excluding pngs and jpgs as well. Note that if the skin itself is not compiled\n# using XBMCTex then excluding the pngs and jpgs will most likely make the skin unusable \nSYNCSKIN=\"rsync -aq --exclude CVS* --exclude .svn* --exclude .cvsignore* --exclude .cvspass* --exclude .DS_Store* --exclude *.dll  --exclude *.DLL --exclude *linux.* --exclude *.png --exclude *.jpg --exclude *.bat\"\n\n# rsync command for including everything but the skins\nADDONSYNC=\"rsync -aq --exclude .DS_Store* --exclude skin.confluence --exclude skin.touched\"\n\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/language\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/sounds\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/system\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/userdata\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/media\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/tools/darwin/runtime\"\nmkdir -p \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/extras/user\"\n\n${SYNC} \"$SRCROOT/LICENSE.GPL\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/\"\n${SYNC} \"$SRCROOT/xbmc/osx/Credits.html\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/\"\n${SYNC} \"$SRCROOT/tools/darwin/runtime\"\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/tools/darwin\"\n${ADDONSYNC} \"$SRCROOT/addons\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/language\"\t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/media\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNCSKIN} \"$SRCROOT/addons/skin.confluence\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/backgrounds\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/addons/skin.confluence/icon.png\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/addons/skin.confluence\"\n${SYNC} \"$SRCROOT/sounds\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/system\" \t\t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n${SYNC} \"$SRCROOT/userdata\" \t\"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\n\n# copy extra packages if applicable\nif [ -d \"$SRCROOT/extras/system\" ]; then\n\t${SYNC} \"$SRCROOT/extras/system/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC\"\nfi\n\n# copy extra user packages if applicable\nif [ -d \"$SRCROOT/extras/user\" ]; then\n\t${SYNC} \"$SRCROOT/extras/user/\" \"$TARGET_BUILD_DIR/$TARGET_NAME/Contents/Resources/XBMC/extras/user\"\nfi\n\n\n\n# magic that gets the icon to update\ntouch \"$TARGET_BUILD_DIR/$TARGET_NAME\"\n\n# not sure we want to do this with out major testing, many scripts cannot handle the spaces in the app name\n#mv \"$TARGET_BUILD_DIR/$TARGET_NAME\" \"$TARGET_BUILD_DIR/XBMC Media Center.app\"\n\nfi";
                        showEnvVarsInLog = 0;
                };
 /* End PBXShellScriptBuildPhase section */
                                F5A7B37E113AFB900059D6AA /* SFTPDirectory.cpp in Sources */,
                                F5A7B42C113CBB950059D6AA /* AddonsDirectory.cpp in Sources */,
                                18B4A0021152BFA5001AF8A6 /* Addon.cpp in Sources */,
-                               18B4A0031152BFA5001AF8A6 /* AddonManager.cpp in Sources */,
                                18B4A0041152BFA5001AF8A6 /* fft.cpp in Sources */,
                                18B4A0051152BFA5001AF8A6 /* Scraper.cpp in Sources */,
                                18B4A0061152BFA5001AF8A6 /* ScreenSaver.cpp in Sources */,
                                F5E1125E14356B2400175026 /* pyrendercapture.cpp in Sources */,
                                F5E1138014357F3800175026 /* PeripheralCecAdapter.cpp in Sources */,
                                F54BCC5F1439345300F86B0F /* HotKeyController.m in Sources */,
+                               DF85BAB51443669A000686BE /* FileUPnP.cpp in Sources */,
+                               DF673AA51443819600A5A509 /* AddonManager.cpp in Sources */,
+                               F5BD02F6148D3A7E001B5583 /* CryptThreading.cpp in Sources */,
+                               7CCFD98D151494E100211D82 /* PCMCodec.cpp in Sources */,
+                               DF5276E1151BAEDA00B5B63B /* Base64.cpp in Sources */,
+                               DF5276E2151BAEDA00B5B63B /* HttpResponse.cpp in Sources */,
+                               DF527734151BAF4C00B5B63B /* WebSocket.cpp in Sources */,
+                               DF527735151BAF4C00B5B63B /* WebSocketManager.cpp in Sources */,
+                               DF527736151BAF4C00B5B63B /* WebSocketV13.cpp in Sources */,
+                               DF527737151BAF4C00B5B63B /* WebSocketV8.cpp in Sources */,
+                               188F75FE152217BC009870CE /* Mime.cpp in Sources */,
+                               188F7602152217DF009870CE /* GUIOperations.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                F5E1125F14356B2400175026 /* pyrendercapture.cpp in Sources */,
                                F5E1138114357F3900175026 /* PeripheralCecAdapter.cpp in Sources */,
                                F54BCC601439345300F86B0F /* HotKeyController.m in Sources */,
+                               DF85BAB61443669A000686BE /* FileUPnP.cpp in Sources */,
+                               F5BD02F7148D3A7E001B5583 /* CryptThreading.cpp in Sources */,
+                               7CCFD98C151494E100211D82 /* PCMCodec.cpp in Sources */,
+                               DF527726151BAEDA00B5B63B /* Base64.cpp in Sources */,
+                               DF527727151BAEDA00B5B63B /* HttpResponse.cpp in Sources */,
+                               DF527739151BAF4C00B5B63B /* WebSocket.cpp in Sources */,
+                               DF52773A151BAF4C00B5B63B /* WebSocketManager.cpp in Sources */,
+                               DF52773B151BAF4C00B5B63B /* WebSocketV13.cpp in Sources */,
+                               DF52773C151BAF4C00B5B63B /* WebSocketV8.cpp in Sources */,
+                               188F75FF152217BC009870CE /* Mime.cpp in Sources */,
+                               188F7603152217DF009870CE /* GUIOperations.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                        lib,
                                        lib/ffmpeg,
                                        $XBMC_DEPENDS/include,
+                                       $XBMC_DEPENDS/include/libcec,
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
                                        "$(SRCROOT)/lib/cmyth/librefmem",
                                        "$(SRCROOT)/lib/libapetag/.libs",
                                        "$(SRCROOT)/lib/libsquish",
+                                       "$(SRCROOT)/lib/SlingboxLib",
                                        "$(SRCROOT)/xbmc/interfaces/http-api",
                                        "$(SRCROOT)/xbmc/interfaces/json-rpc",
-                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
-                                       "\"$(SRCROOT)/lib/shairport\"",
                                );
                                LINK_WITH_STANDARD_LIBRARIES = YES;
                                OTHER_LDFLAGS = (
                                        "-lmicrohttpd",
                                        "-lyajl",
                                        "-ljpeg",
+                                       "-lcrypto",
+                                       "-lgcrypt",
                                        "-lGLEW",
                                        "-lSDL",
                                        "-lSDL_mixer",
                                        "-lmysqlclient",
                                );
                                PRODUCT_NAME = XBMC;
-                               USER_HEADER_SEARCH_PATHS = "$XBMC_DEPENDS/include $XBMC_DEPENDS/include/mysql $XBMC_DEPENDS/include/freetype2 $XBMC_DEPENDS/include/python2.6";
+                               USER_HEADER_SEARCH_PATHS = "$XBMC_DEPENDS/include $XBMC_DEPENDS/include/libcec $XBMC_DEPENDS/include/mysql $XBMC_DEPENDS/include/freetype2 $XBMC_DEPENDS/include/python2.6";
                                XBMC_DEPENDS = "/Users/Shared/xbmc-depends/osx-10.4_i386";
                                ZERO_LINK = NO;
                        };
                                        lib,
                                        lib/ffmpeg,
                                        $XBMC_DEPENDS/include,
+                                       $XBMC_DEPENDS/include/libcec,
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
                                        "$(SRCROOT)/lib/cmyth/librefmem",
                                        "$(SRCROOT)/lib/libapetag/.libs",
                                        "$(SRCROOT)/lib/libsquish",
-                                       "$(SRCROOT)/lib/jsoncpp/src/lib_json",
+                                       "$(SRCROOT)/lib/SlingboxLib",
                                        "$(SRCROOT)/xbmc/interfaces/http-api",
                                        "$(SRCROOT)/xbmc/interfaces/json-rpc",
-                                       "\"$(SRCROOT)/lib/SlingboxLib\"",
                                );
                                LINK_WITH_STANDARD_LIBRARIES = YES;
                                OTHER_LDFLAGS = (
                                        "-lmicrohttpd",
                                        "-lyajl",
                                        "-ljpeg",
+                                       "-lcrypto",
+                                       "-lgcrypt",
                                        "-lGLEW",
                                        "-lSDL",
                                        "-lSDL_mixer",
                                        "-lmysqlclient",
                                );
                                PRODUCT_NAME = XBMC;
-                               USER_HEADER_SEARCH_PATHS = "$XBMC_DEPENDS/include $XBMC_DEPENDS/include/mysql $XBMC_DEPENDS/include/freetype2 $XBMC_DEPENDS/include/python2.6";
+                               USER_HEADER_SEARCH_PATHS = "$XBMC_DEPENDS/include $XBMC_DEPENDS/include/libcec $XBMC_DEPENDS/include/mysql $XBMC_DEPENDS/include/freetype2 $XBMC_DEPENDS/include/python2.6";
                                XBMC_DEPENDS = "/Users/Shared/xbmc-depends/osx-10.4_i386";
                                ZERO_LINK = NO;
                        };
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                ARCHS = i386;
+                               GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PREPROCESSOR_DEFINITIONS = "";
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_SIGN_COMPARE = YES;
                                        lib,
                                        lib/ffmpeg,
                                        $XBMC_DEPENDS/include,
+                                       $XBMC_DEPENDS/include/libcec,
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
                                        "-lsamplerate",
                                        "-lmicrohttpd",
                                        "-lyajl",
+                                       "-ljpeg",
+                                       "-lcrypto",
+                                       "-lgcrypt",
                                        "-lGLEW",
                                        "-lSDL",
                                        "-lSDL_mixer",
                                        "-lsmbclient",
                                        "-lpython2.6",
-                                       "-lboost_thread",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
-                                       "-ljpeg",
                                );
                                PRODUCT_NAME = XBMC;
-                               USER_HEADER_SEARCH_PATHS = "$XBMC_DEPENDS/include $XBMC_DEPENDS/include/mysql $XBMC_DEPENDS/include/freetype2 $XBMC_DEPENDS/include/python2.6";
+                               USER_HEADER_SEARCH_PATHS = "$XBMC_DEPENDS/include $XBMC_DEPENDS/include/libcec $XBMC_DEPENDS/include/mysql $XBMC_DEPENDS/include/freetype2 $XBMC_DEPENDS/include/python2.6";
                                VALID_ARCHS = ppc;
                                XBMC_DEPENDS = "/Users/Shared/xbmc-depends/osx-10.4_ppc";
                                ZERO_LINK = NO;
                                        lib,
                                        lib/ffmpeg,
                                        $XBMC_DEPENDS/include,
+                                       $XBMC_DEPENDS/include/libcec,
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
                                        "-lsamplerate",
                                        "-lmicrohttpd",
                                        "-lyajl",
+                                       "-ljpeg",
+                                       "-lcrypto",
+                                       "-lgcrypt",
                                        "-lGLEW",
                                        "-lSDL",
                                        "-lSDL_mixer",
                                        "-lsmbclient",
                                        "-lpython2.6",
-                                       "-lboost_thread",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
-                                       "-ljpeg",
                                );
                                PRODUCT_NAME = XBMC;
-                               USER_HEADER_SEARCH_PATHS = "$XBMC_DEPENDS/include $XBMC_DEPENDS/include/mysql $XBMC_DEPENDS/include/freetype2 $XBMC_DEPENDS/include/python2.6";
+                               USER_HEADER_SEARCH_PATHS = "$XBMC_DEPENDS/include $XBMC_DEPENDS/include/libcec $XBMC_DEPENDS/include/mysql $XBMC_DEPENDS/include/freetype2 $XBMC_DEPENDS/include/python2.6";
                                VALID_ARCHS = ppc;
                                XBMC_DEPENDS = "/Users/Shared/xbmc-depends/osx-10.4_ppc";
                                ZERO_LINK = NO;
index 5c9f3a5..dea6306 100644 (file)
@@ -5,7 +5,7 @@
        provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
-    <import addon="metadata.common.last.fm" version="1.0"/>
+    <import addon="metadata.common.last.fm" version="1.1.0"/>
     <import addon="metadata.common.allmusic.com" version="1.8.1"/>
     <import addon="metadata.common.htbackdrops.com" version="1.0.7"/>
   </requires>
              language="en"
              library="allmusic.xml"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Информация за албуми от AllMusic.com</summary>
     <summary lang="en">AllMusic album information</summary>
     <summary lang="de">Alben Scraper für AllMusic.com</summary>
-    <summary lang="es">Scraper de Ã¡lbums de AllMusic</summary>
+    <summary lang="es">Scraper de Ã\81lbums de AllMusic</summary>
     <summary lang="fr">Scraper d'albums musicaux AllMusic</summary>
+    <summary lang="fi">AllMusic.com -albumitietojen lataaja</summary>
     <summary lang="hu">AllMusic.com album információk</summary>
     <summary lang="nl">AllMusic-albuminfo</summary>
     <summary lang="pl">Informacje o albumach z AllMusic</summary>
     <summary lang="ru">Информация об альбоме из AllMusic</summary>
     <summary lang="se">AllMusic albuminformation</summary>
     <summary lang="zh">AllMusic音乐专辑信息</summary>
+    <description lang="bg">Попълнете метаинформацията в библиотеката си от AllMusic.com.
+Уебсайтът allmusic.com е създаден през 19995, като място за страстни музикални фенове.
+Редакторският колектив AMG заедно със стотици експерти (и малко фанатици на тема allmusic.com) са направили сайта един от най-подробните (и най-често ползваните) източници на информация на музикална тема. Всички те са се посветили на създаването и поддържането на базата от данни, на разпространяването на съдържание от AMG, което се очаква от любителите на музика и професионалисти в музикалния отрасъл.
+Засегнати са всички жанрове и стилове музика. От най-комерсиалните и популярни до най-невъзприетите. Критиката към артисти и албуми се прави в контекста на съответните им жанрове - от опера до гаражен рок. Така се осигури актуална информация за почитателите на всеки стил, за любимите им артисти и се представят нови творби.</description>
     <description lang="en">Use AllMusic.com to fill your library metadata information.
 The allmusic website was created in 1995 as a place for music fans to indulge their passion.
 The AMG editorial staff, along with hundreds of expert contributors (all music fanatics in their own right), has made allmusic the most comprehensive music reference source on the planet. They are all dedicated to creating and maintaining the knowledgeable, spirited content that music lovers and industry professionals have come to expect from AMG.
@@ -34,9 +40,13 @@ AllMusic.com wurde 1995 gegründet, um Musikliebhabern einen Platz zu geben, Ihr
 Die AMG Redaktion, zusammen mit hunderten Experten (alles Fachmänner auf Ihrem Gebiet) als Beitragende, machte AllMusic.com zur umfangreichsten Quelle für Musikinformationen auf dem Planeten. Sie sind alle engagiert, um den lebhaften Inhalt, welcher von Musikliebhabern und der Musikindustrie von AMG erwartet wird, zu Erstellen und Pflegen. 
 Alle Genres und Stile der Musik werden hier abgedeckt, reichend von Mainstream bis zum Underground. Wir schreiben Kritiken zu Alben, im Kontext zu dem passenden Genre - von Oper über Garagen Rock bis hin zu traditioneller Country Musik. Das garantiert Fans jeglicher Musikrichtung, dass sie sich auf uns verlassen können, weil wir sie immer up-to-date über Ihre Liblingskünstler halten und Ihnen auch neue Sounds vorstellen</description>
     <description lang="es">Este scraper utiliza Allmusic.com para rellenar la información de la librería musical.
-La página web Allmusic.com fue creada en 1995 cómo un sitio donde los fans podían compartir su pasión por la música.
-El equipo de AMG, junto con cientos de colaboradores expertos (todos ellos fans de la música) han hecho de Allmusic.com uno de los sitios más completo del planeta. Todos ellos se dedican a crear y mantener los contenidos que los amantes de la música y los profesionales del sector obtienen de AMG.
-Todos los géneros y estilos musicales tienen cabida, desde los más comerciales hasta los más oscuros. Se hacen críticas de los álbumes y los artistas en el entorno que les corresponde - desde opera, pasando por rock hasta country tradicional. Así se asegura que los fans de cualquier estilo de música puedan depender de nosotros para mantenerse al día de las novedades de sus artistas favoritos y descubrir nuevos sonidos.</description>
+La página web allmusic fue creada en el 1995 cómo un sitio donde los fans podíaan compartir su pasión por la música.
+El equipo de AMG, junto con cuentos de colaboradores expertos (todos ellos fans de la música) han hecho de allmusic uno de los sitios más extensos del planeta. Todos ellos intentan crear y mantener unos contenidos que los amantes de la música y los profesionales del sector obtienen de AMG.
+Todos los géneros y estilos musicales tienen cabida, desde los más comerciales hasta los más oscuros. En allmusic se critican los álbumes y los artistas en el entorno que les corresponde - desde opera, pasando por rock hasta country tradicional. Así se asegura que los fans de cualquier estilo de música puedan depender de nosotros para mantenerse al día de las novedades de sus artistas favoritos y descubrir nuevos sonidos.</description>
+    <description lang="fi">Käytä AllMusic.com -sivustoa täyttämään kirjastosi metatiedot.
+AllMusic.com -sivusto luotiin vuonna 1995 paikaksi, jossa musiikkifanit voivat tyydyttää intohimonsa musiikkiin.
+AMG-toimituksen henkilökunta, satojen asiansa tuntevien lahjoittajien kanssa (kaikki musiikkifanaatikot), ovat tehneet AllMusic.com -sivustosta koko planeetan kattavimman musiikkitietolähteen. He ovat kaikki sitoutuneita luomaan ja ylläpitämään asioista perillä olevaa henkevää sisältöä, jota musiikista pitävät ja musiikkialan ammattilaiset odottavat AMG:ltä.
+Kaikki musiikin lajityypit ja tyylisuunnat ovat edustettuina täällä, vaihdellen kaupallisesti suosituimmista kaikista huomaamattomimpiin. Me arvostelemme albumit ja esittäjät heidän oman lajityyppinsä sisällä - oopperasta ja autotallirokista aina perinteiseen country-musiikkiin. Tämä varmistaa, että minkä tahansa tyylisuunnan fanit voivat luottaa, että samalla kun pidämme heidät ajan tasalla heidän lempiartististansa, niin esittelemme myös heille uusia äänimaailmoita.</description>
     <description lang="fr">Utiliser AllMusic.com pour la récupération des méta-données.
 Le site web AllMusic a été créé en 1995 afin que les fans de musique puissent assouvir leur passion.
 L'équipe rédactionnelle d'AMG, forte de ses centaines de contributeurs avisés (tous passionnés de musique à part entière), a fait de AllMusic la source de référence la plus complète de toute la planète. Chacun s'investissant dans la construction et la maintenance d'un contenu aussi passionné et judicieux que tout amoureux de musique ou tout professionnel de l'industrie serait en droit d'attendre d'AMG.
diff --git a/addons/metadata.albums.allmusic.com/resources/language/Romanian/strings.xml b/addons/metadata.albums.allmusic.com/resources/language/Romanian/strings.xml
deleted file mode 100644 (file)
index 7c855d2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<strings>
-    <string id="30000">Descarcă imagini album de la Allmusic.com</string>
-    <string id="30001">Descarcă imagini album de la Last.fm</string>
-</strings>
index 87b07a3..16b217f 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <strings>
-    <string id="30000">Descargar miniaturas de álbum de Allmusic.com</string>
-    <string id="30001">Descargar miniaturas de álbum de Last.fm</string>
+    <string id="30000">Descargar imágenes de Allmusic.com</string>
+    <string id="30001">Descargar imágenes de Last.fm</string>
 </strings>
index c76a555..41e7af2 100644 (file)
@@ -1,21 +1,23 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="metadata.artists.allmusic.com"
        name="AllMusic"
-       version="2.0.2"
+       version="2.0.7"
        provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
-    <import addon="metadata.common.last.fm" version="1.0"/>
-    <import addon="metadata.common.allmusic.com" version="1.8.1"/>
+    <import addon="metadata.common.last.fm" version="1.1.0"/>
+    <import addon="metadata.common.allmusic.com" version="1.8.2"/>
     <import addon="metadata.common.htbackdrops.com" version="1.0.7"/>
   </requires>
   <extension point="xbmc.metadata.scraper.artists"
              language="en"
              library="allmusic.xml"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Инф. за артисти от AllMusic + снимки на артисти от HTBackdrops</summary>
     <summary lang="en">AllMusic artist information + HTBackdrops artist images</summary>
     <summary lang="de">Scraper für Künstler-Informationen von AllMusic.com</summary>
-    <summary lang="es">Información de artistas de AllMusic + imágenes de HTBackdrops</summary>
+    <summary lang="es">Descarga información de Artistas de AllMusic</summary>
+    <summary lang="fi">AllMusic.com -esittäjätietojen ja HTBackdrops-esittäjäkuvien lataaja</summary>
     <summary lang="fr">Scraper d'artistes musicaux AllMusic</summary>
     <summary lang="hu">AllMusic előadó információk</summary>
     <summary lang="nl">AllMusic-artiestinfo</summary>
@@ -25,6 +27,9 @@
     <summary lang="ru">Информация об исполнителе из AllMusic</summary>
     <summary lang="se">AllMusic artistinformation + HTBackdrops artistbilder</summary>
     <summary lang="zh">AllMusic艺术家信息</summary>
+    <description lang="bg">Попълнете метаинформацията в библиотеката си от AllMusic.com
+Уебсайтът allmusic.com е създаден през 19995, като място за страстни музикални фенове. Засегнати са всички жанрове и стилове музика. От най-комерсиалните и популярни до най-невъзприетите. Критиката към артисти и албуми се прави в контекста на съответните им жанрове - от опера до гаражен рок.
+Home Theater Backdrops (HTBackdrops.com) представлява база от данни с изображения задвижвана от общността около уебсайта. Съдържа висококачествени изображенията на артисти под формата на миниатюри и fanarts. Всички те са създадени или произхождат от общността. Моля, обмислете възможността да качите изображения за любимите ви артисти.</description>
     <description lang="en">Use AllMusic.com to fill your libray metadata information.
 The allmusic website was created in 1995 as a place for music fans to indulge their passion. All genres and styles of music are covered here, ranging from the most commercially popular to the most obscure. We critique albums and artists within the context of their own genres - from opera to garage rock to traditional country.
 
@@ -34,10 +39,12 @@ AllMusic.com wurde 1995 gegründet, um Musikliebhabern einen Platz zu geben, Ihr
 Die AMG Redaktion, zusammen mit hunderten Experten (alles Fachmänner auf Ihrem Gebiet) als Beitragende, machte AllMusic.com zur umfangreichsten Quelle für Musikinformationen auf dem Planeten. Sie sind alle engagiert, um den lebhaften Inhalt, welcher von Musikliebhabern und der Musikindustrie von AMG erwartet wird, zu Erstellen und Pflegen. 
 Alle Genres und Stile der Musik werden hier abgedeckt, reichend von Mainstream bis zum Underground. Wir schreiben Kritiken zu Alben, im Kontext zu dem passenden Genre - von Oper über Garagen Rock bis hin zu traditioneller Country Musik. Das garantiert Fans jeglicher Musikrichtung, dass sie sich auf uns verlassen können, weil wir sie immer up-to-date über Ihre Liblingskünstler halten und Ihnen auch neue Sounds vorstellen</description>
     <description lang="es">Este scraper utiliza Allmusic.com para rellenar la información de la librería musical.
-La página web Allmusic.com fue creada en 1995 cómo un sitio donde los fans podían compartir su pasión por la música.
-Todos los géneros y estilos musicales tienen cabida, desde los más comerciales hasta los más oscuros. Se hacen críticas de los álbumes y los artistas en el entorno que les corresponde - desde opera, pasando por rock hasta country tradicional.
-
-Home Theater Backdrops (HTBackdrops.com) es una base de datos impulsada por la comunidad con miniaturas y fanarts de artistas en alta calidad. Todas las imágenes han sido creadas o adquiridas por sus miembros. Por favor, considere subir sus propias imágenes de su artista favorito.</description>
+La página web allmusic fue creada en el 1995 cómo un sitio donde los fans podíaan compartir su pasión por la música.
+El equipo de AMG, junto con cuentos de colaboradores expertos (todos ellos fans de la música) han hecho de allmusic uno de los sitios más extensos del planeta. Todos ellos intentan crear y mantener unos contenidos que los amantes de la música y los profesionales del sector obtienen de AMG.
+Todos los géneros y estilos musicales tienen cabida, desde los más comerciales hasta los más oscuros. En allmusic se critican los álbumes y los artistas en el entorno que les corresponde - desde opera, pasando por rock hasta country tradicional. Así se asegura que los fans de cualquier estilo de música puedan depender de nosotros para mantenerse al día de las novedades de sus artistas favoritos y descubrir nuevos sonidos.</description>
+    <description lang="fi">Käytä AllMusic.com -sivustoa täyttämään kirjastosi metatiedot.
+AllMusic.com -sivusto luotiin vuonna 1995 paikaksi, jossa musiikkifanit voivat tyydyttää intohimonsa musiikkiin. Kaikki musiikin lajityypit ja tyylisuunnat ovat edustettuina täällä, vaihdellen kaupallisesti suosituimmista kaikkein huomaamattomimpiin. Me arvostelemme albumit ja esittäjät heidän oman lajityyppinsä sisällä - oopperasta ja autotallirokista aina perinteiseen country-musiikkiin.
+HTBackdrops.com -sivusto on yhteisön ylläpitämä tietokanta korkealaatuisille esittäjä- ja fanitaidekuville. Sivuston jäsenet ovat luoneet kaikki sivuston kuvat. Lähetä meille itse tekemäsi suosikkiartistiesi kuvat, jotta voimme lisätä ne tietokantaan.</description>
     <description lang="fr">Utiliser AllMusic.com pour la récupération des méta-données.
 Le site web AllMusic a été créé en 1995 afin que les fans de musique puissent assouvir leur passion.
 L'équipe rédactionnelle d'AMG, forte de ses centaines de contributeurs avisés (tous passionnés de musique à part entière), a fait de AllMusic la source de référence la plus complète de toute la planète. Chacun s'investissant dans la construction et la maintenance d'un contenu aussi passionné et judicieux que tout amoureux de musique ou tout professionnel de l'industrie serait en droit d'attendre d'AMG.
index eb26034..7ea01cc 100644 (file)
        </CreateArtistSearchUrl>
        <GetArtistSearchResults dest="8">
                <RegExp input="$$5" output="&lt;results&gt;\1&lt;/results&gt;" dest="8">
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;url cache=&quot;am-$$2-artist.html&quot;&gt;http://www.allmusic.com/artist/\2&lt;/url&gt;&lt;/entity&gt;" dest="9">
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;url cache=&quot;am-\2-artist.html&quot;&gt;http://www.allmusic.com/artist/\2&lt;/url&gt;&lt;/entity&gt;" dest="9">
                                <expression noclean="1">&lt;meta name=&quot;title&quot; content=&quot;([^&quot;]*)&quot;.*?&lt;a href="http://www.allmusic.com/artist/([^/]*)/credits&quot;</expression>
                        </RegExp>
                        <RegExp input="$$9" output="\1" dest="5">
                                <expression noclean="1">(.+)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;url cache=&quot;am-$$2-artist.html&quot;&gt;http://www.allmusic.com/artist/\2&lt;/url&gt;&lt;/entity&gt;" dest="9">
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;url cache=&quot;am-\2-artist.html&quot;&gt;http://www.allmusic.com/artist/\2&lt;/url&gt;&lt;/entity&gt;" dest="9">
                                <expression noclean="1">&lt;meta name=&quot;title&quot; content=&quot;([^&quot;]*)&quot;.*?&lt;a href="http://www.allmusic.com/artist/([^/]*)/biography&quot;</expression>
                        </RegExp>
                        <RegExp input="$$9" output="\1" dest="5">
                                <expression noclean="1">(.+)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;url cache=&quot;am-$$2-artist.html&quot;&gt;http://www.allmusic.com/artist/\2&lt;/url&gt;&lt;/entity&gt;" dest="9">
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;url cache=&quot;am-\2-artist.html&quot;&gt;http://www.allmusic.com/artist/\2&lt;/url&gt;&lt;/entity&gt;" dest="9">
                                <expression noclean="1">&lt;meta name=&quot;title&quot; content=&quot;([^&quot;]*)&quot;.*?&lt;a href="http://www.allmusic.com/artist/([^/]*)/discography&quot;</expression>
                        </RegExp>
                        <RegExp input="$$9" output="\1" dest="5">
                                <expression noclean="1">(.+)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\2&lt;/title&gt;&lt;genre&gt;\3&lt;/genre&gt;&lt;year&gt;\4&lt;/year&gt;&lt;url cache=&quot;am-$$2-artist.html&quot;&gt;http://www.allmusic.com/artist/\1&lt;/url&gt;&lt;/entity&gt;" dest="5+">
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\2&lt;/title&gt;&lt;genre&gt;\3&lt;/genre&gt;&lt;year&gt;\4&lt;/year&gt;&lt;url cache=&quot;am-\1-artist.html&quot;&gt;http://www.allmusic.com/artist/\1&lt;/url&gt;&lt;/entity&gt;" dest="5+">
                                <expression repeat="yes" noclean="1,2">&lt;td&gt;&lt;a href=&quot;http://www.allmusic.com/artist/([^&quot;]*)&quot;&gt;([^&lt;]*)&lt;/a&gt;&lt;/td&gt;[^&gt;]*&gt;([^&lt;]*)&lt;/td&gt;[^&gt;]*&gt;([^&lt;]*)&lt;/td&gt;</expression>
                        </RegExp>
                        <expression noclean="1"/>
        </GetArtistSearchResults>
        <GetArtistDetails dest="3">
                <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="3">
-                       <RegExp input="$$2" conditional="htbthumbs" output="&lt;chain function=&quot;GetHTBThumbs&quot;&gt;\1&lt;/chain&gt;" dest="5">
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression noclean="1">&lt;meta name=&quot;title&quot; content=&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="\1" dest="8">
+                               <expression>http://www.allmusic.com/artist/([^&amp;&quot;/]*)/</expression>
+                       </RegExp>
+                       <RegExp input="$$7" conditional="htbthumbs" output="&lt;chain function=&quot;GetHTBThumbs&quot;&gt;\1&lt;/chain&gt;" dest="5">
                                <expression/>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;url cache=&quot;am-$$2-artist.html&quot; function=&quot;ParseAMGArtist&quot;&gt;http://www.allmusic.com/artist/\1&lt;/url&gt;" dest="5+">
-                               <expression>http://www.allmusic.com/artist/([^&amp;&quot;/]*)</expression>
+                       <RegExp input="$$2" conditional="lastfmartistthumbs" output="&lt;chain function=&quot;GetLastFMArtistThumbsByName&quot;&gt;\1&lt;/chain&gt;" dest="5+">
+                               <expression/>
                        </RegExp>
-                       <RegExp input="$$2" conditional="lastfmartistthumbs" output="&lt;chain function=&quot;GetLastFMArtistThumbs&quot;&gt;\1&lt;/chain&gt;" dest="5+">
+                       <RegExp input="$$8" output="&lt;url cache=&quot;am-\1-artist.html&quot; function=&quot;ParseAMGArtist&quot;&gt;http://www.allmusic.com/artist/\1&lt;/url&gt;" dest="5+">
                                <expression/>
                        </RegExp>
-                       <RegExp input="$$2" conditional="htbfanart" output="&lt;chain function=&quot;GetHTBFanart&quot;&gt;\1&lt;/chain&gt;" dest="5+">
+                       <RegExp input="$$7" conditional="htbfanart" output="&lt;chain function=&quot;GetHTBFanart&quot;&gt;\1&lt;/chain&gt;" dest="5+">
                                <expression/>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;url cache=&quot;am-$$2-biog.html&quot; function=&quot;GetAMGBiography&quot;&gt;http://www.allmusic.com/artist/\1/biography&lt;/url&gt;" dest="5+">
-                               <expression>&lt;a href=&quot;http://www.allmusic.com/artist/([^/]*)/biography"</expression>
+                       <RegExp input="$$8" output="&lt;url cache=&quot;am-\1-biog.html&quot; function=&quot;GetAMGBiography&quot;&gt;http://www.allmusic.com/artist/\1/biography&lt;/url&gt;" dest="5+">
+                               <expression/>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;url cache=&quot;am-$$2-discog.html&quot; function=&quot;GetAMGDiscography&quot;&gt;http://www.allmusic.com/artist/\1/discography&lt;/url&gt;" dest="5+">
-                               <expression>&lt;a href=&quot;http://www.allmusic.com/artist/([^/]*)/discography"</expression>
+                       <RegExp input="$$8" output="&lt;url cache=&quot;am-\1-discog.html&quot; function=&quot;GetAMGDiscography&quot;&gt;http://www.allmusic.com/artist/\1/discography&lt;/url&gt;" dest="5+">
+                               <expression/>
                        </RegExp>
                        <expression noclean="1"/>
                </RegExp>
diff --git a/addons/metadata.artists.allmusic.com/resources/language/Romanian/strings.xml b/addons/metadata.artists.allmusic.com/resources/language/Romanian/strings.xml
deleted file mode 100644 (file)
index 5520d51..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<strings>
-    <string id="30000">Descarcă imagini fundal (fanarts) de la HTBackdrops.com</string>
-    <string id="30001">Descarcă imagini artist de la Allmusic.com</string>
-    <string id="30002">Descarcă imagini artist de la Last.fm</string>
-    <string id="30003">Descarcă imagini artist de la HTBackdrops.com</string>
-</strings>
index 1c595b6..7ce046c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <strings>
-    <string id="30000">Descargar Fanarts de HTBackdrops.com</string>
+    <string id="30000">Descargar Fanart</string>
     <string id="30001">Descargar miniaturas de artista de Allmusic.com</string>
     <string id="30002">Descargar miniaturas de artista de Last.fm</string>
-    <string id="30003">Descargar miniaturas de artista de HTBackdrops.com</string>
+    <string id="30003">Descargar miniaturas de artista de HTBackdrops</string>
 </strings>
index 9a7fa81..a63aa7c 100644 (file)
@@ -2,11 +2,11 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: blittan-->
 <!--Email: blittan@xbmc.org-->
-<!--Date of translation: 09/11/2010-->
+<!--Date of translation: 12/26/2011-->
 <!--$Revision$-->
 <strings>
-  <string id="30000">Aktivera fanart</string>
+  <string id="30000">Ladda ner fanart från HTBackdrops.com</string>
   <string id="30001">Hämta artistminiatyr från Allmusic.com</string>
   <string id="30002">Hämta artistminiatyr från Last.fm</string>
-  <string id="30003">Hämta artistminiatyr från HTBackdrops</string>
+  <string id="30003">Hämta artistminiatyr från HTBackdrops.com</string>
 </strings>
\ No newline at end of file
index 9098b07..0fc8372 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="metadata.common.allmusic.com"
        name="AllMusic"
-       version="1.8.1"
+        version="1.9.0"
        provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
   <extension point="xbmc.addon.metadata">
     <platform>all</platform>
     <minversion>20000</minversion>
+    <summary lang="bg">Библиотека за сваляне на музикална инф. от AllMusic</summary>
     <summary lang="en">AllMusic Music Scraper Library</summary>
     <summary lang="de">Musik-Scraper für AllMusic.com</summary>
     <summary lang="es">Scraper de música de AllMusic</summary>
+    <summary lang="fi">AllMusic musiikkitietojen lataajan kirjasto</summary>
     <summary lang="fr">Scraper AllMusic pour la musique</summary>
     <summary lang="hu">AllMusic zenei adat leolvasó</summary>
     <summary lang="nl">AllMusic-scraperfuncties</summary>
     <summary lang="ru">Музыкальная Информация AllMusic</summary>
     <summary lang="se">Skrapa för AllMusic.com</summary>
     <summary lang="zh">AllMusic音乐刮削器代码库</summary>
+    <description lang="bg">Извлича инф. за музикални файлове от www.allmusic.com</description>
     <description lang="en">Download Music information from www.allmusic.com</description>
     <description lang="de">Downloade Musik Informationen von www.allmusic.com</description>
     <description lang="es">Descarga información musical de www.allmusic.com</description>
+    <description lang="fi">Lataa musiikkitietoja osoitteesta www.allmusic.com</description>
     <description lang="fr">Télécharger les infos musicales depuis www.allmusic.com</description>
     <description lang="hu">Zene információk letöltése a www.allmusic.com webhelyről</description>
     <description lang="nl">Muziekinformatie ophalen van www.allmusic.com</description>
index adea10a..dec3959 100644 (file)
@@ -15,7 +15,7 @@
        </GetAMGDiscography>
        <GetAMGBiography dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
-                       <RegExp input="$$1" output="&lt;biography&gt;\1&lt;/biography&gt;" dest="2">
+                       <RegExp input="$$1" output="&lt;biography&gt;Fetching artist biography from allmusic.com is not possible due to copyright reasons.&lt;/biography&gt;" dest="2">
                                <expression clear="yes">Biography&lt;/h2&gt;.*?&lt;/p&gt;(.*?)&lt;/p&gt;</expression>
                        </RegExp>
                        <expression noclean="1"/>
@@ -23,7 +23,7 @@
        </GetAMGBiography>
        <GetAMGReview dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
-                       <RegExp input="$$1" output="&lt;review&gt;\1&lt;/review&gt;" dest="2">
+                       <RegExp input="$$1" output="&lt;review&gt;Fetching album review from allmusic.com is not possible due to copyright reasons.&lt;/review&gt;" dest="2">
                                <expression>&lt;h2 class=&quot;title&quot;&gt;Review&lt;/h2&gt;.*?&lt;/p&gt;(.*?)&lt;/p&gt;</expression>
                        </RegExp>
                        <expression noclean="1" />
@@ -37,6 +37,9 @@
                        <RegExp input="$$1" output="&lt;born&gt;\1&lt;/born&gt;" dest="5+">
                                <expression>&lt;h3&gt;Born[^&gt;]*&gt;[^&gt;]*&gt;(.*?)&lt;/p&gt;</expression>
                        </RegExp>
+                       <RegExp input="$$1" output="&lt;born&gt;\1&lt;/born&gt;" dest="5+">
+                               <expression>&lt;h3&gt;Birth[^&gt;]*&gt;[^&gt;]*&gt;(.*?)&lt;/p&gt;</expression>
+                       </RegExp>
                        <RegExp input="$$1" output="&lt;died&gt;\1&lt;/died&gt;" dest="5+">
                                <expression>&lt;h3&gt;Died[^&gt;]*&gt;[^&gt;]*&gt;(.*?)&lt;/p&gt;</expression>
                        </RegExp>
index d6e9f48..b2f13a2 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="metadata.common.hdtrailers.net"
        name="HD-Trailers common scraper functions"
-       version="1.0.4"
+       version="1.0.7"
        provider-name="Bence Nádas (olympia)">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
@@ -9,27 +9,31 @@
   <extension point="xbmc.metadata.scraper.library"
              library="hdtrailers.xml"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Библиотека за сваляне на инф. от HD-Trailers.net</summary>
     <summary lang="en">HD-Trailers.net Scraper Library</summary>
     <summary lang="de">Scraper für Trailer von HD-Trailers.net</summary>
     <summary lang="es">Scraper de Trailers de HD-Trailers.net</summary>
+    <summary lang="fi">HD-Trailers.net trailerilataajan kirjasto</summary>
     <summary lang="fr">Scraper HD-Trailers.net pour les bande-annonces</summary>
     <summary lang="hu">HD-Trailers.net leolvasó-könyvtár</summary>
-    <summary lang="nl">HTBackdrops-scraperfuncties</summary>
-    <summary lang="pl">Scraper biblioteki HD-Trailers.net</summary>
+    <summary lang="nl">HD-Trailers.net Scraper Collectie</summary>
+    <summary lang="pl">Scraper zwiastunów HD-Trailers.net</summary>
     <summary lang="pt">Scraper de trailers de HD-Trailers.net</summary>
     <summary lang="ru">Обработчик для трейлеров с HD-Trailers.net</summary>
-    <summary lang="se">Skrapa för trailers från HD-Trailers.net</summary>
+    <summary lang="se">Skrapa för HD-Trailers.net</summary>
     <summary lang="zh">HD-Trailers.net刮削器代码库</summary>
+    <description lang="bg">Сваля трейлъри на филми от www.hd-trailers.net</description>
     <description lang="en">Download Movie Trailers from www.hd-trailers.net</description>
     <description lang="de">Downloade Trailer von www.hd-trailers.net</description>
     <description lang="es">Descarga trailers de www.hd-trailers.net</description>
+    <description lang="fi">Lataa elokuvien trailereita osoitteesta www.hd-trailers.net</description>
     <description lang="fr">Télécharge les bande-annonces de films depuis www.hd-trailers.net</description>
     <description lang="hu">Filmelőzetesek letöltése a www.hd-trailers.net-ről</description>
-    <description lang="nl">Achtergronden ophalen van www.htbackdrops.com</description>
+    <description lang="nl">Download trailers van www.hd-trailers.net</description>
     <description lang="pl">Pobieraj zwiastuny filmowe z www.hd-trailers.net</description>
     <description lang="pt">Descarregar trailers de www.hd-trailers.net</description>
     <description lang="ru">Загружать трейлеры с www.hd-trailers.net</description>
-    <description lang="se">Ladda ner trailers från www.hd-trailers.net</description>
+    <description lang="se">Ladda ner filmtrailers från www.hd-trailers.net</description>
     <description lang="zh">从www.hd-trailers.net下载电影预告片</description>
     <minversion>20000</minversion>
     <platform>all</platform>
index 1c1aadc..89cac15 100644 (file)
@@ -1,43 +1,43 @@
 <scraperfunctions>
        <GetHDTrailersnet480p dest="3">
-               <RegExp input="$$6" output="&lt;details&gt;&lt;url function=&quot;Parse480pTrailer&quot;&gt;http://www.hd-trailers.net/blog/?s=&quot;\1%20%28Theatrical%20Trailer%29%22&lt;/url&gt;&lt;/details&gt;" dest="3">
-                       <RegExp input="$$1" output="\1" dest="6">
-                               <expression noclean="1" fixchars="1" trim="1" encode="1">(.*)</expression>
+               <RegExp input="$$6" output="&lt;details&gt;&lt;url function=&quot;Parse480pTrailer&quot; cache=&quot;hd-trailers-\1.xml&quot;&gt;http://xbmc.hd-trailers.net/movie/\1&lt;/url&gt;&lt;/details&gt;" dest="3">
+                       <RegExp input="$$1" output="\1-" dest="6">
+                               <expression repeat="yes" fixchars="1" trim="1">([\w]+)</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </GetHDTrailersnet480p>
        <GetHDTrailersnet720p dest="3">
-               <RegExp input="$$6" output="&lt;details&gt;&lt;url function=&quot;Parse720pTrailer&quot;&gt;http://www.hd-trailers.net/blog/?s=&quot;\1%20%28Theatrical%20Trailer%29%22&lt;/url&gt;&lt;/details&gt;" dest="3">
-                       <RegExp input="$$1" output="\1" dest="6">
-                               <expression noclean="1" fixchars="1" trim="1" encode="1">(.*)</expression>
+               <RegExp input="$$6" output="&lt;details&gt;&lt;url function=&quot;Parse720pTrailer&quot; cache=&quot;hd-trailers-\1.xml&quot;&gt;http://xbmc.hd-trailers.net/movie/\1&lt;/url&gt;&lt;/details&gt;" dest="3">
+                       <RegExp input="$$1" output="\1-" dest="6">
+                               <expression repeat="yes" fixchars="1" trim="1">([\w]+)</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </GetHDTrailersnet720p>
        <GetHDTrailersnet1080p dest="3">
-               <RegExp input="$$6" output="&lt;details&gt;&lt;url function=&quot;Parse1080pTrailer&quot;&gt;http://www.hd-trailers.net/blog/?s=&quot;\1%20%28Theatrical%20Trailer%29%22&lt;/url&gt;&lt;/details&gt;" dest="3">
-                       <RegExp input="$$1" output="\1" dest="6">
-                               <expression noclean="1" fixchars="1" trim="1" encode="1">(.*)</expression>
+               <RegExp input="$$6" output="&lt;details&gt;&lt;url function=&quot;Parse1080pTrailer&quot; cache=&quot;hd-trailers-\1.xml&quot;&gt;http://xbmc.hd-trailers.net/movie/\1&lt;/url&gt;&lt;/details&gt;" dest="3">
+                       <RegExp input="$$1" output="\1-" dest="6">
+                               <expression repeat="yes" fixchars="1" trim="1">([\w]+)</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </GetHDTrailersnet1080p>
        <Parse480pTrailer dest="5">
                <!--Fetch 480p trailer link from hdtrailers.net-->
-               <RegExp input="$$1" output="&lt;details&gt;&lt;trailer&gt;http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\1&lt;/trailer&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1">sid=(\d*)"&gt;480p&lt;/a&gt;</expression>
+               <RegExp input="$$1" output="&lt;details&gt;&lt;trailer&gt;http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\2&lt;/trailer&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1">&quot;&gt;(Theatrical )?Trailer&lt;/td&gt;.*?sid=(\d*)&quot; rel=&quot;lightbox\[res480p</expression>
                </RegExp>
        </Parse480pTrailer>
        <Parse720pTrailer dest="5">
                <RegExp input="$$6" output="&lt;details&gt;&lt;trailer&gt;\1&lt;/trailer&gt;&lt;/details&gt;" dest="5">
                        <!--Fallback to fetch 480p trailer link if 720p is not available-->
-                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\1" dest="6">
-                               <expression noclean="1">sid=(\d*)"&gt;480p&lt;/a&gt;</expression>
+                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\2" dest="6">
+                               <expression noclean="1">&quot;&gt;(Theatrical )?Trailer&lt;/td&gt;.*?sid=(\d*)&quot; rel=&quot;lightbox\[res480p</expression>
                        </RegExp>
                        <!--Fetch 720p trailer link from hdtrailers.net-->
-                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\1" dest="6">
-                               <expression noclean="1">sid=(\d*)"&gt;720p&lt;/a&gt;</expression>
+                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\2" dest="6">
+                               <expression noclean="1">&quot;&gt;(Theatrical )?Trailer&lt;/td&gt;.*?sid=(\d*)&quot; rel=&quot;lightbox\[res720p</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        <Parse1080pTrailer dest="5">
                <RegExp input="$$6" output="&lt;details&gt;&lt;trailer&gt;\1&lt;/trailer&gt;&lt;/details&gt;" dest="5">
                        <!--Fallback to fetch 480p trailer link if 720p and 1080p are not available-->
-                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\1" dest="6">
-                               <expression noclean="1">sid=(\d*)"&gt;480p&lt;/a&gt;</expression>
+                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\2" dest="6">
+                               <expression noclean="1">&quot;&gt;(Theatrical )?Trailer&lt;/td&gt;.*?sid=(\d*)&quot; rel=&quot;lightbox\[res480p</expression>
                        </RegExp>
                        <!--Fallback to fetch 720p trailer link if 1080p is not available-->
-                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\1" dest="6">
-                               <expression noclean="1">sid=(\d*)"&gt;720p&lt;/a&gt;</expression>
+                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\2" dest="6">
+                               <expression noclean="1">&quot;&gt;(Theatrical )?Trailer&lt;/td&gt;.*?sid=(\d*)&quot; rel=&quot;lightbox\[res720p</expression>
                        </RegExp>
                        <!--Fetch 1080p trailer link from hdtrailers.net-->
-                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\1" dest="6">
-                               <expression noclean="1">sid=(\d*)"&gt;1080p&lt;/a&gt;</expression>
+                       <RegExp input="$$1" output="http://playlist.yahoo.com/makeplaylist.dll?sdm=web&amp;pt=rd&amp;sid=\2" dest="6">
+                               <expression noclean="1">&quot;&gt;(Theatrical )?Trailer&lt;/td&gt;.*?sid=(\d*)&quot; rel=&quot;lightbox\[res1080p</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
index f606e3d..c77de5f 100644 (file)
   <extension point="xbmc.addon.metadata">
     <platform>all</platform>
     <minversion>20000</minversion>
+    <summary lang="bg">Библиотека за сваляне на инф. от HTBackdrops</summary>
     <summary lang="en">HTBackdrops Scraper Library</summary>
     <summary lang="de">Scraper für Hintergründe von HTBackdrops</summary>
-    <summary lang="es">Scraper de fondos de HTBackdrops</summary>
+    <summary lang="es">Scraper de HTBackdrops</summary>
+    <summary lang="fi">HTBackdrops taustakuvalataajan kirjasto</summary>
     <summary lang="fr">Scraper HTBackdrops</summary>
     <summary lang="hu">HTBackdrops leolvasó-könyvtár</summary>
     <summary lang="nl">HTBackdrops-scraperfuncties</summary>
     <summary lang="pl">Scraper biblioteki HTBackdrops</summary>
     <summary lang="pt">Biblioteca de fundos HTBackdrops</summary>
     <summary lang="ru">Обработчик Фоновых изображений с HTBackdrops</summary>
-    <summary lang="se">Skrapa för bakgrunder från HTBackdrops</summary>
+    <summary lang="se">Skrapa för HTBackdrops</summary>
     <summary lang="zh">HTBackdrops刮削器代码库</summary>
+    <description lang="bg">Сваля декорации от www.htbackdrops.com</description>
     <description lang="en">Download backdrops from www.htbackdrops.com</description>
     <description lang="de">Downloade Hintergründe von www.htbackdrops.com</description>
-    <description lang="es">Descarga fondos de www.htbackdrops.com</description>
+    <description lang="es">Descarga fanart y fotos de artistas de www.htbackdrops.com</description>
+    <description lang="fi">Lataa taustakuvia osoitteesta www.htbackdrops.com</description>
     <description lang="fr">Télécharge les backdrops depuis www.htbackgrops.com</description>
     <description lang="hu">Fanartképek letöltése www.htbackdrops.com webhelyről</description>
     <description lang="nl">Achtergronden ophalen van www.htbackdrops.com</description>
     <description lang="pl">Pobieraj tła z www.htbackdrops.com</description>
     <description lang="pt">Descarregar fundos de www.htbackdrops.com</description>
     <description lang="ru">Загружать фоновые изображения с www.htbackdrops.com</description>
-    <description lang="se">Ladda ner bakgrunder från www.htbackdrops.com</description>
+    <description lang="se">Ladda ner bakgrundsbilder från www.htbackdrops.com</description>
     <description lang="zh">从www.htbackdrops.com下载背景图</description>
   </extension>
 </addon>
index d68b97e..59a4302 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="metadata.common.imdb.com"
        name="IMDB common scraper functions"
-       version="2.0.7"
+       version="2.1.9"
        provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
   <extension point="xbmc.addon.metadata">
     <platform>all</platform>
     <minversion>20000</minversion>
+    <summary lang="bg">Библиотека за сваляне на инф. от IMDB</summary>
     <summary lang="en">IMDB Scraper Library</summary>
-    <summary lang="es">Scraper de películas de IMDB</summary>
+    <summary lang="fi">IMDB elokuvatietojen lataaja</summary>
     <summary lang="hu">IMDB leolvasó-könyvtár</summary>
     <summary lang="kr">IMDB 스크래퍼 라이브러리</summary>
     <summary lang="nl">IMDB Scraper Bibliotheek</summary>
     <summary lang="pl">Scraper IMDb</summary>
     <summary lang="pt">Scraper de filmes IMDb</summary>
-    <summary lang="se">IMDB Skrapbibliotek</summary>
+    <summary lang="se">Skrapa för IMDB</summary>
+    <description lang="bg">Сваля информация за филми от www.imdb.com</description>
     <description lang="en">Download Movie information from www.imdb.com</description>
-    <description lang="es">Descarga información de películas de www.imdb.com</description>
+    <description lang="fi">Lataa elokuvatietoja osoitteesta www.imdb.com</description>
     <description lang="hu">Film információk letöltése a www.imdb.com webhelyről</description>
     <description lang="kr">www.imdb.com 에서 영화 정보 다운로드</description>
     <description lang="nl">Download film informatie van www.imdb.com</description>
index db5d118..a19b89e 100644 (file)
@@ -1,3 +1,36 @@
+[B]2.1.9[/B]
+- fixed: plot when contains html links (once again)
+
+[B]2.1.8[/B]
+- revert: two latest changes - cause crash some times
+
+[B]2.1.7[/B]
+- fixed: typo in fixing previous plot issue
+
+[B]2.1.6[/B]
+- fixed: plot when contains html links
+
+[B]2.1.5[/B]
+- fixed: Cleanup and factored out Genres to common
+
+[B]2.1.4[/B]
+- fixed: fetching directors and writers due to site changes
+
+[B]2.1.3[/B]
+- fixed: make sure IMDb rating is geting fetched in every region
+
+[B]2.1.2[/B]
+- fixed: IMDb rating after another site change
+
+[B]2.1.1[/B]
+- fixed: IMDb rating
+
+[B]2.1.0[/B]
+- fixed: actor roles and remove scraping of imdb trailers
+
+[B]2.0.8[/B]
+- fixed: actor images
+
 [B]2.0.7[/B]
 - changed: fix actors due to IMDb changes
 
@@ -23,4 +56,4 @@
 - changed: adapted new IMDb layout
 
 [B]1.0.5[/B]
-- fixed: tack /combined onto the end of the url to work around the new layout of IMDb
\ No newline at end of file
+- fixed: tack /combined onto the end of the url to work around the new layout of IMDb
index b112aa6..5633908 100644 (file)
 <scraperfunctions>
-       <GetIMDBRatingById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBRating&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBRatingById>
-       <GetIMDBPlotById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBPlot&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBPlotById>
-       <GetIMDBCastById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBCast&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBCastById>
-       <GetIMDBScaledCastById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBScaledCast&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBScaledCastById>
-       <GetIMDBDirectorsById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBDirectors&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBDirectorsById>
-       <GetIMDBWritersById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBWriters&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBWritersById>
-       <GetIMDBFullCastById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-combined.html&quot; function=&quot;ParseIMDBFullCast&quot;&gt;http://akas.imdb.com/title/$$1/combined&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBFullCastById>
-       <GetIMDBScaledFullCastById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-combined.html&quot; function=&quot;ParseIMDBScaledFullCast&quot;&gt;http://akas.imdb.com/title/$$1/combined&lt;/url&gt;&lt;/details&gt;" dest="5">
+       <GetIMDBGenresById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBGenres&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
                        <expression noclean="1" />
                </RegExp>
-       </GetIMDBScaledFullCastById>
-       <GetIMDBFullDirectorsById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-combined.html&quot; function=&quot;ParseIMDBFullDirectors&quot;&gt;http://akas.imdb.com/title/$$1/combined&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBFullDirectorsById>
-       <GetIMDBFullWritersById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-combined.html&quot; function=&quot;ParseIMDBFullWriters&quot;&gt;http://akas.imdb.com/title/$$1/combined&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1" />
-               </RegExp>
-       </GetIMDBFullWritersById>
-       <GetIMDBThumbsById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-posters.html&quot; function=&quot;ParseIMDBThumbs&quot;&gt;http://akas.imdb.com/title/$$1/posters&lt;/url&gt;&lt;/details&gt;" dest="5">
+       </GetIMDBGenresById>
+       <ParseIMDBGenres dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="&lt;genre&gt;\1&lt;/genre&gt;" dest="2">
+                               <expression repeat="yes">itemprop=&quot;genre&quot;[^&gt;]+&gt;([^&lt;]+)&lt;/a&gt;</expression>
+                       </RegExp>
                        <expression noclean="1" />
                </RegExp>
-       </GetIMDBThumbsById>
-       <GetIMDBTrailerById dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;GetIMDBTrailerPage&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
+       </ParseIMDBGenres>
+
+       <GetIMDBRatingById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBRating&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
                        <expression noclean="1" />
                </RegExp>
-       </GetIMDBTrailerById>
+       </GetIMDBRatingById>
        <ParseIMDBRating dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="&lt;rating&gt;\1&lt;/rating&gt;&lt;votes&gt;\2&lt;/votes&gt;" dest="2">
-                               <expression>&lt;span class=&quot;rating-rating&quot;&gt;([0-9.]+).*?&gt;([0-9,]+) votes&lt;/a&gt;</expression>
+                               <expression>&lt;span itemprop=&quot;ratingValue&quot;&gt;([0-9.]+).*?&gt;.*?title=&quot;([0-9,]+)\s</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBRating>
+
+       <GetIMDBPlotById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBPlot&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBPlotById>
        <ParseIMDBPlot dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="&lt;plot&gt;\1&lt;/plot&gt;" dest="2">
-                               <expression trim="1">&lt;h2&gt;Storyline&lt;/h2&gt;\n+&lt;p&gt;([^&lt;]+)</expression>
+                               <expression trim="1">&lt;h2&gt;Storyline&lt;/h2&gt;\n+&lt;p&gt;(.*?)&lt;[^a/]</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBPlot>
+
+       <GetIMDBCastById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBCast&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBCastById>
        <ParseIMDBCast dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="\1" dest="6">
                                <expression noclean="1">&lt;table class=&quot;cast_list&quot;&gt;(.*?)&lt;/table&gt;</expression>
                        </RegExp>
-                       <RegExp input="$$6" output="&lt;actor&gt;&lt;thumb&gt;\2_SX512_SY512_\3&lt;/thumb&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\4&lt;/role&gt;&lt;/actor&gt;" dest="7">
-                               <expression repeat="yes" clear="yes" trim="3,4" noclean="1,2">&lt;img \n[^a]*alt=&quot;([^&quot;]*)&quot;[^&quot;]*&quot;[^&quot;]*&quot;[^s]*src=&quot;(?:([^&quot;]*\.)[^&quot;]*(\.jpg))?[^&gt;]*.*?ter&quot;&gt;[^&gt;]*&gt;[^&gt;]*&gt;([^&lt;]*)?</expression>
+                       <RegExp input="$$6" output="&lt;actor&gt;&lt;thumb&gt;\2_SX512_SY512_\3&lt;/thumb&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\5&lt;/role&gt;&lt;/actor&gt;" dest="7">
+                               <expression repeat="yes" clear="yes" trim="3,4" noclean="1,2">&lt;noscript&gt;&lt;img \n[^a]*alt=&quot;([^&quot;]*)&quot;[^&quot;]*&quot;[^&quot;]*&quot;[^s]*src=&quot;(?:([^&quot;]*\.)[^&quot;]*(\.jpg))[^&gt;]*.*?ter"&gt;[^&gt;]*&gt;\n\s*(&lt;[^&gt;]*&gt;)?([^&lt;\(]*)?</expression>
+                       </RegExp>
+                       <RegExp input="$$6" output="&lt;actor&gt;&lt;thumb&gt;&lt;/thumb&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\3&lt;/role&gt;&lt;/actor&gt;" dest="7+">
+                               <expression repeat="yes" trim="1,2" noclean="1,2">&lt;img \n[^a]*alt=&quot;([^&quot;]*)&quot;[^&quot;]*&quot;[^&quot;]*&quot;[^s]*src=&quot;(?:[^&quot;]*\.[^&quot;]*\.png)&quot; class=&quot;&quot; /&gt;*.*?ter"&gt;[^&gt;]*&gt;\n\s*(&lt;[^&gt;]*&gt;)?([^&lt;\(]*)?</expression>
                        </RegExp>
                        <RegExp input="$$7" output="&lt;actor&gt;&lt;thumb&gt;\1&lt;/thumb&gt;\2&lt;/actor&gt;" dest="2+">
-                               <expression repeat="yes" clear="yes" noclean="1,2,3">&lt;actor&gt;&lt;thumb&gt;(?:(http.*?)|_SX[0-9]+_SY[0-9]+_)&lt;/thumb&gt;(.*?)&lt;/actor&gt;</expression>
+                               <expression repeat="yes" clear="yes" noclean="1,2,3">&lt;actor&gt;&lt;thumb&gt;(?:(http.*?)|_SX[0-9]+_SY[0-9]+_)?&lt;/thumb&gt;(.*?)&lt;/actor&gt;</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBCast>
+
+       <GetIMDBScaledCastById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBScaledCast&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBScaledCastById>
        <ParseIMDBScaledCast dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="\1" dest="6">
                                <expression noclean="1">&lt;table class=&quot;cast_list&quot;&gt;(.*?)&lt;/table&gt;</expression>
                        </RegExp>
-                       <RegExp input="$$6" output="&lt;actor&gt;&lt;thumb&gt;\2_SX$INFO[imdbscale]_SY$INFO[imdbscale]_\3&lt;/thumb&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\4&lt;/role&gt;&lt;/actor&gt;" dest="7">
-                               <expression repeat="yes" clear="yes" trim="3,4" noclean="1,2">&lt;img \n[^a]*alt=&quot;([^&quot;]*)&quot;[^&quot;]*&quot;[^&quot;]*&quot;[^s]*src=&quot;(?:([^&quot;]*\.)[^&quot;]*(\.jpg))?[^&gt;]*.*?ter&quot;&gt;[^&gt;]*&gt;[^&gt;]*&gt;([^&lt;]*)?</expression>
+                       <RegExp input="$$6" output="&lt;actor&gt;&lt;thumb&gt;\2_SX$INFO[imdbscale]_SY$INFO[imdbscale]_\3&lt;/thumb&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\5&lt;/role&gt;&lt;/actor&gt;" dest="7">
+                               <expression repeat="yes" clear="yes" trim="3,4" noclean="1,2">&lt;noscript&gt;&lt;img \n[^a]*alt=&quot;([^&quot;]*)&quot;[^&quot;]*&quot;[^&quot;]*&quot;[^s]*src=&quot;(?:([^&quot;]*\.)[^&quot;]*(\.jpg))[^&gt;]*.*?ter"&gt;[^&gt;]*&gt;\n\s*(&lt;[^&gt;]*&gt;)?([^&lt;\(]*)?</expression>
+                       </RegExp>
+                       <RegExp input="$$6" output="&lt;actor&gt;&lt;thumb&gt;&lt;/thumb&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\3&lt;/role&gt;&lt;/actor&gt;" dest="7+">
+                               <expression repeat="yes" trim="1,2" noclean="1,2">&lt;img \n[^a]*alt=&quot;([^&quot;]*)&quot;[^&quot;]*&quot;[^&quot;]*&quot;[^s]*src=&quot;(?:[^&quot;]*\.[^&quot;]*\.png)&quot; class=&quot;&quot; /&gt;*.*?ter"&gt;[^&gt;]*&gt;\n\s*(&lt;[^&gt;]*&gt;)?([^&lt;\(]*)?</expression>
                        </RegExp>
                        <RegExp input="$$7" output="&lt;actor&gt;&lt;thumb&gt;\1&lt;/thumb&gt;\2&lt;/actor&gt;" dest="2+">
-                               <expression repeat="yes" clear="yes" noclean="1,2,3">&lt;actor&gt;&lt;thumb&gt;(?:(http.*?)|_SX[0-9]+_SY[0-9]+_)&lt;/thumb&gt;(.*?)&lt;/actor&gt;</expression>
+                               <expression repeat="yes" clear="yes" noclean="1,2,3">&lt;actor&gt;&lt;thumb&gt;(?:(http.*?)|_SX[0-9]+_SY[0-9]+_)?&lt;/thumb&gt;(.*?)&lt;/actor&gt;</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBScaledCast>
+
+       <GetIMDBDirectorsById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBDirectors&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBDirectorsById>
        <ParseIMDBDirectors dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="\1" dest="6">
                                <expression clear="yes" noclean="1">Director[s]?.*?&lt;/h4&gt;(.*?)&lt;div class</expression>
                        </RegExp>
                        <RegExp input="$$6" output="&lt;director&gt;\1&lt;/director&gt;" dest="2+">
-                               <expression repeat="yes" fixchars="1" clear="yes">&lt;a  href=&quot;/name[^&gt;]*&gt;([^&lt;]*)&lt;</expression>
+                               <expression repeat="yes" fixchars="1" clear="yes">href=&quot;/name[^&gt;]*&gt;([^&lt;]*)&lt;</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBDirectors>
+
+       <GetIMDBWritersById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-main.html&quot; function=&quot;ParseIMDBWriters&quot;&gt;http://akas.imdb.com/title/$$1/&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBWritersById>
        <ParseIMDBWriters dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="\1" dest="6">
                                <expression noclean="1">Writer[s]?.*?&lt;/h4&gt;(.*?)&lt;div class</expression>
                        </RegExp>
                        <RegExp input="$$6" output="&lt;credits&gt;\1&lt;/credits&gt;" dest="2+">
-                               <expression repeat="yes" fixchars="1">&lt;a  href=&quot;/name[^&gt;]*&gt;([^&lt;]*)&lt;</expression>
+                               <expression repeat="yes" fixchars="1">href=&quot;/name[^&gt;]*&gt;([^&lt;]*)&lt;</expression>
                        </RegExp>
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBWriters>
+
+       <GetIMDBFullCastById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-combined.html&quot; function=&quot;ParseIMDBFullCast&quot;&gt;http://akas.imdb.com/title/$$1/combined&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBFullCastById>
        <ParseIMDBFullCast dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="\1" dest="6">
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBFullCast>
+
+       <GetIMDBScaledFullCastById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-combined.html&quot; function=&quot;ParseIMDBScaledFullCast&quot;&gt;http://akas.imdb.com/title/$$1/combined&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBScaledFullCastById>
        <ParseIMDBScaledFullCast dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="\1" dest="6">
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBScaledFullCast>
+
+       <GetIMDBFullDirectorsById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-combined.html&quot; function=&quot;ParseIMDBFullDirectors&quot;&gt;http://akas.imdb.com/title/$$1/combined&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBFullDirectorsById>
        <ParseIMDBFullDirectors dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp conditional="fullcredits" input="$$1" output="\1" dest="6">
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBFullDirectors>
+
+       <GetIMDBFullWritersById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-combined.html&quot; function=&quot;ParseIMDBFullWriters&quot;&gt;http://akas.imdb.com/title/$$1/combined&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBFullWritersById>
        <ParseIMDBFullWriters dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp conditional="fullcredits" input="$$1" output="\1" dest="6">
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBFullWriters>
+
+       <GetIMDBThumbsById dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;$$1-posters.html&quot; function=&quot;ParseIMDBThumbs&quot;&gt;http://akas.imdb.com/title/$$1/posters&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetIMDBThumbsById>
        <ParseIMDBThumbs dest="5">
                <RegExp input="$$6" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
                        <RegExp input="$$1" output="\1_SX$INFO[imdbscale]_SY$INFO[imdbscale]_\2" dest="4">
                        <expression noclean="1" />
                </RegExp>
        </ParseIMDBThumbs>
-       <GetIMDBTrailerPage dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url function=&quot;ParseIMDBTrailer&quot;&gt;http://akas.imdb.com/video/imdb/vi\1/player&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression>/vi([0-9]*)/</expression>
-               </RegExp>
-       </GetIMDBTrailerPage>
-       <ParseIMDBTrailer dest="5">
-               <RegExp input="$$2" output="&lt;details&gt;&lt;trailer urlencoded=&quot;yes&quot;&gt;\1&lt;/trailer&gt;&lt;/details&gt;" dest="5">
-                       <RegExp input="$$1" output="\1" dest="2">
-                               <expression noclean="1">&quot;file&quot;[^&quot;]*&quot;([^&quot;]*)</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="$$2/\1" dest="2">
-                               <expression noclean="1">&quot;id&quot;[^&quot;]*&quot;([^&quot;]*)</expression>
-                       </RegExp>
-                       <expression noclean="1" />
-               </RegExp>
-       </ParseIMDBTrailer>
 </scraperfunctions>
index c51fecf..981cf95 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="metadata.common.last.fm"
        name="Last.FM"
-       version="1.0.4"
+       version="1.1.0"
        provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
   <extension point="xbmc.addon.metadata">
     <platform>all</platform>
     <minversion>20000</minversion>
+    <summary lang="bg">Библиотека за сваляне на инф. от LastFM</summary>
     <summary lang="en">LastFM Scraper Library</summary>
     <summary lang="de">Musik-Scraper für LastFM</summary>
     <summary lang="es">Scraper de música de LastFM</summary>
+    <summary lang="fi">LastFM musiikkitietojen lataaja</summary>
     <summary lang="fr">Scraper LastFM</summary>
     <summary lang="hu">LastFM leolvasó-könyvtár</summary>
     <summary lang="nl">LastFM-scraperfuncties</summary>
     <summary lang="ru">Обработчик для LastFM</summary>
     <summary lang="se">Skrapebibliotek för LastFM</summary>
     <summary lang="zh">LastFM刮削器代码库</summary>
+    <description lang="bg">Извлича инф. за музикални файлове от www.last.fm</description>
     <description lang="en">Download Music information from www.last.fm</description>
     <description lang="de">Downloade Musik informationen von www.last.fm</description>
-    <description lang="es">Descarga información musical de www.last.fm</description>
+    <description lang="es">Descargar información musical de www.last.fm</description>
+    <description lang="fi">Lataa musiikkitietoja osoitteesta www.last.fm</description>
     <description lang="fr">Télécharge les infos musicales depuis www.last.fm</description>
     <description lang="hu">Zene információk letöltése a www.last.fm webhelyről</description>
     <description lang="nl">Muziekinfo ophalen van LastFM</description>
index c31e640..6bd19c6 100644 (file)
                        <expression noclean="1"/>
                </RegExp>
        </ParseLastFMDiscography>
-       <GetLastFMArtistThumbs dest="5">
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url function=&quot;ParseLastFMArtistThumbs&quot;&gt;http://ws.audioscrobbler.com/2.0/?method=artist.getimages&amp;amp;artist=\1&amp;amp;api_key=71e468a84c1f40d4991ddccc46e40f1b&lt;/url&gt;&lt;/details&gt;" dest="5">
-                       <expression noclean="1"/>
+       <GetLastFMArtistThumbsByID dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url function=&quot;ParseLastFMArtistThumbs&quot;&gt;http://ws.audioscrobbler.com/2.0/?method=artist.getimages&amp;mbid=\1&amp;api_key=71e468a84c1f40d4991ddccc46e40f1b&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
+               </RegExp>
+       </GetLastFMArtistThumbsByID>
+       <GetLastFMArtistThumbsByName dest="5">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url function=&quot;ParseLastFMArtistThumbs&quot;&gt;http://ws.audioscrobbler.com/2.0/?method=artist.getimages&amp;artist=\1&amp;api_key=71e468a84c1f40d4991ddccc46e40f1b&lt;/url&gt;&lt;/details&gt;" dest="5">
+                       <expression noclean="1" />
                </RegExp>
-       </GetLastFMArtistThumbs>
+       </GetLastFMArtistThumbsByName>
        <ParseLastFMArtistThumbs dest="5">
-               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
-                       <RegExp input="$$1" output="&lt;thumb&gt;\1&lt;/thumb&gt;" dest="2">
-                               <expression noclean="1" repeat="yes">&lt;size name=&quot;original&quot;[^&gt;]*&gt;([^&lt;]*)&lt;/size&gt;</expression>
+               <RegExp input="$$6" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="&lt;thumb preview=&quot;\2&quot;&gt;\1&lt;/thumb&gt;" dest="6">
+                               <expression repeat="yes" noclean="1">&lt;size name="original"[^&gt;]*&gt;([^&lt;]*)&lt;[^&lt;]*&lt;size name="large"[^&gt;]*&gt;([^&lt;]*)&lt;</expression>
                        </RegExp>
-                       <expression noclean="1"></expression>
+                       <expression noclean="1">(.+)</expression>
                </RegExp>
        </ParseLastFMArtistThumbs>
        <GetLastFMAlbumThumbs dest="5">
@@ -40,5 +45,5 @@
                        </RegExp>
                        <expression noclean="1"></expression>
                </RegExp>
-       </ParseLastFMAlbumThumbs>       
+       </ParseLastFMAlbumThumbs>
 </scraperfunctions>
index 0759c89..be0684d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="metadata.common.themoviedb.org"
        name="The MovieDB common scraper functions"
-       version="1.0.7"
+       version="2.1.4"
        provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
   <extension point="xbmc.addon.metadata">
     <platform>all</platform>
     <minversion>20000</minversion>
+    <summary lang="bg">Библиотека за сваляне на инф. от TMDb</summary>
     <summary lang="en">TMDb Scraper Library</summary>
     <summary lang="es">Scraper de peliculas de TMDb</summary>
+    <summary lang="fi">TMDb elokuvatietojen lataajan kirjasto</summary>
     <summary lang="fr">Scraper TMDb</summary>
     <summary lang="hu">TMDb leolvasó-könyvtár</summary>
-    <summary lang="nl">TMDb-scraperfuncties</summary>                  <!--Dit gaat over de functies, niet over de mediabibliotheek!-->
+    <summary lang="nl">TMDb-scraperfuncties</summary>
     <summary lang="pl">Scraper biblioteki TMDb</summary>
     <summary lang="pt">Scraper de filmes TMDb</summary>
     <summary lang="ro">Bibliotecă catalog TMDb</summary>
     <summary lang="ru">Обработчик для TMDb</summary>
     <summary lang="se">Skrapebibliotek för TMDb</summary>
     <summary lang="zh">TMDb刮削器代码库</summary>
+    <description lang="bg">Сваля миниатюри и fanarts от www.themoviedb.org</description>
     <description lang="en">Download thumbs and fanarts from www.themoviedb.org</description>
     <description lang="es">Descarga posters y fanart de www.themoviedb.org</description>
+    <description lang="fi">Lataa pienoiskuvia ja fanitaidetta www.themoviedb.org -sivustolta</description>
     <description lang="fr">Télécharge vignettes et backdrops depuis www.themoviedb.org</description>
     <description lang="hu">Bélyeg- és fanartképek letöltése a www.themoviedb.org webhelyről</description>
     <description lang="nl">Miniaturen en fanart ophalen van www.themoviedb.org</description>
index cbf50d0..a270f4c 100644 (file)
 <scraperfunctions>
-       <GetTMDBFanartByIdChain dest="4">
+
+       <GetTMDBCertificationsByIdChain dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBCertifications&quot; cache=&quot;tmdb-cert-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/releases?api_key=57983e31fb435df4df77afb854740ea9&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBCertificationsByIdChain>
+       <ParseTMDBCertifications dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="&lt;mpaa&gt;Rated \1&lt;/mpaa&gt;" dest="2">
+                               <expression fixchars="1">&quot;US&quot;,&quot;certification&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseTMDBCertifications>
+
+       <GetTMDBPlotByIdChain clearbuffers="no" dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="\1" dest="8">
+                               <expression clear="yes" noclean="1" />
+                       </RegExp>
+                       <RegExp input="$$8" output="&lt;url function=&quot;ParseTMDBPlot&quot; cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBPlotByIdChain>
+       <ParseTMDBPlot dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="\1" dest="9">
+                               <expression clear="yes" fixchars="1">&quot;overview&quot;:&quot;(.*?)&quot;,&quot;</expression>
+                       </RegExp>
+                       <RegExp input="$$9" output="&lt;url function=&quot;ParseFallbackTMDBPlot&quot; cache=&quot;tmdb-en-$$8.json&quot;&gt;http://api.themoviedb.org/3/movie/$$8?api_key=57983e31fb435df4df77afb854740ea9&amp;language=en&lt;/url&gt;" dest="2">
+                               <expression>^$</expression>
+                       </RegExp>
+                       <RegExp input="$$9" output="&lt;plot&gt;\1&lt;/plot&gt;" dest="2">
+                               <expression>(.+)</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseTMDBPlot>
+       <ParseFallbackTMDBPlot dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="&lt;plot&gt;\1&lt;/plot&gt;" dest="2">
+                               <expression clear="yes" fixchars="1">&quot;overview&quot;:&quot;(.*?)&quot;,&quot;</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseFallbackTMDBPlot>
+
+       <GetTMDBSetByIdChain dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBSet&quot; cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBSetByIdChain>
+       <ParseTMDBSet dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="&lt;set&gt;\1&lt;/set&gt;" dest="2">
+                               <expression noclean="1">&quot;belongs_to_collection&quot;:{&quot;id&quot;:[0-9]+,&quot;name&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseTMDBSet>
+
+       <GetTMDBCastByIdChain dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBCast&quot; cache=&quot;tmdb-cast-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/casts?api_key=57983e31fb435df4df77afb854740ea9&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBCastByIdChain>
+       <ParseTMDBCast dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;cast&quot;:\[([^\]]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$7" output="&lt;actor&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\2&lt;/role&gt;&lt;/actor&gt;" dest="2">
+                               <expression repeat="yes" fixchars="1">&quot;name&quot;:&quot;([^&quot;]*)&quot;,&quot;character&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$7" output="&lt;actor&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\2&lt;/role&gt;&lt;thumb&gt;http://cf2.imgobject.com/t/p/original\3&lt;/thumb&gt;&lt;/actor&gt;" dest="2+">
+                               <expression repeat="yes" fixchars="1">&quot;name&quot;:&quot;([^&quot;]*)&quot;,&quot;character&quot;:&quot;([^&quot;]*)&quot;,&quot;order&quot;:[0-9]*,&quot;profile_path&quot;:&quot;([^&quot;]*)&quot;</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseTMDBCast>
+
+       <GetTMDBDirectorsByIdChain dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBDirectors&quot; cache=&quot;tmdb-cast-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/casts?api_key=57983e31fb435df4df77afb854740ea9&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBDirectorsByIdChain>
+       <ParseTMDBDirectors dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;crew&quot;:\[([^\]]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$7" output="&lt;director&gt;\1&lt;/director&gt;" dest="2">
+                               <expression repeat="yes" fixchars="1">&quot;name&quot;:&quot;([^&quot;]*)&quot;,&quot;department&quot;:&quot;Directing&quot;,&quot;job&quot;:&quot;Director&quot;</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseTMDBDirectors>
+
+       <GetTMDBWitersByIdChain dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBWriters&quot; cache=&quot;tmdb-cast-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/casts?api_key=57983e31fb435df4df77afb854740ea9&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBWitersByIdChain>
+       <ParseTMDBWriters dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;crew&quot;:\[([^\]]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$7" output="&lt;credits&gt;\1&lt;/credits&gt;" dest="2">
+                               <expression repeat="yes" fixchars="1">&quot;name&quot;:&quot;([^&quot;]*)&quot;,&quot;department&quot;:&quot;Writing&quot;,</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseTMDBWriters>
+
+       <GetTMDBGenresByIdChain dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBGenres&quot; cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBGenresByIdChain>
+       <ParseTMDBGenres dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;genres&quot;:\[([^\]]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$7" output="&lt;genre&gt;\1&lt;/genre&gt;" dest="2">
+                               <expression repeat="yes" fixchars="1">&quot;name&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseTMDBGenres>
+
+       <GetTMDBRatingByIdChain dest="4">
                <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
-                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBFanart&quot; cache=&quot;tmdb-images-tt\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getImages/en/xml/57983e31fb435df4df77afb854740ea9/tt\1&lt;/url&gt;" dest="5">
-                               <expression>tt([0-9]+)</expression>
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBRating&quot; cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;" dest="5">
+                               <expression />
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBFanart&quot; cache=&quot;tmdb-images-\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getImages/en/xml/57983e31fb435df4df77afb854740ea9/\1&lt;/url&gt;" dest="5">
-                               <expression>^([0-9]+)$</expression>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBRatingByIdChain>
+       <ParseTMDBRating dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="&lt;rating&gt;\1&lt;/rating&gt;" dest="2">
+                               <expression noclean="1">&quot;vote_average&quot;:([^,]*),&quot;</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="&lt;votes&gt;\1&lt;/votes&gt;" dest="2+">
+                               <expression noclean="1">&quot;vote_count&quot;:([0-9]+)</expression>
                        </RegExp>
-                       <expression noclean="1"/>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseTMDBRating>
+
+       <GetTMDBTrailerByIdChain dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBTrailer&quot; cache=&quot;tmdb-trailer-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/trailers?api_key=57983e31fb435df4df77afb854740ea9&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </GetTMDBTrailerByIdChain>
+       <ParseTMDBTrailer dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;youtube&quot;:\[{([^\]]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$7" output="&lt;trailer&gt;plugin://plugin.video.youtube/?action=play_video&amp;videoid=\1&lt;/trailer&gt;" dest="2">
+                               <expression noclean="1">&quot;source&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <expression noclean="1">(.+)</expression>
+               </RegExp>
+       </ParseTMDBTrailer>
+
+       <GetTMDBFanartByIdChain dest="4">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBFanart&quot; cache=&quot;tmdb-images-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/images?api_key=57983e31fb435df4df77afb854740ea9&lt;/url&gt;" dest="5">
+                               <expression />
+                       </RegExp>
+                       <expression noclean="1" />
                </RegExp>
        </GetTMDBFanartByIdChain>
        <GetTMDBFanartById dest="4">
                <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
-                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBFanart&quot; cache=&quot;tmdb-images-tt\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getImages/en/xml/57983e31fb435df4df77afb854740ea9/tt\1&lt;/url&gt;" dest="5">
-                               <expression>/tt([0-9]+)</expression>
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBFanart&quot; cache=&quot;tmdb-images-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/images?api_key=57983e31fb435df4df77afb854740ea9&lt;/url&gt;" dest="5">
+                               <expression />
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBFanart&quot; cache=&quot;tmdb-images-\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getImages/en/xml/57983e31fb435df4df77afb854740ea9/\1&lt;/url&gt;" dest="5">
-                               <expression>&lt;id&gt;([0-9]*)&lt;/id&gt;</expression>
-                       </RegExp>
-                       <expression noclean="1"/>
+                       <expression noclean="1" />
                </RegExp>
        </GetTMDBFanartById>
        <ParseTMDBFanart dest="5">
                <RegExp input="$$2" output="&lt;details&gt;&lt;fanart&gt;\1&lt;/fanart&gt;&lt;/details&gt;" dest="5">
-                       <RegExp input="$$1" output="&lt;thumb&gt;\1&lt;/thumb&gt;" dest="3">
-                               <expression noclean="1" repeat="yes">&lt;backdrop[^&gt;]*&gt;(.*?)&lt;/backdrop&gt;</expression>
-                       </RegExp>
-                       <RegExp input="$$3" output="&lt;thumb preview=&quot;\2&quot;&gt;\1\3&lt;/thumb&gt;" dest="4">
-                               <expression noclean="1,3" repeat="yes">&lt;thumb&gt;(.*?)url=&quot;([^&quot;]*)&quot; size=&quot;poster&quot;(.*?)&lt;/thumb&gt;</expression>
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;backdrops&quot;:\[{([^\]]*)</expression>
                        </RegExp>
-                       <RegExp input="$$4" output="&lt;thumb\1&gt;\2&lt;/thumb&gt;" dest="2">
-                               <expression repeat="yes" noclean="1">&lt;thumb([^&gt;]*)&gt;.*?url=&quot;([^&quot;]*)&quot; size=&quot;original&quot;.*?&lt;/thumb&gt;</expression>
+                       <RegExp input="$$7" output="&lt;thumb preview=&quot;http://cf2.imgobject.com/t/p/w780\1&quot;&gt;http://cf2.imgobject.com/t/p/original\1&lt;/thumb&gt;" dest="2">
+                               <expression repeat="yes" noclean="1">&quot;file_path&quot;:&quot;([^&quot;]*)</expression>
                        </RegExp>
                        <expression noclean="1">(.+)</expression>
                </RegExp>
        </ParseTMDBFanart>
+
        <GetTMDBThumbsByIdChain dest="4">
                <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
-                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBThumbs&quot; cache=&quot;tmdb-images-tt\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getImages/en/xml/57983e31fb435df4df77afb854740ea9/tt\1&lt;/url&gt;" dest="5">
-                               <expression>tt([0-9]+)</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBThumbs&quot; cache=&quot;tmdb-images-\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getImages/en/xml/57983e31fb435df4df77afb854740ea9/\1&lt;/url&gt;" dest="5">
-                               <expression>^([0-9]+)$</expression>
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBThumbs&quot; cache=&quot;tmdb-images-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/images?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;" dest="5">
+                               <expression />
                        </RegExp>
-                       <expression noclean="1"/>
+                       <expression noclean="1" />
                </RegExp>
        </GetTMDBThumbsByIdChain>
        <GetTMDBThumbsById dest="4">
                <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
-                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBThumbs&quot; cache=&quot;tmdb-images-tt\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getImages/en/xml/57983e31fb435df4df77afb854740ea9/tt\1&lt;/url&gt;" dest="5">
-                               <expression>/tt([0-9]+)</expression>
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBThumbs&quot; cache=&quot;tmdb-images-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/images?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;" dest="5">
+                               <expression />
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBThumbs&quot; cache=&quot;tmdb-images-\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getImages/en/xml/57983e31fb435df4df77afb854740ea9/\1&lt;/url&gt;" dest="5">
-                               <expression>&lt;id&gt;([0-9]*)&lt;/id&gt;</expression>
-                       </RegExp>
-                       <expression noclean="1"/>
+                       <expression noclean="1" />
                </RegExp>
        </GetTMDBThumbsById>
        <ParseTMDBThumbs dest="5">
                <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
-                       <RegExp input="$$1" output="&lt;thumb&gt;\1&lt;/thumb&gt;" dest="3">
-                               <expression noclean="1" repeat="yes">&lt;poster[^&gt;]*&gt;(.*?)&lt;/poster&gt;</expression>
+                       <RegExp input="$$1" output="&lt;url function=&quot;ParseTMDBAllThumbs&quot; cache=&quot;tmdb-images-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1/images?api_key=57983e31fb435df4df77afb854740ea9&lt;/url&gt;" dest="2">
+                               <expression noclean="1">&quot;id&quot;:([0-9]*),</expression>
                        </RegExp>
-                       <RegExp input="$$3" output="&lt;thumb preview=&quot;\2&quot;&gt;\1\3&lt;/thumb&gt;" dest="4">
-                               <expression noclean="1,3" repeat="yes">&lt;thumb&gt;(.*?)url=&quot;([^&quot;]*)&quot; size=&quot;mid&quot;(.*?)&lt;/thumb&gt;</expression>
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;posters&quot;:\[{([^\]]*)</expression>
                        </RegExp>
-                       <RegExp input="$$4" output="&lt;thumb\1&gt;\2&lt;/thumb&gt;" dest="2">
-                               <expression repeat="yes" noclean="1">&lt;thumb([^&gt;]*)&gt;.*?url=&quot;([^&quot;]*)&quot; size=&quot;original&quot;.*?&lt;/thumb&gt;</expression>
+                       <RegExp input="$$7" output="&lt;thumb preview=&quot;http://cf2.imgobject.com/t/p/w500\1&quot;&gt;http://cf2.imgobject.com/t/p/original\1&lt;/thumb&gt;" dest="2+">
+                               <expression repeat="yes" noclean="1">&quot;file_path&quot;:&quot;([^&quot;]*)</expression>
                        </RegExp>
                        <expression noclean="1">(.+)</expression>
                </RegExp>
        </ParseTMDBThumbs>
+       <ParseTMDBAllThumbs dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;posters&quot;:\[{([^\]]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$7" output="&lt;thumb preview=&quot;http://cf2.imgobject.com/t/p/w500\1&quot;&gt;http://cf2.imgobject.com/t/p/original\1&lt;/thumb&gt;" dest="2">
+                               <expression repeat="yes" noclean="1">&quot;file_path&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <expression noclean="1">(.+)</expression>
+               </RegExp>
+       </ParseTMDBAllThumbs>
+
 </scraperfunctions>
diff --git a/addons/metadata.mtv.com/addon.xml b/addons/metadata.mtv.com/addon.xml
deleted file mode 100644 (file)
index 3db0645..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="metadata.mtv.com"
-       name="MTV"
-       version="1.0.5"
-       provider-name="Team XBMC">
-  <requires>
-    <import addon="xbmc.metadata" version="1.0"/>
-  </requires>
-  <extension point="xbmc.metadata.scraper.musicvideos"
-             language="en"
-             library="mtv.xml"/>
-  <extension point="xbmc.addon.metadata">
-    <summary lang="en">MTV Music Video Scraper</summary>
-    <summary lang="de">MTV Scraper für Musikvideos</summary>
-    <summary lang="es">Scraper de videoclips de MTV</summary>
-    <summary lang="fr">Scraper MTV pour vidéo-clips</summary>
-    <summary lang="hu">MTV videóklip leolvasó</summary>
-    <summary lang="kr">MTV 뮤직 비디오 스크래퍼</summary>
-    <summary lang="nl">MTV-muziekvideoscraper</summary>
-    <summary lang="pl">Scraper teledysków MTV</summary>
-    <summary lang="pt">Scraper de videoclips MTV</summary>
-    <summary lang="ro">Catalog MTV pentru videoclipuri</summary>
-    <summary lang="ru">Обработчик музыкальных видео для MTV</summary>
-    <summary lang="se">MTV Musikvideoskrapa</summary>
-    <summary lang="zh">MTV音乐电视刮削器</summary>
-    <description lang="en">Download Music Video information</description>
-    <description lang="de">Downloade Informationen zu Musikvideos von www.mtv.com</description>
-    <description lang="es">Descarga información de videoclips de www.mtv.com</description>
-    <description lang="fr">Télécharge les infos des vidéo-clips</description>
-    <description lang="hu">Zenei videóklip információk letöltése</description>
-    <description lang="kr">MTV 에서 뮤직비디오 정보 다운로드</description>
-    <description lang="nl">Muziekvideo-info ophalen van MTV</description>
-    <description lang="pl">Pobieraj informacje o teledyskach</description>
-    <description lang="pt">Descarregar informação de videoclips de www.mtv.com</description>
-    <description lang="ro">Descărcați informații videoclipuri.</description>
-    <description lang="ru">Загружать информацию о музыкальных видео с www.mtv.com</description>
-    <description lang="se">Ladda ner musikvideoinformation från MTV.</description>
-    <description lang="zh">下载音乐电视资料。</description>
-    <platform>all</platform>
-  </extension>
-</addon>
diff --git a/addons/metadata.mtv.com/icon.png b/addons/metadata.mtv.com/icon.png
deleted file mode 100644 (file)
index c7d595a..0000000
Binary files a/addons/metadata.mtv.com/icon.png and /dev/null differ
diff --git a/addons/metadata.mtv.com/mtv.xml b/addons/metadata.mtv.com/mtv.xml
deleted file mode 100644 (file)
index 73c20d2..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scraper framework="1.0" date="2009-05-22">
-       <CreateSearchUrl dest="3">
-               <RegExp input="$$1" output="&lt;url&gt;http://api.mtvnservices.com/1/video/search/?term=\1&lt;/url&gt;" dest="3">
-                       <expression noclean="1"/>
-               </RegExp>
-       </CreateSearchUrl>
-       <GetSearchResults dest="8">
-               <RegExp input="$$5" output="&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; standalone=&quot;yes&quot;?&gt;&lt;results&gt;\1&lt;/results&gt;" dest="8">
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1 - \2&lt;/title&gt;&lt;url&gt;\4&lt;/url&gt;&lt;/entity&gt;" dest="5">
-                               <expression noclean="1" repeat="yes">&lt;entry&gt;.*?&lt;content&gt;(.*?) \| (.*?) \| (.*?)&lt;/content&gt;.*?media:player url=&quot;([^&quot;]*)&quot;/&gt;</expression>
-                       </RegExp>
-                       <expression noclean="1"/>
-               </RegExp>               
-       </GetSearchResults>
-       <GetDetails dest="3">
-               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="3">
-                       <RegExp input="$$1" output="&lt;title&gt;\1&lt;/title&gt;" dest="5">
-                               <expression trim="1" noclean="1">&lt;meta name=&quot;mtv_vt&quot; content=&quot;([^&quot;]*)&quot;</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;artist&gt;\1&lt;/artist&gt;" dest="5+">
-                               <expression trim="1" noclean="1">&lt;meta name=&quot;mtv_an&quot; content=&quot;([^&quot;]*)&quot;</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;album&gt;\1&lt;/album&gt;" dest="5+">
-                               <expression trim="1" noclean="1">&lt;meta name=&quot;mtv_at&quot; content=&quot;([^&quot;]*)&quot;</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;studio&gt;\1&lt;/studio&gt;" dest="5+">
-                               <expression trim="1" noclean="1">&lt;strong&gt;Label&lt;/strong&gt; ([^&lt;]*)&lt;/li&gt;</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;year&gt;\1&lt;/year&gt;" dest="5+">
-                               <expression>&lt;meta name=&quot;content_create_date&quot; content=&quot;([0-9]*)-[^&quot;]*&quot;</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;director&gt;\1&lt;/director&gt;" dest="5+">
-                               <expression trim="1" noclean="1">&lt;meta name=&quot;mtv_vd&quot; content=&quot;([^&quot;]*)&quot;</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;thumb&gt;http://www.mtv.com\2.jpg&lt;/thumb&gt;" dest="5+">
-                               <expression noclean="1">&quot;thumbnail&quot;([^&quot;]*)content=&quot;([^&quot;]*)\.jpg</expression>
-                       </RegExp>
-                       <expression noclean="1"/>
-               </RegExp>
-       </GetDetails>
-</scraper>
index 209fc0c..3b2d65c 100644 (file)
@@ -1,39 +1,44 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="metadata.themoviedb.org"
        name="The MovieDB"
-       version="1.2.0"
+       version="3.0.9"
        provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
-    <import addon="metadata.common.themoviedb.org" version="1.0.7"/>
-    <import addon="metadata.common.hdtrailers.net" version="1.0.4"/>
-    <import addon="metadata.common.imdb.com" version="2.0.5"/>
+    <import addon="metadata.common.themoviedb.org" version="2.1.2"/>
+    <import addon="metadata.common.hdtrailers.net" version="1.0.7"/>
+    <import addon="metadata.common.imdb.com" version="2.1.9"/>
+    <import addon="plugin.video.youtube" version="2.1.4" optional="true"/>
   </requires>
   <extension point="xbmc.metadata.scraper.movies"
              language="en"
              library="tmdb.xml"/>
   <extension point="xbmc.addon.metadata">
-    <summary lang="en">TMDb Movie Scraper</summary>
+    <summary lang="bg">Сваля инф. за филми от TMDB</summary>
+    <summary lang="en">TMDB Movie Scraper</summary>
     <summary lang="de">Film-Scraper für TheMovieDB</summary>
     <summary lang="es">Scraper de películas de TheMovieDB</summary>
+    <summary lang="fi">TMDB elokuvatietojen lataaja</summary>
     <summary lang="hu">TMDB filmadat leolvasó</summary>
-    <summary lang="nl">TMDB Film Scraper</summary>
-    <summary lang="pl">Scraper filmów TMDB</summary>
+    <summary lang="nl">TMDb-filmscraper</summary>
+    <summary lang="pl">Scraper filmowy TMDB</summary>
     <summary lang="pt">Scraper de filmes TMDb</summary>
-    <summary lang="ro">Catalog de filme TMDb</summary>
+    <summary lang="ro">Scraper de filme TMDb</summary>
     <summary lang="ru">Обработчик Фильмов для TMDB</summary>
-    <summary lang="se">Filmskrapa för TMDB</summary>
+    <summary lang="se">Skrapa för TMDb</summary>
     <summary lang="zh">TMDB电影刮削器</summary>
+    <description lang="bg">themoviedb.org е безплатна и отворена база от данни за филми. Задвижва се изцяло от потребителите си - хора като вас. Милиони хора по света всеки месец ползват TMDb, благодарение на многофункционалното API. Едновременно с това е и източник на информация за медийни центрове, като XBMC, които извличат метаинформация за филми, постери и Fanart.</description>
     <description lang="en">themoviedb.org is a free and open movie database. It's completely user driven by people like you. TMDb is currently used by millions of people every month and with their powerful API, it is also used by many popular media centers like XBMC to retrieve Movie Metadata, Posters and Fanart to enrich the user's experience.</description>
     <description lang="de">TheMovieDB.org ist eine freie und offene Film-Datenbank. Sie wird nur User wie dir betrieben. TheMovieDB wird zur Zeit monatlich von Millionen genutzt. Mit der mächtigen API wird sie auch von vielen Media-Center, wie z.B. XBMC, genutzt um Filme-Meta-Daten, Poster und Fanrts zu beziehen, damit der User sein Media-Center verschönern kann</description>
     <description lang="es">themovieDB.org es una base de datos de películas gratuita y abierta. Es una página web que se basa en contenido subido por los usuarios. TMDb es usada diariamente por mucha gente gracias a su API, que es usada por más programas aparte de XBMC para descargar información de películas así como Posters o Fanart (Fondos de escritorio basados en películas usados en distintos skins) para enriquecer la experiencia de usar XBMC.</description>
+    <description lang="fi">themoviedb.org on vapaa ja avoin elokuvatietokanta. Se on täysin käyttäjien ylläpitämä. TMDb:a käyttää miljoonat ihmiset joka kuukausi, sitä käytetään käyttäjäkokemuksen rikastuttamiseen monissa muissakin suosituissa XBMC:n kaltaisissa ohjelmissa lataamalla elokuvien tietoja, julisteita ja fanitaidetta.</description>
     <description lang="hu">A themoviedb.org egy ingyenes és nyílt filmadatbázis. Teljes egészében olyan felhasználók töltik fel, mint például Te. A TMDb-t havonta emberek milliói használják és a hatékony API-n keresztül számos népszerű média center is, mint például az XBMC a filmadatok, poszterek, fanartképek letöltésére.</description>
-    <description lang="nl">themoviedb.org is een vrije en open film databank. Het wordt compleet aangedreven door gebruikers zoals jezelf. TMDb wordt momenteel maandelijks gebruikt door miljoenen mensen. Hun krachtige API maakt het voor mediaspelers zoals XBMC mogelijk om voor een film bijkomende informatie, posters en fanarts op te halen.</description>
+    <description lang="nl">Themoviedb.org is een vrije en open filmdatabank. Gebruikers zoals jij vormen de motor van deze site. Op dit moment gebruiken elke maand miljoenen mensen TMDb. De krachtige API van de site laat mediacenters zoals XBMC toe om metadata, posters en fanart op te halen en zo de gebruikerservaring te verrijken.</description>
     <description lang="pl">themoviedb.org jest wolną i otwartą filmową bazą danych. Jest zarządzana całkowicie przez osoby takie jak Ty. Obecnie odwiedzają ją miliony osób miesięcznie, a dzięki dostępności API jest używana w wielu media center, takich jak XBMC, do pobierania informacji o filmach, plakatów i fanartów.</description>
     <description lang="pt">O themoviedb.org é uma base de dados de filmes livre e aberta. É completamente actualizado por pessoas como você e usado por milhões todos os meses. Com o poderoso motor de busca disponível, também se tornou no favorito de muitos softwares média center, como o popular XBMC, para obter informação, posters e fanart que enriquecem a experiência do utilizador.</description>
-    <description lang="ro">themoviedb.org este o bază de date de filme deschisă și gratuită. Este actualizată de oameni ca dumneavoastră. TMDb este curent folosită de milioane de oameni în fiecare lună și datorită API-ului puternic, este de asemenea folosită de multe centre media populare ca XBMC pentru a obține informații despre filme, afișe și imagini realizate de fani (Fanart) care îmbogățesc experiența utilizatorului.</description>
+    <description lang="ro">themoviedb.org este o bază de date de filme gratuită și deschisă. Este actualizată de oameni ca și tine. TMDb este curent folosită de milioane de oameni în fiecare lună și datorită API-ului puternic, este de asemena folosită de multe centre media populare ca XBMC pentru a obține informații despre filme, afișe și imagini produse de fani (Fanart) care îmbogățesc experiența utilizatorului.</description>
     <description lang="ru">themoviedb.org это бесплатная и открытая база данных фильмов. Она полностью поддерживается такими же людьми как и ты. В данный момент TMDb используется миллионами людей каждый месяц, и, с его мощным API, используется различными популярными медиа-центрами, такими как XBMC, для получения к Фильмам мета-данных, постеров и фанарта в целях улучшения пользовательского опыта.</description>
-    <description lang="se">themoviedb.org är en fri och öppen filmdatabas. Den drivs helt av personer som dig. TMDb används av miljoner människor varje månad och med hjälp av deras kraftfulla API, är det också använt av många populära mediacenter som XBMC för att hämta film-metadata, omslag och fanart för att berika användarens upplevelse.</description>
+    <description lang="se">themoviedb.org är en fri och öppen filmdatabas. Det drivs helt av människor som dig. TMDb används av miljontals människor varje månad och med deras kraftfulla API, är det också använt av många populära mediacenter som XBMC för att hämta filmmetadata, omslag och fanart för att förgylla användarens upplevelse.</description>
     <description lang="zh">themoviedb.org是一个开放和自由的电影数据库。它完全由象你一样的用户来掌控。TMDb每月为上百万用户提供服务,并通过强大的API界面为许多流行的媒体中心系统如XBMC提供电影资料、封面海报和同人画以丰富用户的体验。</description>
     <platform>all</platform>
   </extension>
index 9c889b1..1386211 100644 (file)
@@ -1,3 +1,79 @@
+[B]3.0.9[/B]
+- fixed: missing language parameter name in NfoUrl
+
+[B]3.0.8[/B]
+- fixed: movies without release date won't find
+
+[B]3.0.7[/B]
+- fixed: keep originaltitle; IMDb ID; remove TMDb title fallback, because it became obsolate
+
+[B]3.0.6[/B]
+- updated chinese translation
+
+[B]3.0.5[/B]
+- reverted latest change
+
+[B]3.0.4[/B]
+- added: option to not scrape sets
+
+[B]3.0.3[/B]
+- fixed: plot outline includes trash on some movies
+
+[B]3.0.2[/B]
+- fixed: imdb IDs not properly handled
+
+[B]3.0.1[/B]
+- changed: also fallback to original_title to make sure a valid title gets scraped
+
+[B]3.0.0[/B]
+- major rewrite: utilize TMDb API v3, scraping set information, prioritize posters on the selected language
+
+[B]2.0.1[/B]
+- fixed: imdb url nfo not resolving tmdb id
+
+[B]2.0.0[/B]
+- complete rewrite to use the json api
+
+[B]1.4.5[/B]
+- added: support for IMDb.xx support for NFO scraping
+
+[B]1.4.4[/B]
+- fixed: actor thumb scraping was broken due to API changes
+
+[B]1.4.3[/B]
+- fixed: use imdb ID from nfo
+- changed: scrape only one studio
+
+[B]1.4.2[/B]
+- fixed: url/mixed nfo scraping
+
+[B]1.4.1[/B]
+- fixed: IMDb rating after site change 
+
+[B]1.4.0[/B]
+- added: trailer scraping from TMDB via youtube plugin
+
+[B]1.3.1[/B]
+- fixed: added year to search string properly
+
+[B]1.3.0[/B]
+- added: year to search string
+
+[B]1.2.5[/B]
+- fixed: mpaa is returning string 'Rated' if there is no rating on tmdb
+
+[B]1.2.4[/B]
+- fixed: not scraping artwork for movies without IMDb id
+
+[B]1.2.3[/B]
+- fixed: can't get full search results list when some have <released> message and some haven't
+
+[B]1.2.2[/B]
+- fixed: real fix for hd-trailers.net
+
+[B]1.2.1[/B]
+- fixed: trailer scraping from hd-trailers.net
+
 [B]1.2.0[/B]
 - Added option to scrape rating from IMDb
 
index 247c657..e7151af 100644 (file)
@@ -1,5 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <strings>
     <string id="30000">启用同人画</string>
-    <string id="30001">启用HD-Trailers.net预告片</string>
+    <string id="30001">首选HD-Trailers.net预告片</string>
+    <string id="30002">首选语言</string>
+    <string id="30003">获取评价信息于</string>
+    <string id="30004">启用预告片(YouTube)</string>
+    <string id="30005">保留原片名</string>
 </strings>
index 2eacfd6..7711a7f 100644 (file)
@@ -3,4 +3,7 @@
     <string id="30000">Fanart inschakelen</string>
     <string id="30001">Trailers van HD-Trailers.net inschakelen</string>
     <string id="30002">Voorkeurstaal</string>
+    <string id="30003">Verkrijg waardering van IMDb</string>
+    <string id="30004">Trailer inschakelen (YouTube)</string>
+    <string id="30005">Behoud originele titel</string>
 </strings>
index 0030780..d61eda0 100644 (file)
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <strings>
     <string id="30000">Enable Fanart</string>
-    <string id="30001">Enable Trailers from HD-Trailers.net</string>
+    <string id="30004">Enable Trailer (YouTube)</string>
+    <string id="30001">Prefer Trailer from HD-Trailers.net</string>
     <string id="30002">Preferred language</string>
-    <string id="30003">Get rating from IMDb</string>
+    <string id="30003">Get rating from</string>
+    <string id="30005">Keep Original Title</string>
 </strings>
index 3c6a465..ab425a5 100644 (file)
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <strings>
     <string id="30000">Fanitaide käytössä</string>
-    <string id="30001">Käytä trailereita HD-Trailers.net -sivustolta</string>
-    <string id="30002">Kieli</string>
+    <string id="30004">Trailerit käytössä</string>
+    <string id="30001">Valitse ensisijaisesti trailerit HD-Trailers.net -sivustolta</string>
+    <string id="30002">Ensisijainen kieli</string>
     <string id="30003">Hae arvosana IMDb:stä</string>
+    <string id="30005">Näytä alkuperäinen nimi</string>
 </strings>
index 02e440e..a3ae511 100644 (file)
@@ -3,4 +3,7 @@
     <string id="30000">Aktiviere Fanart</string>
     <string id="30001">Aktiviere Trailer von HD-Trailers.net</string>
     <string id="30002">Bevorzugte Sprache</string>
+    <string id="30003">Bewertung von IMDb nutzen</string>
+    <string id="30004">Aktiviere Trailer (YouTube)</string>
+    <string id="30005">Behalte original Filmtitel bei</string>
 </strings>
index f1e947f..d5e3f07 100644 (file)
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <strings>
     <string id="30000">Fanartképek engedélyezése</string>
-    <string id="30001">Filmelőzetesek a HD-Trailers.net-ről</string>
+    <string id="30004">Filmelőzetesek engedélyezése (YouTube)</string>
+    <string id="30001">Filmelőzetesek inkább a HD-Trailers.net-ről</string>
     <string id="30002">Preferált nyelv</string>
-    <string id="30003">Értékelés az IMDb-ről</string>
+    <string id="30003">Értékelés letöltése innen</string>
+    <string id="30005">Eredeti filmcím megtartása</string>
 </strings>
index 5e76d68..61ac93b 100644 (file)
@@ -2,4 +2,5 @@
 <strings>
     <string id="30000">Ligar Fanart</string>
     <string id="30001">Ligar trailers de HD-Trailers.net</string>
+    <string id="30002">Língua preferida</string>
 </strings>
index a0934eb..b035f30 100644 (file)
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <strings>
-    <string id="30000">Activează imagini de fundal realizate de fani (Fanart)</string>
+    <string id="30000">Activează Fanart</string>
     <string id="30001">Activează trailere de la HD-Trailers.net</string>
     <string id="30002">Limbă preferată</string>
-    <string id="30003">Ia nota de pe IMDb</string>
 </strings>
index 470993c..e9f411e 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <strings>
-    <string id="30000">Activar Fanart</string>
+    <string id="30000">Descargar Fanart</string>
     <string id="30001">Activar Trailers de HD-Trailers.net</string>
-    <string id="30002">Idioma preferido</string>
-    <string id="30003">Obtener la puntuación de IMDb</string>
 </strings>
index d97c2e2..59406fd 100644 (file)
@@ -2,11 +2,13 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: blittan-->
 <!--Email: blittan@xbmc.org-->
-<!--Date of translation: 11/19/2010-->
+<!--Date of translation: 12/26/2011-->
 <!--$Revision$-->
 <strings>
   <string id="30000">Aktivera fanart</string>
   <string id="30001">Aktivera trailers från HD-Trailers.net</string>
   <string id="30002">Föredraget språk</string>
   <string id="30003">Hämta betyg från IMDb</string>
-</strings>
\ No newline at end of file
+  <string id="30004">Aktivera trailers (YouTube)</string>
+  <string id="30005">Behåll originaltitel</string>
+</strings>
index eb35274..d711325 100644 (file)
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <settings>
+    <setting label="30005" type="bool" id="keeporiginaltitle" default="false"/>
     <setting label="30000" type="bool" id="fanart" default="true"/>
-    <setting label="30001" type="labelenum" values="No|480p|720p|1080p" id="TrailerQ" default="480p"/>
+    <setting label="30004" type="bool" id="trailer" default="true"/>
+    <setting label="30001" type="labelenum" values="No|480p|720p|1080p" id="TrailerQ" default="No"/>
     <setting label="30002" type="labelenum" values="da|fi|nl|de|it|es|fr|pl|hu|el|tr|ru|he|ja|pt|zh|cs|sl|hr|ko|en|sv|no" id="language" default="en"/>
-    <setting label="30003" type="bool" id="imdbrating" default="false"/>
+    <setting label="30003" type="labelenum" values="TMDb|IMDb" id="RatingS" default="TMDb"/>
 </settings>
index 63411b9..a60cf39 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>
-<scraper framework="1.1" date="2010-10-11">
+<?xml version="1.0" encoding="UTF-8"?>
+<scraper framework="1.1" date="2012-01-16">
        <CreateSearchUrl dest="3">
-               <RegExp input="$$1" output="&lt;url&gt;http://api.themoviedb.org/2.1/Movie.search/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\1&lt;/url&gt;" dest="3">
+               <RegExp input="$$1" output="&lt;url&gt;http://api.themoviedb.org/3/search/movie?api_key=57983e31fb435df4df77afb854740ea9&amp;query=\1$$4&amp;language=$INFO[language]&lt;/url&gt;" dest="3">
                        <RegExp input="$$2" output="+\1" dest="4">
                                <expression clear="yes">(.+)</expression>
                        </RegExp>
-                       <expression noclean="1"/>
+                       <expression noclean="1" />
                </RegExp>
        </CreateSearchUrl>
        <NfoUrl dest="3">
-               <RegExp input="$$1" output="&lt;url&gt;http://api.themoviedb.org/2.1/Movie.getInfo/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\2&lt;/url&gt;&lt;id&gt;\2&lt;/id&gt;" dest="3">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url&gt;http://api.themoviedb.org/3/movie/\2?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;&lt;id&gt;\2&lt;/id&gt;&lt;/details&gt;" dest="3">
                        <expression clear="yes" noclean="1">(themoviedb.org/movie/)([0-9]*)</expression>
                </RegExp>
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url function=&quot;GetTMDBId&quot;&gt;http://api.themoviedb.org/2.1/Movie.imdbLookup/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/tt\2&lt;/url&gt;&lt;/details&gt;" dest="3+">
-                       <expression>(imdb.com/title/tt)([0-9]*)</expression>
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url&gt;http://api.themoviedb.org/3/movie/tt\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;&lt;id&gt;tt\1&lt;/id&gt;&lt;/details&gt;" dest="3">
+                       <expression>imdb....?/title/tt([0-9]*)</expression>
                </RegExp>
-               <RegExp input="$$1" output="&lt;details&gt;&lt;url function=&quot;GetTMDBId&quot;&gt;http://api.themoviedb.org/2.1/Movie.imdbLookup/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/tt\2&lt;/url&gt;&lt;/details&gt;" dest="3+">
-                       <expression>(imdb.com/)Title\?([0-9]+)</expression>
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url&gt;http://api.themoviedb.org/3/movie/tt\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;&lt;id&gt;tt\1&lt;/id&gt;&lt;/details&gt;" dest="3">
+                       <expression>imdb....?/Title\?([0-9]*)</expression>
                </RegExp>
        </NfoUrl>
-       <GetTMDBId dest="3">
-               <RegExp input="$$1" output="&lt;url cache=&quot;tmdb-$INFO[language]-\1.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getInfo/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\1&lt;/url&gt;&lt;id&gt;\1&lt;/id&gt;" dest="3+">
-                       <expression>&lt;id&gt;([0-9]*)&lt;/id&gt;</expression>
-               </RegExp>
-       </GetTMDBId>
        <GetSearchResults dest="8">
                <RegExp input="$$3" output="&lt;results&gt;\1&lt;/results&gt;" dest="8">
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;id&gt;\2&lt;/id&gt;&lt;year&gt;\3&lt;/year&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\2.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getInfo/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\2&lt;/url&gt;&lt;/entity&gt;" dest="3">
-                               <expression repeat="yes">&lt;movie&gt;.*?&lt;name&gt;([^&lt;]*)&lt;/name&gt;.*?&lt;id&gt;([^&lt;]*)&lt;/id&gt;.*?&lt;released&gt;([0-9]+)-.*?&lt;/movie&gt;</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;id&gt;\2&lt;/id&gt;&lt;year&gt;\3&lt;/year&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\2.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getInfo/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\2&lt;/url&gt;&lt;/entity&gt;" dest="3+">
-                               <expression repeat="yes">&lt;movie&gt;.*?&lt;original_name&gt;([^&lt;]*)&lt;/original_name&gt;.*?&lt;id&gt;([^&lt;]*)&lt;/id&gt;.*?&lt;released&gt;([0-9]+)-.*?&lt;/movie&gt;</expression>
-                       </RegExp>
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;id&gt;\2&lt;/id&gt;&lt;year&gt;\3&lt;/year&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\2.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getInfo/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\2&lt;/url&gt;&lt;/entity&gt;" dest="3+">
-                               <expression repeat="yes">&lt;movie&gt;.*?&lt;alternative_name&gt;([^&lt;]*)&lt;/alternative_name&gt;.*?&lt;id&gt;([^&lt;]*)&lt;/id&gt;.*?&lt;released&gt;([0-9]+)-.*?&lt;/movie&gt;</expression>
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\4&lt;/title&gt;&lt;id&gt;\1&lt;/id&gt;&lt;year&gt;\3&lt;/year&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;&lt;/entity&gt;" dest="3">
+                               <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;release_date&quot;:&quot;([0-9]+)-.*?&quot;title&quot;:&quot;([^&quot;]*)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;id&gt;\2&lt;/id&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\2.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getInfo/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\2&lt;/url&gt;&lt;/entity&gt;" dest="3+">
-                               <expression repeat="yes">&lt;movie&gt;.*?&lt;name&gt;([^&lt;]*)&lt;/name&gt;.*?&lt;id&gt;([^&lt;]*)&lt;/id&gt;.*?&lt;released&gt;&lt;/released&gt;.*?&lt;/movie&gt;</expression>
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\2&lt;/title&gt;&lt;id&gt;\1&lt;/id&gt;&lt;year&gt;\3&lt;/year&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;&lt;/entity&gt;" dest="3+">
+                               <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;release_date&quot;:&quot;([0-9]+)-</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;id&gt;\2&lt;/id&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\2.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getInfo/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\2&lt;/url&gt;&lt;/entity&gt;" dest="3+">
-                               <expression repeat="yes">&lt;movie&gt;.*?&lt;original_name&gt;([^&lt;]*)&lt;/original_name&gt;.*?&lt;id&gt;([^&lt;]*)&lt;/id&gt;.*?&lt;released&gt;&lt;/released&gt;.*?&lt;/movie&gt;</expression>
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\2&lt;/title&gt;&lt;id&gt;\1&lt;/id&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.themoviedb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;language=$INFO[language]&lt;/url&gt;&lt;/entity&gt;" dest="3+">
+                               <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;release_date&quot;:null</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\1&lt;/title&gt;&lt;id&gt;\2&lt;/id&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\2.xml&quot;&gt;http://api.themoviedb.org/2.1/Movie.getInfo/$INFO[language]/xml/57983e31fb435df4df77afb854740ea9/\2&lt;/url&gt;&lt;/entity&gt;" dest="3+">
-                               <expression repeat="yes">&lt;movie&gt;.*?&lt;alternative_name&gt;([^&lt;]*)&lt;/alternative_name&gt;.*?&lt;id&gt;([^&lt;]*)&lt;/id&gt;.*?&lt;released&gt;&lt;/released&gt;.*?&lt;/movie&gt;</expression>
-                       </RegExp>
-                       <expression noclean="1"/>
+                       <expression noclean="1" />
                </RegExp>
        </GetSearchResults>
        <GetDetails dest="3">
                <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="3">
                        <RegExp input="$$1" output="&lt;id&gt;\1&lt;/id&gt;" dest="5">
-                               <expression noclean="1">&lt;id&gt;([^&lt;]*)&lt;/id&gt;</expression>
+                               <expression noclean="1">&quot;id&quot;:([0-9]*),&quot;imdb</expression>
                        </RegExp>
                        <RegExp input="$$1" output="&lt;id&gt;\1&lt;/id&gt;" dest="5+">
-                               <expression clear="yes" noclean="1">&lt;imdb_id&gt;([^&lt;]*)&lt;/imdb_id&gt;</expression>
+                               <expression clear="yes" noclean="1">&quot;id&quot;:[0-9]*,&quot;imdb_id&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="\1" dest="9">
+                               <expression fixchars="1">&quot;original_title&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <RegExp conditional="keeporiginaltitle" input="$$9" output="&lt;title&gt;\1&lt;/title&gt;" dest="5+">
+                               <expression/>
                        </RegExp>
                        <RegExp input="$$1" output="&lt;title&gt;\1&lt;/title&gt;" dest="5+">
-                               <expression noclean="1">&lt;name&gt;([^&lt;]*)&lt;/name&gt;</expression>
+                               <expression fixchars="1">&quot;title&quot;:&quot;([^&quot;]*)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;originaltitle&gt;\1&lt;/originaltitle&gt;" dest="5+">
-                               <expression noclean="1">&lt;original_name&gt;([^&lt;]*)&lt;/original_name&gt;</expression>
+                       <RegExp input="$$9" output="&lt;originaltitle&gt;\1&lt;/originaltitle&gt;" dest="5+">
+                               <expression/>
                        </RegExp>
                        <RegExp input="$$1" output="&lt;year&gt;\1&lt;/year&gt;" dest="5+">
-                               <expression noclean="1">&lt;released&gt;([0-9]+)-</expression>
+                               <expression noclean="1">&quot;release_date&quot;:&quot;([0-9]+)-</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="\1" dest="10">
+                               <expression clear="yes" noclean="1">&quot;runtime&quot;:([0-9]+)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;runtime&gt;\1&lt;/runtime&gt;" dest="5+">
-                               <expression noclean="1">&lt;runtime&gt;([^&lt;]*)&lt;/runtime&gt;</expression>
+                       <RegExp input="$$10" output="&lt;url function=&quot;ParseFallbackTMDBRuntime&quot; cache=&quot;tmdb-en-$$2.json&quot;&gt;http://api.themoviedb.org/3/movie/$$2?api_key=57983e31fb435df4df77afb854740ea9&amp;language=en&lt;/url&gt;" dest="5+">
+                               <expression>^$</expression>
                        </RegExp>
-                       <RegExp conditional="!imdbrating" input="$$1" output="&lt;rating&gt;\1&lt;/rating&gt;" dest="5+">
-                               <expression noclean="1">&lt;rating&gt;([^&lt;]*)&lt;/rating&gt;</expression>
+                       <RegExp input="$$10" output="&lt;runtime&gt;\1&lt;/runtime&gt;" dest="5+">
+                               <expression>(.+)</expression>
                        </RegExp>
-                       <RegExp conditional="!imdbrating" input="$$1" output="&lt;votes&gt;\1&lt;/votes&gt;" dest="5+">
-                               <expression noclean="1">&lt;votes&gt;([^&lt;]*)&lt;/votes&gt;</expression>
+                       <RegExp input="$$1" output="\1" dest="10">
+                               <expression clear="yes" fixchars="1">&quot;tagline&quot;:&quot;([^&quot;]*)</expression>
                        </RegExp>
-                       <RegExp conditional="imdbrating" input="$$1" output="&lt;chain function=&quot;GetIMDBRatingById&quot;&gt;\1&lt;/chain&gt;" dest="5+">
-                               <expression noclean="1">&lt;imdb_id&gt;([^&lt;]*)&lt;/imdb_id&gt;</expression>
+                       <RegExp input="$$10" output="&lt;url function=&quot;ParseFallbackTMDBTagline&quot; cache=&quot;tmdb-en-$$2.json&quot;&gt;http://api.themoviedb.org/3/movie/$$2?api_key=57983e31fb435df4df77afb854740ea9&amp;language=en&lt;/url&gt;" dest="5+">
+                               <expression>^$</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;tagline&gt;\1&lt;/tagline&gt;" dest="5+">
-                               <expression noclean="1">&lt;tagline&gt;([^&lt;]*)&lt;/tagline&gt;</expression>
+                       <RegExp input="$$10" output="&lt;tagline&gt;\1&lt;/tagline&gt;" dest="5+">
+                               <expression>(.+)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;mpaa&gt;Rated \1&lt;/mpaa&gt;" dest="5+">
-                               <expression>&lt;certification&gt;([^&lt;]*)&lt;/certification&gt;</expression>
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;production_companies&quot;:\[([^\]]*)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;genre&gt;\1&lt;/genre&gt;" dest="5+">
-                               <expression noclean="1" repeat="yes">&lt;category type=&quot;genre&quot; name=&quot;([^&quot;]*)&quot;</expression>
+                       <RegExp input="$$7" output="&lt;studio&gt;\1&lt;/studio&gt;" dest="5+">
+                               <expression trim="1" fixchars="1">&quot;name&quot;:&quot;([^&quot;]*)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;studio&gt;\1&lt;/studio&gt;" dest="5+">
-                               <expression noclean="1" repeat="yes">&lt;studio name=&quot;([^&quot;]*)&quot;</expression>
+                       <RegExp input="$$1" output="\1" dest="7">
+                               <expression clear="yes" noclean="1">&quot;production_countries&quot;:\[([^\]]*)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;country&gt;\1&lt;/country&gt;" dest="5+">
-                               <expression noclean="1" repeat="yes">&lt;country name=&quot;([^&quot;]*)&quot;</expression>
+                       <RegExp input="$$7" output="&lt;country&gt;\1&lt;/country&gt;" dest="5+">
+                               <expression trim="1" fixchars="1">&quot;name&quot;:&quot;([^&quot;]*)</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;plot&gt;\1&lt;/plot&gt;" dest="5+">
-                               <expression noclean="1">&lt;overview&gt;([^&lt;]*)&lt;/overview&gt;</expression>
+                       <RegExp input="$INFO[RatingS]" output="&lt;chain function=&quot;GetIMDBRatingById&quot;&gt;$$6&lt;/chain&gt;" dest="5+">
+                               <RegExp input="$$1" output="\1" dest="6">
+                                       <expression noclean="1">&quot;id&quot;:[0-9]*,&quot;imdb_id&quot;:&quot;([^&quot;]*)</expression>
+                               </RegExp>
+                               <expression>IMDb</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;overview&gt;\1&lt;/overview&gt;" dest="5+">
-                               <expression noclean="1">&lt;overview&gt;([^&lt;]*)&lt;/overview&gt;</expression>
+                       <RegExp input="$INFO[RatingS]" output="&lt;chain function=&quot;GetTMDBRatingByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression>TMDb</expression>
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;director&gt;\1&lt;/director&gt;" dest="5+">
-                               <expression noclean="1" repeat="yes">&lt;person.*?name=&quot;([^&quot;]*)&quot; character=&quot;&quot; job=&quot;Director&quot;</expression>
+                       <RegExp input="$$2" output="&lt;chain function=&quot;GetTMDBDirectorsByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression />
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;credits&gt;\1&lt;/credits&gt;" dest="5+">
-                               <expression noclean="1" repeat="yes">&lt;person.*?name=&quot;([^&quot;]*)&quot; character=&quot;&quot; job=&quot;Screenplay&quot;</expression>
+                       <RegExp input="$$2" output="&lt;chain function=&quot;GetTMDBWitersByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression />
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;actor&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\2&lt;/role&gt;&lt;/actor&gt;" dest="5+">
-                               <expression noclean="1" repeat="yes">&lt;person.*?name=&quot;([^&quot;]*)&quot; character=&quot;([^&quot;]*)&quot; job=&quot;Actor&quot;</expression>
+                       <RegExp input="$$2" output="&lt;chain function=&quot;GetTMDBCertificationsByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression />
                        </RegExp>
-                       <RegExp input="$$1" output="&lt;actor&gt;&lt;name&gt;\1&lt;/name&gt;&lt;role&gt;\2&lt;/role&gt;&lt;thumb&gt;http://\4-original\5&lt;/thumb&gt;&lt;/actor&gt;" dest="5+">
-                               <expression noclean="1" repeat="yes">&lt;person.*?name=&quot;([^&quot;]*)&quot; character=&quot;([^&quot;]*)&quot; job=&quot;Actor&quot; id=&quot;([0-9]+)&quot; thumb=&quot;http://(.*?)-thumb([^&quot;]*)&quot;</expression>
+                       <RegExp input="$$2" output="&lt;chain function=&quot;GetTMDBSetByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression />
+                       </RegExp>
+                       <RegExp input="$$2" output="&lt;chain function=&quot;GetTMDBPlotByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression />
+                       </RegExp>
+                       <RegExp input="$$2" output="&lt;chain function=&quot;GetTMDBCastByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression />
+                       </RegExp>
+                       <RegExp input="$$2" output="&lt;chain function=&quot;GetTMDBGenresByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression />
                        </RegExp>
                        <RegExp input="$$2" output="&lt;chain function=&quot;GetTMDBThumbsByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
-                               <expression/>
+                               <expression />
                        </RegExp>
                        <RegExp conditional="fanart" input="$$2" output="&lt;chain function=&quot;GetTMDBFanartByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
-                               <expression/>
+                               <expression />
+                       </RegExp>
+                       <RegExp conditional="trailer" input="$$2" output="&lt;chain function=&quot;GetTMDBTrailerByIdChain&quot;&gt;$$2&lt;/chain&gt;" dest="5+">
+                               <expression />
                        </RegExp>
                        <RegExp input="$INFO[TrailerQ]" output="&lt;chain function=&quot;GetHDTrailersnet480p&quot;&gt;$$6&lt;/chain&gt;" dest="5+">
                                <RegExp input="$$1" output="\1" dest="6">
-                                       <expression noclean="1">&lt;original_name&gt;([^&lt;]*)&lt;/original_name&gt;</expression>
+                                       <expression clear="yes" noclean="1">&quot;original_title&quot;:&quot;([^&quot;]*)</expression>
                                </RegExp>
                                <expression>480p</expression>
                        </RegExp>
                        <RegExp input="$INFO[TrailerQ]" output="&lt;chain function=&quot;GetHDTrailersnet720p&quot;&gt;$$6&lt;/chain&gt;" dest="5+">
                                <RegExp input="$$1" output="\1" dest="6">
-                                       <expression noclean="1">&lt;original_name&gt;([^&lt;]*)&lt;/original_name&gt;</expression>
+                                       <expression clear="yes" noclean="1">&quot;original_title&quot;:&quot;([^&quot;]*)</expression>
                                </RegExp>
                                <expression>720p</expression>
                        </RegExp>
                        <RegExp input="$INFO[TrailerQ]" output="&lt;chain function=&quot;GetHDTrailersnet1080p&quot;&gt;$$6&lt;/chain&gt;" dest="5+">
                                <RegExp input="$$1" output="\1" dest="6">
-                                       <expression noclean="1">&lt;original_name&gt;([^&lt;]*)&lt;/original_name&gt;</expression>
+                                       <expression clear="yes" noclean="1">&quot;original_title&quot;:&quot;([^&quot;]*)</expression>
                                </RegExp>
                                <expression>1080p</expression>
                        </RegExp>
-                       <expression noclean="1"/>
+                       <expression noclean="1" />
                </RegExp>
        </GetDetails>
+       <ParseFallbackTMDBRuntime dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="&lt;runtime&gt;\1&lt;/runtime&gt;" dest="2">
+                               <expression noclean="1">&quot;runtime&quot;:([0-9]+)</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseFallbackTMDBRuntime>
+       <ParseFallbackTMDBTagline dest="5">
+               <RegExp input="$$2" output="&lt;details&gt;\1&lt;/details&gt;" dest="5">
+                       <RegExp input="$$1" output="&lt;tagline&gt;\1&lt;/tagline&gt;" dest="2">
+                               <expression fixchars="1">&quot;tagline&quot;:&quot;([^&quot;]*)</expression>
+                       </RegExp>
+                       <expression noclean="1" />
+               </RegExp>
+       </ParseFallbackTMDBTagline>
 </scraper>
index 0f12599..86e69c8 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="metadata.tvdb.com"
        name="The TVDB"
-       version="1.0.8"
+       version="1.2.4"
        provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.metadata" version="1.0"/>
              library="tvdb.xml"
              cachepersistence="00:15"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Изтегля информация за ТВ Сериали от TheTVDB.com</summary>
     <summary lang="en">Fetch TV show metadata from TheTVDB.com</summary>
     <summary lang="de">Scraper für Fernsehserien von TheTVDB.com</summary>
-    <summary lang="es">Descarga información de Series de TV de TVDB.com</summary>
+    <summary lang="es">Descarga información de Series de TV desde TVDB.com</summary>
+    <summary lang="fi">Nouda TV-ohjelmien tietoja TheTVDB.com -sivustolta</summary>
     <summary lang="fr">Scraper TheTVDB.com pour les séries TV</summary>
     <summary lang="hu">TV műsor információk a TheTVDB.com-ról</summary>
     <summary lang="nl">Seriemetadata ophalen van TheTVDB.com</summary>
     <summary lang="pl">Pobieraj dane o serialach TV z TheTVDB.com</summary>
     <summary lang="pt">Scraper de séries de TV TVDB.com</summary>
-    <summary lang="ro">Catalog de seriale TheTVDB.com</summary>
     <summary lang="ru">Загрузка информации о ТВ-шоу с TheTVDB.com</summary>
-    <summary lang="se">Hämta TV-serieinformation från TheTVDB.com</summary>
+    <summary lang="se">Skrapa för TV-seriemetadata från TVDB.com</summary>
     <summary lang="zh">从TheTVDB.com获取电视剧集信息</summary>
+    <description lang="bg">TheTVDB.com предоставя информация за ТВ Сериали. Сайтът представлява една огромна, безплатна и отворена база от данни. Всеки може да редактира (наличната информация) или да добавя нова. Съдържа подробни данни за много сериали и на различни езици. Цялото съдържание на сайта и публикуваните изображения са предоставени от потребители за потребителите. Съдържанието на сайтът и базата от данни е с отворен код под лиценза GPL.</description>
     <description lang="en">TheTVDB.com is a TV Scraper. The site is a massive open database that can be modified by anybody and contains full meta data for many shows in different languages. All content and images on the site have been contributed by their users for users and have a high standard or quality. The database schema and website are open source under the GPL.</description>
     <description lang="de">TheTVDB.com ist ein Scraper für TV-Serien. Die Seite hat eine riesige offene Datenbank, welche von jedem geändert werden kann. Sie enthält weitreichende Meta-Daten für viele TV-Serien in verschiedenen Sprachen. Alle Inhalte und Bilder dieser Seite stammen von User für User und haben eine hohe Qualität. Das Datenbankschema und die Webseite sind OpenSource unter dem GPL-Recht</description>
     <description lang="es">TheTVDB.com es un scraper para series de televisión. Esta pagina web es una base de datos immensa que puede ser modificada por cualquiera y contiene informaciós de series y capítulos en distintos idiomas. Todo el contenido y las imágenes de este sitio han sido creadas y enviadas por sus usuarios bajo unas estrictas normas de tamaño y calidad. El esquema de la base de datos y la página web són consultables y de código abierto bajo licencia GPL.</description>
+    <description lang="fi">TheTVDB.com on TV-ohjelmatietojen lataaja. Sivusto on massiivinen avoin tietokanta, jonka tietoja kaikki pystyy muokkaamaan ja se sisältää täydet tiedot monista TV-ohjelmista usealla eri kielellä. Kaikki sivuston sisältö ja kuvat on korkealaatuisia ja käyttäjien lahjoittamia. Tietokanta ja sivusto ovat GPL-lisenssin alaisia.</description>
     <description lang="fr">TheTVDB.com est un scraper TV. Le site est une immense base de données libre qui peut être modifiée par n'importe qui et qui contient toutes les infos pour beaucoup de séries en différentes langues. Toutes les infos et images du site proviennent de contributions d'utilisateurs pour les utilisateurs et sont d'excellente qualité. Le schéma de la base de données et le site Web sont en open source sous licence GPL.</description>
     <description lang="hu">A TheTVDB.com egy TV műsor leolvasó. Az oldal egy hatalmas adatbázis amit bárki szabadon módosíthat és rengeteg TV műsor adatait tartalmazza különböző nyelveken. A minőségi tartalom és képanyag ezen az oldalon felhasználóktól származik más felhasználók számára. Az adatbázisstruktúra és a weblap nyílt forráskódú a GPL licenc alatt.</description>
     <description lang="nl">TheTVDB.com is een seriescraper. De site is een gigantische open databank die iedereen kan aanpassen en uitbreiden, en biedt metadata aan voor TV-series in verschillende talen. Alle inhoud en afbeeldingen zijn afkomstig van gebruikers en moeten een grondige kwaliteitscontrole doorstaan. Het databankschema en de websitecode zijn vrijgegeven onder de open source GPL-licentie.</description>
     <description lang="pl">TheTVDB.com jest scraperem TV. Ten serwis jest ogromną, wielojęzykową i otwartą bazą danych o serialach, którą może edytować każdy. Zawartość tego serwisu została dostarczona przez użytkowników, dla użytkowników. Dostępne materiały mają wysoki standard lub jakość.</description>
     <description lang="pt"> O TheTVDB.com é um motor de busca para séries de TV. O site é uma gigantesca base de dados aberta que pode ser alterada por qualquer pessoa e contém informação em várias línguas. Todos os conteúdos do site foram enviados por utilizadores com um elevado padrão de qualidade. A base de dados e site funcionam sob uma licença GPL de software livre.</description>
-    <description lang="ro">TheTVDB.com este un catalog de filme seriale. Site-ul este o bază de date publică, masivă care poate fi modificată de oricine și conține informații complete în limbi diferite pentru multe seriale. Tot conținutul și imaginile de pe site au fost adăugate de utilizatori și au un standard înalt de calitate. Schema bazei de date și site-ul web au sursă deschisă și licență GPL.</description>
     <description lang="ru">TheTVDB.com это обработчик для ТВ-шоу. Сайт представляет собой массивную открытую базу данных, которая может быть изменене кем угодно и содержит полные мета-данные для многих шоу и сериалов на различных языках. Все содержанимое и изображения на сайте были выложены его пользователями для пользователей, и имеют высокий уровень или качество. Схемы базы данных и веб-сайт выполнены под открытым исходным кодом и доступны по лицензии GPL.</description>
-    <description lang="se">TheTVDB.com är en TV-skrapa. Sajten är en massiv öppen databas som kan modifieras av vem som helst och innehåller all metadata för många serier på olika språk. Allt innehåll och bildmaterial har bidragits från användarna till användare och har en hög standard och kvalitet. Databasschemat och webbsidan är öppet under GPL-licens.</description>
+    <description lang="se">TVDB.com är en TV-skrapa. Sajten är en massiv öppen databas som kan ändras av vem som helst och innehåller full metadata för mängder av serier på olika språk. Allt innehåll och bilder på sajten har bidragits av användare för användare och har en hög standard eller kvalitet. Databasschemat och webbsidan är licensierat som GPL.</description>
     <description lang="zh">TheTVDB.com是一个电视刮削器。该网站是一个巨大的开放式数据库,任何人都可以修改,包含多语言的许多电视剧集资料。网站设定了高品质标准,所有图片和内容都由用户提供。数据库结构和网站均在GPL许可下开源。</description>
     <platform>all</platform>
   </extension>
index 07b60a8..dc8444d 100644 (file)
@@ -1,5 +1,26 @@
+[B]1.2.4[/B]
+- Added: support for imdb url nfo's
+
+[B]1.2.3[/B]
+- Fixed: fixed broken scraping under certain circumtaces
+
+[B]1.2.2[/B]
+- Fixed: episodeguide url won't picked up sometimes
+
+[B]1.2.1[/B]
+- Fixed: won't parse longer search results
+
+[B]1.2.0[/B]
+- Added: episode runtime scraping
+
+[B]1.1.1[/B]
+- Fixed: episodeguide url won't picked up sometimes
+
+[B]1.1.0[/B]
+- Added: support decimals in episode numbers for DVD ordering
+
 [B]1.0.8[/B]
 - Fixed: fallback to other image languages if preferred doesn't exist
 
 [B]1.0.7[/B]
-- Fixed: season thumbs
\ No newline at end of file
+- Fixed: season thumbs
index 27c1189..00657d8 100644 (file)
@@ -3,6 +3,6 @@
     <string id="30000">Usar ordem do DVD</string>
     <string id="30001">Usar ordem absoluta (Temporada única)</string>
     <string id="30002">Ligar Fanart</string>
-    <string id="30003">Preferir posters</string>
-    <string id="30004">Linguagem</string>
+    <string id="30003">Preferir pósters</string>
+    <string id="30004">Lingua</string>
 </strings>
diff --git a/addons/metadata.tvdb.com/resources/language/Romanian/strings.xml b/addons/metadata.tvdb.com/resources/language/Romanian/strings.xml
deleted file mode 100644 (file)
index 84c2cbf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<strings>
-    <string id="30000">Folosește ordonare DVD</string>
-    <string id="30001">Folosește ordonare absolută (un singur sezon)</string>
-    <string id="30002">Activează Fanart</string>
-    <string id="30003">Preferă afișe</string>
-    <string id="30004">Limbă</string>
-</strings>
index 29853e3..5010e79 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <strings>
     <string id="30000">Usar orden de DVD</string>
-    <string id="30001">Usar Orden Absoluto (Temporada única)</string>
+    <string id="30001">Usar Orden Absoluto (Temporada Única)</string>
     <string id="30002">Descargar Fanart</string>
     <string id="30003">Preferir Posters</string>
     <string id="30004">Idioma</string>
index 8764177..3399bd8 100644 (file)
@@ -2,12 +2,12 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: blittan-->
 <!--Email: blittan@xbmc.org-->
-<!--Date of translation: 09/11/2010-->
+<!--Date of translation: 12/26/2011-->
 <!--$Revision$-->
 <strings>
   <string id="30000">Använd DVD-ordning</string>
   <string id="30001">Använd absolut ordning (singelsäsong)</string>
   <string id="30002">Aktivera fanart</string>
-  <string id="30003">Föredra posters</string>
+  <string id="30003">Föredra omslag</string>
   <string id="30004">Språk</string>
 </strings>
\ No newline at end of file
index 26f0a11..64a368d 100644 (file)
@@ -5,8 +5,20 @@
                <RegExp input="$$1" output="&lt;url cache=&quot;\1.xml&quot;&gt;http://www.thetvdb.com/api/1D62F2F90030C444/series/\1/all/$INFO[language].zip&lt;/url&gt;&lt;id&gt;\1&lt;/id&gt;" dest="3">
                        <expression>http://(?:www\.)?thetvdb.com/(?:index\.php)?\?tab=series&amp;id=([0-9]+)</expression>
                </RegExp>
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url function=&quot;GetTVDBId&quot;&gt;http://www.thetvdb.com/api/GetSeriesByRemoteID.php?imdbid=tt\1&amp;amp;language=$INFO[language]&lt;/url&gt;&lt;/details&gt;" dest="3+">
+                       <expression>imdb....?/title/tt([0-9]*)</expression>
+               </RegExp>
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url function=&quot;GetTVDBId&quot;&gt;http://www.thetvdb.com/api/GetSeriesByRemoteID.php?imdbid=tt\1&amp;amp;language=$INFO[language]&lt;/url&gt;&lt;/details&gt;" dest="3+">
+                       <expression>imdb....?/Title\?([0-9]*)</expression>
+               </RegExp>
        </NfoUrl>
 
+       <GetTVDBId dest="3">
+               <RegExp input="$$1" output="&lt;details&gt;&lt;url cache=&quot;\1.xml&quot;&gt;http://www.thetvdb.com/api/1D62F2F90030C444/series/\1/all/$INFO[language].zip&lt;/url&gt;&lt;id&gt;\1&lt;/id&gt;" dest="3">
+                       <expression>&lt;seriesid&gt;([0-9]*)&lt;/seriesid&gt;</expression>
+               </RegExp>
+       </GetTVDBId>
+
        <EpisodeGuideUrl dest="3">
                <RegExp input="$$1" output="\1" dest="3">
                        <expression>(.*?http://www.thetvdb.com.*)</expression>
        <!-- input:     $1=html $2=search query -->
        <!-- returns:   results in xml format <results><movie><title>*</title><url>*</url>*#urls<extra>*</extra></movie>*</results> -->
        <GetSearchResults dest="1">
-               <RegExp output="\1" dest="3">
-                       <expression noclean="1">&lt;Data&gt;(.*)&lt;/Data&gt;</expression>
-               </RegExp>
                <RegExp input="$$4" output="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot;?&gt;&lt;results&gt;\1&lt;/results&gt;" dest="1">
-                       <RegExp input="$$3" output="&lt;entity&gt;&lt;title&gt;\3&lt;/title&gt;&lt;language&gt;\2&lt;/language&gt;&lt;url cache=&quot;\1.xml&quot;&gt;http://www.thetvdb.com/api/1D62F2F90030C444/series/\1/all/\2.zip&lt;/url&gt;&lt;id&gt;\1&lt;/id&gt;&lt;/entity&gt;" dest="4">
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\3&lt;/title&gt;&lt;language&gt;\2&lt;/language&gt;&lt;url cache=&quot;\1.xml&quot;&gt;http://www.thetvdb.com/api/1D62F2F90030C444/series/\1/all/\2.zip&lt;/url&gt;&lt;id&gt;\1&lt;/id&gt;&lt;/entity&gt;" dest="4">
                                <expression repeat="yes">&lt;seriesid&gt;([0-9]*)&lt;/seriesid&gt;[^&lt;]*&lt;language&gt;([^&lt;]*)&lt;/language&gt;[^&lt;]*&lt;SeriesName&gt;([^&lt;]*)&lt;/SeriesName&gt;</expression>
                        </RegExp>
                        <expression noclean="1"/>
        <!-- returns:   results in xml format <episodeguide><episode><title>*</title><url>*</url><season>*</season><epnum>*</epnum><thumb>*</thumb><id>*</id><aired>*</aired></episode>*</episodeguide> !-->
        <GetEpisodeList dest="3">
                <RegExp input="$$4" output="&lt;episodeguide&gt;\1&lt;/episodeguide&gt;" dest="3">
-                       <RegExp input="$$2" output="\1" dest="10">
-                               <expression>http://www.thetvdb.com/api/1D62F2F90030C444/series/([0-9]*)/all/$INFO[language].zip</expression>
+                       <RegExp input="$$2" output="\2" dest="10">
+                               <expression>http://(?:www\.)thetvdb.com/api/(.+)/series/([0-9]*)/all/(.+).zip</expression>
                        </RegExp>
                        <RegExp conditional="!dvdorder">
                                <!-- Regular episodes (Absolute order) -->
                        </RegExp>
                        <!-- DVD order -->
                        <RegExp conditional="dvdorder" input="$$1" output="&lt;episode&gt;&lt;title&gt;\4&lt;/title&gt;&lt;url cache=&quot;$$10.xml&quot;&gt;$$2&lt;/url&gt;&lt;epnum&gt;\2&lt;/epnum&gt;&lt;season&gt;\3&lt;/season&gt;&lt;id&gt;\1&lt;/id&gt;&lt;aired&gt;\5&lt;/aired&gt;&lt;/episode&gt;" dest="4">
-                               <expression repeat="yes">&lt;Episode&gt;.*?&lt;id&gt;([0-9]+).*?&lt;Combined_episodenumber&gt;([0-9]+).*?&lt;Combined_season&gt;([0-9]+).*?&lt;EpisodeName&gt;([^&lt;]*).*?&lt;FirstAired&gt;([^&lt;]*)&lt;/FirstAired&gt;.*?&lt;/Episode&gt;</expression>
+                               <expression repeat="yes">&lt;Episode&gt;.*?&lt;id&gt;([0-9]+).*?&lt;Combined_episodenumber&gt;([^&lt;]*).*?&lt;Combined_season&gt;([^&lt;]*).*?&lt;EpisodeName&gt;([^&lt;]*).*?&lt;FirstAired&gt;([^&lt;]*)&lt;/FirstAired&gt;.*?&lt;/Episode&gt;</expression>
                        </RegExp>
                        <expression noclean="1"/>
                </RegExp>
                        <RegExp input="$$8" output="&lt;rating&gt;\1&lt;/rating&gt;" dest="4+">
                                <expression>&lt;Rating&gt;([^&lt;]+)&lt;/Rating&gt;</expression>
                        </RegExp>
+                       <RegExp input="$$1" output="&lt;runtime&gt;\1&lt;/runtime&gt;" dest="4+">
+                               <expression>&lt;Runtime&gt;([^&lt;]+)&lt;/Runtime&gt;</expression>
+                       </RegExp>
                        <expression noclean="1"/>
                </RegExp>
        </GetEpisodeDetails>
diff --git a/addons/metadata.yahoomusic.com/addon.xml b/addons/metadata.yahoomusic.com/addon.xml
new file mode 100644 (file)
index 0000000..425358f
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<addon id="metadata.yahoomusic.com"
+       name="Yahoo Music Videos"
+       version="1.0.4"
+       provider-name="Team XBMC">
+  <requires>
+    <import addon="xbmc.metadata" version="1.0"/>
+  </requires>
+  <extension point="xbmc.metadata.scraper.musicvideos"
+             language="en"
+             library="yahoomusic.xml"/>
+  <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Сваля инф. за музикални клипове от Yahoo!</summary>
+    <summary lang="en">Yahoo! Music Video Scraper</summary>
+    <summary lang="fi">Yahoo! musiikkivideotietojen lataaja</summary>
+    <summary lang="hu">Yahoo! videóklip leolvasó</summary>
+    <summary lang="kr">야후! 뮤직 비디오 스크래퍼</summary>
+    <summary lang="pl">Scraper teledysków Yahoo!</summary>
+    <summary lang="pt">Scraper de música Yahoo!</summary>
+    <summary lang="se">Skrapa för Yahoo! musik</summary>
+    <description lang="bg">Сваля информация за музикални клипове</description>
+    <description lang="en">Download Music Video information</description>
+    <description lang="fi">Lataa musiikkivideoiden tiedot</description>
+    <description lang="hu">Videóklip információk letöltése a Yahoo! webhelyről</description>
+    <description lang="kr">뮤직 비디오 정보 다운로드</description>
+    <description lang="pl">Pobieraj informacje o teledyskach z music.yahoo.com</description>
+    <description lang="pt">Descarregar informação de filmes de music.yahoo.com</description>
+    <description lang="se">Ladda ner musikvideoinformation från music.yahoo.com</description>
+  </extension>
+</addon>
diff --git a/addons/metadata.yahoomusic.com/icon.png b/addons/metadata.yahoomusic.com/icon.png
new file mode 100644 (file)
index 0000000..f04e6f4
Binary files /dev/null and b/addons/metadata.yahoomusic.com/icon.png differ
diff --git a/addons/metadata.yahoomusic.com/resources/language/Dutch/strings.xml b/addons/metadata.yahoomusic.com/resources/language/Dutch/strings.xml
new file mode 100644 (file)
index 0000000..93ec0c6
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Afmetingen van de voorbeeld afbeeldingen</string>
+</strings>
diff --git a/addons/metadata.yahoomusic.com/resources/language/English/strings.xml b/addons/metadata.yahoomusic.com/resources/language/English/strings.xml
new file mode 100644 (file)
index 0000000..b41bc3e
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Thumb(s) Size</string>
+</strings>
diff --git a/addons/metadata.yahoomusic.com/resources/language/Finnish/strings.xml b/addons/metadata.yahoomusic.com/resources/language/Finnish/strings.xml
new file mode 100644 (file)
index 0000000..cba8217
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Pienoiskuvien koko</string>
+</strings>
diff --git a/addons/metadata.yahoomusic.com/resources/language/Hungarian/strings.xml b/addons/metadata.yahoomusic.com/resources/language/Hungarian/strings.xml
new file mode 100644 (file)
index 0000000..8944ed5
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Bélyegképek mérete</string>
+</strings>
diff --git a/addons/metadata.yahoomusic.com/resources/language/Korean/strings.xml b/addons/metadata.yahoomusic.com/resources/language/Korean/strings.xml
new file mode 100644 (file)
index 0000000..4532347
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">미리보기 크기</string>
+</strings>
diff --git a/addons/metadata.yahoomusic.com/resources/language/Polish/strings.xml b/addons/metadata.yahoomusic.com/resources/language/Polish/strings.xml
new file mode 100644 (file)
index 0000000..05b9a8d
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Rozmiar miniatur</string>
+</strings>
diff --git a/addons/metadata.yahoomusic.com/resources/language/Portuguese/strings.xml b/addons/metadata.yahoomusic.com/resources/language/Portuguese/strings.xml
new file mode 100644 (file)
index 0000000..72d365c
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Tamanho de miniaturas</string>
+</strings>
diff --git a/addons/metadata.yahoomusic.com/resources/language/Swedish/strings.xml b/addons/metadata.yahoomusic.com/resources/language/Swedish/strings.xml
new file mode 100644 (file)
index 0000000..aa781c2
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--Language file translated with Team XBMC Translator-->
+<!--Translator: blittan-->
+<!--Email: blittan@xbmc.org-->
+<!--Date of translation: 12/26/2011-->
+<!--$Revision$-->
+<strings>
+  <string id="30000">Miniatyrstorlek</string>
+</strings>
diff --git a/addons/metadata.yahoomusic.com/resources/settings.xml b/addons/metadata.yahoomusic.com/resources/settings.xml
new file mode 100644 (file)
index 0000000..373a6de
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<settings>
+    <setting label="30000" type="labelenum" values="192|256|384|512|1024" id="yahooscale" default="384"/>
+</settings>
diff --git a/addons/metadata.yahoomusic.com/yahoomusic.xml b/addons/metadata.yahoomusic.com/yahoomusic.xml
new file mode 100644 (file)
index 0000000..9bd5a3f
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scraper framework="1.0" date="2009-05-22">
+       <CreateSearchUrl dest="3">
+               <RegExp input="$$1" output="&lt;url&gt;http://us.music.yahooapis.com/video/v1/list/search/all/\1?appid=r6QWQGXV34H0Sl3Wq4vWJI2v9IO1XnZw5JkeifPbTq2p0S9H9kg0JUc3SVN0Yw--&amp;amp;response=artists,images&lt;/url&gt;" dest="3">
+                       <expression noclean="1"/>
+               </RegExp>
+       </CreateSearchUrl>
+       <GetSearchResults dest="8">
+               <RegExp input="$$5" output="&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; standalone=&quot;yes&quot;?&gt;&lt;results&gt;\1&lt;/results&gt;" dest="8">
+                       <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\4 - \1 (\2)&lt;/title&gt;&lt;url&gt;http://us.music.yahooapis.com/video/v1/item/\3?format=xml&amp;amp;appid=r6QWQGXV34H0Sl3Wq4vWJI2v9IO1XnZw5JkeifPbTq2p0S9H9kg0JUc3SVN0Yw--&lt;/url&gt;&lt;/entity&gt;" dest="5">
+                               <expression repeat="yes">&lt;Video.*?title=&quot;([^&quot;]*)&quot;.*?copyrightYear=&quot;([^&quot;]*)&quot;.*?\/([0-9]*)\?size.*?name=&quot;([^&quot;]*)&quot;.*?&lt;/Video&gt;</expression>
+                       </RegExp>
+                       <expression noclean="1"/>
+               </RegExp>               
+       </GetSearchResults>
+       <GetDetails dest="3">
+               <RegExp input="$$5" output="&lt;details&gt;\1&lt;/details&gt;" dest="3">
+                       <RegExp input="$$1" output="&lt;title&gt;\1&lt;/title&gt;" dest="5">
+                               <expression>&lt;Video.*?title=&quot;([^&quot;]*)&quot;</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="&lt;artist&gt;\1&lt;/artist&gt;" dest="5+">
+                               <expression repeat="yes">&lt;Artist.*?name=&quot;([^&quot;]*)&quot;</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="&lt;album&gt;\1&lt;/album&gt;" dest="5+">
+                               <expression>&lt;Release.*?title=&quot;([^&quot;]*)&quot;</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="&lt;studio&gt;\1&lt;/studio&gt;" dest="5+">
+                               <expression repeat="yes">label=&quot;([^&quot;]*)&quot;</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="&lt;year&gt;\1&lt;/year&gt;" dest="5+">
+                               <expression>copyrightYear=&quot;([0-9]*)&quot;</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="&lt;genre&gt;\1&lt;/genre&gt;" dest="5+">
+                               <expression repeat="yes">&lt;Category.*?name=&quot;([^&quot;]*)&quot; rating=&quot;([^&quot;]*)&quot; type=&quot;Genre&quot;&gt;</expression>
+                       </RegExp>
+                       <RegExp input="$$1" output="&lt;thumb&gt;http://d.yimg.com/img.music.yahoo.com/image/v1/video/\1?size=$INFO[yahooscale]&lt;/thumb&gt;" dest="5+">
+                               <expression>\/([0-9]*)\?size</expression>
+                       </RegExp>
+                       <expression noclean="1"/>
+               </RegExp>
+       </GetDetails>
+</scraper>
index 8b369a6..cf047d3 100644 (file)
@@ -1,19 +1,24 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="repository.xbmc.org"
                name="XBMC.org Add-ons"
-               version="2.0.1"
+               version="2.0.3"
                provider-name="Team XBMC">
+  <requires>
+    <import addon="xbmc.addon" version="11.0"/>
+  </requires>
        <extension point="xbmc.addon.repository"
                name="Official XBMC.org Add-on Repository">
-               <info compressed="true">http://mirrors.xbmc.org/addons/eden-pre/addons.xml</info>
-               <checksum>http://mirrors.xbmc.org/addons/eden-pre/addons.xml.md5</checksum>
-               <datadir zip="true">http://mirrors.xbmc.org/addons/eden-pre</datadir>
+               <info compressed="true">http://mirrors.xbmc.org/addons/eden/addons.xml</info>
+               <checksum>http://mirrors.xbmc.org/addons/eden/addons.xml.md5</checksum>
+               <datadir zip="true">http://mirrors.xbmc.org/addons/eden</datadir>
                <hashes>true</hashes>
        </extension>
        <extension point="xbmc.addon.metadata">
+               <summary lang="bg">Инсталира добавки от XBMC.org</summary>
                <summary lang="en">Install Add-ons from XBMC.org</summary>
                <summary lang="de">Installiere Add-ons von XBMC.org</summary>
                <summary lang="es">Instalar Add-ons de XBMC.org</summary>
+               <summary lang="fi">Asenna lisäosia XBMC.org -sivustolta</summary>
                <summary lang="fr">Installe les Add-ons depuis XBMC.org</summary>
                <summary lang="hu">Kiegészítők letöltése az XBMC.org-ról</summary>
                <summary lang="ko">XBMC.org로 부터 애드온 설치</summary>
                <summary lang="ru">Установить Дополнения с XBMC.org</summary>
                <summary lang="se">Installera tillägg från XBMC.org</summary>
                <summary lang="zh">从XBMC.org安装扩展功能</summary>
+               <description lang="bg">Сваля и инсталира добавки от официалното хранилище за добавки на XBMC.org.[CR]  Чрез него ще можете да се възползвате от системата ни от огледални сървъри, която ще ви помогне да сваляте с висока скорост, от район близо до вас.[CR]  Добавките от хранилището са преминали през няколко основни теста, но въпреки това ако се натъкнете на неработеща или проблемна добавка, молим да уведомите екипа на XBMC, за да бъдат предприети необходимите действия.</description>
                <description lang="en">Download and install add-ons from the Official XBMC.org addon repository.[CR]  By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR]  All addons on this repository have under gone basic testing, if you find a broken or not working addon please report it to Team XBMC so we can take any action needed.</description>
                <description lang="de">Download und installiere Add-Ons aus dem offiziellen XBMC.org Add-On Repository.[CR]  Durch die Nutzung des offiziellen Repository hat man Zugriff auf das große Datei Mirror System welches schnelle Downloads aus der Nähe bereit stellt.[CR]  Alle Add-Ons im Repository wurden getestet, sollte dennoch ein Add-On Fehler haben oder gar nicht funktionieren, sollte dieser Fehler an das Team XBMC gemeldet werden, damit die nötigen Schritte getroffen werden können</description>
                <description lang="es">Descarga e instala add-ons desde el repositorio oficial de XBMC.[CR]  Usando el repositorio oficial tendrás las ventajas de nuestro servicio de mirrors para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a tí.[CR]  Todos los add-ons en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún add-on que no funciona, por favor informa de ello al equipo de XBMC para solucionar el problema.</description>
+               <description lang="fi">Lataa ja asenna lisäosia virallisesta XBMC.org -lisäosasäilöstä.[CR]  Käyttämällä virallista säilöä sinun on mahdollista käyttää hyväksesi meidän kattavaa tiedostojen peilauspalveluamme saavuttaaksesi korkeat latausnopeudet sinun lähialueeltasi.[CR]  Kaikki tämän säilön lisäosat on testattu toimiviksi, jos löydät rikkinäisen tai "ei toimivan" lisäosan, ilmoita siitä Team XBMC:lle, jotta voimme korjata asian.</description>
                <description lang="fr">Télécharge et installe les add-ons depuis le dépôt officiel de XBMC.org.[CR]  En utilisant le dépôt officiel, vous bénéficierez de notre service de fichiers miroir afin de télécharger plus rapidement depuis une région proche de vous.[CR]  Tous les add-ons de ce dépôt n'ont subi que des tests basiques, si vous trouvez un add-on corrompu ou inutilisable, informez la Team XBMC afin de prendre les mesures nécessaires.</description>
                <description lang="hu">Kiegészítők letöltése és telepítése a hivatalos XBMC.org tárolóhelyről.[CR] A hivatalos tárolóhely használatával kihasználhatod szerteágazó tükör-kiszolgáló hálózatunkat, ami segít a gyorsabb letöltésben egy hozzád közelebb eső körzet használatával.[CR]  Minden kiegészítő ezen a tárolóhelyen átment egy alaptesztelésen. Ha mégis hibás vagy nem működő kiegészítőt találsz, kérünk jelezd az XBMC csapatnak, hogy megtegyük a szükséges lépseket.</description>
                <description lang="ko">공식 XBMC.org 애드온 저장소로부터 애드온을 다운로드하고 설치합니다.[CR] 공식 저장소를 사용함으로써 파일 미러링 서비스를 통해 사용자에 가까운 곳으로부터 빠르게 다운로드를 받을수 있습니다.[CR] 저장소의 모든 애드온은 기본적인 확인을 했습니다. 만약 작동이 안되는 애드온을 발견하면, Team XBMC로 알려주시면, 필요한 조치를 취할것입니다.</description>
index 576c4b7..ccf175e 100644 (file)
@@ -12,6 +12,7 @@
     library_linux="Euphoria.xbs"
     library_osx="Euphoria.xbs"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Колкото халюциногенен може да бъде един скрийнсейвър</summary>
     <summary lang="en">About as psychedelic as screensavers get</summary>
     <summary lang="es">El más psicodélico de los salvapantallas</summary>
     <summary lang="fi">Mahdollisesti kaikkein psykedeelisin näytönsäästäjä</summary>
     <summary lang="nl">Een meer psychedelische schermbeveiliging vindt u niet</summary>
     <summary lang="pl">Tak psychodeliczny jak tylko się da</summary>
     <summary lang="pt">A mais psicadélica protecção de ecrã.</summary>
+    <summary lang="ro">Un protector ecran cât se poate de psihedelic</summary>
     <summary lang="ru">Настолько психаделично, насколько такой может быть заставка</summary>
     <summary lang="se">Ungefär så psykedelisk som en skärmsläckare kan bli</summary>
     <summary lang="zh">最具迷幻效果的屏幕保护程序</summary>
+    <description lang="bg">Точно колкото може един скрийнсейвър. mogumbo смяташе, че неговият Plasma saver е върхът, но този е по-смущаващ. Препоръчвам ви да вземете една торбичка за повръщане, преди да зазяпате в скрийнсейвъра по-дълго отколкото трябва.</description>
     <description lang="en">This is about as psychedelic as screensavers get. mogumbo thought his Plasma saver was at the top of the scale, but this one is even more nauseating. You'd better find one of those air sickness bags before you stare at this one for too long.</description>
     <description lang="es">Este es probablemente el más psicodélico de los salvapantallas. mogumbo (el autor) pensó que su protector 'Plasma' estaba en lo mas alto, pero éste es más repugnante. Será mejor que cogas una bolsa para los mareos si vas a estar mucho tiempo viéndolo.</description>
     <description lang="fi">Tämä on mahdollisesti niin psykedeelinen kuin vain näytönsäästäjä voi olla. mogumbo luuli, että hänen Plasma-näytönäästäjänsä oli asteikon huipulla, mutta tämä ohittaa senkin. Oksennuspussin hakeminen on suositeltavaa ennen pitkäaikaista tuijottamista.</description>
@@ -33,6 +36,7 @@
     <description lang="nl">Ongetwijfeld de meest psychedelische screensaver. mogumbo dacht dat zijn Plasmascreensaver al bovenaan deze lijst stond, maar deze is nóg meer misselijkmakend. Houd uw braakzakje bij de hand, mocht u hier te lang naar staren.</description>
     <description lang="pl">Tak psychodeliczny wygaszacz jak tylko się da. Lepiej zaopatrz się w worki na chorobę lokomocyjną.</description>
     <description lang="pt">Esta é provavelmente a protecção de ecrã mais psicadélica de sempre. O mogumbo (autor) pensou que a sua protecção de ecrã 'Plasma' estava no topo da escala de protecções nauseantes mas esta parece ainda pior. Procure um saco de enjoo e sente-se, se vai ficar muito tempo a olhar para o ecrã.</description>
+    <description lang="ro">Acesta este un protector ecran cât se poate de psihedelic. mogumbo s-a gândit că protectorul Plasma era pe primul loc, dar acesta este și mai amețitor. Ar trebui să căutați o pungă de gunoi înainte de a vă uita la acesta prea mult.</description>
     <description lang="ru">Это настолько психаделично, насколько такой может быть заставка. mogumbo думал, что его хранитель экрана Plasma был недосягаем, но этот ещё более тошнотворный. Лучше найдите себе гигиенический пакет, перед тем как вы будете слишком долго смотреть на этот хранитель экрана.</description>
     <description lang="se">Det här är ungefär så psykedelisk skärmsläckare kan bli. mogumbo trodde hans plasma-skärmsläckare var toppen på skalan, men denna är till och med ännu mer kväljande. Du gör bäst i att leta upp en åksjukepåse innan du stirrar på denna för länge.</description>
     <description lang="zh">这大概是最具迷幻效果的屏幕保护程序了。mogumbo以为他的Plasma屏保已经是数一数二了,但这个更令人作犯晕。如果你要长时间盯视它最好先准备一个晕机袋。</description>
index 9fca6aa..d4070f0 100644 (file)
@@ -12,6 +12,7 @@
     library_linux="Plasma.xbs"
     library_osx="Plasma.xbs"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Вероятно вторият най-халюциногенен скрийнсейвър</summary>
     <summary lang="en">Probably the second most psychedelic screensaver ever</summary>
     <summary lang="es">Probablemente el segundo salvapantallas más psicodélico jamás creado</summary>
     <summary lang="fi">Todennäköisesti toiseksi psykedeelisin näytönsäästäjä koskaan</summary>
     <summary lang="nl">Waarschijnlijk de op één na meest psychedelische schermbeveiliging ooit</summary>
     <summary lang="pl">Prawdopodobnie drugi, najbardziej psychodeliczny wygaszacz na świecie</summary>
     <summary lang="pt">Provavelmente a segunda mais psicadélica protecção de ecrã</summary>
+    <summary lang="ro">Probabil al doilea cel mai psihedelic protector ecran dintotdeauna</summary>
     <summary lang="se">Förmodligen den näst psykedeliska skärmsläckaren</summary>
     <summary lang="zh">也许是排名第二的迷幻效果屏幕保护程序</summary>
+    <description lang="bg">Вероятно вторият по сила халюциногенен скрийнсейвър създаван някога. Просто се опитайте да съзрете всички тези цветове.</description>
     <description lang="en">Probably the second most psychedelic screensaver in existence. Just try to picture all those colors moving around.</description>
     <description lang="es">Probablemente el segundo salvapantallas más psicodélico que existe. Intente imaginarse todos esos colores moviéndose.</description>
     <description lang="fi">Todennäköisesti toiseksi psykedeelisin olemassa oleva näytönsäästäjä. Kuvittelepa vain kaikki nuo värit lentelemässä ympäriinsä.</description>
@@ -32,6 +35,7 @@
     <description lang="nl">Waarschlijnlijk de op één na meest psychedelische schermbeveliging ooit. Probeer u het voor te stellen: al die kleuren die door mekaar lopen.</description>
     <description lang="pl">Prawdopodobnie drugi, najbardziej psychodeliczny wygaszacz na świecie. Spróbuj i zobacz ferię poruszających się barw.</description>
     <description lang="pt">Provavelmente a segunda mais psicadélica protecção de ecrã de sempre. Experimente-a para ver todas as cores moverem-se livremente.</description>
+    <description lang="ro">Probabil al doilea cel mai psihedelic protector ecran în existență. Doar încercați să vă imaginați toate acele culori mișcându-se.</description>
     <description lang="se">Förmodligen den näst psykedeliska skärmsläckaren som finns. Försök bara att uppfatta alla färger som rör sig runt och runt.</description>
     <description lang="zh">也许是排名第二的迷幻效果屏幕保护程序。你将看到所有颜色满处乱飞。</description>
     <platform>linux osx</platform>
index 619d684..8119f4e 100644 (file)
@@ -12,6 +12,7 @@
     library_linux="Solarwinds.xbs"
     library_osx="Solarwinds.xbs"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Скрийнсейвър с частици, които очароват</summary>
     <summary lang="en">A mesmerizing particle effects screensaver</summary>
     <summary lang="es">Un salvapatallas con unos efectos de partículas fascinantes</summary>
     <summary lang="fi">Lumoava partikkelitehostenäytönsäästäjä</summary>
     <summary lang="nl">Een hypnotiserende schermbeveiliging met partikeleffecten</summary>
     <summary lang="pl">Wygaszacz hipnotyzujący efektami cząsteczek</summary>
     <summary lang="pt">Protecção de ecrã com um efeito de partículas</summary>
+    <summary lang="ro">Un protector ecran cu efecte de particule fascinant</summary>
     <summary lang="ru">Завораживающий скринсейвер с эффектами частиц</summary>
     <summary lang="se">En fascinerande skärmsläckare av partikeleffekter</summary>
     <summary lang="zh">一个迷人的粒子效果屏幕保护程序</summary>
+    <description lang="bg">Това е скрийнсейвър, който очарова с частиците си. Ще откриете, че можете да направите изключително голям брой различни модели.</description>
     <description lang="en">This is a very mesmerizing particle effects screensaver. You'll find that you can achieve an amazing number of different patterns.</description>
     <description lang="es">Este es un salvapatallas con unos efectos de partículas fascinantes. Verá que puede obtener un número incríble de patrones diferentes.</description>
     <description lang="fi">Erittäin lumoava partikkelitehostenäytönsäästäjä. Tulet huomaamaan uskomattoman määrän erilaisia kuvioita.</description>
@@ -33,6 +36,7 @@
     <description lang="nl">Dit is een erg hypnotiserende screensaver. Je kunt ongelooflijk veel verschillende patronen bekomen.</description>
     <description lang="pl">Bardzo hipnotyzujący wygaszacz. Przekonaj się, ile niespotykanch wzorów da się osiągnąć.</description>
     <description lang="pt">Protecção de ecrã fantástica com um efeito de partículas. Vai reparar que consegue um número quase infinito de padrões.</description>
+    <description lang="ro">Acesta este un protector ecran cu efecte de particule foarte fascinant. O să vedeți că veți putea obține un număr uimitor de modele diferite.</description>
     <description lang="ru">Это - очень завораживающий хранитель экрана. Доступно огромное количество вариаций эффектов.</description>
     <description lang="se">Detta är en mycket fascinerande partikeleffektsskärmsläckare. Du kommer att upptäcka att du kan uppnå ett otroligt antal olika mönster.</description>
     <description lang="zh">这是一个非常迷人的粒子效果屏幕保护程序。你会发现你能看到惊人数量的不同图案。</description>
index 260a3dc..6ff60f1 100644 (file)
@@ -5,6 +5,7 @@
        provider-name="Team XBMC">
   <extension point="xbmc.ui.screensaver" library=""/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Скрийнсейвър, който прави екрана черен</summary>
     <summary lang="en">Screensaver that turns your screen black</summary>
     <summary lang="es">Un salvapantallas que pone la pantalla en negro</summary>
     <summary lang="de">Bildschirmshoner, welcher den Bildschirm schwarz färbt</summary>
@@ -19,6 +20,7 @@
     <summary lang="ru">Хранитель экрана который делает ваш экран чёрным</summary>
     <summary lang="se">Skärmsläckare som gör din skärm svart</summary>
     <summary lang="zh">黑屏屏幕保护程序</summary>
+    <description lang="bg">Black е просто скрийнсейвър, който ще направи екрана ви черен.</description>
     <description lang="en">Black is a simple screensaver that will turn your screen black.</description>
     <description lang="es">Black es un sencillo salvapantallas que pone la pantalla en negro.</description>
     <description lang="de">Black ist ein einfacher Bildschirmschoner, welcher den Bildschirm schwarz abdunkelt</description>
index d61267a..d94c34e 100644 (file)
@@ -5,6 +5,7 @@
        provider-name="Team XBMC">
   <extension point="xbmc.ui.screensaver" library=""/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Скрийнсейвър, който затъмнява екрана</summary>
     <summary lang="en">Screensaver that dims your screen</summary>
     <summary lang="de">Bildschirmschoner zum Abdunkeln des Bildschirmes</summary>
     <summary lang="es">Un salvapantallas que oscurece tu pantalla</summary>
@@ -19,6 +20,7 @@
     <summary lang="ru">Хранитель экрана затемняющий изображение</summary>
     <summary lang="se">Skärmsläckare som dimmar din skärm</summary>
     <summary lang="zh">淡出屏幕保护程序</summary>
+    <description lang="bg">Скрийнсейвърът Dim ще затъмни екрана ви, до стойност, която вие можете да определите предварително (между 20 и 100%).</description>
     <description lang="en">The Dim screensaver is a simple screensaver that will dim (fade out) your screen to a setable value between 20 and 100% .</description>
     <description lang="de">Der Dimmer-Bildschirmschoner ist ein einfacher Bildschirmschoner, welcher den Bildschirm auf einen benutzerdefinierten Wert zwischen 20 und 100% abdunkelt.</description>
     <description lang="es">Dim es un sencillo salvapantallas que oscurece tu pantalla. El valor es configurable entre el 20 y el 100%.</description>
diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/Romanian/strings.xml b/addons/screensaver.xbmc.builtin.dim/resources/language/Romanian/strings.xml
new file mode 100644 (file)
index 0000000..10d414c
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<strings>
+    <string id="30000">Nivel întunecare</string>
+</strings>
diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/Slovenian/strings.xml b/addons/screensaver.xbmc.builtin.dim/resources/language/Slovenian/strings.xml
new file mode 100644 (file)
index 0000000..c54d4bf
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<strings>
+    <string id="30000">Nivo zatemnitve</string>
+</strings>
index db4b867..b6a95cd 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <settings>
-  <setting label="30000" type="slider" id="level" range="20,1,100" default="20"/>
+  <setting label="30000" type="slider" id="level" range="20,1,100" option="percent" default="20"/>
 </settings>
index c38fe92..51faabc 100644 (file)
@@ -5,6 +5,7 @@
        provider-name="Team XBMC">
   <extension point="xbmc.ui.screensaver" library=""/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Скрийнсейвър, изобразяващ слайдшоу от картини</summary>
     <summary lang="en">Screensaver that displays an image slideshow</summary>
     <summary lang="de">Bildschirmschoner, welcher eine Bilder-Slideshow anzeigt</summary>
     <summary lang="es">Un salvapantallas que muestra una presentación de imágenes</summary>
@@ -19,6 +20,7 @@
     <summary lang="ru">Хранитель экрана показывающий слайдшоу из изображений</summary>
     <summary lang="se">Skärmsläckare som visar ett bildspel</summary>
     <summary lang="zh">幻灯片屏幕保护程序</summary>
+    <description lang="bg">Скрийнсейвърът Slideshow изобразява слайдшоу от картини с разнообразни ефекти при прехода между отделните картини. Можете да зададете като източник на картини fanart от видео/музикалната си библиотеката или персонална папка с изображения.</description>
     <description lang="en">The Slideshow screensaver will show you a slide show of images using various transition effects. It can be configured to show your libraries music or video fanart, or a custom folder of images</description>
     <description lang="de">Der Slideshow-Bildschirmschoner zeigt eine Bilder-Slideshow mit verschiedenen Übergangseffekten. Er kann so konfiguriert werden, dass Musik oder Video Fanarts aus der Bibliothek, oder Bilder eines bestimmten Ordners angezeigt werden.  </description>
     <description lang="es">El salvapantallas Slideshow mostrará una presentación de imágenes varios efectos de transición. Puede ser configurado para mostrar los fanart de tus bibliotecas de música o video, o las imágenes de una carpeta.</description>
diff --git a/addons/screensaver.xbmc.builtin.slideshow/resources/language/Romanian/strings.xml b/addons/screensaver.xbmc.builtin.slideshow/resources/language/Romanian/strings.xml
new file mode 100644 (file)
index 0000000..a67b685
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<strings>
+    <string id="30000">Sursă imagini</string>
+    <string id="30001">Dosar</string>
+    <string id="30002">Fundale (Fanart) video</string>
+    <string id="30003">Fundale (Fanart) muzică</string>
+    <string id="30004">Dosar imagini</string>
+    <string id="30005">Nivel întunecare</string>
+</strings>
diff --git a/addons/screensaver.xbmc.builtin.slideshow/resources/language/Slovenian/strings.xml b/addons/screensaver.xbmc.builtin.slideshow/resources/language/Slovenian/strings.xml
new file mode 100644 (file)
index 0000000..272a802
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<strings>
+    <string id="30000">Vir slik za projekcijo</string>
+    <string id="30001">Mapa</string>
+    <string id="30002">Ozadja videa</string>
+    <string id="30003">Ozadja glasbe</string>
+    <string id="30004">Mapa s slikami</string>
+    <string id="30005">Nivo zatemnitve</string>
+</strings>
index 572e0e1..66718dd 100644 (file)
@@ -2,7 +2,7 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: blittan-->
 <!--Email: blittan@xbmc.org-->
-<!--Date of translation: 09/11/2010-->
+<!--Date of translation: 12/26/2011-->
 <!--$Revision$-->
 <strings>
   <string id="30000">Bildspelskälla</string>
@@ -10,4 +10,5 @@
   <string id="30002">Videofanart</string>
   <string id="30003">Musikfanart</string>
   <string id="30004">Bildmapp</string>
+  <string id="30005">Mörkningsnivå</string>
 </strings>
\ No newline at end of file
index 2efad8b..c987f2f 100644 (file)
@@ -2,5 +2,5 @@
 <settings>
   <setting label="30000" type="enum" id="type" default="0" lvalues="30002|30003|30004"/>
   <setting label="30001" type="folder" source="pictures" id="path" default="" enable="eq(-1,2)"/>
-  <setting label="30005" type="slider" id="level" range="0,1,100" default="100"/>
+  <setting label="30005" type="slider" id="level" range="0,1,100" option="percent" default="100"/>
 </settings>
diff --git a/addons/script.module.simplejson/addon.xml b/addons/script.module.simplejson/addon.xml
new file mode 100644 (file)
index 0000000..0fbf63a
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<addon id="script.module.simplejson"
+       name="simplejson"
+       version="2.0.10" 
+       provider-name="code.google.com/simplejson">
+  <requires>
+    <import addon="xbmc.python" version="2.0"/>
+  </requires>
+  <extension point="xbmc.python.module"
+             library="lib" />
+  <extension point="xbmc.addon.metadata">
+    <platform>all</platform>
+  </extension>
+</addon>
diff --git a/addons/script.module.simplejson/lib/LICENSE.txt b/addons/script.module.simplejson/lib/LICENSE.txt
new file mode 100644 (file)
index 0000000..ad95f29
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2006 Bob Ippolito
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/addons/script.module.simplejson/lib/simplejson/__init__.py b/addons/script.module.simplejson/lib/simplejson/__init__.py
new file mode 100644 (file)
index 0000000..d5b4d39
--- /dev/null
@@ -0,0 +1,318 @@
+r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of
+JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
+interchange format.
+
+:mod:`simplejson` exposes an API familiar to users of the standard library
+:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
+version of the :mod:`json` library contained in Python 2.6, but maintains
+compatibility with Python 2.4 and Python 2.5 and (currently) has
+significant performance advantages, even without using the optional C
+extension for speedups.
+
+Encoding basic Python object hierarchies::
+
+    >>> import simplejson as json
+    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
+    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
+    >>> print json.dumps("\"foo\bar")
+    "\"foo\bar"
+    >>> print json.dumps(u'\u1234')
+    "\u1234"
+    >>> print json.dumps('\\')
+    "\\"
+    >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
+    {"a": 0, "b": 0, "c": 0}
+    >>> from StringIO import StringIO
+    >>> io = StringIO()
+    >>> json.dump(['streaming API'], io)
+    >>> io.getvalue()
+    '["streaming API"]'
+
+Compact encoding::
+
+    >>> import simplejson as json
+    >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
+    '[1,2,3,{"4":5,"6":7}]'
+
+Pretty printing::
+
+    >>> import simplejson as json
+    >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
+    >>> print '\n'.join([l.rstrip() for l in  s.splitlines()])
+    {
+        "4": 5,
+        "6": 7
+    }
+
+Decoding JSON::
+
+    >>> import simplejson as json
+    >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
+    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
+    True
+    >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
+    True
+    >>> from StringIO import StringIO
+    >>> io = StringIO('["streaming API"]')
+    >>> json.load(io)[0] == 'streaming API'
+    True
+
+Specializing JSON object decoding::
+
+    >>> import simplejson as json
+    >>> def as_complex(dct):
+    ...     if '__complex__' in dct:
+    ...         return complex(dct['real'], dct['imag'])
+    ...     return dct
+    ...
+    >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
+    ...     object_hook=as_complex)
+    (1+2j)
+    >>> import decimal
+    >>> json.loads('1.1', parse_float=decimal.Decimal) == decimal.Decimal('1.1')
+    True
+
+Specializing JSON object encoding::
+
+    >>> import simplejson as json
+    >>> def encode_complex(obj):
+    ...     if isinstance(obj, complex):
+    ...         return [obj.real, obj.imag]
+    ...     raise TypeError(repr(o) + " is not JSON serializable")
+    ...
+    >>> json.dumps(2 + 1j, default=encode_complex)
+    '[2.0, 1.0]'
+    >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
+    '[2.0, 1.0]'
+    >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
+    '[2.0, 1.0]'
+
+
+Using simplejson.tool from the shell to validate and pretty-print::
+
+    $ echo '{"json":"obj"}' | python -m simplejson.tool
+    {
+        "json": "obj"
+    }
+    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
+    Expecting property name: line 1 column 2 (char 2)
+"""
+__version__ = '2.0.9'
+__all__ = [
+    'dump', 'dumps', 'load', 'loads',
+    'JSONDecoder', 'JSONEncoder',
+]
+
+__author__ = 'Bob Ippolito <bob@redivi.com>'
+
+from decoder import JSONDecoder
+from encoder import JSONEncoder
+
+_default_encoder = JSONEncoder(
+    skipkeys=False,
+    ensure_ascii=True,
+    check_circular=True,
+    allow_nan=True,
+    indent=None,
+    separators=None,
+    encoding='utf-8',
+    default=None,
+)
+
+def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
+        allow_nan=True, cls=None, indent=None, separators=None,
+        encoding='utf-8', default=None, **kw):
+    """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
+    ``.write()``-supporting file-like object).
+
+    If ``skipkeys`` is true then ``dict`` keys that are not basic types
+    (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
+    will be skipped instead of raising a ``TypeError``.
+
+    If ``ensure_ascii`` is false, then the some chunks written to ``fp``
+    may be ``unicode`` instances, subject to normal Python ``str`` to
+    ``unicode`` coercion rules. Unless ``fp.write()`` explicitly
+    understands ``unicode`` (as in ``codecs.getwriter()``) this is likely
+    to cause an error.
+
+    If ``check_circular`` is false, then the circular reference check
+    for container types will be skipped and a circular reference will
+    result in an ``OverflowError`` (or worse).
+
+    If ``allow_nan`` is false, then it will be a ``ValueError`` to
+    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
+    in strict compliance of the JSON specification, instead of using the
+    JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
+
+    If ``indent`` is a non-negative integer, then JSON array elements and object
+    members will be pretty-printed with that indent level. An indent level
+    of 0 will only insert newlines. ``None`` is the most compact representation.
+
+    If ``separators`` is an ``(item_separator, dict_separator)`` tuple
+    then it will be used instead of the default ``(', ', ': ')`` separators.
+    ``(',', ':')`` is the most compact JSON representation.
+
+    ``encoding`` is the character encoding for str instances, default is UTF-8.
+
+    ``default(obj)`` is a function that should return a serializable version
+    of obj or raise TypeError. The default simply raises TypeError.
+
+    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
+    ``.default()`` method to serialize additional types), specify it with
+    the ``cls`` kwarg.
+
+    """
+    # cached encoder
+    if (not skipkeys and ensure_ascii and
+        check_circular and allow_nan and
+        cls is None and indent is None and separators is None and
+        encoding == 'utf-8' and default is None and not kw):
+        iterable = _default_encoder.iterencode(obj)
+    else:
+        if cls is None:
+            cls = JSONEncoder
+        iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
+            check_circular=check_circular, allow_nan=allow_nan, indent=indent,
+            separators=separators, encoding=encoding,
+            default=default, **kw).iterencode(obj)
+    # could accelerate with writelines in some versions of Python, at
+    # a debuggability cost
+    for chunk in iterable:
+        fp.write(chunk)
+
+
+def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
+        allow_nan=True, cls=None, indent=None, separators=None,
+        encoding='utf-8', default=None, **kw):
+    """Serialize ``obj`` to a JSON formatted ``str``.
+
+    If ``skipkeys`` is false then ``dict`` keys that are not basic types
+    (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
+    will be skipped instead of raising a ``TypeError``.
+
+    If ``ensure_ascii`` is false, then the return value will be a
+    ``unicode`` instance subject to normal Python ``str`` to ``unicode``
+    coercion rules instead of being escaped to an ASCII ``str``.
+
+    If ``check_circular`` is false, then the circular reference check
+    for container types will be skipped and a circular reference will
+    result in an ``OverflowError`` (or worse).
+
+    If ``allow_nan`` is false, then it will be a ``ValueError`` to
+    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
+    strict compliance of the JSON specification, instead of using the
+    JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
+
+    If ``indent`` is a non-negative integer, then JSON array elements and
+    object members will be pretty-printed with that indent level. An indent
+    level of 0 will only insert newlines. ``None`` is the most compact
+    representation.
+
+    If ``separators`` is an ``(item_separator, dict_separator)`` tuple
+    then it will be used instead of the default ``(', ', ': ')`` separators.
+    ``(',', ':')`` is the most compact JSON representation.
+
+    ``encoding`` is the character encoding for str instances, default is UTF-8.
+
+    ``default(obj)`` is a function that should return a serializable version
+    of obj or raise TypeError. The default simply raises TypeError.
+
+    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
+    ``.default()`` method to serialize additional types), specify it with
+    the ``cls`` kwarg.
+
+    """
+    # cached encoder
+    if (not skipkeys and ensure_ascii and
+        check_circular and allow_nan and
+        cls is None and indent is None and separators is None and
+        encoding == 'utf-8' and default is None and not kw):
+        return _default_encoder.encode(obj)
+    if cls is None:
+        cls = JSONEncoder
+    return cls(
+        skipkeys=skipkeys, ensure_ascii=ensure_ascii,
+        check_circular=check_circular, allow_nan=allow_nan, indent=indent,
+        separators=separators, encoding=encoding, default=default,
+        **kw).encode(obj)
+
+
+_default_decoder = JSONDecoder(encoding=None, object_hook=None)
+
+
+def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None,
+        parse_int=None, parse_constant=None, **kw):
+    """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
+    a JSON document) to a Python object.
+
+    If the contents of ``fp`` is encoded with an ASCII based encoding other
+    than utf-8 (e.g. latin-1), then an appropriate ``encoding`` name must
+    be specified. Encodings that are not ASCII based (such as UCS-2) are
+    not allowed, and should be wrapped with
+    ``codecs.getreader(fp)(encoding)``, or simply decoded to a ``unicode``
+    object and passed to ``loads()``
+
+    ``object_hook`` is an optional function that will be called with the
+    result of any object literal decode (a ``dict``). The return value of
+    ``object_hook`` will be used instead of the ``dict``. This feature
+    can be used to implement custom decoders (e.g. JSON-RPC class hinting).
+
+    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
+    kwarg.
+
+    """
+    return loads(fp.read(),
+        encoding=encoding, cls=cls, object_hook=object_hook,
+        parse_float=parse_float, parse_int=parse_int,
+        parse_constant=parse_constant, **kw)
+
+
+def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
+        parse_int=None, parse_constant=None, **kw):
+    """Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
+    document) to a Python object.
+
+    If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding
+    other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name
+    must be specified. Encodings that are not ASCII based (such as UCS-2)
+    are not allowed and should be decoded to ``unicode`` first.
+
+    ``object_hook`` is an optional function that will be called with the
+    result of any object literal decode (a ``dict``). The return value of
+    ``object_hook`` will be used instead of the ``dict``. This feature
+    can be used to implement custom decoders (e.g. JSON-RPC class hinting).
+
+    ``parse_float``, if specified, will be called with the string
+    of every JSON float to be decoded. By default this is equivalent to
+    float(num_str). This can be used to use another datatype or parser
+    for JSON floats (e.g. decimal.Decimal).
+
+    ``parse_int``, if specified, will be called with the string
+    of every JSON int to be decoded. By default this is equivalent to
+    int(num_str). This can be used to use another datatype or parser
+    for JSON integers (e.g. float).
+
+    ``parse_constant``, if specified, will be called with one of the
+    following strings: -Infinity, Infinity, NaN, null, true, false.
+    This can be used to raise an exception if invalid JSON numbers
+    are encountered.
+
+    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
+    kwarg.
+
+    """
+    if (cls is None and encoding is None and object_hook is None and
+            parse_int is None and parse_float is None and
+            parse_constant is None and not kw):
+        return _default_decoder.decode(s)
+    if cls is None:
+        cls = JSONDecoder
+    if object_hook is not None:
+        kw['object_hook'] = object_hook
+    if parse_float is not None:
+        kw['parse_float'] = parse_float
+    if parse_int is not None:
+        kw['parse_int'] = parse_int
+    if parse_constant is not None:
+        kw['parse_constant'] = parse_constant
+    return cls(encoding=encoding, **kw).decode(s)
diff --git a/addons/script.module.simplejson/lib/simplejson/decoder.py b/addons/script.module.simplejson/lib/simplejson/decoder.py
new file mode 100644 (file)
index 0000000..b769ea4
--- /dev/null
@@ -0,0 +1,354 @@
+"""Implementation of JSONDecoder
+"""
+import re
+import sys
+import struct
+
+from simplejson.scanner import make_scanner
+try:
+    from simplejson._speedups import scanstring as c_scanstring
+except ImportError:
+    c_scanstring = None
+
+__all__ = ['JSONDecoder']
+
+FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL
+
+def _floatconstants():
+    _BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
+    if sys.byteorder != 'big':
+        _BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1]
+    nan, inf = struct.unpack('dd', _BYTES)
+    return nan, inf, -inf
+
+NaN, PosInf, NegInf = _floatconstants()
+
+
+def linecol(doc, pos):
+    lineno = doc.count('\n', 0, pos) + 1
+    if lineno == 1:
+        colno = pos
+    else:
+        colno = pos - doc.rindex('\n', 0, pos)
+    return lineno, colno
+
+
+def errmsg(msg, doc, pos, end=None):
+    # Note that this function is called from _speedups
+    lineno, colno = linecol(doc, pos)
+    if end is None:
+        #fmt = '{0}: line {1} column {2} (char {3})'
+        #return fmt.format(msg, lineno, colno, pos)
+        fmt = '%s: line %d column %d (char %d)'
+        return fmt % (msg, lineno, colno, pos)
+    endlineno, endcolno = linecol(doc, end)
+    #fmt = '{0}: line {1} column {2} - line {3} column {4} (char {5} - {6})'
+    #return fmt.format(msg, lineno, colno, endlineno, endcolno, pos, end)
+    fmt = '%s: line %d column %d - line %d column %d (char %d - %d)'
+    return fmt % (msg, lineno, colno, endlineno, endcolno, pos, end)
+
+
+_CONSTANTS = {
+    '-Infinity': NegInf,
+    'Infinity': PosInf,
+    'NaN': NaN,
+}
+
+STRINGCHUNK = re.compile(r'(.*?)(["\\\x00-\x1f])', FLAGS)
+BACKSLASH = {
+    '"': u'"', '\\': u'\\', '/': u'/',
+    'b': u'\b', 'f': u'\f', 'n': u'\n', 'r': u'\r', 't': u'\t',
+}
+
+DEFAULT_ENCODING = "utf-8"
+
+def py_scanstring(s, end, encoding=None, strict=True, _b=BACKSLASH, _m=STRINGCHUNK.match):
+    """Scan the string s for a JSON string. End is the index of the
+    character in s after the quote that started the JSON string.
+    Unescapes all valid JSON string escape sequences and raises ValueError
+    on attempt to decode an invalid string. If strict is False then literal
+    control characters are allowed in the string.
+    
+    Returns a tuple of the decoded string and the index of the character in s
+    after the end quote."""
+    if encoding is None:
+        encoding = DEFAULT_ENCODING
+    chunks = []
+    _append = chunks.append
+    begin = end - 1
+    while 1:
+        chunk = _m(s, end)
+        if chunk is None:
+            raise ValueError(
+                errmsg("Unterminated string starting at", s, begin))
+        end = chunk.end()
+        content, terminator = chunk.groups()
+        # Content is contains zero or more unescaped string characters
+        if content:
+            if not isinstance(content, unicode):
+                content = unicode(content, encoding)
+            _append(content)
+        # Terminator is the end of string, a literal control character,
+        # or a backslash denoting that an escape sequence follows
+        if terminator == '"':
+            break
+        elif terminator != '\\':
+            if strict:
+                msg = "Invalid control character %r at" % (terminator,)
+                #msg = "Invalid control character {0!r} at".format(terminator)
+                raise ValueError(errmsg(msg, s, end))
+            else:
+                _append(terminator)
+                continue
+        try:
+            esc = s[end]
+        except IndexError:
+            raise ValueError(
+                errmsg("Unterminated string starting at", s, begin))
+        # If not a unicode escape sequence, must be in the lookup table
+        if esc != 'u':
+            try:
+                char = _b[esc]
+            except KeyError:
+                msg = "Invalid \\escape: " + repr(esc)
+                raise ValueError(errmsg(msg, s, end))
+            end += 1
+        else:
+            # Unicode escape sequence
+            esc = s[end + 1:end + 5]
+            next_end = end + 5
+            if len(esc) != 4:
+                msg = "Invalid \\uXXXX escape"
+                raise ValueError(errmsg(msg, s, end))
+            uni = int(esc, 16)
+            # Check for surrogate pair on UCS-4 systems
+            if 0xd800 <= uni <= 0xdbff and sys.maxunicode > 65535:
+                msg = "Invalid \\uXXXX\\uXXXX surrogate pair"
+                if not s[end + 5:end + 7] == '\\u':
+                    raise ValueError(errmsg(msg, s, end))
+                esc2 = s[end + 7:end + 11]
+                if len(esc2) != 4:
+                    raise ValueError(errmsg(msg, s, end))
+                uni2 = int(esc2, 16)
+                uni = 0x10000 + (((uni - 0xd800) << 10) | (uni2 - 0xdc00))
+                next_end += 6
+            char = unichr(uni)
+            end = next_end
+        # Append the unescaped character
+        _append(char)
+    return u''.join(chunks), end
+
+
+# Use speedup if available
+scanstring = c_scanstring or py_scanstring
+
+WHITESPACE = re.compile(r'[ \t\n\r]*', FLAGS)
+WHITESPACE_STR = ' \t\n\r'
+
+def JSONObject((s, end), encoding, strict, scan_once, object_hook, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
+    pairs = {}
+    # Use a slice to prevent IndexError from being raised, the following
+    # check will raise a more specific ValueError if the string is empty
+    nextchar = s[end:end + 1]
+    # Normally we expect nextchar == '"'
+    if nextchar != '"':
+        if nextchar in _ws:
+            end = _w(s, end).end()
+            nextchar = s[end:end + 1]
+        # Trivial empty object
+        if nextchar == '}':
+            return pairs, end + 1
+        elif nextchar != '"':
+            raise ValueError(errmsg("Expecting property name", s, end))
+    end += 1
+    while True:
+        key, end = scanstring(s, end, encoding, strict)
+
+        # To skip some function call overhead we optimize the fast paths where
+        # the JSON key separator is ": " or just ":".
+        if s[end:end + 1] != ':':
+            end = _w(s, end).end()
+            if s[end:end + 1] != ':':
+                raise ValueError(errmsg("Expecting : delimiter", s, end))
+
+        end += 1
+
+        try:
+            if s[end] in _ws:
+                end += 1
+                if s[end] in _ws:
+                    end = _w(s, end + 1).end()
+        except IndexError:
+            pass
+
+        try:
+            value, end = scan_once(s, end)
+        except StopIteration:
+            raise ValueError(errmsg("Expecting object", s, end))
+        pairs[key] = value
+
+        try:
+            nextchar = s[end]
+            if nextchar in _ws:
+                end = _w(s, end + 1).end()
+                nextchar = s[end]
+        except IndexError:
+            nextchar = ''
+        end += 1
+
+        if nextchar == '}':
+            break
+        elif nextchar != ',':
+            raise ValueError(errmsg("Expecting , delimiter", s, end - 1))
+
+        try:
+            nextchar = s[end]
+            if nextchar in _ws:
+                end += 1
+                nextchar = s[end]
+                if nextchar in _ws:
+                    end = _w(s, end + 1).end()
+                    nextchar = s[end]
+        except IndexError:
+            nextchar = ''
+
+        end += 1
+        if nextchar != '"':
+            raise ValueError(errmsg("Expecting property name", s, end - 1))
+
+    if object_hook is not None:
+        pairs = object_hook(pairs)
+    return pairs, end
+
+def JSONArray((s, end), scan_once, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
+    values = []
+    nextchar = s[end:end + 1]
+    if nextchar in _ws:
+        end = _w(s, end + 1).end()
+        nextchar = s[end:end + 1]
+    # Look-ahead for trivial empty array
+    if nextchar == ']':
+        return values, end + 1
+    _append = values.append
+    while True:
+        try:
+            value, end = scan_once(s, end)
+        except StopIteration:
+            raise ValueError(errmsg("Expecting object", s, end))
+        _append(value)
+        nextchar = s[end:end + 1]
+        if nextchar in _ws:
+            end = _w(s, end + 1).end()
+            nextchar = s[end:end + 1]
+        end += 1
+        if nextchar == ']':
+            break
+        elif nextchar != ',':
+            raise ValueError(errmsg("Expecting , delimiter", s, end))
+
+        try:
+            if s[end] in _ws:
+                end += 1
+                if s[end] in _ws:
+                    end = _w(s, end + 1).end()
+        except IndexError:
+            pass
+
+    return values, end
+
+class JSONDecoder(object):
+    """Simple JSON <http://json.org> decoder
+
+    Performs the following translations in decoding by default:
+
+    +---------------+-------------------+
+    | JSON          | Python            |
+    +===============+===================+
+    | object        | dict              |
+    +---------------+-------------------+
+    | array         | list              |
+    +---------------+-------------------+
+    | string        | unicode           |
+    +---------------+-------------------+
+    | number (int)  | int, long         |
+    +---------------+-------------------+
+    | number (real) | float             |
+    +---------------+-------------------+
+    | true          | True              |
+    +---------------+-------------------+
+    | false         | False             |
+    +---------------+-------------------+
+    | null          | None              |
+    +---------------+-------------------+
+
+    It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as
+    their corresponding ``float`` values, which is outside the JSON spec.
+
+    """
+
+    def __init__(self, encoding=None, object_hook=None, parse_float=None,
+            parse_int=None, parse_constant=None, strict=True):
+        """``encoding`` determines the encoding used to interpret any ``str``
+        objects decoded by this instance (utf-8 by default).  It has no
+        effect when decoding ``unicode`` objects.
+
+        Note that currently only encodings that are a superset of ASCII work,
+        strings of other encodings should be passed in as ``unicode``.
+
+        ``object_hook``, if specified, will be called with the result
+        of every JSON object decoded and its return value will be used in
+        place of the given ``dict``.  This can be used to provide custom
+        deserializations (e.g. to support JSON-RPC class hinting).
+
+        ``parse_float``, if specified, will be called with the string
+        of every JSON float to be decoded. By default this is equivalent to
+        float(num_str). This can be used to use another datatype or parser
+        for JSON floats (e.g. decimal.Decimal).
+
+        ``parse_int``, if specified, will be called with the string
+        of every JSON int to be decoded. By default this is equivalent to
+        int(num_str). This can be used to use another datatype or parser
+        for JSON integers (e.g. float).
+
+        ``parse_constant``, if specified, will be called with one of the
+        following strings: -Infinity, Infinity, NaN.
+        This can be used to raise an exception if invalid JSON numbers
+        are encountered.
+
+        """
+        self.encoding = encoding
+        self.object_hook = object_hook
+        self.parse_float = parse_float or float
+        self.parse_int = parse_int or int
+        self.parse_constant = parse_constant or _CONSTANTS.__getitem__
+        self.strict = strict
+        self.parse_object = JSONObject
+        self.parse_array = JSONArray
+        self.parse_string = scanstring
+        self.scan_once = make_scanner(self)
+
+    def decode(self, s, _w=WHITESPACE.match):
+        """Return the Python representation of ``s`` (a ``str`` or ``unicode``
+        instance containing a JSON document)
+
+        """
+        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
+        end = _w(s, end).end()
+        if end != len(s):
+            raise ValueError(errmsg("Extra data", s, end, len(s)))
+        return obj
+
+    def raw_decode(self, s, idx=0):
+        """Decode a JSON document from ``s`` (a ``str`` or ``unicode`` beginning
+        with a JSON document) and return a 2-tuple of the Python
+        representation and the index in ``s`` where the document ended.
+
+        This can be used to decode a JSON document from a string that may
+        have extraneous data at the end.
+
+        """
+        try:
+            obj, end = self.scan_once(s, idx)
+        except StopIteration:
+            raise ValueError("No JSON object could be decoded")
+        return obj, end
diff --git a/addons/script.module.simplejson/lib/simplejson/encoder.py b/addons/script.module.simplejson/lib/simplejson/encoder.py
new file mode 100644 (file)
index 0000000..cf58290
--- /dev/null
@@ -0,0 +1,440 @@
+"""Implementation of JSONEncoder
+"""
+import re
+
+try:
+    from simplejson._speedups import encode_basestring_ascii as c_encode_basestring_ascii
+except ImportError:
+    c_encode_basestring_ascii = None
+try:
+    from simplejson._speedups import make_encoder as c_make_encoder
+except ImportError:
+    c_make_encoder = None
+
+ESCAPE = re.compile(r'[\x00-\x1f\\"\b\f\n\r\t]')
+ESCAPE_ASCII = re.compile(r'([\\"]|[^\ -~])')
+HAS_UTF8 = re.compile(r'[\x80-\xff]')
+ESCAPE_DCT = {
+    '\\': '\\\\',
+    '"': '\\"',
+    '\b': '\\b',
+    '\f': '\\f',
+    '\n': '\\n',
+    '\r': '\\r',
+    '\t': '\\t',
+}
+for i in range(0x20):
+    #ESCAPE_DCT.setdefault(chr(i), '\\u{0:04x}'.format(i))
+    ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,))
+
+# Assume this produces an infinity on all machines (probably not guaranteed)
+INFINITY = float('1e66666')
+FLOAT_REPR = repr
+
+def encode_basestring(s):
+    """Return a JSON representation of a Python string
+
+    """
+    def replace(match):
+        return ESCAPE_DCT[match.group(0)]
+    return '"' + ESCAPE.sub(replace, s) + '"'
+
+
+def py_encode_basestring_ascii(s):
+    """Return an ASCII-only JSON representation of a Python string
+
+    """
+    if isinstance(s, str) and HAS_UTF8.search(s) is not None:
+        s = s.decode('utf-8')
+    def replace(match):
+        s = match.group(0)
+        try:
+            return ESCAPE_DCT[s]
+        except KeyError:
+            n = ord(s)
+            if n < 0x10000:
+                #return '\\u{0:04x}'.format(n)
+                return '\\u%04x' % (n,)
+            else:
+                # surrogate pair
+                n -= 0x10000
+                s1 = 0xd800 | ((n >> 10) & 0x3ff)
+                s2 = 0xdc00 | (n & 0x3ff)
+                #return '\\u{0:04x}\\u{1:04x}'.format(s1, s2)
+                return '\\u%04x\\u%04x' % (s1, s2)
+    return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
+
+
+encode_basestring_ascii = c_encode_basestring_ascii or py_encode_basestring_ascii
+
+class JSONEncoder(object):
+    """Extensible JSON <http://json.org> encoder for Python data structures.
+
+    Supports the following objects and types by default:
+
+    +-------------------+---------------+
+    | Python            | JSON          |
+    +===================+===============+
+    | dict              | object        |
+    +-------------------+---------------+
+    | list, tuple       | array         |
+    +-------------------+---------------+
+    | str, unicode      | string        |
+    +-------------------+---------------+
+    | int, long, float  | number        |
+    +-------------------+---------------+
+    | True              | true          |
+    +-------------------+---------------+
+    | False             | false         |
+    +-------------------+---------------+
+    | None              | null          |
+    +-------------------+---------------+
+
+    To extend this to recognize other objects, subclass and implement a
+    ``.default()`` method with another method that returns a serializable
+    object for ``o`` if possible, otherwise it should call the superclass
+    implementation (to raise ``TypeError``).
+
+    """
+    item_separator = ', '
+    key_separator = ': '
+    def __init__(self, skipkeys=False, ensure_ascii=True,
+            check_circular=True, allow_nan=True, sort_keys=False,
+            indent=None, separators=None, encoding='utf-8', default=None):
+        """Constructor for JSONEncoder, with sensible defaults.
+
+        If skipkeys is false, then it is a TypeError to attempt
+        encoding of keys that are not str, int, long, float or None.  If
+        skipkeys is True, such items are simply skipped.
+
+        If ensure_ascii is true, the output is guaranteed to be str
+        objects with all incoming unicode characters escaped.  If
+        ensure_ascii is false, the output will be unicode object.
+
+        If check_circular is true, then lists, dicts, and custom encoded
+        objects will be checked for circular references during encoding to
+        prevent an infinite recursion (which would cause an OverflowError).
+        Otherwise, no such check takes place.
+
+        If allow_nan is true, then NaN, Infinity, and -Infinity will be
+        encoded as such.  This behavior is not JSON specification compliant,
+        but is consistent with most JavaScript based encoders and decoders.
+        Otherwise, it will be a ValueError to encode such floats.
+
+        If sort_keys is true, then the output of dictionaries will be
+        sorted by key; this is useful for regression tests to ensure
+        that JSON serializations can be compared on a day-to-day basis.
+
+        If indent is a non-negative integer, then JSON array
+        elements and object members will be pretty-printed with that
+        indent level.  An indent level of 0 will only insert newlines.
+        None is the most compact representation.
+
+        If specified, separators should be a (item_separator, key_separator)
+        tuple.  The default is (', ', ': ').  To get the most compact JSON
+        representation you should specify (',', ':') to eliminate whitespace.
+
+        If specified, default is a function that gets called for objects
+        that can't otherwise be serialized.  It should return a JSON encodable
+        version of the object or raise a ``TypeError``.
+
+        If encoding is not None, then all input strings will be
+        transformed into unicode using that encoding prior to JSON-encoding.
+        The default is UTF-8.
+
+        """
+
+        self.skipkeys = skipkeys
+        self.ensure_ascii = ensure_ascii
+        self.check_circular = check_circular
+        self.allow_nan = allow_nan
+        self.sort_keys = sort_keys
+        self.indent = indent
+        if separators is not None:
+            self.item_separator, self.key_separator = separators
+        if default is not None:
+            self.default = default
+        self.encoding = encoding
+
+    def default(self, o):
+        """Implement this method in a subclass such that it returns
+        a serializable object for ``o``, or calls the base implementation
+        (to raise a ``TypeError``).
+
+        For example, to support arbitrary iterators, you could
+        implement default like this::
+
+            def default(self, o):
+                try:
+                    iterable = iter(o)
+                except TypeError:
+                    pass
+                else:
+                    return list(iterable)
+                return JSONEncoder.default(self, o)
+
+        """
+        raise TypeError(repr(o) + " is not JSON serializable")
+
+    def encode(self, o):
+        """Return a JSON string representation of a Python data structure.
+
+        >>> JSONEncoder().encode({"foo": ["bar", "baz"]})
+        '{"foo": ["bar", "baz"]}'
+
+        """
+        # This is for extremely simple cases and benchmarks.
+        if isinstance(o, basestring):
+            if isinstance(o, str):
+                _encoding = self.encoding
+                if (_encoding is not None
+                        and not (_encoding == 'utf-8')):
+                    o = o.decode(_encoding)
+            if self.ensure_ascii:
+                return encode_basestring_ascii(o)
+            else:
+                return encode_basestring(o)
+        # This doesn't pass the iterator directly to ''.join() because the
+        # exceptions aren't as detailed.  The list call should be roughly
+        # equivalent to the PySequence_Fast that ''.join() would do.
+        chunks = self.iterencode(o, _one_shot=True)
+        if not isinstance(chunks, (list, tuple)):
+            chunks = list(chunks)
+        return ''.join(chunks)
+
+    def iterencode(self, o, _one_shot=False):
+        """Encode the given object and yield each string
+        representation as available.
+
+        For example::
+
+            for chunk in JSONEncoder().iterencode(bigobject):
+                mysocket.write(chunk)
+
+        """
+        if self.check_circular:
+            markers = {}
+        else:
+            markers = None
+        if self.ensure_ascii:
+            _encoder = encode_basestring_ascii
+        else:
+            _encoder = encode_basestring
+        if self.encoding != 'utf-8':
+            def _encoder(o, _orig_encoder=_encoder, _encoding=self.encoding):
+                if isinstance(o, str):
+                    o = o.decode(_encoding)
+                return _orig_encoder(o)
+
+        def floatstr(o, allow_nan=self.allow_nan, _repr=FLOAT_REPR, _inf=INFINITY, _neginf=-INFINITY):
+            # Check for specials.  Note that this type of test is processor- and/or
+            # platform-specific, so do tests which don't depend on the internals.
+
+            if o != o:
+                text = 'NaN'
+            elif o == _inf:
+                text = 'Infinity'
+            elif o == _neginf:
+                text = '-Infinity'
+            else:
+                return _repr(o)
+
+            if not allow_nan:
+                raise ValueError(
+                    "Out of range float values are not JSON compliant: " +
+                    repr(o))
+
+            return text
+
+
+        if _one_shot and c_make_encoder is not None and not self.indent and not self.sort_keys:
+            _iterencode = c_make_encoder(
+                markers, self.default, _encoder, self.indent,
+                self.key_separator, self.item_separator, self.sort_keys,
+                self.skipkeys, self.allow_nan)
+        else:
+            _iterencode = _make_iterencode(
+                markers, self.default, _encoder, self.indent, floatstr,
+                self.key_separator, self.item_separator, self.sort_keys,
+                self.skipkeys, _one_shot)
+        return _iterencode(o, 0)
+
+def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, _key_separator, _item_separator, _sort_keys, _skipkeys, _one_shot,
+        ## HACK: hand-optimized bytecode; turn globals into locals
+        False=False,
+        True=True,
+        ValueError=ValueError,
+        basestring=basestring,
+        dict=dict,
+        float=float,
+        id=id,
+        int=int,
+        isinstance=isinstance,
+        list=list,
+        long=long,
+        str=str,
+        tuple=tuple,
+    ):
+
+    def _iterencode_list(lst, _current_indent_level):
+        if not lst:
+            yield '[]'
+            return
+        if markers is not None:
+            markerid = id(lst)
+            if markerid in markers:
+                raise ValueError("Circular reference detected")
+            markers[markerid] = lst
+        buf = '['
+        if _indent is not None:
+            _current_indent_level += 1
+            newline_indent = '\n' + (' ' * (_indent * _current_indent_level))
+            separator = _item_separator + newline_indent
+            buf += newline_indent
+        else:
+            newline_indent = None
+            separator = _item_separator
+        first = True
+        for value in lst:
+            if first:
+                first = False
+            else:
+                buf = separator
+            if isinstance(value, basestring):
+                yield buf + _encoder(value)
+            elif value is None:
+                yield buf + 'null'
+            elif value is True:
+                yield buf + 'true'
+            elif value is False:
+                yield buf + 'false'
+            elif isinstance(value, (int, long)):
+                yield buf + str(value)
+            elif isinstance(value, float):
+                yield buf + _floatstr(value)
+            else:
+                yield buf
+                if isinstance(value, (list, tuple)):
+                    chunks = _iterencode_list(value, _current_indent_level)
+                elif isinstance(value, dict):
+                    chunks = _iterencode_dict(value, _current_indent_level)
+                else:
+                    chunks = _iterencode(value, _current_indent_level)
+                for chunk in chunks:
+                    yield chunk
+        if newline_indent is not None:
+            _current_indent_level -= 1
+            yield '\n' + (' ' * (_indent * _current_indent_level))
+        yield ']'
+        if markers is not None:
+            del markers[markerid]
+
+    def _iterencode_dict(dct, _current_indent_level):
+        if not dct:
+            yield '{}'
+            return
+        if markers is not None:
+            markerid = id(dct)
+            if markerid in markers:
+                raise ValueError("Circular reference detected")
+            markers[markerid] = dct
+        yield '{'
+        if _indent is not None:
+            _current_indent_level += 1
+            newline_indent = '\n' + (' ' * (_indent * _current_indent_level))
+            item_separator = _item_separator + newline_indent
+            yield newline_indent
+        else:
+            newline_indent = None
+            item_separator = _item_separator
+        first = True
+        if _sort_keys:
+            items = dct.items()
+            items.sort(key=lambda kv: kv[0])
+        else:
+            items = dct.iteritems()
+        for key, value in items:
+            if isinstance(key, basestring):
+                pass
+            # JavaScript is weakly typed for these, so it makes sense to
+            # also allow them.  Many encoders seem to do something like this.
+            elif isinstance(key, float):
+                key = _floatstr(key)
+            elif key is True:
+                key = 'true'
+            elif key is False:
+                key = 'false'
+            elif key is None:
+                key = 'null'
+            elif isinstance(key, (int, long)):
+                key = str(key)
+            elif _skipkeys:
+                continue
+            else:
+                raise TypeError("key " + repr(key) + " is not a string")
+            if first:
+                first = False
+            else:
+                yield item_separator
+            yield _encoder(key)
+            yield _key_separator
+            if isinstance(value, basestring):
+                yield _encoder(value)
+            elif value is None:
+                yield 'null'
+            elif value is True:
+                yield 'true'
+            elif value is False:
+                yield 'false'
+            elif isinstance(value, (int, long)):
+                yield str(value)
+            elif isinstance(value, float):
+                yield _floatstr(value)
+            else:
+                if isinstance(value, (list, tuple)):
+                    chunks = _iterencode_list(value, _current_indent_level)
+                elif isinstance(value, dict):
+                    chunks = _iterencode_dict(value, _current_indent_level)
+                else:
+                    chunks = _iterencode(value, _current_indent_level)
+                for chunk in chunks:
+                    yield chunk
+        if newline_indent is not None:
+            _current_indent_level -= 1
+            yield '\n' + (' ' * (_indent * _current_indent_level))
+        yield '}'
+        if markers is not None:
+            del markers[markerid]
+
+    def _iterencode(o, _current_indent_level):
+        if isinstance(o, basestring):
+            yield _encoder(o)
+        elif o is None:
+            yield 'null'
+        elif o is True:
+            yield 'true'
+        elif o is False:
+            yield 'false'
+        elif isinstance(o, (int, long)):
+            yield str(o)
+        elif isinstance(o, float):
+            yield _floatstr(o)
+        elif isinstance(o, (list, tuple)):
+            for chunk in _iterencode_list(o, _current_indent_level):
+                yield chunk
+        elif isinstance(o, dict):
+            for chunk in _iterencode_dict(o, _current_indent_level):
+                yield chunk
+        else:
+            if markers is not None:
+                markerid = id(o)
+                if markerid in markers:
+                    raise ValueError("Circular reference detected")
+                markers[markerid] = o
+            o = _default(o)
+            for chunk in _iterencode(o, _current_indent_level):
+                yield chunk
+            if markers is not None:
+                del markers[markerid]
+
+    return _iterencode
diff --git a/addons/script.module.simplejson/lib/simplejson/scanner.py b/addons/script.module.simplejson/lib/simplejson/scanner.py
new file mode 100644 (file)
index 0000000..adbc6ec
--- /dev/null
@@ -0,0 +1,65 @@
+"""JSON token scanner
+"""
+import re
+try:
+    from simplejson._speedups import make_scanner as c_make_scanner
+except ImportError:
+    c_make_scanner = None
+
+__all__ = ['make_scanner']
+
+NUMBER_RE = re.compile(
+    r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?',
+    (re.VERBOSE | re.MULTILINE | re.DOTALL))
+
+def py_make_scanner(context):
+    parse_object = context.parse_object
+    parse_array = context.parse_array
+    parse_string = context.parse_string
+    match_number = NUMBER_RE.match
+    encoding = context.encoding
+    strict = context.strict
+    parse_float = context.parse_float
+    parse_int = context.parse_int
+    parse_constant = context.parse_constant
+    object_hook = context.object_hook
+
+    def _scan_once(string, idx):
+        try:
+            nextchar = string[idx]
+        except IndexError:
+            raise StopIteration
+
+        if nextchar == '"':
+            return parse_string(string, idx + 1, encoding, strict)
+        elif nextchar == '{':
+            return parse_object((string, idx + 1), encoding, strict, _scan_once, object_hook)
+        elif nextchar == '[':
+            return parse_array((string, idx + 1), _scan_once)
+        elif nextchar == 'n' and string[idx:idx + 4] == 'null':
+            return None, idx + 4
+        elif nextchar == 't' and string[idx:idx + 4] == 'true':
+            return True, idx + 4
+        elif nextchar == 'f' and string[idx:idx + 5] == 'false':
+            return False, idx + 5
+
+        m = match_number(string, idx)
+        if m is not None:
+            integer, frac, exp = m.groups()
+            if frac or exp:
+                res = parse_float(integer + (frac or '') + (exp or ''))
+            else:
+                res = parse_int(integer)
+            return res, m.end()
+        elif nextchar == 'N' and string[idx:idx + 3] == 'NaN':
+            return parse_constant('NaN'), idx + 3
+        elif nextchar == 'I' and string[idx:idx + 8] == 'Infinity':
+            return parse_constant('Infinity'), idx + 8
+        elif nextchar == '-' and string[idx:idx + 9] == '-Infinity':
+            return parse_constant('-Infinity'), idx + 9
+        else:
+            raise StopIteration
+
+    return _scan_once
+
+make_scanner = c_make_scanner or py_make_scanner
diff --git a/addons/script.module.simplejson/lib/simplejson/tool.py b/addons/script.module.simplejson/lib/simplejson/tool.py
new file mode 100644 (file)
index 0000000..9044331
--- /dev/null
@@ -0,0 +1,37 @@
+r"""Command-line tool to validate and pretty-print JSON
+
+Usage::
+
+    $ echo '{"json":"obj"}' | python -m simplejson.tool
+    {
+        "json": "obj"
+    }
+    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
+    Expecting property name: line 1 column 2 (char 2)
+
+"""
+import sys
+import simplejson
+
+def main():
+    if len(sys.argv) == 1:
+        infile = sys.stdin
+        outfile = sys.stdout
+    elif len(sys.argv) == 2:
+        infile = open(sys.argv[1], 'rb')
+        outfile = sys.stdout
+    elif len(sys.argv) == 3:
+        infile = open(sys.argv[1], 'rb')
+        outfile = open(sys.argv[2], 'wb')
+    else:
+        raise SystemExit(sys.argv[0] + " [infile [outfile]]")
+    try:
+        obj = simplejson.load(infile)
+    except ValueError, e:
+        raise SystemExit(e)
+    simplejson.dump(obj, outfile, sort_keys=True, indent=4)
+    outfile.write('\n')
+
+
+if __name__ == '__main__':
+    main()
index 06b33e6..0884883 100644 (file)
@@ -97,6 +97,7 @@
                                <texturefocus border="25,5,25,5">ShutdownButtonFocus.png</texturefocus>
                                <texturenofocus border="25,5,25,5">ShutdownButtonNoFocus.png</texturenofocus>
                                <onclick>XBMC.Powerdown()</onclick>
+                               <visible>System.CanPowerDown</visible>
                                <pulseonselect>no</pulseonselect>
                                <font>font13</font>
                                <label>13016</label>
                                <font>font13</font>
                                <label>20150</label>
                                <visible>!System.HasAlarm(shutdowntimer)</visible>
+                               <visible>System.CanPowerDown</visible>
                        </control>
                        <control type="button" id="5">
                                <description>Cancel Shutdown Timer</description>
                                <texturefocus border="25,5,25,5">ShutdownButtonFocus.png</texturefocus>
                                <texturenofocus border="25,5,25,5">ShutdownButtonNoFocus.png</texturenofocus>
                                <onclick>XBMC.Suspend()</onclick>
+                               <visible>System.CanSuspend</visible>
                                <pulseonselect>no</pulseonselect>
                                <font>font13</font>
                                <label>13011</label>
                        </control>
                        <control type="button" id="7">
+                               <description>Hibernate button</description>
+                               <width>340</width>
+                               <height>40</height>
+                               <textcolor>grey2</textcolor>
+                               <focusedcolor>white</focusedcolor>
+                               <align>center</align>
+                               <textwidth>290</textwidth>
+                               <texturefocus border="25,5,25,5">ShutdownButtonFocus.png</texturefocus>
+                               <texturenofocus border="25,5,25,5">ShutdownButtonNoFocus.png</texturenofocus>
+                               <onclick>XBMC.Hibernate()</onclick>
+                               <visible>System.CanHibernate</visible>
+                               <pulseonselect>no</pulseonselect>
+                               <font>font13</font>
+                               <label>13010</label>
+                       </control>
+                       <control type="button" id="8">
                                <description>Reboot button</description>
                                <width>340</width>
                                <height>40</height>
                                <texturefocus border="25,5,25,5">ShutdownButtonFocus.png</texturefocus>
                                <texturenofocus border="25,5,25,5">ShutdownButtonNoFocus.png</texturenofocus>
                                <onclick>XBMC.Reset()</onclick>
+                               <visible>System.CanReboot</visible>
                                <pulseonselect>no</pulseonselect>
                                <font>font13</font>
                                <label>13013</label>
                        </control>
-                       <control type="button" id="8">
+                       <control type="button" id="9">
                                <description>Logoff button</description>
                                <width>340</width>
                                <height>40</height>
                                <visible>System.HasLoginScreen | IntegerGreaterThan(System.ProfileCount,1)</visible>
                                <visible>System.Loggedon</visible>
                        </control>
-                       <control type="togglebutton" id="9">
+                       <control type="togglebutton" id="10">
                                <description>Master mode button</description>
                                <width>340</width>
                                <height>40</height>
                                        <label>$LOCALIZE[31329] [B]$INFO[System.Alarmpos][/B]</label>
                                </control>
                        </control>
-                       <control type="image" id="10">
+                       <control type="image" id="12">
                                <description>background bottom image</description>
                                <posx>0</posx>
                                <width>340</width>
index 16195d9..07954d0 100644 (file)
 <window id="10140">
        <defaultcontrol always="true">20</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
        <coordinates>
                <system>1</system>
-               <posx>190</posx>
+               <posx>335</posx>
                <posy>30</posy>
        </coordinates>
        <include>dialogeffect</include>
-
        <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>900</width>
-                       <height>660</height>
-                       <texture border="40">DialogBack.png</texture>
-               </control>
-               <control type="image">
-                       <description>Dialog Header image</description>
-                       <posx>40</posx>
-                       <posy>16</posy>
-                       <width>820</width>
-                       <height>40</height>
-                       <texture>dialogheader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>40</posx>
-                       <posy>20</posy>
-                       <width>820</width>
-                       <height>30</height>
-                       <font>font13_title</font>
-                       <label>$LOCALIZE[35000]</label>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <textcolor>selected</textcolor>
-                       <shadowcolor>black</shadowcolor>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>40</posx>
-                       <posy>20</posy>
-                       <width>820</width>
-                       <height>30</height>
-                       <font>font13_title</font>
-                       <label>$LOCALIZE[35000]</label>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <textcolor>selected</textcolor>
-                       <shadowcolor>black</shadowcolor>
-               </control>
-               <control type="button">
-                       <description>Close Window button</description>
-                       <posx>810</posx>
-                       <posy>15</posy>
-                       <width>64</width>
-                       <height>32</height>
-                       <label>-</label>
-                       <font>-</font>
-                       <onclick>PreviousMenu</onclick>
-                       <texturefocus>DialogCloseButton-focus.png</texturefocus>
-                       <texturenofocus>DialogCloseButton.png</texturenofocus>
-                       <onleft>10</onleft>
-                       <onright>10</onright>
-                       <onup>10</onup>
-                       <ondown>10</ondown>
-                       <visible>system.getbool(input.enablemouse)</visible>
-               </control>
-
                <control type="group">
-                       <description>Peripheral list</description>
-                       <posx>20</posx>
-                       <posy>70</posy>
-                       <control type="label">
-                               <description>peripheral option header</description>
-                               <posx>130</posx>
+                       <visible>!Window.IsVisible(PeripheralSettings)</visible>
+                       <include>VisibleFadeEffect</include>
+                       <control type="image">
+                               <description>background image</description>
+                               <posx>0</posx>
                                <posy>0</posy>
-                               <width>380</width>
-                               <height>20</height>
-                               <font>font12_title</font>
-                               <label>$LOCALIZE[35000]</label>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <textcolor>blue</textcolor>
-                               <shadowcolor>black</shadowcolor>
+                               <width>610</width>
+                               <height>650</height>
+                               <texture border="40">DialogBack.png</texture>
+                               <visible>![Window.IsVisible(FullscreenVideo) | Window.IsVisible(Visualisation)]</visible>
                        </control>
-                       <control type="scrollbar" id="60">
+                       <control type="image">
+                               <description>background image</description>
                                <posx>0</posx>
-                               <posy>40</posy>
-                               <width>25</width>
-                               <height>445</height>
-                               <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                               <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
-                               <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                               <textureslidernib>ScrollBarNib.png</textureslidernib>
-                               <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                               <onleft>9000</onleft>
-                               <onright>20</onright>
-                               <showonepage>false</showonepage>
-                               <orientation>vertical</orientation>
+                               <posy>0</posy>
+                               <width>610</width>
+                               <height>650</height>
+                               <texture border="40">DialogBack2.png</texture>
+                               <visible>Window.IsVisible(FullscreenVideo) | Window.IsVisible(Visualisation)</visible>
                        </control>
                        <control type="image">
-                               <posx>25</posx>
-                               <posy>35</posy>
-                               <width>330</width>
-                               <height>440</height>
-                               <texture border="5">button-nofocus.png</texture>
+                               <description>Dialog Header image</description>
+                               <posx>40</posx>
+                               <posy>16</posy>
+                               <width>530</width>
+                               <height>40</height>
+                               <texture>dialogheader.png</texture>
                        </control>
-                       
+                       <control type="label" id="1">
+                               <description>header label</description>
+                               <posx>40</posx>
+                               <posy>20</posy>
+                               <width>530</width>
+                               <height>30</height>
+                               <font>font13_title</font>
+                               <label>$LOCALIZE[35000]</label>
+                               <align>center</align>
+                               <aligny>center</aligny>
+                               <textcolor>selected</textcolor>
+                               <shadowcolor>black</shadowcolor>
+                       </control>
+                       <control type="button">
+                               <description>Close Window button</description>
+                               <posx>520</posx>
+                               <posy>15</posy>
+                               <width>64</width>
+                               <height>32</height>
+                               <label>-</label>
+                               <font>-</font>
+                               <onclick>PreviousMenu</onclick>
+                               <texturefocus>DialogCloseButton-focus.png</texturefocus>
+                               <texturenofocus>DialogCloseButton.png</texturenofocus>
+                               <onleft>10</onleft>
+                               <onright>10</onright>
+                               <onup>10</onup>
+                               <ondown>10</ondown>
+                               <visible>system.getbool(input.enablemouse)</visible>
+                       </control>
+
                        <control type="list" id="20">
-                               <posx>30</posx>
-                               <posy>40</posy>
-                               <width>320</width>
-                               <height>445</height>
+                               <posx>20</posx>
+                               <posy>65</posy>
+                               <width>550</width>
+                               <height>510</height>
                                <onup>20</onup>
                                <ondown>20</ondown>
-                               <onleft>60</onleft>
-                               <onright>9000</onright>
-                               <pagecontrol>60</pagecontrol>
+                               <onleft>10</onleft>
+                               <onright>61</onright>
+                               <pagecontrol>61</pagecontrol>
                                <scrolltime>200</scrolltime>
-                               <itemlayout height="45" width="320">
+                               <animation effect="slide" start="0,0" end="10,0" time="0" condition="!Control.IsVisible(61)">Conditional</animation>
+                               <itemlayout height="85" width="550">
                                        <control type="image">
                                                <posx>0</posx>
                                                <posy>0</posy>
-                                               <width>320</width>
-                                               <height>40</height>
+                                               <width>550</width>
+                                               <height>80</height>
                                                <texture border="5">button-nofocus.png</texture>
                                        </control>
                                        <control type="label">
+                                               <description>Name</description>
                                                <posx>10</posx>
-                                               <posy>0</posy>
-                                               <width>320</width>
-                                               <height>40</height>
+                                               <posy>5</posy>
+                                               <width>520</width>
+                                               <height>20</height>
+                                               <label>$INFO[ListItem.Label]</label>
+                                               <align>left</align>
+                                               <aligny>center</aligny>
+                                               <font>font13</font>
+                                               <textcolor>white</textcolor>
+                                       </control>
+                                       <control type="label">
+                                               <description>Product ID Vendor ID</description>
+                                               <posx>10</posx>
+                                               <posy>30</posy>
+                                               <width>520</width>
+                                               <height>20</height>
+                                               <label>$LOCALIZE[35504]:  [COLOR=grey2]$INFO[ListItem.Property(Product)][/COLOR]    $LOCALIZE[35503]:  [COLOR=grey2]$INFO[ListItem.Property(Vendor)][/COLOR]</label>
+                                               <align>left</align>
+                                               <aligny>center</aligny>
                                                <font>font12</font>
+                                               <textcolor>blue</textcolor>
+                                       </control>
+                                       <control type="label">
+                                               <description>class</description>
+                                               <posx>10</posx>
+                                               <posy>50</posy>
+                                               <width>520</width>
+                                               <height>20</height>
+                                               <label>$LOCALIZE[35501]:  [COLOR=grey2]$INFO[ListItem.Property(Class)][/COLOR]</label>
                                                <align>left</align>
                                                <aligny>center</aligny>
-                                               <textcolor>grey2</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
+                                               <font>font12</font>
+                                               <textcolor>blue</textcolor>
                                        </control>
                                </itemlayout>
-                               <focusedlayout height="45" width="320">
+                               <focusedlayout height="85" width="550">
                                        <control type="image">
                                                <posx>0</posx>
                                                <posy>0</posy>
-                                               <width>320</width>
-                                               <height>40</height>
+                                               <width>550</width>
+                                               <height>80</height>
                                                <texture border="5">button-nofocus.png</texture>
                                                <visible>!Control.HasFocus(20)</visible>
+                                               <include>VisibleFadeEffect</include>
                                        </control>
                                        <control type="image">
                                                <posx>0</posx>
                                                <posy>0</posy>
-                                               <width>320</width>
-                                               <height>40</height>
+                                               <width>550</width>
+                                               <height>80</height>
                                                <texture border="5">button-focus2.png</texture>
                                                <visible>Control.HasFocus(20)</visible>
+                                               <include>VisibleFadeEffect</include>
                                        </control>
                                        <control type="label">
+                                               <description>Name</description>
                                                <posx>10</posx>
-                                               <posy>0</posy>
-                                               <width>320</width>
-                                               <height>40</height>
-                                               <font>font12</font>
+                                               <posy>5</posy>
+                                               <width>520</width>
+                                               <height>20</height>
+                                               <label>$INFO[ListItem.Label]</label>
                                                <align>left</align>
                                                <aligny>center</aligny>
+                                               <font>font13</font>
                                                <textcolor>white</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
+                                       </control>
+                                       <control type="label">
+                                               <description>Product ID Vendor ID</description>
+                                               <posx>10</posx>
+                                               <posy>30</posy>
+                                               <width>520</width>
+                                               <height>20</height>
+                                               <label>$LOCALIZE[35504]:  [COLOR=grey2]$INFO[ListItem.Property(Product)][/COLOR]    $LOCALIZE[35503]:  [COLOR=grey2]$INFO[ListItem.Property(Vendor)][/COLOR]</label>
+                                               <align>left</align>
+                                               <aligny>center</aligny>
+                                               <font>font12</font>
+                                               <textcolor>blue</textcolor>
+                                       </control>
+                                       <control type="label">
+                                               <description>class</description>
+                                               <posx>10</posx>
+                                               <posy>50</posy>
+                                               <width>520</width>
+                                               <height>20</height>
+                                               <label>$LOCALIZE[35501]:  [COLOR=grey2]$INFO[ListItem.Property(Class)][/COLOR]</label>
+                                               <align>left</align>
+                                               <aligny>center</aligny>
+                                               <font>font12</font>
+                                               <textcolor>blue</textcolor>
                                        </control>
                                </focusedlayout>
                        </control>
 
+                       <control type="scrollbar" id="61">
+                               <posx>570</posx>
+                               <posy>65</posy>
+                               <width>25</width>
+                               <height>510</height>
+                               <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
+                               <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
+                               <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
+                               <textureslidernib>ScrollBarNib.png</textureslidernib>
+                               <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
+                               <onleft>20</onleft>
+                               <onright>10</onright>
+                               <ondown>61</ondown>
+                               <onup>61</onup>
+                               <showonepage>false</showonepage>
+                               <orientation>vertical</orientation>
+                       </control>
                        <control type="label">
-                               <description>Page Count Label</description>
-                               <posx>80</posx>
-                               <posy>480</posy>
-                               <width>420</width>
-                               <height>20</height>
+                               <description>number of files/pages in list text label</description>
+                               <posx>580</posx>
+                               <posy>585</posy>
+                               <width>300</width>
+                               <height>35</height>
                                <font>font12</font>
-                               <textcolor>grey</textcolor>
-                               <scroll>false</scroll>
-                               <align>center</align>
+                               <align>right</align>
                                <aligny>center</aligny>
-                               <label>([COLOR=blue]$INFO[Container(20).NumItems][/COLOR]) $LOCALIZE[19019] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(20).CurrentPage]/$INFO[Container(20).NumPages][/COLOR])</label>
-                       </control>
-               </control>
-
-               <control type="group" id="9002">
-                       <control type="group">
-                               <posx>400</posx>
-                               <posy>70</posy>
-                               <control type="label">
-                                       <description>peripheral option header</description>
-                                       <posx>150</posx>
-                                       <posy>0</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <font>font12_title</font>
-                                       <label>$LOCALIZE[33029]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>blue</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-
-                               <control type="label">
-                                       <description>name</description>
-                                       <posx>0</posx>
-                                       <posy>35</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <label>$LOCALIZE[35502]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <textcolor>blue</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>name value</description>
-                                       <posx>150</posx>
-                                       <posy>35</posy>
-                                       <width>330</width>
-                                       <height>20</height>
-                                       <label fallback="13205">$INFO[Container(20).ListItem.Label]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <scroll>true</scroll>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-
-                               <control type="label">
-                                       <description>location</description>
-                                       <posx>0</posx>
-                                       <posy>60</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <label>$LOCALIZE[35500]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <textcolor>blue</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>location value</description>
-                                       <posx>150</posx>
-                                       <posy>60</posy>
-                                       <width>330</width>
-                                       <height>20</height>
-                                       <label fallback="13205">$INFO[Container(20).ListItem.Property(Bus)] - $INFO[Container(20).ListItem.Property(Location)]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <scroll>true</scroll>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-
-                               <control type="label">
-                                       <description>class</description>
-                                       <posx>0</posx>
-                                       <posy>85</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <label>$LOCALIZE[35501]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <textcolor>blue</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>class value</description>
-                                       <posx>150</posx>
-                                       <posy>85</posy>
-                                       <width>330</width>
-                                       <height>20</height>
-                                       <label fallback="13205">$INFO[Container(20).ListItem.Property(Class)]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <scroll>true</scroll>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-
-                               <control type="label">
-                                       <description>vendor</description>
-                                       <posx>0</posx>
-                                       <posy>110</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <label>$LOCALIZE[35503]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <textcolor>blue</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>vendor value</description>
-                                       <posx>150</posx>
-                                       <posy>110</posy>
-                                       <width>330</width>
-                                       <height>20</height>
-                                       <label fallback="13205">$INFO[Container(20).ListItem.Property(Vendor)]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <scroll>true</scroll>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-
-                               <control type="label">
-                                       <description>product</description>
-                                       <posx>0</posx>
-                                       <posy>135</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <label>$LOCALIZE[35504]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <textcolor>blue</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>product value</description>
-                                       <posx>150</posx>
-                                       <posy>135</posy>
-                                       <width>330</width>
-                                       <height>20</height>
-                                       <label fallback="13205">$INFO[Container(20).ListItem.Property(Product)]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font12</font>
-                                       <scroll>true</scroll>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-
+                               <scroll>true</scroll>
+                               <textcolor>grey</textcolor>
+                               <label>([COLOR=blue]$INFO[Container(20).NumItems][/COLOR]) $LOCALIZE[31025] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(20).CurrentPage]/$INFO[Container(20).NumPages][/COLOR])</label>
                        </control>
-               </control>
-
-               <control type="group" id="9000">
-                       <posx>70</posx>
-                       <posy>590</posy>
                        <control type="button" id="10">
-                               <description>Close Button</description>
-                               <posy>0</posy>
-                               <posx>100</posx>
+                               <description>OK button</description>
+                               <posx>20</posx>
+                               <posy>585</posy>
                                <width>200</width>
                                <height>40</height>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font12_title</font>
                                <label>186</label>
-                               <onleft>11</onleft>
-                               <onright>11</onright>
-                               <onup>20</onup>
-                               <ondown>20</ondown>
-                       </control>
-                       <control type="button" id="11">
-                               <description>Settings Button</description>
-                               <posy>0</posy>
-                               <posx>400</posx>
-                               <width>200</width>
-                               <height>40</height>
-                               <align>center</align>
-                               <aligny>center</aligny>
                                <font>font12_title</font>
-                               <label>5</label>
-                               <onleft>10</onleft>
-                               <onright>10</onright>
+                               <textcolor>white</textcolor>
+                               <focusedcolor>white</focusedcolor>
+                               <align>center</align>
+                               <onleft>61</onleft>
+                               <onright>20</onright>
                                <onup>20</onup>
                                <ondown>20</ondown>
                        </control>
index df089c1..b5e025b 100644 (file)
@@ -2,94 +2,96 @@
        <defaultcontrol>5</defaultcontrol>
        <coordinates>
                <system>1</system>
-               <posx>240</posx>
-               <posy>60</posy>
+               <posx>290</posx>
+               <posy>75</posy>
        </coordinates>
        <include>dialogeffect</include>
        <controls>
-               <control type="group">
-                       <animation effect="fade" start="100" end="0" time="400" condition="Window.IsVisible(SliderDialog) | Window.IsVisible(FileBrowser)">Conditional</animation>
-                       <control type="image">
-                               <description>background image</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>800</width>
-                               <height>600</height>
-                               <texture border="40">DialogBack2.png</texture>
-                       </control>
-                       <control type="image">
-                               <description>Dialog Header image</description>
-                               <posx>40</posx>
-                               <posy>16</posy>
-                               <width>720</width>
-                               <height>40</height>
-                               <texture>dialogheader.png</texture>
-                       </control>
-                       <control type="button">
-                               <description>Close Window button</description>
-                               <posx>710</posx>
-                               <posy>15</posy>
-                               <width>64</width>
-                               <height>32</height>
-                               <label>-</label>
-                               <font>-</font>
-                               <onclick>PreviousMenu</onclick>
-                               <texturefocus>DialogCloseButton-focus.png</texturefocus>
-                               <texturenofocus>DialogCloseButton.png</texturenofocus>
-                               <onleft>2</onleft>
-                               <onright>2</onright>
-                               <onup>2</onup>
-                               <ondown>2</ondown>
-                               <visible>system.getbool(input.enablemouse)</visible>
-                       </control>
-                       <control type="label" id="3">
-                               <description>No Settings Label</description>
-                               <posx>20</posx>
-                               <posy>180</posy>
-                               <width>760</width>
-                               <align>center</align>
-                               <label>35004</label>
-                               <font>font13caps</font>
-                       </control>
-                       <control type="grouplist" id="5">
-                               <description>control area</description>
-                               <posx>40</posx>
-                               <posy>65</posy>
-                               <width>720</width>
-                               <height>490</height>
-                               <itemgap>5</itemgap>
-                               <pagecontrol>60</pagecontrol>
-                               <onleft>9000</onleft>
-                               <onright>60</onright>
-                               <onup>5</onup>
-                               <ondown>5</ondown>
-                       </control>
-                       <control type="scrollbar" id="60">
-                               <posx>760</posx>
-                               <posy>65</posy>
-                               <width>25</width>
-                               <height>450</height>
-                               <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                               <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
-                               <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                               <textureslidernib>ScrollBarNib.png</textureslidernib>
-                               <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                               <onleft>5</onleft>
-                               <onright>9000</onright>
-                               <ondown>61</ondown>
-                               <onup>61</onup>
-                               <showonepage>true</showonepage>
-                               <orientation>vertical</orientation>
-                       </control>
+               <control type="image">
+                       <description>background image</description>
+                       <posx>0</posx>
+                       <posy>0</posy>
+                       <width>700</width>
+                       <height>570</height>
+                       <texture border="40">DialogBack.png</texture>
                </control>
-               <control type="sliderex" id="10">
-                       <description>Default Slider</description>
+               <control type="image">
+                       <description>Dialog Header image</description>
+                       <posx>40</posx>
+                       <posy>16</posy>
+                       <width>620</width>
                        <height>40</height>
-                       <texturenofocus border="5">button-nofocus.png</texturenofocus>
-                       <texturefocus border="5">button-focus2.png</texturefocus>
-                       <font>font13</font>
-                       <textcolor>grey2</textcolor>
-                       <focusedcolor>white</focusedcolor>
+                       <texture>dialogheader.png</texture>
+               </control>
+               <control type="label">
+                       <description>header label</description>
+                       <posx>40</posx>
+                       <posy>20</posy>
+                       <width>620</width>
+                       <height>30</height>
+                       <font>font13_title</font>
+                       <label>$LOCALIZE[5]</label>
+                       <align>center</align>
+                       <aligny>center</aligny>
+                       <textcolor>selected</textcolor>
+                       <shadowcolor>black</shadowcolor>
+               </control>
+               <control type="button">
+                       <description>Close Window button</description>
+                       <posx>610</posx>
+                       <posy>15</posy>
+                       <width>64</width>
+                       <height>32</height>
+                       <label>-</label>
+                       <font>-</font>
+                       <onclick>PreviousMenu</onclick>
+                       <texturefocus>DialogCloseButton-focus.png</texturefocus>
+                       <texturenofocus>DialogCloseButton.png</texturenofocus>
+                       <onleft>5</onleft>
+                       <onright>5</onright>
+                       <onup>5</onup>
+                       <ondown>5</ondown>
+                       <visible>system.getbool(input.enablemouse)</visible>
+               </control>
+               <control type="label" id="3">
+                       <description>No Settings Label</description>
+                       <posx>20</posx>
+                       <posy>180</posy>
+                       <width>640</width>
+                       <align>center</align>
+                       <label>35004</label>
+                       <font>font13caps</font>
+               </control>
+               <control type="grouplist" id="5">
+                       <animation effect="slide" start="0,0" end="5,0" time="0" condition="!Control.IsVisible(60)">Conditional</animation>
+                       <description>control area</description>
+                       <posx>30</posx>
+                       <posy>70</posy>
+                       <width>630</width>
+                       <height>410</height>
+                       <itemgap>5</itemgap>
+                       <pagecontrol>60</pagecontrol>
+                       <onleft>28</onleft>
+                       <onright>60</onright>
+                       <onup>28</onup>
+                       <ondown>28</ondown>
+               </control>
+               <control type="scrollbar" id="60">
+                       <posx>658</posx>
+                       <posy>70</posy>
+                       <width>25</width>
+                       <height>410</height>
+                       <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
+                       <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
+                       <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
+                       <textureslidernib>ScrollBarNib.png</textureslidernib>
+                       <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
+                       <onleft>3</onleft>
+                       <onright>3</onright>
+                       <ondown>60</ondown>
+                       <onup>60</onup>
+                       <showonepage>false</showonepage>
+                       <orientation>vertical</orientation>
                </control>
                <control type="button" id="7">
                        <description>Default Button</description>
                        <font>font13</font>
                        <textcolor>grey2</textcolor>
                        <focusedcolor>white</focusedcolor>
-                       <texturenofocus border="5">button-nofocus.png</texturenofocus>
                        <texturefocus border="5">button-focus2.png</texturefocus>
+                       <texturenofocus border="5">button-nofocus.png</texturenofocus>
                        <aligny>center</aligny>
                        <reverse>yes</reverse>
                </control>
+               <control type="sliderex" id="10">
+                       <description>Default Slider</description>
+                       <height>40</height>
+                       <texturenofocus border="5">button-nofocus.png</texturenofocus>
+                       <texturefocus border="5">button-focus2.png</texturefocus>
+                       <font>font13</font>
+                       <textcolor>grey2</textcolor>
+                       <focusedcolor>white</focusedcolor>
+               </control>
                <control type="image" id="11">
                        <description>separator image</description>
                        <height>2</height>
                </control>
 
                <control type="group" id="9000">
-                       <posx>50</posx>
-                       <posy>530</posy>
+                       <posx>40</posx>
+                       <posy>505</posy>
                        <control type="button" id="29">
                                <description>Cancel Button</description>
                                <posy>0</posy>
                        <control type="button" id="28">
                                <description>OK Button</description>
                                <posy>0</posy>
-                               <posx>250</posx>
+                               <posx>210</posx>
                                <width>200</width>
                                <height>40</height>
                                <align>center</align>
                        <control type="button" id="50">
                                <description>Defaults Button</description>
                                <posy>0</posy>
-                               <posx>500</posx>
+                               <posx>420</posx>
                                <width>200</width>
                                <height>40</height>
                                <align>center</align>
index 8313540..ee9f44e 100644 (file)
                                                <onclick>ActivateWindow(Weather)</onclick>
                                                <icon>special://skin/backgrounds/weather.jpg</icon>
                                                <thumb>$INFO[Skin.String(Home_Custom_Back_Weather_Folder)]</thumb>
-                                               <visible>!Skin.HasSetting(HomeMenuNoWeatherButton)</visible>
+                                               <visible>!Skin.HasSetting(HomeMenuNoWeatherButton) + !IsEmpty(Weather.Plugin)</visible>
                                        </item>
                                        <item id="4">
                                                <label>1</label>
                                        <onclick>RunAddon($INFO[Skin.String(HomeVideosButton1)])</onclick>
                                        <icon>$INFO[system.addonicon(Skin.String(HomeVideosButton1))]</icon>
                                        <thumb>-</thumb>
-                                       <visible>Container(9000).HasFocus(2) + !IsEmpty(Skin.String(HomeVideosButton1))</visible>
+                                       <visible>[Container(9000).HasFocus(2) | Container(9000).HasFocus(10) | Container(9000).HasFocus(11)] + !IsEmpty(Skin.String(HomeVideosButton1))</visible>
                                </item>
                                <item>
                                        <label>$INFO[system.addontitle(Skin.String(HomeVideosButton2))]</label>
                                        <onclick>RunAddon($INFO[Skin.String(HomeVideosButton2)])</onclick>
                                        <icon>$INFO[system.addonicon(Skin.String(HomeVideosButton2))]</icon>
                                        <thumb>-</thumb>
-                                       <visible>Container(9000).HasFocus(2) + !IsEmpty(Skin.String(HomeVideosButton2))</visible>
+                                       <visible>[Container(9000).HasFocus(2) | Container(9000).HasFocus(10) | Container(9000).HasFocus(11)] + !IsEmpty(Skin.String(HomeVideosButton2))</visible>
                                </item>
                                <item>
                                        <label>$INFO[system.addontitle(Skin.String(HomeVideosButton3))]</label>
                                        <onclick>RunAddon($INFO[Skin.String(HomeVideosButton3)])</onclick>
                                        <icon>$INFO[system.addonicon(Skin.String(HomeVideosButton3))]</icon>
                                        <thumb>-</thumb>
-                                       <visible>Container(9000).HasFocus(2) + !IsEmpty(Skin.String(HomeVideosButton3))</visible>
+                                       <visible>[Container(9000).HasFocus(2) | Container(9000).HasFocus(10) | Container(9000).HasFocus(11)] + !IsEmpty(Skin.String(HomeVideosButton3))</visible>
                                </item>
                                <item>
                                        <label>$INFO[system.addontitle(Skin.String(HomeVideosButton4))]</label>
                                        <onclick>RunAddon($INFO[Skin.String(HomeVideosButton4)])</onclick>
                                        <icon>$INFO[system.addonicon(Skin.String(HomeVideosButton4))]</icon>
                                        <thumb>-</thumb>
-                                       <visible>Container(9000).HasFocus(2) + !IsEmpty(Skin.String(HomeVideosButton4))</visible>
+                                       <visible>[Container(9000).HasFocus(2) | Container(9000).HasFocus(10) | Container(9000).HasFocus(11)] + !IsEmpty(Skin.String(HomeVideosButton4))</visible>
                                </item>
                                <item>
                                        <label>$INFO[system.addontitle(Skin.String(HomeVideosButton5))]</label>
                                        <onclick>RunAddon($INFO[Skin.String(HomeVideosButton5)])</onclick>
                                        <icon>$INFO[system.addonicon(Skin.String(HomeVideosButton5))]</icon>
                                        <thumb>-</thumb>
-                                       <visible>Container(9000).HasFocus(2) + !IsEmpty(Skin.String(HomeVideosButton5))</visible>
+                                       <visible>[Container(9000).HasFocus(2) | Container(9000).HasFocus(10) | Container(9000).HasFocus(11)] + !IsEmpty(Skin.String(HomeVideosButton5))</visible>
                                </item>
 
                                <item>
                        </control>
                        <control type="image">
                                <description>Weather image</description>
-                               <posx>30</posx>
-                               <posy>1</posy>
-                               <width>25</width>
-                               <height>25</height>
+                               <posx>25</posx>
+                               <posy>0</posy>
+                               <width>30</width>
+                               <height>30</height>
                                <aspectratio>keep</aspectratio>
                                <texture>$INFO[Window(Weather).Property(Current.ConditionIcon)]</texture>
                        </control>
index a7e7e18..a5151b0 100644 (file)
@@ -1,23 +1,22 @@
 <includes>
-  <variable name="typehackflagging">
-    <value condition="[substring(ListItem.FilenameAndPath,bluray) | substring(ListItem.FilenameAndPath,bdrip)]">bluray</value>
-    <value condition="substring(ListItem.FilenameAndPath,hddvd)">hddvd</value>
-    <value condition="substring(ListItem.FilenameAndPath,dvd)">dvd</value>
-    <value condition="[substring(ListItem.FilenameAndPath,pdtv) | substring(ListItem.FilenameAndPath,hdtv) | substring(ListItem.FilenameAndPath,dsr)]">TV</value>
-    <value condition="substring(ListItem.FilenameAndPath,vhs)">vhs</value>
-  </variable>
-  <variable name="rating">
-    <value condition="substring(listitem.mpaa,Rated G)">mpaa_general</value>
-    <value condition="substring(listitem.mpaa,Rated PG) + !substring(listitem.mpaa,Rated PG-13)">mpaa_pg</value>
-    <value condition="substring(listitem.mpaa,Rated PG-13)">mpaa_pg13</value>
-    <value condition="substring(Listitem.mpaa,Rated R)">mpaa_restricted</value>
-    <value condition="substring(Listitem.mpaa,Rated NC)">mpaa_nc17</value>
-  </variable>
-  <variable name="videocodec">
-    <value condition="[substring(ListItem.VideoCodec,div,left) | stringcompare(ListItem.VideoCodec,dx50)]">divx</value>
-    <value>$INFO[ListItem.VideoCodec]</value>
-  </variable>
-
+       <variable name="typehackflagging">
+               <value condition="[substring(ListItem.FilenameAndPath,bluray) | substring(ListItem.FilenameAndPath,bdrip) | substring(ListItem.FilenameAndPath,bd25) | substring(ListItem.FilenameAndPath,bd50)]">bluray</value>
+               <value condition="substring(ListItem.FilenameAndPath,hddvd)">hddvd</value>
+               <value condition="substring(ListItem.FilenameAndPath,dvd)">dvd</value>
+               <value condition="[substring(ListItem.FilenameAndPath,pdtv) | substring(ListItem.FilenameAndPath,hdtv) | substring(ListItem.FilenameAndPath,dsr)]">TV</value>
+               <value condition="substring(ListItem.FilenameAndPath,vhs)">vhs</value>
+       </variable>
+       <variable name="rating">
+               <value condition="substring(listitem.mpaa,Rated G)">mpaa_general</value>
+               <value condition="substring(listitem.mpaa,Rated PG) + !substring(listitem.mpaa,Rated PG-13)">mpaa_pg</value>
+               <value condition="substring(listitem.mpaa,Rated PG-13)">mpaa_pg13</value>
+               <value condition="substring(Listitem.mpaa,Rated R)">mpaa_restricted</value>
+               <value condition="substring(Listitem.mpaa,Rated NC)">mpaa_nc17</value>
+       </variable>
+               <variable name="videocodec">
+               <value condition="[substring(ListItem.VideoCodec,div,left) | stringcompare(ListItem.VideoCodec,dx50)]">divx</value>
+               <value>$INFO[ListItem.VideoCodec]</value>
+       </variable>
        <include name="VideoCodecFlaggingConditions">
                <control type="image">
                        <description>Video rez Image</description>
index 1ef210d..1012367 100644 (file)
@@ -32,7 +32,7 @@
                        <include>ButtonHomeSubCommonValues</include>
                        <label>14022</label>
                        <onclick>ActivateWindow(Videos,Root)</onclick>
-                       <visible>Library.HasContent(Videos)</visible>
+                       <visible>Library.HasContent(Video)</visible>
                </control>
                <control type="button" id="90107">
                        <include>ButtonHomeSubCommonValues</include>
                <control type="button" id="90132">
                        <include>ButtonHomeSubCommonValues</include>
                        <label>13391</label>
+                       <onclick>SetFocus(9000)</onclick>
                        <onclick>EjectTray()</onclick>
                </control>
                <control type="image" id="90126">
index 5378079..f9b51c8 100644 (file)
                        <item id="1">
                                <label>$INFO[Window.Property(LatestMovie.1.Title)]</label>
                                <label2></label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestMovie.1.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestMovie.1.Path)])</onclick>
                                <icon>$INFO[Window.Property(LatestMovie.1.Thumb)]</icon>
                                <thumb>-</thumb>
                        </item>
                        <item id="2">
                                <label>$INFO[Window.Property(LatestMovie.2.Title)]</label>
                                <label2></label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestMovie.2.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestMovie.2.Path)])</onclick>
                                <icon>$INFO[Window.Property(LatestMovie.2.Thumb)]</icon>
                                <thumb>-</thumb>
                        </item>
                        <item id="3">
                                <label>$INFO[Window.Property(LatestMovie.3.Title)]</label>
                                <label2></label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestMovie.3.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestMovie.3.Path)])</onclick>
                                <icon>$INFO[Window.Property(LatestMovie.3.Thumb)]</icon>
                                <thumb>-</thumb>
                        </item>
                        <item id="4">
                                <label>$INFO[Window.Property(LatestMovie.4.Title)]</label>
                                <label2></label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestMovie.4.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestMovie.4.Path)])</onclick>
                                <icon>$INFO[Window.Property(LatestMovie.4.Thumb)]</icon>
                                <thumb>-</thumb>
                        </item>
                        <item id="5">
                                <label>$INFO[Window.Property(LatestMovie.5.Title)]</label>
                                <label2></label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestMovie.5.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestMovie.5.Path)])</onclick>
                                <icon>$INFO[Window.Property(LatestMovie.5.Thumb)]</icon>
                                <thumb>-</thumb>
                        </item>
                        <item id="4">
                                <label>$INFO[Window.Property(LatestEpisode.4.EpisodeTitle)]</label>
                                <label2>$INFO[Window.Property(LatestEpisode.4.ShowTitle)] - $INFO[Window.Property(LatestEpisode.4.EpisodeNo)]</label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestEpisode.4.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestEpisode.4.Path)])</onclick>
                                <icon>-</icon>
                                <thumb>$INFO[Window.Property(LatestEpisode.4.Thumb)]</thumb>
                        </item>
                        <item id="3">
                                <label>$INFO[Window.Property(LatestEpisode.3.EpisodeTitle)]</label>
                                <label2>$INFO[Window.Property(LatestEpisode.3.ShowTitle)] - $INFO[Window.Property(LatestEpisode.3.EpisodeNo)]</label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestEpisode.3.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestEpisode.3.Path)])</onclick>
                                <icon>-</icon>
                                <thumb>$INFO[Window.Property(LatestEpisode.3.Thumb)]</thumb>
                        </item>
                        <item id="2">
                                <label>$INFO[Window.Property(LatestEpisode.2.EpisodeTitle)]</label>
                                <label2>$INFO[Window.Property(LatestEpisode.2.ShowTitle)] - $INFO[Window.Property(LatestEpisode.2.EpisodeNo)]</label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestEpisode.2.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestEpisode.2.Path)])</onclick>
                                <icon>-</icon>
                                <thumb>$INFO[Window.Property(LatestEpisode.2.Thumb)]</thumb>
                        </item>
                        <item id="1">
                                <label>$INFO[Window.Property(LatestEpisode.1.EpisodeTitle)]</label>
                                <label2>$INFO[Window.Property(LatestEpisode.1.ShowTitle)] - $INFO[Window.Property(LatestEpisode.1.EpisodeNo)]</label2>
-                               <onclick>PlayMedia($INFO[Window.Property(LatestEpisode.1.Path)])</onclick>
+                               <onclick>PlayMedia($ESCINFO[Window.Property(LatestEpisode.1.Path)])</onclick>
                                <icon>-</icon>
                                <thumb>$INFO[Window.Property(LatestEpisode.1.Thumb)]</thumb>
                        </item>
index 49a56ed..e23d889 100644 (file)
                                        <include>ButtonCommonValues</include>
                                        <label>587</label>
                                </control>
+                               <control type="radiobutton" id="100">
+                                       <description>Show Info Toggle</description>
+                                       <textwidth>170</textwidth>
+                                       <include>ButtonCommonValues</include>
+                                       <label>31005</label>
+                                       <onclick>Skin.ToggleSetting(View509HideInfo)</onclick>
+                                       <selected>Skin.HasSetting(View509HideInfo)</selected>
+                                       <visible>Control.IsVisible(509)</visible>
+                               </control>
                                <control type="label" id="201">
                                        <width>250</width>
                                        <height>35</height>
index 83557b0..d775756 100644 (file)
                                        <shadowcolor>black</shadowcolor>
                                </control>
                                <control type="label">
+                                       <description>Provider Text</description>
+                                       <posx>20</posx>
+                                       <posy>50</posy>
+                                       <width>460</width>
+                                       <height>35</height>
+                                       <font>font12</font>
+                                       <textcolor>white</textcolor>
+                                       <scroll>true</scroll>
+                                       <align>center</align>
+                                       <aligny>center</aligny>
+                                       <label>$LOCALIZE[31303] : [COLOR=orange]$INFO[Window.Property(WeatherProvider)][/COLOR]</label>
+                                       <include>Window_OpenClose_Animation</include>
+                               </control>
+                               <control type="label">
                                        <description>weather location label</description>
                                        <posx>20</posx>
-                                       <posy>60</posy>
+                                       <posy>80</posy>
                                        <width>460</width>
                                        <height>30</height>
                                        <font>font13_title</font>
@@ -79,7 +93,7 @@
                                <control type="label">
                                        <description>update label</description>
                                        <posx>20</posx>
-                                       <posy>80</posy>
+                                       <posy>100</posy>
                                        <width>460</width>
                                        <height>35</height>
                                        <font>font12</font>
index e55cf06..6c716ce 100644 (file)
                                                <icon>special://skin/backgrounds/addons.jpg</icon>
                                        </item>
                                        <item id="7">
-                                               <label>705</label>
-                                               <label2>31405</label2>
-                                               <onclick>ActivateWindow(NetworkSettings)</onclick>
-                                               <icon>special://skin/backgrounds/network.jpg</icon>
+                                               <label>14036</label>
+                                               <label2>31409</label2>
+                                               <onclick>ActivateWindow(ServiceSettings)</onclick>
+                                               <icon>special://skin/backgrounds/services.jpg</icon>
                                        </item>
                                        <item id="8">
                                                <label>13000</label>
index 041763d..a90a9f0 100644 (file)
                        </control>
                </control>
                <control type="group">
-                       <posx>20</posx>
+                       <posx>60</posx>
                        <posy>0</posy>
-                       <animation effect="slide" end="-270,0" time="400" tween="quadratic" easing="out">WindowClose</animation>
-                       <animation effect="slide" start="-270,0" time="400" tween="quadratic" easing="out">WindowOpen</animation>
+                       <animation effect="slide" end="-310,0" time="400" tween="quadratic" easing="out" condition="Window.Next(Home) | Window.Next(1111) | Window.Next(AddonBrowser)">WindowClose</animation>
+                       <animation effect="slide" start="-310,0" time="400" tween="quadratic" easing="out" condition="Window.Previous(Home) | Window.Previous(1111) | Window.Previous(AddonBrowser)">WindowOpen</animation>
                        <control type="image">
                                <posx>0</posx>
                                <posy>0</posy>
-                               <width>80</width>
+                               <width>250</width>
                                <height>35</height>
                                <texture border="0,0,32,0">header.png</texture>
                        </control>
-                       <control type="button">
-                               <posx>20</posx>
-                               <posy>5</posy>
-                               <width>25</width>
-                               <height>20</height>
-                               <texturenofocus>HomeIcon.png</texturenofocus>
-                               <texturefocus>HomeIcon-Focus.png</texturefocus>
-                               <label>-</label>
-                               <onclick>ActivateWindow(Home)</onclick>
+                       <control type="label">
+                               <include>WindowTitleCommons</include>
+                               <posx>220</posx>
+                               <label>$LOCALIZE[130]</label>
                        </control>
                </control>
+               <include>WindowTitleHomeButton</include>
                <include>Clock</include>
        </controls>
 </window>
index 97af228..5c4f34d 100644 (file)
        </include>
        <include name="AlbumWrapView2_Fanart">
                <control type="group">
+                       <posx>0</posx>
+                       <posy>350</posy>
+                       <visible>Control.IsVisible(509) + Skin.HasSetting(View509HideInfo)]</visible>
+                       <include>VisibleFadeEffect</include>
+                       <control type="image">
+                               <posx>0</posx>
+                               <posy>0</posy>
+                               <width>1280</width>
+                               <height>270</height>
+                               <texture>HomeNowPlayingBack.png</texture>
+                       </control>
+                       <control type="label">
+                               <posx>40</posx>
+                               <posy>70</posy>
+                               <width>1200</width>
+                               <height>20</height>
+                               <font>font24_title</font>
+                               <textcolor>white</textcolor>
+                               <shadowcolor>black</shadowcolor>
+                               <scroll>true</scroll>
+                               <align>center</align>
+                               <aligny>center</aligny>
+                               <label>$INFO[ListItem.Label]</label>
+                               <animation effect="slide" start="0,0" end="0,20" time="200" condition="!Control.HasFocus(509)">conditional</animation>
+                       </control>
+               </control>
+               <control type="group">
                        <visible>Control.IsVisible(509)</visible>
                        <include>VisibleFadeEffect</include>
                        <posx>0</posx>
                        <posy>450</posy>
                        <control type="fixedlist" id="509">
                                <visible>Container.Content(Albums)</visible>
+                               <hitrect x="0" y="-10" w="1280" h="190" />
                                <posx>-80</posx>
                                <posy>0</posy>
                                <width>1360</width>
                <control type="group">
                        <posx>180</posx>
                        <posy>40</posy>
-                       <visible>Control.IsVisible(509)</visible>
+                       <visible>Control.IsVisible(509) + !Skin.HasSetting(View509HideInfo)</visible>
                        <include>VisibleFadeEffect</include>
                        <control type="image">
                                <posx>0</posx>
index 0b4b1a4..b8bb0f4 100644 (file)
                                        <bordersize>8</bordersize>
                                </control>
                                <control type="textbox">
-                                       <description>Description Value for Item</description>
+                                       <description>Description Value for Seasons</description>
                                        <posx>270</posx>
                                        <posy>0</posy>
                                        <width>250</width>
                                        <autoscroll time="2000" delay="3000" repeat="5000">Skin.HasSetting(AutoScroll)</autoscroll>
                                        <visible>Container.Content(Seasons)</visible>
                                </control>
+                               <control type="textbox">
+                                       <description>Description Value for TVShows</description>
+                                       <posx>270</posx>
+                                       <posy>0</posy>
+                                       <width>250</width>
+                                       <height>355</height>
+                                       <font>font12</font>
+                                       <align>justify</align>
+                                       <textcolor>white</textcolor>
+                                       <label>$INFO[ListItem.Plot]</label>
+                                       <autoscroll time="2000" delay="3000" repeat="5000">Skin.HasSetting(AutoScroll)</autoscroll>
+                                       <visible>Container.Content(TVShows) + Skin.HasSetting(TVShowsUsePosters)</visible>
+                               </control>
                                <control type="label">
                                        <description>Watched Count</description>
                                        <posx>10</posx>
index bdb3882..e5d699d 100644 (file)
                                                                <icon>special://skin/backgrounds/Addons.jpg</icon>
                                                                <thumb>$INFO[Skin.String(Home_Custom_Back_Addons_Folder)]</thumb>
                                                        </item>
+                                                       <item id="9">
+                                                               <label>341</label>
+                                                               <label2>Home_Custom_Back_PlayDisc_Folder</label2>
+                                                               <onclick>-</onclick>
+                                                               <icon>special://skin/backgrounds/playdisc.jpg</icon>
+                                                               <thumb>$INFO[Skin.String(Home_Custom_Back_PlayDisc_Folder)]</thumb>
+                                                       </item>                                                 
                                                </content>
                                        </control>
                                        <control type="image">
index c885b26..b563db5 100644 (file)
@@ -28,7 +28,7 @@
                        <texture>black-back.png</texture>
                        <animation effect="fade" time="400">Visible</animation>
                        <animation effect="fade" time="200">Hidden</animation>
-                       <visible>Window.IsActive(MovieInformation) | Window.IsActive(MusicInformation) | Window.IsActive(SongInformation) | Window.IsActive(FileBrowser) | Window.IsActive(TextViewer) | Window.IsActive(AddonSettings) | Window.IsActive(ContentSettings) | Window.IsActive(SelectDialog) | Window.IsActive(FileStackingDialog) | Window.IsActive(MediaSource) | Window.IsActive(PictureInfo) | Window.IsActive(PlayerControls) | Window.IsActive(VirtualKeyboard) | Window.IsActive(NumericInput) | Window.IsActive(ProfileSettings) | Window.IsActive(LockSettings) | Window.IsActive(SmartPlaylistEditor) | Window.IsActive(SmartPlaylistRule) | Window.IsActive(script-Apple_Movie_Trailers-settings.xml) | Window.IsActive(script-Apple_Movie_Trailers-chooser.xml) | Window.IsActive(script-Apple_Movie_Trailers-search.xml) | Window.IsActive(script-Apple_Movie_Trailers-showtimes.xml) | Window.IsActive(script-XBMC_Lyrics-settings.xml) | Window.IsActive(script-RSS_Editor-rssEditor.xml) | Window.IsActive(script-RSS_Editor-setEditor.xml) | Window.IsActive(AddonInformation)</visible>
+                       <visible>Window.IsActive(MovieInformation) | Window.IsActive(MusicInformation) | Window.IsActive(SongInformation) | Window.IsActive(FileBrowser) | Window.IsActive(TextViewer) | Window.IsActive(AddonSettings) | Window.IsActive(ContentSettings) | Window.IsActive(SelectDialog) | Window.IsActive(FileStackingDialog) | Window.IsActive(MediaSource) | Window.IsActive(PictureInfo) | Window.IsActive(PlayerControls) | Window.IsActive(VirtualKeyboard) | Window.IsActive(NumericInput) | Window.IsActive(ProfileSettings) | Window.IsActive(LockSettings) | Window.IsActive(SmartPlaylistEditor) | Window.IsActive(SmartPlaylistRule) | Window.IsActive(script-Apple_Movie_Trailers-settings.xml) | Window.IsActive(script-Apple_Movie_Trailers-chooser.xml) | Window.IsActive(script-Apple_Movie_Trailers-search.xml) | Window.IsActive(script-Apple_Movie_Trailers-showtimes.xml) | Window.IsActive(script-XBMC_Lyrics-settings.xml) | Window.IsActive(script-RSS_Editor-rssEditor.xml) | Window.IsActive(script-RSS_Editor-setEditor.xml) | Window.IsActive(AddonInformation) | Window.IsActive(Peripherals) | Window.IsActive(PeripheralSettings)</visible>
                </control>
        </include>
        <include name="WindowTitleCommons">
index 2813d39..2b7e1b1 100644 (file)
                                                <visible>IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.1.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.1.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.1.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.1.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.1.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.1.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.1.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.1.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.1.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.1.WindSpeed)] $INFO[Window.Property(Daily.1.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.2.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.2.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.2.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.2.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.2.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.2.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.2.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.2.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.2.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.2.WindSpeed)] $INFO[Window.Property(Daily.2.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.3.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.3.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.3.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.3.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.3.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.3.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.3.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.3.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.3.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.3.WindSpeed)] $INFO[Window.Property(Daily.3.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.4.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.4.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.4.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.4.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.4.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.4.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.4.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.4.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.4.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.4.WindSpeed)] $INFO[Window.Property(Daily.4.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.5.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.5.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.5.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.5.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.5.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.5.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.5.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.5.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.5.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.5.WindSpeed)] $INFO[Window.Property(Daily.5.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.6.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.6.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.6.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.6.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.6.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.6.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.6.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.6.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.6.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.6.WindSpeed)] $INFO[Window.Property(Daily.6.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.7.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.7.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.7.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.7.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.7.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.7.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.7.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.7.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.7.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.7.WindSpeed)] $INFO[Window.Property(Daily.7.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.8.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.8.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.8.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.8.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.8.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.8.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.8.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.8.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.8.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.8.WindSpeed)] $INFO[Window.Property(Daily.8.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.9.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.9.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.9.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.9.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.9.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.9.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.9.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.9.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.9.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.9.WindSpeed)] $INFO[Window.Property(Daily.9.WindDirection)]</icon>
                                                <visible>!IsEmpty(Window.Property(Daily.IsFetched))</visible>
                                        </item>
                                        <item>
-                                               <label>[B]$INFO[Window.Property(Daily.10.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.10.LongDate)][/COLOR]</label>
+                                               <label>[B]$INFO[Window.Property(Daily.10.ShortDay)][/B][CR][COLOR=grey2]$INFO[Window.Property(Daily.10.ShortDate)][/COLOR]</label>
                                                <label2>$INFO[Window.Property(Daily.10.HighTemperature),[COLOR=grey2]$LOCALIZE[419] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits]  $INFO[Window.Property(Daily.10.LowTemperature),[COLOR=grey2]$LOCALIZE[418] :[/COLOR][B] ,[/B]]$INFO[System.TemperatureUnits][CR]$INFO[Window.Property(Daily.10.Precipitation),[COLOR=grey2]$LOCALIZE[31908] :[/COLOR][B] ,%[/B]]</label2>
                                                <thumb>$INFO[Window.Property(Daily.10.OutlookIcon)]</thumb>
                                                <icon>$INFO[Window.Property(Daily.10.Outlook),[COLOR=grey2]$LOCALIZE[33030]: [/COLOR]][CR][COLOR=grey2]$LOCALIZE[383]: [/COLOR]$INFO[Window.Property(Daily.10.WindSpeed)] $INFO[Window.Property(Daily.10.WindDirection)]</icon>
index a98669d..624e9ed 100644 (file)
                                </focusedlayout>
                                <content>
                                        <item>
-                                               <label>31907</label>
+                                               <label>$INFO[Window.Property(Video.1.title)]</label>
                                                <icon>icon-video.png</icon>
-                                               <onclick>PlayMedia($INFO[Window.Property(Video)],1,noresume)</onclick>
-                                               <visible>!IsEmpty(Window.Property(Video))</visible>
+                                               <onclick>PlayMedia($INFO[Window.Property(Video.1)],noresume)</onclick>
+                                               <visible>!IsEmpty(Window.Property(Video.1))</visible>
+                                       </item>
+                                       <item>
+                                               <label>$INFO[Window.Property(Video.2.title)]</label>
+                                               <icon>icon-video.png</icon>
+                                               <onclick>PlayMedia($INFO[Window.Property(Video.2)],noresume)</onclick>
+                                               <visible>!IsEmpty(Window.Property(Video.2))</visible>
+                                       </item>
+                                       <item>
+                                               <label>$INFO[Window.Property(Video.3.title)]</label>
+                                               <icon>icon-video.png</icon>
+                                               <onclick>PlayMedia($INFO[Window.Property(Video.3)],noresume)</onclick>
+                                               <visible>!IsEmpty(Window.Property(Video.3))</visible>
                                        </item>
                                        <item>
                                                <label>$INFO[Window.Property(MapList.1.MapLabel.1)]</label>
index 72af45a..299d185 100644 (file)
     <res width="1280" height="720" aspect="16:9" default="true" folder="720p" />
   </extension>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Облик Confluence от Jezz_X. (стандартния облик на XBMC)</summary>
     <summary lang="ca">Aparença Confluence, per Jezz_X. (Aparença per defecte de l'XBMC)</summary>
     <summary lang="en">Confluence skin by Jezz_X. (XBMC's default skin)</summary>
     <summary lang="es">Confluence skin por Jezz_X. (skin por defecto)</summary>
+    <summary lang="fi">Confluence-ulkoasu Jezz_X:ltä. (XBMC:n oletus ulkoasu)</summary>
     <summary lang="fr">Skin Confluence par Jezz_X. (skin par défaut)</summary>
     <summary lang="hu">Confluence arculat. Készítő: Jezz_X</summary>
     <summary lang="ko">Confluence 스킨 Jezz_X 만듬 (기본 스킨)</summary>
     <summary lang="ro">Costum Confluence de Jezz_X. (costum implicit)</summary>
     <summary lang="se">Confluence-skalet av Jezz_X. (XBMC standardskal)s</summary>
     <summary lang="zh">Jezz_X开发的Confluence皮肤</summary>
+    <description lang="bg">Confluence е стандартният облик на XBMC 9.11 и по-новите версии. Представлява смесица от концепциите на много от популярните облици. Целта е да се интегрират тези добри идеи в подходящ и удобен вид за хора, които се сблъскват за първи път с XBMC.</description>
     <description lang="ca">Confluence és l'aparença per defecte de l'XBMC 9.11 i superior. És una combinació de conceptes de moltes aparences populars, i intenta adoptar i integrar les seves bones idees en una aparença que sigui senzilla d'entendre i utilitzar per els nous usuaris d'XBMC.</description>
     <description lang="en">Confluence is the default skin for XBMC 9.11 and above. It is a combination of concepts from many popular skins, and attempts to embrace and integrate their good ideas into a skin that should be easy for first time XBMC users to understand and use.</description>
     <description lang="es">Confluence es la skin por defecto de XBMC 9.11 y posteriores. Es una combinación de conceptos de muchas skins populares, e intenta abarcare e integrar lo mejor de ellas en una skin que sea sencilla de entender y utilizar para los nuevos usuarios de XBMC.</description>
+    <description lang="fi">Confluence on oletus ulkoasu XBMC:n versiosta 9.11 lähtien. Se on yhdistelmä useiden suosittujen ulkoasujen konsepteista, ja yritys omaksua ja integroida heidän hyvät ideat ulkoasuun, jonka pitäisi olla helppokäyttöinen ja -tajuinen kaikille XBMC:n käyttäjille.</description>
     <description lang="fr">Confluence est le skin par défaut de XBMC 9.11 ou supérieur. C'est un condensé d'idées de plusieurs skins populaires. Il tente d'englober et intégrer toutes les bonnes idées que n'importe quel débutant sur XBMC pourrait utiliser avec facilité.</description>
     <description lang="hu">A Confluence az alapértelmezett arculat az XBMC-hez a 9.11-es verziótól kezdődően. Merít sok sok népszerű arculat elképzeléséből, megpróbálva vegyíteni a jó ötleteket úgy, hogy az könnyen kezelhető legyen az XBMC-vel először találkozóknak is.</description>
     <description lang="ko">Confluence 는 XBMC 9.11 이상의 기본 스킨입니다. 많은 인기 스킨의 컨셉과 좋은 아이디어를 모아서 하나의 스킨으로 만들었으며 초보자도 사용하기 쉽습니다.</description>
diff --git a/addons/skin.confluence/backgrounds/network.jpg b/addons/skin.confluence/backgrounds/network.jpg
deleted file mode 100644 (file)
index 32d59f7..0000000
Binary files a/addons/skin.confluence/backgrounds/network.jpg and /dev/null differ
diff --git a/addons/skin.confluence/backgrounds/services.jpg b/addons/skin.confluence/backgrounds/services.jpg
new file mode 100644 (file)
index 0000000..32d59f7
Binary files /dev/null and b/addons/skin.confluence/backgrounds/services.jpg differ
diff --git a/addons/skin.confluence/language/Arabic/strings.xml b/addons/skin.confluence/language/Arabic/strings.xml
new file mode 100644 (file)
index 0000000..a78e15a
--- /dev/null
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--Translator: Medo Alyami-->
+<!--Email: alyami1@live.com-->
+<!--Based on English 72696c450cb789e240194a0595bed6e291e3a158 (14.11.2011)-->
+<strings>
+  <!-- Misc labels -->
+  <string id="31000">تغيير</string>
+  <string id="31001">حب</string>
+  <string id="31002">كراهية</string>
+  <string id="31003">خيارات الطاقة</string>
+  <string id="31004">...جاري التشغيل</string>
+  <string id="31005">إخفاء المعلومات</string>
+  <string id="31006">خيارات العرض</string>
+  <string id="31007">الملحقات</string>
+  <string id="31008">شاشة كاملة</string>
+
+  <string id="31020">أضيفت مؤخرا</string>
+  <string id="31021">الفيديو - ملفات</string>
+  <string id="31022">الموسيقى - ملفات</string>
+  <string id="31023">يشتغل الان</string>
+  <string id="31024">عناصر</string>
+  <string id="31025">صفحة</string>
+  <string id="31026">خيارات متنوعه</string>
+  <string id="31027">الموقع</string>
+
+  <!-- View Type labels -->
+  <string id="31028">ملصق التفاف</string>
+  <string id="31029">Fanart</string>
+  <string id="31030">قائمة كاملة</string>
+  <string id="31031">مصغرات الصورة</string>
+  <string id="31032">صورة التفاف</string>
+  <string id="31033">معلومات</string>
+
+  <!-- Extra labels -->
+  <string id="31040">يشتغل الان</string>
+
+  <string id="31042">يشتغل الان</string>
+  <string id="31043">متوقف</string>
+  <string id="31044">تقديم سريع</string>
+  <string id="31045">إرجاع</string>
+  <string id="31046">خصائص الصوت</string>
+  <string id="31047">القيمة الحالية</string>
+  <string id="31048">التصور المسبقة</string>
+  <string id="31049">وقت الانتهاء</string>
+  <string id="31050">الفرز:تصاعدي</string>
+  <string id="31051">الفرز:تنازلي</string>
+
+
+  <!-- Playlist Editor labels -->
+  <string id="31055">فتح قائمة التشغيل</string>
+  <string id="31056">حفظ قائمة التشغيل</string>
+  <string id="31057">إغلاق قائمة التشغيل</string>
+  <string id="31058">ملفات موسيقى النظام</string>
+  <string id="31059">قائمة التشغيل الحالية</string>
+  <string id="31060">.هذا الملف مكدس، حدد الجزء الذي تريد تشغيله</string>
+  <string id="31061">مختارة حاليا</string>
+
+  <!-- Skin Settings labels -->
+  <string id="31100"></string>
+  <string id="31101">خيارات الصفحة الرئيسية</string>
+  <string id="31102">الخلفية</string>
+  <string id="31103">إظهار "إيقاف مؤقت" في عرض شرائح الصور</string>
+  <string id="31104">[COLOR=grey3] (صندوق حوار معلومات الفيديو فقط)[/COLOR]تشغيل مقطع الفيديو في نافذة</string>
+  <string id="31105">"الفيديو" الزر يذهب دائما الى "ملفات الفيديو"</string>
+  <string id="31106">خيارات متنوعة</string>
+  <string id="31107">[COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]إخفاء وضع علامة القراءة من أسماء الفيديو</string>
+  <string id="31108">إخفاء أزرار القائمة الرئيسية</string>
+  <string id="31109">خلفيات الوسائط</string>
+  <string id="31110">تعديل خلفية نوع الوسائط</string>
+  <string id="31111">إخفاء</string>
+  <string id="31112">خيارات</string>
+  <string id="31113">صورة واحدة</string>
+  <string id="31114">عدة صورة</string>
+  <string id="31115">مخصص</string>
+  <string id="31116"></string>
+  <string id="31117">إظهار الفيديوات المضافة مؤخراً</string>
+  <string id="31118">القائمة الفرعية لقائمة البرامج الرئيسية</string>
+  <string id="31119">Fanart إخفاء خلفية</string>
+  <string id="31120">علامة الزر</string>
+  <string id="31121"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31122">صفحة الطقس</string>
+  <string id="31123">استخدام "ملصقات" بدلا من "لافتات" للمسلسلات التلفزيونية</string>
+  <string id="31124">إظهار خلفية "التشغيل الآن" للفيديو</string>
+  <string id="31125">إظهار خلفية "التشغيل الآن" للتصور</string>
+
+  <string id="31126">(TvTunes ملحق) تشغيل أغاني سمة التلفزيون في مكتبة الفيديو</string>
+  <string id="31127">TvTunes</string>
+  <string id="31128">كلمات الأغاني</string>
+  <string id="31129"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31130"></string>  <!-- blanked 2010-11-12 -->
+
+  <string id="31131"></string> <!-- blanked 2010-12-23 -->
+  <string id="31132">ملحق كلمات الأغاني</string>
+  <string id="31133">ملحق الترجمات</string>
+  <string id="31134">القائمة الفرعية لقائمة الفيديو الرئيسية</string>
+  <string id="31135">القائمة الفرعية لقائمة الموسيقى الرئيسية</string>
+  <string id="31136">القائمة الفرعية لقائمة الصور الرئيسية</string>
+
+  <string id="31140">عرض الموسيقى على الشاشة</string>
+  <string id="31141">عرض الفيديو على الشاشة</string>
+
+  <!-- Script labels -->
+  <string id="31200">اختصارات</string>
+  <string id="31201">الفئات</string>
+  <string id="31202">إظهار الرواية</string>
+  <string id="31203">اختر أغنيتك</string>
+  <string id="31204">روابط ذات صلة</string>
+  <string id="31205">مصدر كلمات الأغنية</string>
+
+  <!-- Extra labels -->
+  <string id="31300">درجة الحرارة الحالية</string>
+  <string id="31301">اخر تحديث</string>
+  <string id="31302">القائمة</string>
+  <string id="31303">: مزود البيانات</string>
+  <string id="31304">الصور</string>
+  <string id="31305">لم يتم الكشف عن قرص وسائط</string>
+  <string id="31306">إخراج</string>
+  <string id="31307">Fanart إخفاء</string>
+  <string id="31308">تفاصيل الفلم</string>
+  <string id="31309">الذاكرة المستخدمة:</string>
+  <string id="31310">رقم المسار</string>
+  <string id="31311">انقر الزر للتعيين[CR][CR]غير متوفرة[CR][CR]Fanart صورة</string>
+  <string id="31312">Current Scraper</string>
+  <string id="31313">Choose a Scraper</string>
+  <string id="31314">خيارات فحص المحتوى </string>
+  <string id="31315">أساسي</string>
+  <string id="31316"></string>
+  <string id="31317">Fanart تعيين مسار</string>
+  <string id="31318">Fanart صغيرة</string>
+  <string id="31319">الملف الشخصي المحدد</string>
+  <string id="31320">آخر تسجيل دخول في</string>
+  <string id="31321">محدد أغاني الكاريوكي</string>
+  <string id="31322">المبث</string>
+  <string id="31323">أحدث الأفلام</string>
+  <string id="31324">أحدث الحلقات</string>
+  <string id="31325">خيارات قائمة التشغيل</string>
+  <string id="31326">أنشئ</string>
+  <string id="31327">الدقة</string>
+  <string id="31328">أضيف مؤخراً</string>
+  <string id="31329">[COLOR=grey2] إغلاق النظام تلقائيا في - [/COLOR][B]!تعيين مؤقت[B]</string>
+  <string id="31330">مقطع الفلم [CR][CR] انقر على الزر لتشغيل</string>
+  <string id="31331">تفاصبل الألبوم</string>
+
+  <!-- Video and Music OSD Labels  -->
+  <string id="31351">توقيف مؤقت</string>
+  <string id="31352">توقف كامل</string>
+  <string id="31353">تقديم سريع</string>
+  <string id="31354">ترجيع</string>
+  <string id="31355">قائمة الفلم</string>
+  <string id="31356">تحميل الترجمات</string>
+  <string id="31357"></string>
+
+  <!-- Skin Fontsets -->
+  <string id="31390">الخلفية الاإفتراضية</string>
+  <string id="31391">Skin default with no Caps</string>
+  <string id="31392">Arial based</string>
+
+  <!-- Description Labels  -->
+  <string id="31400">[B]تكوين إعدادات المظهر[/B][CR][CR]تغيير الخلفية · تعيين اللغة والمنطقة · تغيير خيارات قائمة الملف[CR]ضبط شاشة التوقف</string>
+  <string id="31401">[B]تكوين إعدادات الفيديو[/B][CR][CR]إدارة مكتبة الفيديو · تعيين خيارات تشغيل الفيديو · تغيير خيارات قائمة الفيديو[CR]تعيين خطوط الترجمة</string>
+  <string id="31402">[B]تكوين إعدادات الموسيقى[/B][CR][CR]إدارة مكتبة الموسيقي · تعيين خيارات تشغيل الموسيقى · تغيير خيارات قائمة الموسيقى · تعيين خيارات الكارويوكي</string>
+  <string id="31403">[B]تكوين إعدادات الصور[/B][CR][CR]ضبط عرض الشرائح · تغيير خيارات قائمة الصور</string>
+  <string id="31404">[B]تكوين إعدادات الطقس[/B][CR][CR]تعيين ثلاث مدن لجمع معلومات عن الطقس</string>
+  <string id="31405">[B]تكوين إعدادات شبكة الاتصال[/B][CR][CR] HTTP و UPnP عبرXBMC ضبط تحكم · تكوين ملف تقاسم[CR]تعيين خيارات الوصول إلى الإنترنت</string>
+  <string id="31406">[B]تكوين إعدادات النظام[/B][CR][CR]ضبط المعايرة والعرض· تكوين مخرج الصوت · ضبط التحكم عن بعد[CR]تعيين خيارات توفير الطاقة · تمكين التصحيح · ضبط القفل الرئيسي </string>
+  <string id="31407">[B]تكوين إعدادات الخلفيات [/B][CR][CR]Setup the Confluence skin · أضف وإزالة عناصر القائمة الرئيسية[CR]تغيير الخلفيات</string>
+  <string id="31408">[B]تكوين الملحقات [/B][CR][CR]xbmc.org إدارة الملحقات المثبتة · تصفح وتثبيت الملحقات من[CR] تعديل إعدادت الملحق</string>
+
+  <string id="31421">للدخول والإستمرارا [CR]XBMC  حدد ملفك الشخصي الخاص بـ</string>
+
+  <!-- Weather plugin -->
+  <string id="31900">خرائط الطقس</string>
+  <string id="31901">36 hour توقعات طقس</string>
+  <string id="31902">توقعات الطقس لكل ساعة</string>
+  <string id="31903">توقعات طقس نهاية الأسبوع</string>
+  <string id="31904">10 Days توقعات طقس</string>
+  <string id="31905">توقعات الطقس</string>
+  <string id="31906">الخرائط والفيديو</string>
+  <string id="31907">[COLOR=grey2](Fullscreen Playback)[/COLOR]توقعات الطقس فيديو</string>
+  <string id="31908">فرصة هطول الأمطار</string>
+  <string id="31909">...جلب معلومات توقعات الطقس</string>
+
+  </strings>
index bf9e1ad..3b921f4 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <!--Translator: tonywoolf-->
 <!--Email: tonywoolf@gmail.com-->
-<!--Date of translation: 03/24/2010-->
+<!--Date of translation: 01/07/2012-->
 
 <strings>
   <!-- Misc labels -->
@@ -11,8 +11,9 @@
   <string id="31003">Опции на захранването</string>
   <string id="31004">Работя...</string>
   <string id="31005">Скрий ИНФО</string>
-
+  <string id="31006">Изглед</string>
   <string id="31007">Добавки</string>
+  <string id="31008">Цял екран</string>
 
   <string id="31020">Наскоро Добавени</string>
   <string id="31021">Видео - Файлове</string>
@@ -22,7 +23,7 @@
   <string id="31025">Позиции</string>
   <string id="31026">Разни Опции</string>
   <string id="31027">Място</string>
+
   <!-- View Type labels -->
   <string id="31028">Плакати въртене</string>
   <string id="31029">Плакати</string>
@@ -42,6 +43,8 @@
   <string id="31047">Текущо Настроени</string>
   <string id="31048">Настроени Визуализации</string>
   <string id="31049">Крайно Време</string>
+  <string id="31050">Сортиране: Възходящ</string>
+  <string id="31051">Сортиране: Низходящ</string>
 
 
   <!-- Playlist Editor labels -->
@@ -52,7 +55,7 @@
   <string id="31059">Текущ плейлист</string>
   <string id="31060">Изберете място, от което искате да възпроизвеждате.</string>
   <string id="31061">Текущо избрани</string>
-  
+
   <!-- Skin Settings labels -->
   <string id="31100"></string>
   <string id="31101">Настройки на начален екран</string>
   <string id="31124">Покажи фон "Възпроизвеждам" Видео</string>
   <string id="31125">Покажи фон "Възпроизвеждам" Визуализация</string>
 
-  <string id="31126">Включи текст на песен в музиката OSD</string>
-  <string id="31127">ПЪТ ДО ТЕСКТ НА ПЕСЕН ДОБАВКА</string>
-  <string id="31128">ТЕСКТ НА ПЕСЕН</string>
-  <string id="31129">Включи сваляне на субтитри във Видео OSD</string>
-  <string id="31130">ПЪТ ДО ДОБАВКА СУБТИТРИ</string>
+  <string id="31126">Пусни тв музика във видео библиотеката (TvTunes добавка)</string>
+  <string id="31127">TvTunes</string>
+  <string id="31128">Текст</string>
+  <string id="31129"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31130"></string>  <!-- blanked 2010-11-12 -->
+
+<string id="31131"></string> <!-- blanked 2010-12-23 -->
+  <string id="31132">Добавка за текст</string>
+  <string id="31133">Добавка субтитри</string>
+  <string id="31134">Начална страница подменю Видео</string>
+  <string id="31135">Начална страница подменю Музика</string>
+  <string id="31136">Начална страница подменю Снимки</string>
 
   <string id="31140">Музика OSD</string>
   <string id="31141">Видео OSD</string>
   <string id="31328">Наскоро Добавени</string>
   <string id="31329">[B]ТАЙМЕР УСТАНОВЕН![/B] [COLOR=grey2] - АВТОМАТИЧНО ИЗКЛЮЧВАНЕ[/COLOR]</string>
   <string id="31330">Натисни бутон за възпроизвеждане[CR][CR]Трейлър</string>
+  <string id="31331">Албум детайли</string>
 
   <!-- Video and Music OSD Labels  -->
   <string id="31351">Пауза</string>
   <string id="31355">Меню филм</string>
   <string id="31356">Свали субтитри</string>
   <string id="31357"></string>
-  
+
    <!-- Skin Fontsets -->
   <string id="31390">Кожа подразбиране</string>
   <string id="31391">Кожа подразбиране без главни букви</string>
   <string id="31408">[B]КОНФИГУРИРАНЕ ДОБАВКИ[/B][CR][CR]Управление на инсталираните добавки · Разглеждане и инсталиране на добавки от xbmc.org · Промяна на настройките на добавките</string>
 
   <string id="31421">Изберете XBMC потребителски профил[CR]за вход и продължаване</string>
+
+  <!-- Weather plugin -->
+  <string id="31900">Карта на времето</string>
+  <string id="31901">36 часова прогноза</string>
+  <string id="31902">Часова прогноза</string>
+  <string id="31903">Уикенд прогноза</string>
+  <string id="31904">10 дневна прогноза</string>
+  <string id="31905">Прогноза</string>
+  <string id="31906">Карти &amp; Видео</string>
+  <string id="31907">Видео Прогноза [COLOR=grey2](Fullscreen Playback)[/COLOR]</string>
+  <string id="31908">Възможност от превалявания</string>
+  <string id="31909">Извличане информация за прогноза...</string>
+
 </strings>
index 6eb2d1f..db8bdfe 100644 (file)
   <string id="31300">Temperatura actual</string>
   <string id="31301">Actualització més recent</string>
   <string id="31302">Menú</string>
-  <string id="31303"></string>
+  <string id="31303">Proveïdor de dades</string>
   <string id="31304">Imatge</string>
   <string id="31305">No s'ha detectat cap disc amb continguts multimèdia</string>
   <string id="31306">Expulsa</string>
index 86011cf..e2e9ee5 100644 (file)
   <string id="31300">当前温度</string>
   <string id="31301">最近修改</string>
   <string id="31302">菜单</string>
-  <string id="31303"></string>
+  <string id="31303">数据来源</string>
   <string id="31304">图片</string>
   <string id="31305">未检测到光盘</string>
   <string id="31306">弹出</string>
index 852e45d..6726ff3 100644 (file)
@@ -1,16 +1,17 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--Language file translated by koalahong-->
+<!--Language file translated with Team XBMC Translator-->
+<!--Date of translation: 12/09/2011-->
+<!--$Revision$-->
 <strings>
-  <!-- Misc labels -->
   <string id="31000">修改您的</string>
   <string id="31001">喜歡</string>
   <string id="31002">討厭</string>
   <string id="31003">電源選項</string>
   <string id="31004">工作中...</string>
   <string id="31005">隱藏資訊</string>
-
+  <string id="31006">檢視選項</string>
   <string id="31007">外掛</string>
-
+  <string id="31008">全螢幕</string>
   <string id="31020">最近新增</string>
   <string id="31021">視訊 - 檔案</string>
   <string id="31022">音樂 - 檔案</string>
   <string id="31025">個項目</string>
   <string id="31026">其他選項</string>
   <string id="31027">位置</string>
-
-  <!-- View Type labels -->
   <string id="31028">海報捲動</string>
   <string id="31029">劇照</string>
   <string id="31030">全部清單</string>
   <string id="31031">圖片縮圖</string>
   <string id="31032">圖片捲動</string>
   <string id="31033">資訊</string>
-
-  <!-- Extra labels -->
   <string id="31040">正在播放</string>
-
   <string id="31042">正在播方</string>
   <string id="31043">暫停</string>
   <string id="31044">快轉</string>
@@ -39,9 +35,8 @@
   <string id="31047">目前設定</string>
   <string id="31048">視覺效果設定</string>
   <string id="31049">結束時間</string>
-
-
-  <!-- Playlist Editor labels -->
+  <string id="31050">排序:遞增</string>
+  <string id="31051">排序:遞減</string>
   <string id="31055">開啟播放清單</string>
   <string id="31056">儲存播放清單</string>
   <string id="31057">關閉播放清單</string>
   <string id="31059">目前的播放清單</string>
   <string id="31060">這個檔案已堆疊,請選擇您要從哪個部分開始播放。</string>
   <string id="31061">目前的選擇</string>
-
-  <!-- Skin Settings labels -->
-  <string id="31100"></string>
+  <string id="31100">
+  </string>
   <string id="31101">主介面選項</string>
   <string id="31102">背景</string>
   <string id="31103">在圖片幻燈片秀中顯示"已暫停"狀態</string>
   <string id="31104">在視窗中播放預告片[COLOR=grey3](只在視訊資訊對話框中)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31105">"視訊" 按鈕永遠連到視訊 "檔案"</string>
   <string id="31106">其他選項</string>
   <string id="31107">隱藏視訊檔案名稱的媒體標示 [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
   <string id="31108">隱藏主選單按鈕</string>
   <string id="31113">單一圖片</string>
   <string id="31114">多張圖片</string>
   <string id="31115">自訂</string>
-  <string id="31116"></string>
+  <string id="31116">
+  </string>
   <string id="31117">顯示最近新增的視訊</string>
   <string id="31118">首頁程式子選單</string>
-  <string id="31119"></string>
+  <string id="31119">隱藏背景劇照</string>
   <string id="31120">按鈕標籤</string>
-  <string id="31121"></string>
+  <string id="31121">
+  </string>
   <string id="31122">氣象頁面</string>
   <string id="31123">以電視節目的海報取代橫幅圖片</string>
   <string id="31124">在背景顯示正在播放的視訊</string>
   <string id="31125">在背景顯示正在播放的視覺效果</string>
-
-  <string id="31126"></string>
-  <string id="31127"></string>
+  <string id="31126">
+  </string>
+  <string id="31127">
+  </string>
   <string id="31128">歌詞</string>
-  <string id="31129"></string>
-  <string id="31130"></string>
-
+  <string id="31129">
+  </string>
+  <string id="31130">
+  </string>
+  <string id="31132">歌詞附加元件</string>
+  <string id="31133">字幕附加元件</string>
+  <string id="31134">首頁影片子選單</string>
+  <string id="31135">首頁音樂子選單</string>
+  <string id="31136">首頁圖片子選單</string>
   <string id="31140">音樂播放工具列</string>
   <string id="31141">視訊播放工具列</string>
-
-  <!-- Script labels -->
   <string id="31200">捷徑</string>
   <string id="31201">分類</string>
   <string id="31202">顯示演員</string>
   <string id="31203">選擇您的歌曲</string>
   <string id="31204">段落連結</string>
   <string id="31205">歌詞來源</string>
-
-  <!-- Extra labels -->
   <string id="31300">現在溫度</string>
   <string id="31301">最後更新</string>
   <string id="31302">選單</string>
-  <string id="31303"></string>
+  <string id="31303">
+  </string>
   <string id="31304">圖片</string>
   <string id="31305">沒有偵測到光碟媒體</string>
   <string id="31306">退出</string>
   <string id="31313">選擇一個站台</string>
   <string id="31314">內容掃描選項</string>
   <string id="31315">基本</string>
-  <string id="31316"></string>
+  <string id="31316">
+  </string>
   <string id="31317">設定劇照路徑</string>
   <string id="31318">小劇照</string>
   <string id="31319">選擇的設定檔</string>
   <string id="31328">最近新增</string>
   <string id="31329">[B]計時器啟動![/B] [COLOR=grey2] - 系統將自動關機於:[/COLOR]</string>
   <string id="31330">點擊按鈕播放[CR][CR]電影預告片</string>
-
-  <!-- Video and Music OSD Labels  -->
+  <string id="31331">專輯詳細資訊</string>
   <string id="31351">暫停</string>
   <string id="31352">停止</string>
   <string id="31353">快轉</string>
   <string id="31354">倒轉</string>
   <string id="31355">電影選單</string>
   <string id="31356">下載字幕</string>
-  <string id="31357"></string>
-
-  <!-- Description Labels  -->
+  <string id="31357">
+  </string>
+  <string id="31390">主題預設</string>
   <string id="31400">[B]設定介面外觀[/B][CR][CR]修改佈景主題 · 選擇語言和地區 · 修改檔案清單選項[CR]設定螢幕保護程式</string>
   <string id="31401">[B]設定視訊參數[/B][CR][CR]管理您的音樂資料庫 · 設定視訊播放選項 · 修改視訊清單選項[CR]設定字幕字型</string>
   <string id="31402">[B]設定音樂參數[/B][CR][CR]管理您的音樂資料庫 · 設定音樂播放選項 · 修改音樂清單選項[CR]設定歌曲提交 · 設定卡拉OK選項</string>
   <string id="31406">[B]設定系統參數[/B][CR][CR]設定和校正顯示輸出 · 設定音效輸出 · 設定遙控器[CR]設定節能選項 · 啟用除錯 · 設定鎖定密碼</string>
   <string id="31407">[B]設定佈景主題[/B][CR][CR]設定 Confluence 佈景主題 · 新增或移除首頁選單項目[CR]修改佈景主題背景</string>
   <string id="31408">[B]設定附加元件[/B][CR][CR]管理已安裝的附加元件 · 從 xbmc.org 瀏覽並安裝附加元件[CR]修改附加元件設定</string>
-
   <string id="31421">選擇您的 XBMC 使用者設定檔[CR]登入並繼續</string>
-</strings>
+  <string id="31900">天氣地圖</string>
+  <string id="31901">36小時預報</string>
+  <string id="31902">每小時預報</string>
+  <string id="31903">一週預報</string>
+  <string id="31904">10天預報</string>
+  <string id="31905">預報</string>
+  <string id="31906">地圖 &amp; 影片</string>
+  <string id="31907">影片預報 [COLOR=grey2]〈全螢幕播放〉[/COLOR]</string>
+  <string id="31908">降雨機率</string>
+  <string id="31909">正在擷取預報資訊...</string>
+</strings>
\ No newline at end of file
index e9bd4cd..2d5551d 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--Translator: ezechiel1917-->
-<!--Date of translation: 26/09/2010-->
+<!--Date of translation: 26.09.2010-->
+<!--Updated 22.11.2011 by mirek-->
+<!--Updated 06.01.2012 by babča-->
 <strings>
   <!-- Misc labels -->
   <string id="31000">Změnit</string>
@@ -8,9 +10,10 @@
   <string id="31002">Nesnášet</string>
   <string id="31003">Napájení</string>
   <string id="31004">Pracuji...</string>
-  <string id="31005">Skrýt INFO</string>
-
+  <string id="31005">Skrýt Info</string>
+  <string id="31006">Zobrazit možnosti</string>
   <string id="31007">Pluginy</string>
+  <string id="31008">Celá obrazovka</string>
 
   <string id="31020">Nejnovější položky</string>
   <string id="31021">Video - Soubory</string>
   <string id="31025">Položek</string>
   <string id="31026">Další možnosti</string>
   <string id="31027">Umístění</string>
+
   <!-- View Type labels -->
   <string id="31028">Obaly</string>
   <string id="31029">Fanart</string>
-  <string id="31030">Seznam I</string>
+  <string id="31030">Seznam</string>
   <string id="31031">Náhledy</string>
   <string id="31032">Obrázky</string>
   <string id="31033">Info</string>
   <string id="31044">PŘETÁČÍ SE VPŘED</string>
   <string id="31045">PŘETÁČÍ SE ZPĚT</string>
   <string id="31046">Vlastnosti zvuku</string>
-  <string id="31047">Akutální předvolba</string>
+  <string id="31047">Aktuální předvolba</string>
   <string id="31048">Předvolby vizualizace</string>
   <string id="31049">Čas ukončení</string>
+  <string id="31050">Seřadit: vzestupně</string>
+  <string id="31051">Seřadit: sestupně</string>
 
 
   <!-- Playlist Editor labels -->
   <string id="31059">Aktuální seznam stop</string>
   <string id="31060">Tento soubor se skládá z více částí. Vyberte tu, od které chcete spustit přehrávání.</string>
   <string id="31061">Aktuálně vybraný</string>
-  
+
   <!-- Skin Settings labels -->
   <string id="31100"></string>
   <string id="31101">Informace na Úvodní obrazovce</string>
   <string id="31102">Pozadí</string>
-  <string id="31103">Zobrazovat "POZASTAVENO" při prezentaci obrázků</string>
+  <string id="31103">Zobrazovat "Pozastaveno" při prezentaci obrázků</string>
   <string id="31104">Přehrávat upoutávky v okně [COLOR=grey3](pouze z okna Informace o videu)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31105">V nabídce "Video" vždy zobrazit "Soubory"</string>
   <string id="31106">Různé</string>
   <string id="31107">Nezobrazovat ikony zdroje videí [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
   <string id="31108">Zobrazení sekcí úvodní obrazovky</string>
   <string id="31110">Změnit pozadí úvodní obrazovky - sekce</string>
   <string id="31111">Skrýt</string>
   <string id="31112">Možnosti</string>
-  <string id="31113">1 obrázek</string>
+  <string id="31113">Jeden obrázek</string>
   <string id="31114">Více obrázků</string>
   <string id="31115">Přizpůsobení</string>
   <string id="31116"></string>
   <string id="31117">Zobrazovat Nejnovější filmy a epizody</string>
-  <string id="31118">Úvodní obrazovka</string>
-  <string id="31119"></string>
+  <string id="31118">Úvodní obrazovka - nabídka Programy</string>
+  <string id="31119">Skrýt Fanart na pozadí</string>
   <string id="31120">NÁZEV POLOŽKY</string>
   <string id="31121"></string>
   <string id="31122">Počasí</string>
-  <string id="31123">Použít u TV seriálů klasické náhledy místo širokoúhlých</string>
+  <string id="31123">Použít u TV seriálů klasické náhledy místo bannerů</string>
   <string id="31124">Zobrazovat na pozadí právě přehrávané video</string>
   <string id="31125">Zobrazovat na pozadí vizualizaci</string>
 
-  <string id="31126"></string>
-  <string id="31127"></string>
+  <string id="31126">Přehrát znělky v knihovně videí (doplněk TvTunes)</string>
+  <string id="31127">TvTunes</string>
   <string id="31128">Texty skladeb</string>
   <string id="31129"></string>
   <string id="31130"></string>
 
+  <string id="31131"></string>
+  <string id="31132">Doplněk Texty skladeb</string>
+  <string id="31133">Doplněk Titulky</string>
+  <string id="31134">Úvodní strana - podmenu Videa</string>
+  <string id="31135">Úvodní strana - podmenu Hudba</string>
+  <string id="31136">Úvodní strana - podmenu Obrázky</string>
+
   <string id="31140">Hudební OSD</string>
   <string id="31141">Video OSD</string>
 
   <string id="31205">Zdroj textu skladeb</string>
 
   <!-- Extra labels -->
-  <string id="31300">Aktuální teplota</string>
+  <string id="31300">Aktuální počasí</string>
   <string id="31301">Naposledy aktualizováno</string>
   <string id="31302">Menu</string>
-  <string id="31303"></string>
+  <string id="31303">Poskytovatel dat</string>
   <string id="31304">Obrázky</string>
   <string id="31305">Není vložen žádný optický disk</string>
   <string id="31306">Vysunout</string>
   <string id="31308">Detaily o filmu</string>
   <string id="31309">Využitá paměť:</string>
   <string id="31310">Číslo stopy</string>
-  <string id="31311">POZADÍ FANART[CR][CR]NENÍ K DISPOZICI[CR][CR] NASTAVTE HO STISKNUTÍM TLAČÍTKA</string>
+  <string id="31311">Fanart[CR][CR]není k dispozici[CR][CR] Nastavte ho stisknutím tlačítka</string>
   <string id="31312">Současný stahovač</string>
   <string id="31313">Změnit stahovač</string>
   <string id="31314">Možnosti vyhledávání obsahu</string>
   <string id="31318">Malý Fanart</string>
   <string id="31319">Vybraný profil</string>
   <string id="31320">Naposledy přihlášen</string>
-  <string id="31321">Vyběr Karaoke skladby</string>
+  <string id="31321">Výběr karaoke skladby</string>
   <string id="31322">Odvysíláno</string>
   <string id="31323">Nejnovější filmy</string>
   <string id="31324">Nejnovější epizody</string>
   <string id="31326">Vytvořeno</string>
   <string id="31327">Rozlišení</string>
   <string id="31328">Nejnovější položky</string>
-  <string id="31329">[B]ČASOVAČ BYL NASTAVEN![/B] [COLOR=grey2] - SYSTÉM SE AUTOMATICKY VYPNE ZA[/COLOR]</string>
+  <string id="31329">[B]Časovač byl nastaven![/B] [COLOR=grey2] - Systém se automaticky vypne za[/COLOR]</string>
   <string id="31330">Pro přehrání upoutávky[CR][CR]stiskněte tlačítko</string>
+  <string id="31331">Detaily o albu</string>
 
   <!-- Video and Music OSD Labels  -->
   <string id="31351">Pozastavit</string>
   <string id="31356">Stáhnout titulky</string>
   <string id="31357"></string>
 
+  <!-- Skin Fontsets -->
+  <string id="31390">Výchozí vzhled</string>
+  <string id="31391">Výchozí vzhled bez velkých písmen</string>
+  <string id="31392">Písmo Arial</string>
+
   <!-- Description Labels  -->
   <string id="31400">[B]MOŽNOSTI PROSTŘEDÍ[/B][CR][CR]Změna vzhledu · Výběr jazyka a oblasti · Možnosti zobrazení souborů[CR]Nastavení spořiče obrazovky</string>
   <string id="31401">[B]MOŽNOSTI VIDEA[/B][CR][CR]Správa knihovny videí · Možnosti přehrávání videa · Možnosti zobrazení video souborů[CR]Nastavení fontu titulků</string>
   <string id="31403">[B]MOŽNOSTI OBRÁZKŮ[/B][CR][CR]Možnosti zobrazení obrázků · Konfigurace prezentace</string>
   <string id="31404">[B]MOŽNOSTI POČASÍ[/B][CR][CR]Nastavení oblastí pro předpověď počasí</string>
   <string id="31405">[B]MOŽNOSTI SÍTĚ[/B][CR][CR]Možnosti ovládání XBMC přes UPnP a HTTP · Nastavení sdílení médií[CR]Nastavení přístupu na internet</string>
-  <string id="31406">[B]MOŽNOSTI SYSTÉMU[/B][CR][CR]Nastavení a kalibrace obrazovky · Konfigurace výstupu zvuku · Nastavení dálkového ovládání[CR]Možnosti úsporného režimu · Ukládání informací o ladění · Konfigurace rodičovského zámku</string>
+  <string id="31406">[B]MOŽNOSTI SYSTÉMU[/B][CR][CR]Nastavení obrazovky · Konfigurace výstupu zvuku · Nastavení dálkového ovládání[CR]Možnosti úsporného režimu · Ukládání informací o ladění · Rodičovský zámek</string>
   <string id="31407">[B]MOŽNOSTI VZHLEDU[/B][CR][CR]Přizpůsobení vzhledu Confluence · Správa sekcí na úvodní obrazovce[CR]Nastavení pozadí vzhledu</string>
   <string id="31408">[B]MOŽNOSTI DOPLŇKŮ[/B][CR][CR]Správa nainstalovaných doplňků · Vyhledávání a instalace doplňků z xbmc.org[CR]Nastavení doplňků</string>
 
   <string id="31421">Přihlášení uživatele[CR]Pokračujte výběrem profilu</string>
-</strings>
+
+  <!-- Weather plugin -->
+  <string id="31900">Mapy počasí</string>
+  <string id="31901">Předpověď na 36 hodin</string>
+  <string id="31902">Hodinová předpověď</string>
+  <string id="31903">Předpověď na víkend</string>
+  <string id="31904">Předpověď na 10 dní</string>
+  <string id="31905">Předpověď</string>
+  <string id="31906">Mapy a Video</string>
+  <string id="31907">Video předpověď [COLOR=grey2](Přehrávání na celé obrazovce)[/COLOR]</string>
+  <string id="31908">Pravděpodobnost srážek</string>
+  <string id="31909">Načítání informací o předpovědi...</string>
+
+  </strings>
index b8758e6..7f7410d 100644 (file)
   <string id="31300">Current Temp</string>
   <string id="31301">Last Updated</string>
   <string id="31302">Menu</string>
-  <string id="31303"></string>
+  <string id="31303">Data provider</string>
   <string id="31304">Picture</string>
   <string id="31305">No Disc Media Detected</string>
   <string id="31306">Eject</string>
   <string id="31402">[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options</string>
   <string id="31403">[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshows</string>
   <string id="31404">[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set three cities to collect weather information</string>
-  <string id="31405">[B]CONFIGURE NETWORK SETTINGS[/B][CR][CR]Setup control of XBMC via UPnP and HTTP · Configure file sharing[CR]Set internet access options</string>
+
   <string id="31406">[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock</string>
   <string id="31407">[B]CONFIGURE SKIN SETTINGS[/B][CR][CR]Setup the Confluence skin · Add and remove home menu items[CR]Change skin backgrounds</string>
   <string id="31408">[B]CONFIGURE ADD-ONS[/B][CR][CR]Manage your installed Add-ons · Browse for and install Add-ons from xbmc.org[CR]Modify Add-on settings</string>
+  <string id="31409">[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of XBMC via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay</string>
 
   <string id="31421">Select your XBMC user Profile[CR]to login and continue</string>
   
index aefecba..ed70f2c 100644 (file)
   <string id="31300">Tämänhetkinen säätila</string>
   <string id="31301">Viimeksi päivitetty</string>
   <string id="31302">Valikko</string>
-  <string id="31303"></string>
+  <string id="31303">Tietojen tarjoaja</string>
   <string id="31304">Kuva</string>
   <string id="31305">Levyä ei löytynyt</string>
   <string id="31306">Avaa asema</string>
index 2f64b62..0760ab1 100644 (file)
@@ -64,7 +64,7 @@
   <string id="31114">Mehrfach Bild</string>
   <string id="31115">Spezifische</string>
   <string id="31116"></string>
-  <string id="31117">Zeige kürzlich hinzugefüge Videos</string>
+  <string id="31117">Zeige kürzlich hinzugefügte Videos</string>
   <string id="31118">Hauptfenster Programme-Untermenü</string>
   <string id="31119">Verstecke Hintergrund Fanart</string>
   <string id="31120">BUTTON BESCHRIFTUNG</string>
@@ -73,8 +73,8 @@
   <string id="31123">Verwende "Posters" anstelle von "Banners" für TV Shows</string>
   <string id="31124">Zeige Hintergrund "Aktuell abgespielt" Video</string>
   <string id="31125">Zeige Hintergrund "Aktuell abgespielt" Visualisierung</string>
-  <string id="31126"></string>
-  <string id="31127"></string>
+  <string id="31126">Spiele TV Themes in der Video Datenbank (TvTunes Ad-on)</string>
+  <string id="31127">TvTunes</string>
   <string id="31128">Lyrics</string>
   <string id="31129"></string>
   <string id="31130"></string>
@@ -99,7 +99,7 @@
   <string id="31300">Aktuelle Temperatur</string>
   <string id="31301">Letztes Update</string>
   <string id="31302">Menü</string>
-  <string id="31303"></string>
+  <string id="31303">Quelle</string>
   <string id="31304">Bild</string>
   <string id="31305">Keine Disk vorhanden</string>
   <string id="31306">Auswerfen</string>
   <string id="31328">Kürzlich Hinzugefügt</string>
   <string id="31329">[B]TIMER SET![/B] [COLOR=grey2] - SYSTEM AUTO SHUTDOWN IN[/COLOR]</string>
   <string id="31330">Starte[CR][CR]Filmtrailer</string>
+  <string id="31331">Album Details</string>
 
   <string id="31351">Pause</string>
   <string id="31352">Stop</string>
   <string id="31402">[B]KONFIGURIERE MUSIK EINSTELLUNGEN[/B][CR][CR]Organisiere die Musik DB · Setze die Musik Abspiel Optionen · Wechsel die Musik Auflistungs Optionen · Einrichten der Lied Vorlage · Setze Karaoke Optionen</string>
   <string id="31403">[B]KONFIGURIERE BILDER EINSTELLUNGEN[/B][CR][CR]Setze Bild Auflistungs Optionen · Konfiguriere Diaschau</string>
   <string id="31404">[B]KONFIGURIERE WETTER EINSTELLUNGEN[/B][CR][CR]Wähle drei Städte zum sammeln der Wetter Informationen</string>
-  <string id="31405">[B]KONFIGURIERE NETZWERK EINSTELLUNGEN[/B][CR][CR]Einrichten der Steuerung von XBMC via UPnP und HTTP · Konfiguriere Datei Zugriff[CR]Setze Internet Zugriffs Optionen</string>
   <string id="31406">[B]KONFIGURIERE SYSTEM EINSTELLUNGEN[/B][CR][CR]Setze und kalibriere Displays · Konfiguriere Audioausgabe · Setze Fernbedienungs Einstellungen · Setze Energiespar Optionen · Aktiviere Debugging · Einrichten Master Sperre</string>
   <string id="31407">[B]KONFIGURIERE SKIN EINSTELLUNGEN[/B][CR][CR]Einrichten des Confluence Skin · Hinzufügen und entfernen der Home Menü Einträge[CR]Wechseln der Skin Hintergründe</string>
   <string id="31408">[B]KONFIGURIERE ADD-ONS[/B][CR][CR]Organisiere die installierten Add-ons · Installiere Add-ons von xbmc.org[CR]Add-on Einstellungen anpassen</string>
+  <string id="31409">[B]KONFIGURIERE DIENSTE[/B][CR][CR]Richte Zugriff auf XBMC via UPnP und HTTP ein · Konfiguriere die Dateifreigabe[CR]Aktiviere Zeroconf · Konfiguriere AirPlay</string>
   <string id="31421">Wähle Dein XBMC Benutzer Profil[CR]Zum Anmelden und Weitermachen</string>
+
+  <string id="31900">Wetterkarten</string>
+  <string id="31901">36 Stunden Prognose</string>
+  <string id="31902">Stündliche Prognose</string>
+  <string id="31903">Wochenend Prognose</string>
+  <string id="31904">10 Tage Prognose</string>
+  <string id="31905">Prognose</string>
+  <string id="31906">Karten &amp; Video</string>
+  <string id="31907">Video Prognose [COLOR=grey2](Vollbild Wiedergabe)[/COLOR]</string>
+  <string id="31908">Niederschlagswahrscheinlichkeit</string>
+  <string id="31909">Lade Wetterbericht...</string>
 </strings>
index cba0444..f3f7754 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<strings>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings> <!-- Last update (by CutSickAss): 23/03/2012 -->
   <!-- Misc labels -->
   <string id="31000">Αλλαγή</string>
   <string id="31001">Αγαπητό</string>
@@ -7,16 +7,17 @@
   <string id="31003">Επιλογές λειτουργίας</string>
   <string id="31004">Απασχολημένο...</string>
   <string id="31005">Απόκρυψη Πληροφοριών</string>
+  <string id="31006">Προβολή Επιλογών</string>
+  <string id="31007">Plugin</string>
+  <string id="31008">Πλήρης Οθόνη</string>
 
-  <string id="31007">Επεκτάσεις</string>
-
-  <string id="31020">Πρόσφατα αναρτημένα</string>
-  <string id="31021">Αρχεία βίντεο</string>
-  <string id="31022">Αρχεία μουσικής</string>
+  <string id="31020">Προστέθηκαν πρόσφατα</string>
+  <string id="31021">Βίντεο - Αρχεία</string>
+  <string id="31022">Μουσική - Αρχεία</string>
   <string id="31023">Αναπαραγωγή</string>
   <string id="31024">Σελίδα</string>
   <string id="31025">Αντικείμενα</string>
-  <string id="31026">ΠÏ\81Ï\8cÏ\83θεÏ\84ες επιλογές</string>
+  <string id="31026">Î\94ιάÏ\86οÏ\81ες επιλογές</string>
   <string id="31027">Τοποθεσία</string>
  
   <!-- View Type labels -->
   <string id="31033">Πληροφορίες</string>
   
   <!-- Extra labels -->
-  <string id="31040">ΤÏ\8eÏ\81α Î±Î½Î±Ï\80αÏ\81άγεται</string>
+  <string id="31040">ΤÏ\8eÏ\81α Î\95κÏ\84ελείται</string>
 
-  <string id="31042">Î\91ναÏ\80αÏ\81άγεÏ\84αι</string>
+  <string id="31042">Î\91Î\9dÎ\91ΠÎ\91ΡÎ\91Î\93ΩÎ\93Î\97</string>
   <string id="31043">ΠΑΥΣΗ</string>
-  <string id="31044">ΠΡÎ\9fΩÎ\98Î\97ΣÎ\97 Î\9cΠΡÎ\9fΣΤÎ\91</string>
-  <string id="31045">ΠΡÎ\9fΩÎ\98Î\97ΣÎ\97 Î Î\99ΣΩ</string>
-  <string id="31046">Î\99διÏ\8cÏ\84ηÏ\84εÏ\82 Î®χου</string>
-  <string id="31047">Τρέχουσα απεικονίση</string>
-  <string id="31048">Î\91Ï\80εικονίσεις</string>
+  <string id="31044">ΜΠΡΟΣΤΑ</string>
+  <string id="31045">ΠΙΣΩ</string>
+  <string id="31046">Î\99διÏ\8cÏ\84ηÏ\84εÏ\82 Î\89χου</string>
+  <string id="31047">Τρέχον Προκαθορισμένο</string>
+  <string id="31048">ΠÏ\81οκαθοÏ\81ιÏ\83μένεÏ\82 Î\9fÏ\80Ï\84ικοÏ\80οιήσεις</string>
   <string id="31049">Χρόνος λήξης</string>
+  <string id="31050">Ταξ.: Αύξουσα</string>
+  <string id="31051">Ταξ.: Φθίνουσα</string>
 
 
   <!-- Playlist Editor labels -->
   <string id="31055">Άνοιγμα λίστας αναπαραγωγής</string>
   <string id="31056">Αποθήκευση λίστας αναπαραγωγής</string>
   <string id="31057">Κλείσιμο λίστας αναπαραγωγής</string>
-  <string id="31058">ΣÏ\8dÏ\83Ï\84ημα Î±Ï\81Ï\87είÏ\89ν Î¼Î¿Ï\85Ï\83ικής</string>
+  <string id="31058">Î\9cοÏ\85Ï\83ικά Î±Ï\81Ï\87εία Ï\83Ï\85Ï\83Ï\84ήμαÏ\84ος</string>
   <string id="31059">Τρέχουσα λίστα αναπαραγωγής</string>
-  <string id="31060">Αυτό το αρχείο είναι στοιβαγμένο, επιλέξτε το κομμάτι που επιθυμείτε για αναπαραγωγή.</string>
-  <string id="31061">Î\95Ï\80ιλέÏ\87θηκε Î· Ï\84Ï\81έÏ\87οÏ\85Ï\83α</string>
-
+  <string id="31060">Αυτό το αρχείο είναι στοιβαγμένο, επιλέξτε από που να γίνει αναπαραγωγή.</string>
+  <string id="31061">ΤÏ\81έÏ\87οÏ\85Ï\83α Î\95Ï\80ιλογή</string>
+  
   <!-- Skin Settings labels -->
   <string id="31100"></string>
   <string id="31101">Επιλογές αρχικής οθόνης</string>
   <string id="31102">Υπόβαθρο</string>
-  <string id="31103">Εμφάνιση "Παύση" κατά την παρουσίαση φωτογραφιών</string>
-  <string id="31104">Î\91ναÏ\80αÏ\81αγÏ\89γή Î\94ιαÏ\86ημιÏ\83Ï\84ικÏ\8eν Ï\84αινιÏ\8eν Ï\83ε Ï\80αÏ\81άθÏ\85Ï\81ο[COLOR=grey3](Μόνο οι πληροφορίες βίντεο)[/COLOR]</string>
-  <string id="31105"></string>
-  <string id="31106">ΠÏ\81Ï\8cÏ\83θεÏ\84ες επιλογές</string>
+  <string id="31103">Εμφάνιση 'Παύσης' σε παρουσίαση διαφανειών</string>
+  <string id="31104">Î\91ναÏ\80αÏ\81αγÏ\89γή Î\94ιαÏ\86ημιÏ\83Ï\84ικÏ\8eν Ï\83ε Ï\80αÏ\81άθÏ\85Ï\81ο [COLOR=grey3](Μόνο οι πληροφορίες βίντεο)[/COLOR]</string>
+  <string id="31105">Το πλήκτρο "Βίντεο" πάντα οδηγεί στα "Αρχεία" βίντεο</string>
+  <string id="31106">Î\94ιάÏ\86οÏ\81ες επιλογές</string>
   <string id="31107">Απόκρυψη των αναγνώσιμων σημαιών από τα ονόματα αρχείων βίντεο [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
-  <string id="31108">Απόκρυψη πλήκτρων από το κεντρικό μενού επιλογών</string>
+  <string id="31108">Απόκρυψη πλήκτρων του Κεντρικού Μενού</string>
   <string id="31109">Υπόβαθρα αρχικής οθόνης</string>
-  <string id="31110">Επεξεργασία υπόβαθρου για το αρχικό πλήκτρο</string>
+  <string id="31110">Επεξεργασία υποβάθρου για το αρχικό πλήκτρο</string>
   <string id="31111">Απόκρυψη</string>
   <string id="31112">Επιλογές</string>
-  <string id="31113">Εικόνα</string>
-  <string id="31114">Φάκελος</string>
+  <string id="31113">Î\9cία Î\95ικÏ\8cνα</string>
+  <string id="31114">ΠολλαÏ\80λέÏ\82 ÎµÎ¹ÎºÏ\8cνες</string>
   <string id="31115">Προσαρμογή</string>
   <string id="31116"></string>
   <string id="31117">Εμφάνιση των πρόσφατα προστιθέμενων βίντεο</string>
-  <string id="31118">Υπομενού αρχικής οθόνης</string>
-  <string id="31119"></string>
+  <string id="31118">Î¥Ï\80ομενοÏ\8d Î\95Ï\86αÏ\81μογÏ\8eν Î±Ï\81Ï\87ικήÏ\82 Î¿Î¸Ï\8cνηÏ\82</string>
+  <string id="31119">Απόκρυψη Fanart υποβάθρου</string>
   <string id="31120">ΕΤΙΚΕΤΑ ΠΛΗΚΤΡΟΥ</string>
-  <string id="31121"></string>
-  <string id="31122">Î\9fθÏ\8cνη Îºαιρού</string>
-  <string id="31123">Χρήση του "Αφίσα" αντί του "Πανό" για τις τηλεοπτικές σειρές</string>
-  <string id="31124">Î\95μÏ\86άνιÏ\83η Ï\89Ï\82 Ï\85Ï\80Ï\8cβαθÏ\81ο Ï\84ο Î²Î¯Î½Ï\84εο Ï\80οÏ\85 "ΤÏ\8eÏ\81α Î±Î½Î±Ï\80αÏ\81άγεται"</string>
-  <string id="31125">Î\95μÏ\86άνιÏ\83η Ï\89Ï\82 Ï\85Ï\80Ï\8cβαθÏ\81ο Î· Î±Ï\80εικÏ\8cνιÏ\83η Ï\80οÏ\85 "ΤÏ\8eÏ\81α Î±Î½Î±Ï\80αÏ\81άγεται"</string>
+  <string id="31121"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31122">Σελίδα Î\9aαιρού</string>
+  <string id="31123">Χρήση "Αφισών" αντί για "Πανό" για τις τηλεοπτικές σειρές</string>
+  <string id="31124">Î\95μÏ\86άνιÏ\83η Ï\89Ï\82 Ï\85Ï\80Ï\8cβαθÏ\81ο Ï\84ο Î²Î¯Î½Ï\84εο Ï\80οÏ\85 "ΤÏ\8eÏ\81α Î\95κÏ\84ελείται"</string>
+  <string id="31125">Î\95μÏ\86άνιÏ\83η Ï\89Ï\82 Ï\85Ï\80Ï\8cβαθÏ\81ο Î· Î¿Ï\80Ï\84ικοÏ\80οίηÏ\83η Ï\80οÏ\85 "ΤÏ\8eÏ\81α Î\95κÏ\84ελείται"</string>
 
-  <string id="31126"></string>
-  <string id="31127"></string>
-  <string id="31128">Στίχοι XBMC</string>
-  <string id="31129"></string>
-  <string id="31130"></string>
+  <string id="31126">Αναπαραγωγή τραγουδιών σειρών (πρόσθετο TvTunes)</string>
+  <string id="31127">TvTunes</string>
+  <string id="31128">Στίχοι</string>
+  <string id="31129"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31130"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31131"></string> <!-- blanked 2010-12-23 -->
+  <string id="31132">Πρόσθετο στίχων</string>
+  <string id="31133">Πρόσθετο υποτίτλων</string>
+  <string id="31134">Υπομενού Βίντεο αρχικής οθόνης</string>
+  <string id="31135">Υπομενού Μουσικής αρχικής οθόνης</string>
+  <string id="31136">Υπομενού Εικόνων αρχικής οθόνης</string>
 
-  <string id="31140">Aπεικόνισεις οθόνης (OSD) Μουσική</string>
-  <string id="31141">Aπεικόνισεις οθόνης (OSD) Βίντεο</string>
+  <string id="31140">Aπεικονίσεις οθόνης (OSD) Μουσικής</string>
+  <string id="31141">Aπεικονίσεις οθόνης (OSD) Βίντεο</string>
 
   <!-- Script labels -->
   <string id="31200">Συντομεύσεις</string>
   <string id="31201">Κατηγορίες</string>
-  <string id="31202">Εμφάνιση συντελεστών</string>
+  <string id="31202">Εμφάνιση διανομής</string>
   <string id="31203">Επιλογή τραγουδιού</string>
   <string id="31204">Επιλογή Συνδέσμων</string>
-  <string id="31205">Προέλευση στίχων τραγουδιού</string>
+  <string id="31205">Προέλευση στίχων</string>
 
   <!-- Extra labels -->
-  <string id="31300">ΤÏ\81έÏ\87οÏ\85Ï\83εÏ\82 Ï\83Ï\85νθήκεÏ\82</string>
+  <string id="31300">ΤÏ\81έÏ\87οÏ\85Ï\83α Î¸ÎµÏ\81μοκÏ\81αÏ\83ία</string>
   <string id="31301">Τελευταία ενημέρωση</string>
   <string id="31302">Μενού</string>
-  <string id="31303"></string>
-  <string id="31304">ΦÏ\89Ï\84ογÏ\81αÏ\86ίεÏ\82</string>
-  <string id="31305">Δεν εντοπίσθηκε δίσκος πολυμέσων</string>
+  <string id="31303">Πηγή δεδομένων</string>
+  <string id="31304">Î\95ικÏ\8cνα</string>
+  <string id="31305">Δεν εντοπίστηκε οπτικός δίσκος</string>
   <string id="31306">Εξαγωγή</string>
   <string id="31307">Απόκρυψη Fanart</string>
   <string id="31308">Λεπτομέρειες ταινίας</string>
-  <string id="31309">Î\94εÏ\83μεÏ\85μένη Î¼Î½Î®Î¼Î·:</string>
+  <string id="31309">ΧÏ\81ήÏ\83η Î¼Î½Î®Î¼Î·Ï\82:</string>
   <string id="31310">Αριθμός κομματιού</string>
-  <string id="31311">Î\9cη Î´Î¹Î±Î¸Î­Ï\83ιμη[CR][CR]εικÏ\8cνα Fanart[CR][CR]Î\93ια Î½Î± Î¿Ï\81ίÏ\83εÏ\84ε Ï\80ιέÏ\83Ï\84ε Ï\84ο Ï\80λήκÏ\84Ï\81ο</string>
-  <string id="31312">Î\95νεÏ\81γÏ\8cÏ\82 ÎºÎ±Ï\84αγÏ\81αÏ\86έαÏ\82</string>
-  <string id="31313">Επιλογή καταγραφέα</string>
-  <string id="31314">Επιλόγες αναζήτησης περιεχομένου</string>
+  <string id="31311">Î\95ικÏ\8cνα Fanart[CR][CR]Î\9cη Î´Î¹Î±Î¸Î­Ï\83ιμη[CR][CR] Î Î¹Î­Ï\83Ï\84ε Ï\84ο Ï\80λήκÏ\84Ï\81ο Î³Î¹Î± Î½Î± Î¸Î­Ï\83εÏ\84ε</string>
+  <string id="31312">ΤÏ\81έÏ\87ον Scraper</string>
+  <string id="31313">Επιλογή Scraper</string>
+  <string id="31314">Επιλογές Σάρωσης Περιεχομένου</string>
   <string id="31315">Βασικό</string>
   <string id="31316"></string>
   <string id="31317">Ορισμός διαδρομής Fanart</string>
   <string id="31318">Μικρό Fanart</string>
   <string id="31319">Επιλεγμένο προφίλ</string>
-  <string id="31320">Τελευταία είσοδος στο</string>
-  <string id="31321">Επιλογέας τραγουδιών Karaoke</string>
-  <string id="31322">Î\91ιθέÏ\81ιο</string>
-  <string id="31323">ΠÏ\81Ï\8cÏ\83Ï\86αÏ\84εÏ\82 Ï\84αινίες</string>
-  <string id="31324">ΠÏ\81Ï\8cÏ\83Ï\86αÏ\84α Îµπεισόδια</string>
+  <string id="31320">Τελευταία είσοδος</string>
+  <string id="31321">Επιλογέας τραγουδιού Karaoke</string>
+  <string id="31322">ΠÏ\81Ï\8eÏ\84η Î Ï\81οβολή</string>
+  <string id="31323">Î\9dεÏ\8eÏ\84εÏ\81εÏ\82 Î¤αινίες</string>
+  <string id="31324">Î\9dεÏ\8eÏ\84εÏ\81α Î\95πεισόδια</string>
   <string id="31325">Επιλογές λίστας αναπαραγωγής</string>
   <string id="31326">Δημιουργήθηκε</string>
   <string id="31327">Ανάλυση</string>
-  <string id="31328">Προστέθηκε πρόσφατα</string>
-  <string id="31329">[B]Εφαρμογή χρονοδιακόπτη![/B] [COLOR=grey2] - Αυτόματος τερματισμός λειτουργίας σε[/COLOR]</string>
-  <string id="31330">Πιέστε το πλήκτρο για να αναπαραχθεί[CR][CR]το διαφημιστικό ταινίας</string>
+  <string id="31328">Προστέθηκαν Πρόσφατα</string>
+  <string id="31329">[B]Εφαρμογή χρονοδιακόπτη![/B] [COLOR=grey2] - Αυτόματος τερματισμός συστήματος σε[/COLOR]</string>
+  <string id="31330">Πιέστε το πλήκτρο για αναπαραγωγή[CR][CR]του Διαφημιστικού Ταινίας</string>
+  <string id="31331">Λεπτομέρειες Άλμπουμ</string>
 
   <!-- Video and Music OSD Labels  -->
   <string id="31351">Παύση</string>
   <string id="31352">Διακοπή</string>
-  <string id="31353">ΠÏ\81οÏ\8eθηÏ\83η Î¼προστά</string>
-  <string id="31354">Προώθηση πίσω</string>
+  <string id="31353">Î\9cπροστά</string>
+  <string id="31354">Πίσω</string>
   <string id="31355">Μενού ταινίας</string>
   <string id="31356">Λήψη υποτίτλων</string>
   <string id="31357"></string>
 
+  <!-- Skin Fontsets -->
+  <string id="31390">Προεπιλογή</string>
+  <string id="31391">Προεπιλογή χωρίς Κεφαλαία</string>
+  <string id="31392">Βασισμένη σε Arial</string>
+
   <!-- Description Labels  -->
-  <string id="31400">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΕΞΑΤΟΜΙΚΕΥΣΗΣ[/B][CR][CR]Αλλαγή κελύφους · Αλλαγή χώρας και γλώσσας συστήματος · Ορισμός των γενικών επιλόγων εμφάνισης[CR]Προσαρμογή της προφύλαξης οθόνης</string>
-  <string id="31401">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΒΙΝΤΕΟ[/B][CR][CR]Διαχείριση της συλλογής βίντεο · Διαμόρφωση γραμματοσειράς υποτίτλων[CR]Προσαρμογή της ποιότητας ανάλυσης των βίντεο και ρύθμιση του αναπαραγωγέα</string>
-  <string id="31402">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΜΟΥΣΙΚΗΣ[/B][CR][CR]Διαχείριση της συλλογής τραγουδιών · Eπιλογές εμφάνισης της λίστας μουσικής[CR]Προσαρμογή ρυθμίσεων και αλλαγή γραμματοσειράς για Karaoke</string>
-  <string id="31403">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΦΩΤΟΓΡΑΦΙΩΝ[/B][CR][CR]Ρύθμιση επιλογών προβολής φωτογραφιών · Ρύθμιση παρουσίασης διαφανειών</string>
-  <string id="31404">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΚΑΙΡΟΥ[/B][CR][CR]Ορισμός τριών πόλεων για τις οποίες θα γίνει πρόγνωση καιρού</string>
-  <string id="31405">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΔΙΚΤΥΟΥ[/B][CR][CR]Προσαρμογή πρωτοκόλλων επικοινωνίας και μεταφοράς κοινόχρηστων αρχείων[CR]Ρύθμιση κοινόχρηστων αρχείων πολυμέσων · Ορισμός ρυθμίσεων δικτύου</string>
-  <string id="31406">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΣΥΣΤΗΜΑΤΟΣ[/B][CR][CR]Βαθμονόμιση γραφικού περιβάλλοντος · Ρύθμιση υλικού ήχου · Εγκατάσταση τηλεχειριστηρίων[CR]Αλλαγή και τροποποίηση του τρόπου τερματισμού του προγράμματος · Ρύθμιση κεντρικού κλειδώματος</string>
-  <string id="31407">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΚΕΛΥΦΟΥΣ[/B][CR][CR]Αλλαγή και τροποποίηση υπόβαθρων · Προσθήκη ή απομάκρυνση πλήκτρων από την αρχική οθόνη[CR]Δημιουργία συντομεύσεων προς τα scripts προκειμένου να ενσωματωθούν στο κέλυφος</string>
-  <string id="31408">[B]ΠΡΟΣΑΡΜΟΓΗ ΡΥΘΜΙΣΕΩΝ ΠΡΟΣΘΕΤΩΝ[/B][CR][CR]Διαχείριση των Πρόσθετων σας · Αναζήτηση και εγκατάσταση Πρόσθετων από το XBMC.org[CR]Τροποποίηση ρυθμίσεων των Πρόσθετων</string>
+  <string id="31400">[B]ΡΥΘΜΙΣΕΙΣ ΕΞΑΤΟΜΙΚΕΥΣΗΣ[/B][CR][CR]Αλλαγή κελύφους · Αλλαγή χώρας και γλώσσας συστήματος · Επιλογές καταλόγου αρχείων[CR]Προσαρμογή της προφύλαξης οθόνης</string>
+  <string id="31401">[B]ΡΥΘΜΙΣΕΙΣ ΒΙΝΤΕΟ[/B][CR][CR]Διαχείριση της συλλογής βίντεο · Ρύθμιση αναπαραγωγής βίντεο · Επιλογές καταλόγου ταινιών[CR]Ρύθμιση γραμματοσειράς υποτίτλων</string>
+  <string id="31402">[B]ΡΥΘΜΙΣΕΙΣ ΜΟΥΣΙΚΗΣ[/B][CR][CR]Διαχείριση της συλλογής τραγουδιών · Ρύθμιση αναπαραγωγής μουσικής · Επιλογές καταλόγου μουσικής[CR]Ρύθμιση υποβολής τραγουδιού · Επιλογές karaoke</string>
+  <string id="31403">[B]ΡΥΘΜΙΣΕΙΣ ΕΙΚΟΝΩΝ[/B][CR][CR]Επιλογές καταλόγου εικόνων · Ρύθμιση παρουσίασης διαφανειών</string>
+  <string id="31404">[B]ΡΥΘΜΙΣΕΙΣ ΚΑΙΡΟΥ[/B][CR][CR]Ορισμός τριών πόλεων για τις οποίες θα γίνεται πρόγνωση καιρού</string>
+  <string id="31405">[B]ΡΥΘΜΙΣΕΙΣ ΔΙΚΤΥΟΥ[/B][CR][CR]Ρύθμιση χειρισμού του XBMC μέσω UPnP και HTTP · Ρύθμιση κοινής χρήσης αρχείων[CR]Ορισμός ρυθμίσεων διαδικτύου</string>
+  <string id="31406">[B]ΡΥΘΜΙΣΕΙΣ ΣΥΣΤΗΜΑΤΟΣ[/B][CR][CR]Διαμόρφωση και βαθμονόμηση οθονών · Ρύθμιση εξόδου ήχου · Εγκατάσταση τηλεχειριστηρίων · Ρύθμιση εξοικονόμησης ενέργειας · Ενεργοποίηση καταγραφής σφαλμάτων (debug) · Ρύθμιση κεντρικού κλειδώματος</string>
+  <string id="31407">[B]ΡΥΘΜΙΣΕΙΣ ΚΕΛΥΦΟΥΣ[/B][CR][CR]Ρύθμιση του κελύφους Confluence · Προσθήκη και απομάκρυνση αντικειμένων από την αρχική οθόνη[CR]Αλλαγή υποβάθρου κελύφους</string>
+  <string id="31408">[B]ΡΥΘΜΙΣΕΙΣ ΠΡΟΣΘΕΤΩΝ[/B][CR][CR]Διαχείριση εγκατεστημένων Πρόσθετων · Αναζήτηση και εγκατάσταση Πρόσθετων από το xbmc.org[CR]Τροποποίηση ρυθμίσεων των Πρόσθετων</string>
+
+  <string id="31421">Επιλέξτε προφίλ χρήστη για το XBMC[CR]για να συνδεθείτε και να συνεχίσετε</string>
   
-  <string id="31421">Επιλέξτε προφίλ χρήστη για το XBMC[CR]για να συνδεθείτε και συνεχίστε</string>
-</strings>
+  <!-- Weather plugin -->
+  <string id="31900">Χάρτες Καιρού</string>
+  <string id="31901">36ωρη Πρόβλεψη</string>
+  <string id="31902">Ωριαία Πρόβλεψη</string>
+  <string id="31903">Πρόβλεψη Σαββατοκύριακου</string>
+  <string id="31904">Πρόβλεψη 10 ημερών</string>
+  <string id="31905">Πρόβλεψη</string>
+  <string id="31906">Χάρτες &amp; Βίντεο</string>
+  <string id="31907">Βίντεο Πρόβλεψης [COLOR=grey2](Πλήρης Οθόνη)[/COLOR]</string>
+  <string id="31908">Πιθανότητα Υετού</string>
+  <string id="31909">Ανάκτηση πρόβλεψης καιρού...</string>
+
+  </strings>
index 60a149d..f7e7eea 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--Translator: Attila Jakosa-->
 <!--Email: attila.jakosa@gmail.com-->
-<!--Based on English 52a14da027966458c44b1e7899f6c9f155ee1c44 (09.08.2011)-->
+<!--Based on English 72696c450cb789e240194a0595bed6e291e3a158 (14.11.2011)-->
 <strings>
   <!-- Vegyes feliratok -->
   <string id="31000">Választható</string>
@@ -32,7 +32,7 @@
   <string id="31033">Infó</string>
 
   <!-- Extra feliratok -->
-  <string id="31040">Most játszott</string>
+  <string id="31040">Most játszva</string>
 
   <string id="31042">LEJÁTSZÁS</string>
   <string id="31043">MEGÁLLÍTVA</string>
@@ -47,7 +47,7 @@
 
 
   <!-- Lejátszáslista szerkesztő feliratai -->
-  <string id="31055">Játszáslista nyitása</string>
+  <string id="31055">Játszáslista megnyitása</string>
   <string id="31056">Játszáslista mentése</string>
   <string id="31057">Játszáslista zárása</string>
   <string id="31058">Rendszer zene fájlok</string>
@@ -55,7 +55,7 @@
   <string id="31060">Ez a fájl egyesített. Válaszd azt a részt, amelyiket játszani akarod.</string>
   <string id="31061">Jelenleg kiválasztott</string>
 
-  <!-- Arculat beállítások feliratai -->
+  <!-- Felszín beállítások feliratai -->
   <string id="31100"></string>
   <string id="31101">Sajátképernyő lehetőségei</string>
   <string id="31102">Háttér</string>
@@ -79,7 +79,7 @@
   <string id="31120">GOMBFELIRAT</string>
   <string id="31121"></string>
   <string id="31122">Időjárás oldal</string>
-  <string id="31123">Poszterek használata keskeny szalagcímek helyett a TV műsoroknál</string>
+  <string id="31123">Poszterek használata keskeny szalagcímek helyett a sorozatoknál</string>
   <string id="31124">A háttérben az éppen játszott videó megjelenítése</string>
   <string id="31125">A háttérben az éppen futó vizualizáció megjelenítése</string>
 
   <string id="31300">Hőmérséklet most</string>
   <string id="31301">Utoljára frissítve</string>
   <string id="31302">Menü</string>
-  <string id="31303"></string>
+  <string id="31303">Adatszolgáltató</string>
   <string id="31304">Kép</string>
   <string id="31305">Lemez média nem található</string>
   <string id="31306">Nyitás</string>
   <string id="31314">Tartalomkeresési lehetőségek</string>
   <string id="31315">Alap</string>
   <string id="31316"></string>
-  <string id="31317">Fanart elérési útvonal</string>
+  <string id="31317">Fanart elérési helye</string>
   <string id="31318">Kis fanart</string>
   <string id="31319">Választott profil</string>
   <string id="31320">Utoljára bejelentkezve</string>
   <string id="31357"></string>
 
   <!-- Betűtípus készletek -->
-  <string id="31390">Arculat alapértelmezése</string>
+  <string id="31390">Felszín alapértelmezése</string>
   <string id="31391">Alapértelmezett, nagybetűsítés nélkül</string>
   <string id="31392">Arial betűkészlet</string>
 
   <!-- Magyarázó feliratok  -->
-  <string id="31400">[B]MEGJELENÍTÉS MÓDJÁNAK BEÁLLÍTÁSA[/B][CR][CR]Arculat váltása · Nyelv, régió váltása · Fájl listázás módjának beállítása[CR]Képernyővédő beállítása</string>
+  <string id="31400">[B]MEGJELENÍTÉS MÓDJÁNAK BEÁLLÍTÁSA[/B][CR][CR]Felszín váltása · Nyelv, régió váltása · Fájl listázás módjának beállítása[CR]Képernyővédő beállítása</string>
   <string id="31401">[B]VIDEÓ BEÁLLÍTÁSOK[/B][CR][CR]Film médiatár kezelése · Videólejátszás beállítása · Videólistázás módjának beállítása[CR]Feliratok karaktertípusának váltása</string>
   <string id="31402">[B]ZENE BEÁLLÍTÁSOK[/B][CR][CR]Zene médiatár kezelése · Zenelejátszás beállítása · Zenelistázás módjának beállítása[CR]Zene lejátszási szabályok felállítása · Karaoke lehetőségek</string>
   <string id="31403">[B]FÉNYKÉP BEÁLLÍTÁSOK[/B][CR][CR]Fényképek listázási módjának beállítása · Diavetítés beállítása</string>
   <string id="31404">[B]IDŐJÁRÁS BEÁLLÍTÁSOK[/B][CR][CR]Három város megadása, melyekről időjárás információk fognak megjelenni</string>
   <string id="31405">[B]HÁLÓZATI BEÁLLÍTÁSOK[/B][CR][CR]XBMC távoli vezérlésének beállítása HTTP-n keresztül · Fájlmegosztás beállítása[CR]Internet elérési lehetőségek</string>
   <string id="31406">[B]RENDSZERBEÁLLÍTÁSOK[/B][CR][CR]Kijelzők beállítása, kalibrálása · Hangkimenet konfigurálása · Távkapcsoló beállítása[CR]Energiagazdálkodási lehetőségek beállítása · Hibakeresés bekapcsolása[CR]Mesterzár felállítása</string>
-  <string id="31407">[B]ARCULAT BEÁLLÍTÁSOK[/B][CR][CR]A Confluence arculat beállítása · Sajátképernyő elemek hozzáadása/elvétele[CR]Arculat hátterek megváltoztatása</string>
+  <string id="31407">[B]FELSZÍN BEÁLLÍTÁSOK[/B][CR][CR]A Confluence felszín beállítása · Sajátképernyő elemek hozzáadása/elvétele[CR]Felszín hátterek megváltoztatása</string>
   <string id="31408">[B]KIEGÉSZÍTŐK BEÁLLÍTÁSA[/B][CR][CR]A telepített kiegészítők kezelése · Kiegészítők böngészése és telepítése az xbmc.org[CR]webhelyről · Kiegészítők beállításainak módosítása</string>
   
   <string id="31421">Válaszd ki az XBMC felhasználói profilod[CR]a belépéshez</string>
index 6901b6d..df761b5 100644 (file)
@@ -1,9 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!--Translator: Kristján Bjarni Guðmundsson-->
 <!--Email: kristjanbjarni@gmail.com-->
-<!--Date of translation: 2011-06-08-->
-<!--$Revision$-->
-<!--Based on english strings version 35672-->
+<!--Date of translation: 2012-01-22-->
+<!--Based on English 72696c450cb789e240194a0595bed6e291e3a158 (14.11.2011)-->
 <strings>
   <!-- Misc labels -->
   <string id="31000">Breyta -</string>
   <string id="31002">Hatri</string>
   <string id="31003">Orkukostir</string>
   <string id="31004">Vinnsla...</string>
-  <string id="31005">Fela UPPLÝSINGAR</string>
-
+  <string id="31005">Fela upplýsingar</string>
+  <string id="31006">Stillingar sjónarhorns</string>
   <string id="31007">Tengiforrit</string>
+  <string id="31008">Allur skjárinn</string>
 
   <string id="31020">Nýlega bætt við</string>
   <string id="31021">Myndefni - Skrár</string>
@@ -23,7 +23,7 @@
   <string id="31025">Hlutir</string>
   <string id="31026">Ýmsir valkostir</string>
   <string id="31027">Staðsetning</string>
+
   <!-- View Type labels -->
   <string id="31028">Veggspjaldafletting</string>
   <string id="31029">Aðdáendamyndir</string>
@@ -43,7 +43,8 @@
   <string id="31047">Gildandi forstilling</string>
   <string id="31048">Forstillingar myndskreytinga</string>
   <string id="31049">Lokatími</string>
-
+  <string id="31050">Raða: Hækkandi</string>
+  <string id="31051">Raða: Lækkandi</string>
 
   <!-- Playlist Editor labels -->
   <string id="31055">Opna lagalista</string>
   <string id="31059">Núgildandi lagalisti</string>
   <string id="31060">Þessi skrá er stöfluð, veldu þann part sem þú vilt byrja að spila frá.</string>
   <string id="31061">Núverandi val</string>
-  
+
   <!-- Skin Settings labels -->
   <string id="31100"/>
   <string id="31101">Stillingar heimaskjás</string>
   <string id="31102">Bakgrunnur</string>
   <string id="31103">Sýna "Í bið" í myndasýningu</string>
   <string id="31104">Spila kvikmyndasýnishorn í glugga [COLOR=grey3](Aðeins myndbandaupplýsingarglugga)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31105">Myndbandahnappur fer alltaf í myndbandaskrár</string>
   <string id="31106">Ýmsir valkostir</string>
   <string id="31107">Fela flagg lesið frá skráarnöfnum [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
   <string id="31108">Fela hnapp í aðalvalmynd</string>
@@ -74,7 +75,7 @@
   <string id="31116"/>
   <string id="31117">Sýna myndbönd sem var nýlega bætt við</string>
   <string id="31118">Undirvalmynd heimasíðu</string>
-  <string id="31119"/>  <!-- blanked 2010-11-12 -->
+  <string id="31119">Fela aðdáendamyndir í bakgrunni</string>
   <string id="31120">HNAPPAHEITI</string>
   <string id="31121"/>  <!-- blanked 2010-11-12 -->
   <string id="31122">Veðursíða</string>
   <string id="31124">Sýna "Í spilun" myndband í bakgrunni</string>
   <string id="31125">Sýna "Í spilun" myndskreytingu í bakgrunni</string>
 
-  <string id="31126"/>  <!-- blanked 2010-11-12 -->
-  <string id="31127"/>  <!-- blanked 2010-11-12 -->
+  <string id="31126">Spila þema lög í myndbandasafni (TvTunes viðbót)</string>
+  <string id="31127">TvTunes</string>
   <string id="31128">Lagatextar</string>
   <string id="31129"/>  <!-- blanked 2010-11-12 -->
   <string id="31130"/>  <!-- blanked 2010-11-12 -->
-  
+
   <string id="31131"/> <!-- blanked 2010-12-23 -->
   <string id="31132">Viðbót fyrir lagatexta</string>
   <string id="31133">Viðbót fyrir þýðingartexta</string>
   <string id="31300">Núverandi hiti</string>
   <string id="31301">Síðast uppfært</string>
   <string id="31302">Valmynd</string>
-  <string id="31303"/>
+  <string id="31303">Gagnaveita</string>
   <string id="31304">Mynd</string>
   <string id="31305">Enginn diskur með myndefni fannst</string>
   <string id="31306">Ýta út</string>
   <string id="31328">Nýlega bætt við</string>
   <string id="31329">[B]Tímamælir virkur![/B] [COLOR=grey2] - Sjálfvirkt Slökkt eftir[/COLOR]</string>
   <string id="31330">Smelltu á takka til að spila[CR][CR]Kvikmyndasýnishorn</string>
+  <string id="31331">Hljómplötuupplýsingar</string>
 
   <!-- Video and Music OSD Labels  -->
   <string id="31351">Bið</string>
   <string id="31408">[B]BREYTA VIÐBÓTUM[/B][CR][CR]Breyttu uppsettum viðbótum · Leitaðu að og settu upp viðbætur frá xbmc.org[CR]Breyta stillingum viðbóta</string>
 
   <string id="31421">Veldu XBMC notanda[CR]til að skrá þig inn og halda áfram</string>
+
+  <!-- Weather plugin -->
+  <string id="31900">Veðurkort</string>
+  <string id="31901">36 klst veðurspá</string>
+  <string id="31902">Klukkustunda veðurspá</string>
+  <string id="31903">Veðurspá helgarinnar</string>
+  <string id="31904">10 daga veðurspá</string>
+  <string id="31905">Veðurspá</string>
+  <string id="31906">Kort og Myndbönd</string>
+  <string id="31907">Myndbandaveðurspá [COLOR=grey2](Spila á öllum skjánum)[/COLOR]</string>
+  <string id="31908">Líkur á úrkomu</string>
+  <string id="31909">Næ í veðurspá...</string>
 </strings>
index 7890bb1..b332310 100644 (file)
@@ -1,4 +1,7 @@
 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
+<!--Translator: Gulp-->
+<!--Email: http://forum.xbmc.org/member.php?u=42290-->
+<!--Based on English 72696c450cb789e240194a0595bed6e291e3a158 (14.11.2011)-->
 <strings>
   <!-- Misc labels -->
   <string id="31000">Cambia il tuo</string>
@@ -6,9 +9,10 @@
   <string id="31002">Odio</string>
   <string id="31003">Impostazioni Avanzate</string>
   <string id="31004">Sto lavorando...</string>
-  <string id="31005">Nascondi INFO</string>
-
+  <string id="31005">Nascondi informazioni</string>
+  <string id="31006">Vedi Opzioni</string>
   <string id="31007">Plugins</string>
+  <string id="31008">Schermo Intero</string>
 
   <string id="31020">Aggiunti di recente</string>
   <string id="31021">Files - Video</string>
@@ -18,7 +22,7 @@
   <string id="31025">Oggetti</string>
   <string id="31026">Opzioni Varie</string>
   <string id="31027">Località</string>
+
   <!-- View Type labels -->
   <string id="31028">Poster</string>
   <string id="31029">Fanart</string>
@@ -38,6 +42,8 @@
   <string id="31047">Preset Corrente</string>
   <string id="31048">Preset Visualizzazione</string>
   <string id="31049">Orario fine riproduzione</string>
+  <string id="31050">Ordina: Crescente</string>
+  <string id="31051">Ordina: Decrescente</string>
 
 
   <!-- Playlist Editor labels -->
   <string id="31059">Playlist Corrente </string>
   <string id="31060">Questo file è stato accorpato, scegli la parte da cui vuoi iniziare.</string>
   <string id="31061">Correntemente Selezionato</string>
-  
+
   <!-- Skin Settings labels -->
   <string id="31100"></string>
   <string id="31101">Opzioni pagina principale</string>
   <string id="31102">Sfondo</string>
   <string id="31103">Mostra "In pausa" durante la visualizzazione delle immagini</string>
   <string id="31104">Riproduci i trailer in finestra [COLOR=grey3](Solo nel pannello informazioni video)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31105">Il pulsante "Video" porta sempre ai "files" video</string>
   <string id="31106">Opzioni Varie</string>
-  <string id="31107"></string>
+  <string id="31107">Nascondi la spunta letto dai nomi dei file video [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
   <string id="31108">Nascondi i bottoni del menù principale</string>
   <string id="31109">Sfondi per le sezioni principali</string>
   <string id="31110">Modifica lo Sfondo per la Sezione</string>
   <string id="31115">Personalizzazione</string>
   <string id="31116"></string>
   <string id="31117">Mostra i Video Aggiunti di Recente</string>
-  <string id="31118">Sottomenu Pagina Principale</string>
-  <string id="31119"></string>
+  <string id="31118">Sottomenù Pagina Principale</string>
+  <string id="31119">Nascondi i Fanart sullo sfondo</string>
   <string id="31120">ETICHETTA BOTTONE</string>
-  <string id="31121"></string>
+  <string id="31121"></string>  <!-- blanked 2010-11-12 -->
   <string id="31122">Pagina Meteo</string>
   <string id="31123">Usa i "Posters" invece dei "Banners" per le Serie Tv</string>
   <string id="31124">Mostra nello Sfondo il nome del Video "In Riproduzione" </string>
   <string id="31125">Mostra nello Sfondo Visualizzazioni il nome del file "In Riproduzione"</string>
 
-  <string id="31126"></string>
-  <string id="31127"></string>
+  <string id="31126">Riproduci le sigle TV (sonore) nell'archivio video (add-on TvTunes)</string>
+  <string id="31127">TvTunes</string>
   <string id="31128">XBMC Testi Canzoni</string>
-  <string id="31129"></string>
-  <string id="31130"></string>
+  <string id="31129"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31130"></string>  <!-- blanked 2010-11-12 -->
+
+<string id="31131"></string> <!-- blanked 2010-12-23 -->
+  <string id="31132">Add-on Testi</string>
+  <string id="31133">Add-on Sottotitoli</string>
+  <string id="31134">Sottomenù Home Page Video</string>
+  <string id="31135">Sottomenù Home Page Musica</string>
+  <string id="31136">Sottomenù Home Page Immagini</string>
 
   <string id="31140">OSD Musica</string>
   <string id="31141">OSD Video</string>
   <string id="31204">Sezione Links</string>
   <string id="31205">Sorgente Testi</string>
 
-  <!-- The Weather Channel Script labels -->
-  <string id="31250">Radar &amp; Pevisioni</string>
-  <string id="31251">Previsioni</string>
-  <string id="31252">TWC Script</string>
-
   <!-- Extra labels -->
   <string id="31300">Temperatura Corrente</string>
   <string id="31301">Ultimo Aggiornamento</string>
-  <string id="31302">Menu</string>
-  <string id="31303"></string>
+  <string id="31302">Menù</string>
+  <string id="31303">Fornitore dei dati</string>
   <string id="31304">Immagini</string>
   <string id="31305">Nessun Disco Rilevato</string>
   <string id="31306">Espelli</string>
   <string id="31328">Aggiunti di Recente</string>
   <string id="31329">[B]Timer Impostato![/B] [COLOR=grey2] - Il Sistema Verrà Spento in[/COLOR]</string>
   <string id="31330">Premi il bottone per riprodurre [CR][CR]il trailer del Film</string>
+  <string id="31331">Dettagli Album</string>
 
   <!-- Video and Music OSD Labels  -->
   <string id="31351">Pausa</string>
   <string id="31352">Stop</string>
   <string id="31353">Avanti Veloce</string>
   <string id="31354">Indietro</string>
-  <string id="31355">Menu Filmato</string>
+  <string id="31355">Menù Filmato</string>
   <string id="31356">Scarica Sottotitoli</string>
   <string id="31357"></string>
 
+  <!-- Skin Fontsets -->
+  <string id="31390">Predefinito della Skin</string>
+  <string id="31391">Predefinito della Skin senza maiuscole</string>
+  <string id="31392">Basato su Arial</string>
+
   <!-- Description Labels  -->
   <string id="31400">[B]CONFIGURA LE IMPOSTAZIONI PER L'ASPETTO[/B][CR][CR]Cambia la skin · Imposta Lingua e Regione · Cambia le impostazioni di elenco dei file[CR]Imposta uno screensaver</string>
   <string id="31401">[B]CONFIGURA IMPOSTAZIONI VIDEO[/B][CR][CR]Gestisci la tua Libreria Video · Imposta le impostazioni di riproduzione dei video · Cambia impostazioni per le liste video[CR]Imposta il fonts dei sottotitoli</string>
   <string id="31405">[B]CONFIGURA IMPOSTAZIONI DI RETE[/B][CR][CR]Imposta il controllo di XBMC via UPnP e HTTP · Configura le opzioni di condivisione[CR]Imposta le opzioni di accesso ad Internet</string>
   <string id="31406">[B]CONFIGURA IMPOSTAZIONI DI SISTEMA[/B][CR][CR]Imposta e calibra il video · Configura l'uscita Audio · Imposta i controlli remoti[CR]Imposta le ozioni di risparmio energetico · Abilita il Debug · Imposta il master lock</string>
   <string id="31407">[B]CONFIGURA IMPOSTAZIONI SKIN[/B][CR][CR]Configura la skin Confluence · Aggiungi o rimuovi oggetti dalla pagina principale[CR]Cambia gli sfondi</string> <string id="31408">[B]CONFIGURA GLI ADD-ONS[/B][CR][CR]Gestisci i tuoi Add-ons installati · Cerca ed installa gli Add-ons da xbmc.org[CR]Modifica le impostazioni degli Add-ons</string>
+  <string id="31408">[B]CONFIGURA GLI ADD-ONS[/B][CR][CR]Gestisci gli Add-ons installati · Esplora e installa gli Add-ons da xbmc.org[CR]Modifica le impostazioni degli Add-ons</string>
 
   <string id="31421">Scegli il tuo profilo utente di XBMC[CR]per fare il login e continuare</string>
+
+  <!-- Weather plugin -->
+  <string id="31900">Mappa Meteo</string>
+  <string id="31901">Previsioni a 36 Ore</string>
+  <string id="31902">Previsioni Orarie</string>
+  <string id="31903">Previsioni per il Weekend</string>
+  <string id="31904">Previsioni a 10 giorni</string>
+  <string id="31905">Previsioni</string>
+  <string id="31906">Mappe &amp; Video</string>
+  <string id="31907">Previsioni Video [COLOR=grey2](Riproduzione a schermo intero)[/COLOR]</string>
+  <string id="31908">Percentuale di precipitazioni</string>
+  <string id="31909">Recuper informazioni previsioni...</string>
+
 </strings>
index 1b3a1d5..b0c3f43 100644 (file)
@@ -1,17 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--Language file translated with Team XBMC Translator-->
-<!--Translator: airplanez-->
-<!--Email: airplanez@gmail.com-->
-<!--Date of translation: 12/28/2010-->
-<!--$Revision$-->
 <strings>
+  <!-- Misc labels -->
   <string id="31000">변경</string>
   <string id="31001">좋아함</string>
   <string id="31002">싫어함</string>
   <string id="31003">전원 옵션</string>
   <string id="31004">동작중...</string>
   <string id="31005">정보 숨기기</string>
+  <string id="31006">보기 옵션</string>
   <string id="31007">플러그인</string>
+  <string id="31008">전체화면</string>
+
   <string id="31020">최근 추가됨</string>
   <string id="31021">비디오 - 파일</string>
   <string id="31022">음악 - 파일</string>
   <string id="31025">항목</string>
   <string id="31026">기타 옵션</string>
   <string id="31027">위치</string>
+  <!-- View Type labels -->
   <string id="31028">포스터 나열</string>
   <string id="31029">팬아트</string>
   <string id="31030">전체 목록</string>
   <string id="31031">사진 미리보기</string>
   <string id="31032">이미지 나열</string>
   <string id="31033">정보</string>
+
+  <!-- Extra labels -->
   <string id="31040">지금 재생중</string>
+
   <string id="31042">재생중</string>
   <string id="31043">일시중지됨</string>
   <string id="31044">빨리 감기</string>
   <string id="31047">현재 사전설정</string>
   <string id="31048">시각화 사전설정</string>
   <string id="31049">종료 시간</string>
+  <string id="31050">정렬: 오름차순</string>
+  <string id="31051">정렬: 내림차순</string>
+
+
+  <!-- Playlist Editor labels -->
   <string id="31055">재생목록 열기</string>
   <string id="31056">재생목록 저장</string>
   <string id="31057">재생목록 닫기</string>
   <string id="31059">현재 재생목록</string>
   <string id="31060">이 파일은 연결되었습니다, 재생하고 싶은 부분을 선택하세요.</string>
   <string id="31061">현재 선택됨</string>
-  <string id="31100">
-  </string>
+  
+  <!-- Skin Settings labels -->
+  <string id="31100"></string>
   <string id="31101">홈 화면 옵션</string>
   <string id="31102">배경</string>
   <string id="31103">사진 슬라이드쇼에 "일시중지됨" 보이기</string>
   <string id="31104">윈도우에 예고편 재생 [COLOR=grey3](비디오 정보 대화창만)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31105">"비디오" 버튼은 항상 비디오 "파일"로 이동</string>
   <string id="31106">기타 옵션</string>
   <string id="31107">비디오 파일명에서 읽은 플래그 숨기기 [COLOR=grey3](블루레이, HD-DVD)[/COLOR]</string>
   <string id="31108">메인 메뉴 버튼 숨기기</string>
   <string id="31113">단일 이미지</string>
   <string id="31114">다중 이미지</string>
   <string id="31115">사용자 지정</string>
+  <string id="31116"></string>
   <string id="31117">최근 추가된 비디오 보이기</string>
   <string id="31118">홈 페이지 프로그램 하위메뉴</string>
+  <string id="31119">배경 팬아트 숨기기</string>
   <string id="31120">버튼 라벨</string>
+  <string id="31121"></string>  <!-- blanked 2010-11-12 -->
   <string id="31122">날씨 페이지</string>
   <string id="31123">TV 쇼에 "배너" 대신 "포스터" 사용</string>
-  <string id="31124">비디오 배경에 "지금 재생중" 보이기</string>
-  <string id="31125">시각화 배경에 "지금 재생중" 보이기</string>
+  <string id="31124">배경에 "지금 재생중" 비디오 보이기</string>
+  <string id="31125">배경에 "지금 재생중" 시각화 보이기</string>
+
+  <string id="31126">라이브러리 모드에서 TV 주제음악 재생 (TvTunes 추가기능)</string>
+  <string id="31127">TvTunes</string>
   <string id="31128">가사</string>
+  <string id="31129"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31130"></string>  <!-- blanked 2010-11-12 -->
+  
+  <string id="31131"></string> <!-- blanked 2010-12-23 -->
   <string id="31132">가사 추가기능</string>
   <string id="31133">자막 추가기능</string>
   <string id="31134">홈 페이지 비디오 하위메뉴</string>
   <string id="31135">홈 페이지 음악 하위메뉴</string>
   <string id="31136">홈 페이지 사진 하위메뉴</string>
+
   <string id="31140">음악 OSD</string>
   <string id="31141">비디오 OSD</string>
+
+  <!-- Script labels -->
   <string id="31200">바로가기</string>
   <string id="31201">카테고리</string>
   <string id="31202">배역 보이기</string>
   <string id="31203">노래 선택</string>
   <string id="31204">섹션 링크</string>
   <string id="31205">가사 소스</string>
+
+  <!-- Extra labels -->
   <string id="31300">현재 온도</string>
   <string id="31301">마지막 업데이트</string>
   <string id="31302">메뉴</string>
-  <string id="31303">
-  </string>
+  <string id="31303">날씨 정보 제공</string>
   <string id="31304">사진</string>
   <string id="31305">디스크 미디어 감지되지 않음</string>
   <string id="31306">꺼내기</string>
   <string id="31313">자료수집기를 선택하세요</string>
   <string id="31314">컨텐츠 검색 옵션</string>
   <string id="31315">기본</string>
-  <string id="31316">
-  </string>
+  <string id="31316"></string>
   <string id="31317">팬아트 경로 설정</string>
   <string id="31318">작은 팬아트</string>
   <string id="31319">선택된 프로파일</string>
   <string id="31328">최근 추가됨</string>
   <string id="31329">[B]타이머 설정![/B] [COLOR=grey2] - 시스템 자동 종료[/COLOR]</string>
   <string id="31330">영화 예고편을[CR][CR]재생하려면 누르세요</string>
-  <string id="31351">일시중지</string>
-  <string id="31352">중지</string>
+  <string id="31331">앨범 정보</string>
+
+  <!-- Video and Music OSD Labels  -->
+  <string id="31351">일시정지</string>
+  <string id="31352">정지</string>
   <string id="31353">빨리 감기</string>
   <string id="31354">되감기</string>
   <string id="31355">영화 메뉴</string>
   <string id="31356">자막 다운로드</string>
+  <string id="31357"></string>
+
+  <!-- Skin Fontsets -->
   <string id="31390">스킨 기본값</string>
   <string id="31391">대문자 없는 스킨 기본값</string>
   <string id="31392">Arial 기본값</string>
+
+  <!-- Description Labels  -->
   <string id="31400">[B]모양새 설정[/B][CR][CR]스킨 변경 · 언어 및 지역 설정 · 파일 목록 옵션 변경[CR]화면보호기 설정</string>
   <string id="31401">[B]비디오 설정[/B][CR][CR]비디오 라이브러리 관리 · 비디오 재생 옵션 변경 · 비디오 목록 옵션 변경[CR]자막 글꼴 설정</string>
   <string id="31402">[B]음악 설정[/B][CR][CR]음악 라이브러리 관리 · 음악 재생 옵션 변경 · 음악 목록 옵션 변경[CR]노래 전송 설정 · 노래방 옵션 설정</string>
   <string id="31406">[B]시스템 설정[/B][CR][CR]화면 설정 및 조정 · 오디오 출력 설정 · 원격 제어 설정[CR]전원 절약 옵션 설정 · 디버깅 사용 · 마스터 잠금 설정</string>
   <string id="31407">[B]스킨 설정[/B][CR][CR]Confluence 스킨 설정 · 홈 메뉴 항목 추가 및 제거[CR]스킨 배경 변경</string>
   <string id="31408">[B]추가기능 설정[/B][CR][CR]설치된 추가기능 관리 · xbmc.org 에서 추가기능 찾기 및 설치[CR]추가기능 설정 변경</string>
+
   <string id="31421">로그인할 XBMC 사용자 프로파일을[CR]선택하고 계속하세요</string>
-</strings>
+
+  <!-- Weather plugin -->
+  <string id="31900">기상도</string>
+  <string id="31901">36 시간 예보</string>
+  <string id="31902">시간대별 예보</string>
+  <string id="31903">주말 예보</string>
+  <string id="31904">10 일 예보</string>
+  <string id="31905">예보</string>
+  <string id="31906">지도와 비디오</string>
+  <string id="31907">비디오예보 [COLOR=grey2](전체화면 재생)[/COLOR]</string>
+  <string id="31908">강수확률</string>
+  <string id="31909">날씨 정보를 가져오는 중...</string>
+
+  </strings>
diff --git a/addons/skin.confluence/language/Lithuanian/strings.xml b/addons/skin.confluence/language/Lithuanian/strings.xml
new file mode 100644 (file)
index 0000000..2920d19
--- /dev/null
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--Translator: Artūras Griškonis (ArtX38)-->
+<!--Email: info@xbmc.lt-->
+<!--Date of translation: 22/06/2011-->
+<!--Based on english strings version 283c0ee1becdac1849562a5e73cbc41dfa289ef8-->
+<strings>
+  <!-- Misc labels -->
+  <string id="31000">Keičiami</string>
+  <string id="31001">Patinka</string>
+  <string id="31002">Nepatinka</string>
+  <string id="31003">Energijos nustatymai</string>
+  <string id="31004">Veikia...</string>
+  <string id="31005">Paslėpti Informaciją</string>
+  <string id="31006">Rodinio parinktys</string>
+  <string id="31007">Pridėtis</string>
+  <string id="31008">Per visą ekraną</string>
+
+  <string id="31020">Neseniai Pridėti</string>
+  <string id="31021">Video - Failai</string>
+  <string id="31022">Muzikos - Failai</string>
+  <string id="31023">Atkūrimas</string>
+  <string id="31024">Puslapis</string>
+  <string id="31025">Elementai</string>
+  <string id="31026">Kitos Opcijos</string>
+  <string id="31027">Vietovė</string>
+
+  <!-- View Type labels -->
+  <string id="31028">Posterių Karuselė</string>
+  <string id="31029">Fanart</string>
+  <string id="31030">Pilnas sąrašas</string>
+  <string id="31031">Miniatiūros</string>
+  <string id="31032">Paveikslėliai žemai</string>
+  <string id="31033">Informacija</string>
+
+  <!-- Extra labels -->
+  <string id="31040">Aktualus failas</string>
+
+  <string id="31042">RODOMA</string>
+  <string id="31043">PAUZĖ</string>
+  <string id="31044">PRASUKTI PIRMYN</string>
+  <string id="31045">PRASUKTI ATGAL</string>
+  <string id="31046">Garso Savybės</string>
+  <string id="31047">Aktualūs Nustatymai</string>
+  <string id="31048">Vizualizacijos Parinktys</string>
+  <string id="31049">Pabaigos Laikas</string>
+  <string id="31050">Ruš.: Didėjimo tvarka</string>
+  <string id="31051">Ruš.: Mažėjimo tvarka</string>
+
+
+  <!-- Playlist Editor labels -->
+  <string id="31055">Atidaryti grojaraštį</string>
+  <string id="31056">Įšsaugoti grojaraštį</string>
+  <string id="31057">Uždaryti grojaraštį</string>
+  <string id="31058">Sisteminiai audio failai</string>
+  <string id="31059">Aktualus grojaraštis</string>
+  <string id="31060">Šie failai yra sugrupuoti, pasirinkite dalį katrą norite atkurti.</string>
+  <string id="31061">Dabartinis Pasirinkimas</string>
+
+  <!-- Skin Settings labels -->
+  <string id="31100"></string>
+  <string id="31101">Pagrindinio ekrano nustatymai</string>
+  <string id="31102">Fonas</string>
+  <string id="31103">Rodyti "Pauzė" prezentacijos režime</string>
+  <string id="31104">Rodyti treilerį lange [COLOR=red](Tik dėl informacijos apie video dialogą)[/COLOR]</string>
+  <string id="31105">Rodyti pavadinimus foniniame nuskaityme</string>
+  <string id="31106">Įvairios opcijos</string>
+  <string id="31107">Paslėpti nuorodas iš skaitomo failo [COLOR=red](Blu-ray, HD-DVD)[/COLOR]</string>
+  <string id="31108">Slėpti  Pagrindinio Menių Nuorodas</string>
+  <string id="31109">Pagrindinio menių fonas</string>
+  <string id="31110">Pakeisti pagrindinio ekrano foną</string>
+  <string id="31111">Paslėpti</string>
+  <string id="31112">Nustatymai</string>
+  <string id="31113">Vienas Vaizdas</string>
+  <string id="31114">Daug Vaizdų</string>
+  <string id="31115">Nustatymai</string>
+  <string id="31116">Prid. skriptai</string>
+  <string id="31117">Rodyti Neseniai Patalpintus Video</string>
+  <string id="31118">Pagrindinio Ekrano Submeniu</string>
+  <string id="31119">Slėpti Fanart informaciją</string>
+  <string id="31120">MYGTUKO PAVADINIMAS</string>
+  <string id="31121"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31122">Orų Puslapis</string>
+  <string id="31123">Naudoti "Posterius" vietoi "Banerių" serialams</string>
+  <string id="31124">Rodyti foninį "Atkuriamasis" Video</string>
+  <string id="31125">Rodyti foninį "Atkuriamasis" Vizualizacija</string>
+
+  <string id="31126">Ijungti Dainų Tekstai OSD</string>
+  <string id="31127">KELIAS IKI LYRICS PRIEDŲ</string>
+  <string id="31128">Dainų Tekstai</string>
+  <string id="31129">Įjungti Subtitrus Atsiųstus dėl Video OSD</string>
+  <string id="31130">KELIAS IKI SUBTITRŲ PRIEDŲ</string>
+  <string id="31131">Naudoti Horizantalų Pagrindinį Menių</string>
+  <string id="31132">Dainų Tekstų Priedas</string>
+  <string id="31133">Subtitrų Priedas</string>
+  <string id="31134">Pagrindinio puslapio Video Submeniu</string>
+  <string id="31135">Pagrindinio puslapio Muzikos Submeniu</string>
+  <string id="31136">Pagrindinio puslapio Paveikslėlių Submeniu</string>
+
+  <string id="31140">Muzika OSD</string>
+  <string id="31141">Video OSD</string>
+
+  <!-- Script labels -->
+  <string id="31200">Etiketės</string>
+  <string id="31201">Kategorijos</string>
+  <string id="31202">Rodyti Vaidmenis</string>
+  <string id="31203">Išsirinkti Jūsų Dainą</string>
+  <string id="31204">Nuorodų Kategorija</string>
+  <string id="31205">Dainų Tekstų Šaltinis</string>
+
+  <!-- Extra labels -->
+  <string id="31300">Dabartinė Temperatūra</string>
+  <string id="31301">Paskutiniai Atnaujinimai</string>
+  <string id="31302">Meniu</string>
+  <string id="31303"></string>
+  <string id="31304">Vaizdas</string>
+  <string id="31305">Nėra Disko</string>
+  <string id="31306">Išimti</string>
+  <string id="31307">Paslėpti Fanart</string>
+  <string id="31308">Daugiau apie Filmą</string>
+  <string id="31309">Išnaudota Atminties:</string>
+  <string id="31310">Takelio Num.:</string>
+  <string id="31311">FANART[CR][CR]NEPASIEKIAMAS[CR][CR] PASPAUSTI, KAD PASIRINKTI</string>
+  <string id="31312">Aktualus Skreperis</string>
+  <string id="31313">Pasirinkti Skreperį</string>
+  <string id="31314">Nuskaitomo Turinio Parinktys</string>
+  <string id="31315">Bazinis(ė/iai)</string>
+  <string id="31316"></string>
+  <string id="31317">Nurodyti Kelią iki Fanart</string>
+  <string id="31318">Mažas Fanart</string>
+  <string id="31319">Pasirinktas Profilis</string>
+  <string id="31320">Paskutinis Įėjimas</string>
+  <string id="31321">Karaoke Dainos Pasirinkimas</string>
+  <string id="31322">Rodomas</string>
+  <string id="31323">Nauji Filmai</string>
+  <string id="31324">Nauji Epizodai</string>
+  <string id="31325">Sąrašo Opcijos</string>
+  <string id="31326">Sukurta</string>
+  <string id="31327">Leidimas</string>
+  <string id="31328">Neseniai Dadėta</string>
+  <string id="31329">[B]NUSTATYTAS LAIKRODIS![/B] [COLOR=red] - AUTOMATIŠKAI ATSIJUNGS PO[/COLOR]</string>
+  <string id="31330">Spustelėkite norėdami atkūrti[CR][CR]Video treilerį</string>
+  <string id="31331">Albumai Detaliau</string>
+
+  <!-- Video and Music OSD Labels  -->
+  <string id="31351">Pauzė</string>
+  <string id="31352">Stop</string>
+  <string id="31353">Prasukimas Pirmyn</string>
+  <string id="31354">Prasukimas Atgal</string>
+  <string id="31355">Filmo Menių</string>
+  <string id="31356">Atsisiųsti Subtitrus</string>
+  <string id="31357"></string>
+
+  <!-- Skin Fontsets -->
+  <string id="31390">Pagal nutylėjimą šablonui</string>
+  <string id="31391">Pagal nutylėjimą šablonui be Kaps</string>
+  <string id="31392">Arial Pagrindu</string>
+
+  <!-- Description Labels  -->
+  <string id="31400">[B][COLOR=blue]IŠVAIZDOS PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Pakeisti išvaizdą · Nustatyti kalbą ir regioną[CR]Pakeisti failų sarašą · Nustatyti ekrano vaizdą.[/COLOR]</string>
+  <string id="31401">[B][COLOR=blue]VIDEO PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Tvarkyti video biblioteką · Nustatyti video atkūrimo opcijas.[CR]Nustatyti video sarašą · Nustatyti subtitrų šriftą.[/COLOR]</string>
+  <string id="31402">[B][COLOR=blue]MUZIKOS PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Tvarkyti audio biblioteką· Nustatyti audio atkūrimo opcijas.[CR]Nustatyti audio sarašą · Nustatyti audio pridėjimą · Nustatyti karaoke.[/COLOR]</string>
+  <string id="31403">[B][COLOR=blue]PAVEIKSLŲ PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Tvarkyti nuotraukų biblioteką · Nustatyti pristatymą · Nustatyti prezentaciją.[/COLOR]</string>
+  <string id="31404">[B][COLOR=blue]ORŲ PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Nustatyti trys Miestus gauti informacijai apie orus.[/COLOR]</string>
+  <string id="31405">[B][COLOR=blue]TINKLO PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Nustatyti XBMC valdymą  per UPnP ir HTTP · Nustatyti failų apsikeitimą.[CR]Nustatyi prieigą prie interneto.[/COLOR]</string>
+  <string id="31406">[B][COLOR=blue]SISTEMOS PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Nustatyti ekrano kalibravimą · Nustatyti audio išėjimą · Nustatyti distancinį pultą.[CR]Nustatyti energijos sąnaudas · Nustatyti derinimą · Nustatyti blokavimą.[/COLOR]</string>
+  <string id="31407">[B][COLOR=blue]ŠABLONŲ PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Nustatyti pasirinktą šabloną. Pakeisti šablono foną.[CR]Pridėti ir (arba) pašalinti pagrindinius menių punktus.[/COLOR]</string>
+  <string id="31408">[B][COLOR=blue]PRIEDŲ PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR][COLOR=red]Nustatyti parametrų valdymą · Nustatymų diegimą iš xbmc.org[CR]Nustatyti priedų pakeitimą.[/COLOR]</string>
+
+  <string id="31421">Pasirinkite XBMC vartotojo profilį[CR]įeiti į sistemą ir tęsti.</string>
+
+  <!-- Weather plugin -->
+  <string id="31900">Orų Žemėlapiai</string>
+  <string id="31901">36 Valandų Prognozė</string>
+  <string id="31902">Valandinė Prognozė</string>
+  <string id="31903">Savaitgalio Prognozė</string>
+  <string id="31904">10 Dienų Prognozė</string>
+  <string id="31905">Prognozė</string>
+  <string id="31906">Žemėlapiai ir Video</string>
+  <string id="31907">Video Prognozė [COLOR=grey2](Pilnaekranis Atkūrimas)[/COLOR]</string>
+  <string id="31908">Kritulių Tikimybė</string>
+  <string id="31909">Parsiunčiama Prognozės Informacija...</string>
+
+</strings>
index e6cf297..59fa979 100644 (file)
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: Rafał Wójcik-->
-<!--Email: rafal.wojcik@gmail.com\8b-->
-<!--Date of translation: 10/23/2010-->
+<!--Email: rafal.wojcik@gmail.com-->
+<!--Date of translation: 12/25/2011-->
 <!--$Revision$-->
 <strings>
   <string id="31000">Zmień</string>
@@ -11,7 +11,9 @@
   <string id="31003">Opcje zasilania</string>
   <string id="31004">Pracuję...</string>
   <string id="31005">Ukryj info</string>
+  <string id="31006">Zobacz opcje</string>
   <string id="31007">Wtyczki</string>
+  <string id="31008">Pełny ekran</string>
   <string id="31020">Ostatnio dodane</string>
   <string id="31021">Wideo - pliki</string>
   <string id="31022">Muzyka - pliki</string>
@@ -35,6 +37,8 @@
   <string id="31047">Obecny efekt</string>
   <string id="31048">Efekty wizualizacji</string>
   <string id="31049">Koniec o godzinie</string>
+  <string id="31050">Sortuj: rosnąco</string>
+  <string id="31051">Sortuj: malejąco</string>
   <string id="31055">Otwórz playlistę</string>
   <string id="31056">Zapisz playlistę</string>
   <string id="31057">Zamknij playlistę</string>
@@ -46,9 +50,9 @@
   <string id="31102">Tło</string>
   <string id="31103">Wyświetlaj "Pauza" podczas pokazu slajdów</string>
   <string id="31104">Odtwarzaj zwiastuny w oknie [COLOR=grey3](tylko w oknie Informacje o wideo)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31105">Przycisk "wideo" przenosi zawsze do plików wideo</string>
   <string id="31106">Różne opcje</string>
-  <string id="31107">Ukryj ikony właściwości wideo czytane z nazw plików [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
+  <string id="31107">Ukryj ikony właściwości wideo z nazw plików [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
   <string id="31108">Ukryj przyciski głównego menu</string>
   <string id="31109">Tła ekranu głównego</string>
   <string id="31110">Edytuj tło dla</string>
   <string id="31114">Wiele obrazów</string>
   <string id="31115">Modyfikacja</string>
   <string id="31117">Pokazuj ostatnio dodane wideo</string>
-  <string id="31118">Podmenu programów na stronie głównej</string>
-  <string id="31119"></string>
+  <string id="31118">Podmenu programów Ekranu głównego</string>
+  <string id="31119">Ukryj tło fanartu</string>
   <string id="31120">ETYKIETA PRZYCISKU</string>
-  <string id="31121"></string>
+  <string id="31121">
+  </string>
   <string id="31122">Strona pogody</string>
   <string id="31123">Użyj plakatów zamiast banerów dla seriali</string>
   <string id="31124">Pokazuj aktualnie odtwarzane wideo jako tło</string>
   <string id="31125">Pokazuj aktualną wizualizację jako tło</string>
-  <string id="31126"></string>
-  <string id="31127"></string>
+  <string id="31126">Odtwarzaj motyw TV w bibliotece wideo (wtyczka TvTunes)</string>
+  <string id="31127">
+  </string>
   <string id="31128">Teksty piosenek</string>
-  <string id="31129"></string>
-  <string id="31130"></string>
-  <string id="31131"></string>
+  <string id="31129">
+  </string>
+  <string id="31130">
+  </string>
+  <string id="31131">
+  </string>
+  <string id="31132">Wtyczka Teksty piosenek</string>
+  <string id="31133">Wtyczka Napisy do filmów</string>
+  <string id="31134">Podmenu wideo Ekranu głównego</string>
+  <string id="31135">Podmenu muzyki Ekranu głównego</string>
+  <string id="31136">Podmenu zdjęć Ekranu głównego</string>
   <string id="31140">Muzyka - OSD</string>
   <string id="31141">Wideo - OSD</string>
   <string id="31200">Skróty</string>
@@ -83,6 +97,7 @@
   <string id="31300">Temperatura</string>
   <string id="31301">Ostatnia aktualizacja</string>
   <string id="31302">Menu</string>
+  <string id="31303">Dostawca danych</string>
   <string id="31304">Zdjęcia</string>
   <string id="31305">Nie wykryto płyty</string>
   <string id="31306">Wysuń</string>
   <string id="31308">Szczegóły o filmie</string>
   <string id="31309">Używana pamięć:</string>
   <string id="31310">Numer ścieżki</string>
-  <string id="31311">OBRAZ FANART[CR][CR]NIEDOSTĘPNY[CR][CR] KLIKNIJ PRZYCISK, ABY DODAĆ</string>
+  <string id="31311">Fanart[CR][CR]niedostępny[CR][CR] Kliknij przycisk, aby dodać</string>
   <string id="31312">Bieżący scraper</string>
   <string id="31313">Wybierz scraper</string>
   <string id="31314">Opcje skanowania zawartości</string>
   <string id="31328">Ostatnio dodane</string>
   <string id="31329">[B]Timer ustawiony![/B] [COLOR=grey2] - Wyłączenie systemu za[/COLOR]</string>
   <string id="31330">Kliknij przycisk, aby[CR][CR]odtworzyć zwiastun</string>
+  <string id="31331">Sczegóły albumu</string>
   <string id="31351">Pauza</string>
   <string id="31352">Stop</string>
   <string id="31353">Przewiń</string>
   <string id="31407">[B]KONFIGURUJ USTAWIENIA SKÓRY[/B][CR][CR]Ustawienia skóry · Pozycje menu głównego[CR]Tła skóry</string>
   <string id="31408">[B]KONFIGURUJ USTAWIENIA WTYCZEK[/B][CR][CR]Zarządzaj wtyczkami · Przeglądaj i instaluj wtyczki[CR]Ustawienia wtyczek</string>
   <string id="31421">Wybierz profil użytkownika</string>
+  <string id="31900">Mapy pogody</string>
+  <string id="31901">Pogoda na 36 godzin</string>
+  <string id="31902">Pogoda godzinna</string>
+  <string id="31903">Pogoda weekendowa</string>
+  <string id="31904">Pogoda na 10 dni</string>
+  <string id="31905">Pogoda</string>
+  <string id="31906">Mapy i wideo</string>
+  <string id="31907">Pogoda wideo [COLOR=grey2](na pełnym ekranie)[/COLOR]</string>
+  <string id="31908">Możliwość opadów</string>
+  <string id="31909">Prognozuję pogodę...</string>
 </strings>
\ No newline at end of file
index 74b2cfa..baf62a5 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--Language file translated with Team XBMC Translator[wm]-->
 <!--File for addons/skin.confluence/language/Portuguese (Brazil)/ -->
-<!--Translator: bugre (wm), Fabiano Santiago (fabianosan) -->
+<!--Translator: bugre (wm), Fabiano Santiago (fabianosan), wcampos -->
 <!--Email: wxxx333-nospam-at-gmail.com, fabianosan@hotmail.com -->
-<!--Date of translation: 11/23/2009-->
-<!--Updated on 15/11/2010 bugre -->
+<!--Date of translation: 03/03/2012-->
+<!--Updated on 03/03/2012 wcampos -->
 <!--$Revision$-->
 <!--Based on english strings version 35254 -->
 <strings>
@@ -15,6 +15,8 @@
   <string id="31004">Executando...</string>
   <string id="31005">Esconder INFO</string>
   <string id="31007">Plugins</string>
+  <string id="31008">Tela Cheia</string>
+  
   <string id="31020">Adicionado recentemente</string>
   <string id="31021">Video - Arquivos</string>
   <string id="31022">Música - Arquivos</string>
   <string id="31025">Itens</string>
   <string id="31026">Opções diversas</string>
   <string id="31027">Localização</string>
+  
   <string id="31028">Vitrine</string>
   <string id="31029">Fanart</string>
   <string id="31030">Lista Completa</string>
   <string id="31031">Ícones de imagens</string>
   <string id="31032">Vitrine de Imagens</string>
   <string id="31033">Info</string>
+  
   <string id="31040">Tocando agora</string>
+  
   <string id="31042">TOCANDO</string>
   <string id="31043">PAUSADO</string>
   <string id="31044">AVANÇO RÁPIDO</string>
   <string id="31045">RETROCEDER</string>
   <string id="31046">Propriedades de áudio</string>
-  <string id="31047">Preconfiguração atual</string>
-  <string id="31048">Visualizar pre-configurações</string>
+  <string id="31047">Pré configuração atual</string>
+  <string id="31048">Visualizar pré-configurações</string>
   <string id="31049">Tempo de término</string>
+  <string id="31050">Ordem: Ascendente</string>
+  <string id="31051">Ordem: Descendente</string>
+  
   <string id="31055">Abrir playlist</string>
   <string id="31056">Salvar playlist</string>
   <string id="31057">Fechar playlist</string>
@@ -45,6 +53,7 @@
   <string id="31059">Playlist atual</string>
   <string id="31060">Este arquivo está empilhado, selecione a parte de onde executar.</string>
   <string id="31061">Selecionado</string>
+  
   <string id="31100"></string>
   <string id="31101">Opções da tela principal (home)</string>
   <string id="31102">Fundo</string>
   <string id="31123">Usar "Pôsters" ao invés de "Faixas" para Seriados</string>
   <string id="31124">Exibir fundo Vídeo "Tocando Agora"</string>
   <string id="31125">Exibir fundo Visualização "Tocando Agora"</string>
+  <string id="31126">Reproduzir música tema do seriado na biblioteca de vídeo(TvTunes add-on)</string>
+  <string id="31127">TvTunes</string>
+   
   <string id="31128">Letras</string>
   <string id="31131"></string>
   <string id="31132">Add-on de Letras</string>
   <string id="31133">Add-on de legendas</string>
+  <string id="31134">Home Page Submenu de Videos</string>
+  <string id="31135">Home Page Submenu de Música</string>
+  <string id="31136">Home Page Submenu de Imagens</string>
+  
   <string id="31140">OSD de Música</string>
   <string id="31141">OSD de Video</string>
+  
   <string id="31200">Atalhos</string>
   <string id="31201">Categorias</string>
   <string id="31202">Elenco do Seriado</string>
   <string id="31203">Escolha sua música</string>
   <string id="31204">Seção de Links</string>
   <string id="31205">Origem das Letras</string>
+  
   <string id="31300">Temp. Atual</string>
   <string id="31301">Última atualização</string>
   <string id="31302">Menu</string>
   <string id="31328">Adicionado Recentemente</string>
   <string id="31329">[B]Timer definido![/B] [COLOR=grey2] - Sistema se desligará em[/COLOR]</string>
   <string id="31330">Clique no botão para tocar o[CR][CR]trailer</string>
+  <string id="31331">Detalhes do Álbum</string>
+  
   <string id="31351">Pausar</string>
   <string id="31352">Parar</string>
   <string id="31353">Avançar</string>
   <string id="31355">Menu do Filme</string>
   <string id="31356">Download de Legendas</string>
   <string id="31357"></string>
+  
   <string id="31390">Padrão da skin</string>
   <string id="31391">Padrão da skin sem capslock</string>
   <string id="31392">Baseado em Arial</string>
+  
   <string id="31400">[B]CONFIGURAR AJUSTES DE APARÊNCIA[/B][CR][CR]Mudar o skin · Definir idioma e região · Definir opções de listagem de arquivos · Definir um descanso de tela</string>
   <string id="31401">[B]CONFIGURAR AJUSTES DE VÍDEO[/B][CR][CR]Gerenciar sua coleção de vídeos · Definir opções de execução de vídeo · Alterar opções de listagem de vídeo · Definir fonte para legendas</string>
   <string id="31402">[B]CONFIGURAR AJUSTES DE MÚSICAS[/B][CR][CR]Gerenciar sua coleção de músicas · Definir opções de execução de música · Alterar opções de listagem de música · Configurar submissão de música · Definir opções de karaoke</string>
   <string id="31407">[B]CONFIGURAR AJUSTES DE SKIN[/B][CR][CR]Configurar o skin Confluence · Adicionar e remover itens no menu principal(home) · Alterar fundos do skin</string>
   <string id="31408">[B]CONFIGURAR AJUSTES DE ADD-ONS[/B][CR][CR]Configurar Add-ons existentes · Procurar e instalar novos Add-ons de xbmc.org[CR]Alterar configurações do Add-on</string>
   <string id="31421">Selecione seu Perfil de usuário XBMC[CR]para conectar e continue</string>
+  !-- Weather plugin -->
+  <string id="31900">Mapas - Clima</string>
+  <string id="31901">Previsão 36 Horas</string>
+  <string id="31902">Previsão por hora</string>
+  <string id="31903">Previsão fim de semana</string>
+  <string id="31904">Previsão 10 Dias</string>
+  <string id="31905">Previsão</string>
+  <string id="31906">Mapas &amp; Video</string>
+  <string id="31907">Vídeo da Previsão [COLOR=grey2](Playback em tela cheia)[/COLOR]</string>
+  <string id="31908">Chance de precipitação</string>
+  <string id="31909">Buscando informações da previsão...</string>
+  
 </strings>
\ No newline at end of file
index 1eff937..f126cd5 100644 (file)
@@ -8,8 +8,9 @@
   <string id="31003">Opțiuni de alimentare</string>
   <string id="31004">Procesare...</string>
   <string id="31005">Ascunde detalii</string>
-
+  <string id="31006">Opțiuni vizualizare</string>
   <string id="31007">Module</string>
+  <string id="31008">Pe tot ecranul</string>
 
   <string id="31020">Adăugate recent</string>
   <string id="31021">Fișiere video</string>
@@ -39,6 +40,8 @@
   <string id="31047">Viz. predefinită curentă</string>
   <string id="31048">Vizualizări predefinite</string>
   <string id="31049">Se termină la</string>
+  <string id="31050">Sort.: Ascendent</string>
+  <string id="31051">Sort.: Descendent</string>
 
 
   <!-- Playlist Editor labels -->
   <string id="31101">Opțiuni ecran principal</string>
   <string id="31102">Fundal</string>
   <string id="31103">Arată „În pauză” la prezentare diapozitive</string>
-  <string id="31104">Redă trailere intr-o fereastră [COLOR=grey3](doar în dialogul de informații video)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31104">Redă secvențele intr-o fereastră [COLOR=grey3](doar în dialogul de informații video)[/COLOR]</string>
+  <string id="31105">Butonul „Video” duce întotdeauna către „Fișiere” video</string>
   <string id="31106">Opțiuni diverse</string>
-  <string id="31107">Ascunde marcare citit în nume de fișiere video [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
+  <string id="31107">Ascunde marcare citită din numele fișierelor video [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
   <string id="31108">Ascundere butoane meniu principal</string>
   <string id="31109">Fundale media</string>
   <string id="31110">Modificare fundal pentru</string>
   <string id="31115">Personalizator</string>
   <string id="31116"></string>
   <string id="31117">Arată filme și episoade adăugate recent</string>
-  <string id="31118">Submeniu programe pagină inițială</string>
-  <string id="31119"></string>
+  <string id="31118">Submeniu Programe în pagină inițială</string>
+  <string id="31119">Ascunde fundal (Fanart)</string>
   <string id="31120">ETICHETĂ BUTON</string>
   <string id="31121"></string>
   <string id="31122">Pagină meteo</string>
   <string id="31123">Folosește „Afișe” în loc de „Bannere” pentru seriale</string>
   <string id="31124">Arată video „Acum în redare” pe fundal</string>
   <string id="31125">Arată vizualizare „Acum în redare” pe fundal</string>
-  <string id="31126"></string>
-  <string id="31127"></string>
+  <string id="31126">Redă cântece temă TV în mediateca video (supliment TvTunes)</string>
+  <string id="31127">TvTunes</string>
   <string id="31128">Versuri</string>
   <string id="31129"></string>
   <string id="31130"></string>
   <string id="31131"></string>
+  <string id="31132">Supliment versuri</string>
+  <string id="31133">Supliment subtitrări</string>
+  <string id="31134">Submeniu Video în pagina inițială</string>
+  <string id="31135">Submeniu Muzică în pagina inițială</string>
+  <string id="31136">Submeniu Imagini în pagina inițială</string>
 
   <string id="31140">Meniu audio</string>
   <string id="31141">Meniu video</string>
   <string id="31300">Temperatură curentă</string>
   <string id="31301">Ultima actualizare</string>
   <string id="31302">Meniu</string>
-  <string id="31303"></string>
+  <string id="31303">Furnizor informații</string>
   <string id="31304">Imagine</string>
   <string id="31305">Niciun disc media detectat</string>
   <string id="31306">Scoate</string>
   <string id="31326">Creat</string>
   <string id="31327">Rezoluție</string>
   <string id="31328">Adăugate recent</string>
-  <string id="31329">[B]Cronometrul este setat![/B] [COLOR=grey2] - Închidere automată sistem în[/COLOR]</string>
-  <string id="31330">Clic pe buton pentru redare[CR][CR]Trailer film</string>
+  <string id="31329">[B]Planificare închidere activată![/B] [COLOR=grey2] Închidere sistem în[/COLOR]</string>
+  <string id="31330">Clic pe buton pentru redare[CR][CR]secvențe din film (trailer)</string>
+  <string id="31331">Detalii album</string>
 
   <!-- Video and Music OSD Labels  -->
   <string id="31351">Pauză</string>
   <string id="31408">[B]CONFIGURAȚI SUPLIMENTE[/B][CR][CR]Administrați suplimentele instalate · Căutați și instalați suplimente de la xbmc.org[CR]Modificați setări suplimente</string>
 
   <string id="31421">Selectați profilul dumneavoastră de utilizator XBMC[CR]pentru a vă autentifica și a continua</string>
+  
+  <!-- Weather plugin -->
+  <string id="31900">Hărți meteo</string>
+  <string id="31901">Previziune pe 36 de ore</string>
+  <string id="31902">Previziune la o oră</string>
+  <string id="31903">Previziune weekend</string>
+  <string id="31904">Previziune pe 10 zile</string>
+  <string id="31905">Previziune</string>
+  <string id="31906">Hărți și video</string>
+  <string id="31907">Previziune video [COLOR=grey2](Redare pe tot ecranul)[/COLOR]</string>
+  <string id="31908">Șansă de precipitații</string>
+  <string id="31909">Preluare informații previziune...</string>
+
 </strings>
index f5ae4c1..44a1d2a 100644 (file)
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <strings>
-  <!-- Различные обозначения -->
+  <!-- Misc labels -->
   <string id="31000">Измените</string>
-  <string id="31001">Ð\9bÑ\8eбовÑ\8c</string>
-  <string id="31002">Ненависть</string>
-  <string id="31003">Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð\9fитания</string>
-  <string id="31004">РабоÑ\82аеÑ\82...</string>
-  <string id="31005">СпÑ\80Ñ\8fÑ\82аÑ\82Ñ\8c Ð\98Ð\9dФÐ\9e</string>
-
+  <string id="31001">Ð\9dÑ\80авиÑ\82Ñ\81Ñ\8f</string>
+  <string id="31002">Не нравится</string>
+  <string id="31003">Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð¿итания</string>
+  <string id="31004">Ð\9fодождиÑ\82еâ\80¦</string>
+  <string id="31005">Ð\91ез Ñ\81ведений</string>
+  <string id="31006">Настройки просмотра</string>
   <string id="31007">Дополнения</string>
+  <string id="31008">Полный экран</string>
 
-  <string id="31020">Ð\9dедавно Ð\94обавленнÑ\8bе</string>
-  <string id="31021">Видео - Файлы</string>
-  <string id="31022">Музыка - Файлы</string>
+  <string id="31020">Ð\9fоÑ\81ледние</string>
+  <string id="31021">Видео - файлы</string>
+  <string id="31022">Музыка - файлы</string>
   <string id="31023">Воспроизведение</string>
-  <string id="31024">Страница</string>
-  <string id="31025">ЭлеменÑ\82Ñ\8b</string>
-  <string id="31026">Ð\94Ñ\80Ñ\83гие Ð\9eпÑ\86ии</string>
-  <string id="31027">Ð\9cеÑ\81Ñ\82ноÑ\81Ñ\82Ñ\8c</string>
+  <string id="31024">страница</string>
+  <string id="31025">в Ñ\81пиÑ\81ке</string>
+  <string id="31026">Ð\94Ñ\80Ñ\83гие Ð¿Ð°Ñ\80амеÑ\82Ñ\80Ñ\8b</string>
+  <string id="31027">РаÑ\81положение</string>
  
-  <!-- обозначения Типа Вида -->
-  <string id="31028">Ð\9aаÑ\80Ñ\83Ñ\81елÑ\8c Ð\9fостеров</string>
+  <!-- View Type labels -->
+  <string id="31028">Ð\9aаÑ\80Ñ\83Ñ\81елÑ\8c Ð¿остеров</string>
   <string id="31029">Фанарт</string>
   <string id="31030">Полный список</string>
   <string id="31031">Миниатюры</string>
-  <string id="31032">Ð\9aаÑ\80Ñ\83Ñ\81елÑ\8c Ð\98зобÑ\80ажений</string>
+  <string id="31032">Ð\9aаÑ\80Ñ\83Ñ\81елÑ\8c ÐºÐ°Ñ\80Ñ\82инок</string>
   <string id="31033">Информация</string>
 
-  <!-- Дополнительные обозначения -->
-  <string id="31040">Ð\92оÑ\81пÑ\80оизводиÑ\82Ñ\81Ñ\8f</string>
+  <!-- Extra labels -->
+  <string id="31040">СейÑ\87аÑ\81 Ð²Ð¾Ñ\81пÑ\80оизводиÑ\82Ñ\81Ñ\8f:</string>
 
   <string id="31042">ВОСПРОИЗВЕДЕНИЕ</string>
   <string id="31043">ПАУЗА</string>
-  <string id="31044">Ð\9fÐ\95РÐ\95Ð\9cÐ\9eТÐ\9aÐ\90 Ð\92Ð\9fÐ\95РÐ\81Д</string>
+  <string id="31044">Ð\9fÐ\95РÐ\95Ð\9cÐ\9eТÐ\9aÐ\90 Ð\92Ð\9fÐ\95РÐ\95Д</string>
   <string id="31045">ПЕРЕМОТКА НАЗАД</string>
-  <string id="31046">Свойства Аудио</string>
-  <string id="31047">Текущие Настройки</string>
-  <string id="31048">Настройки Визуализации</string>
-  <string id="31049">Время Окончания</string>
+  <string id="31046">Свойства аудио</string>
+  <string id="31047">Текущие настройки</string>
+  <string id="31048">Настройки визуализации</string>
+  <string id="31049">Время окончания</string>
+  <string id="31050">По возрастанию</string>
+  <string id="31051">По убыванию</string>
 
 
-  <!-- обозначения Редактора Списков -->
+  <!-- Playlist Editor labels -->
   <string id="31055">Открыть плейлист</string>
   <string id="31056">Сохранить плейлист</string>
   <string id="31057">Закрыть плейлист</string>
-  <string id="31058">Системные аудио файлы</string>
+  <string id="31058">Системные аудиофайлы</string>
   <string id="31059">Текущий плейлист</string>
-  <string id="31060">ЭÑ\82оÑ\82 Ñ\84айл Ñ\81гÑ\80Ñ\83ппиÑ\80ован, Ð²Ñ\8bбеÑ\80иÑ\82е Ñ\87аÑ\81Ñ\82Ñ\8c ÐºÐ¾Ñ\82оÑ\80Ñ\83Ñ\8e Ð²Ñ\8b Ñ\85оÑ\82иÑ\82е Ð²Ð¾Ñ\81пÑ\80оизвеÑ\81Ñ\82и.</string>
-  <string id="31061">ТекÑ\83Ñ\89ее Ð\92ыделение</string>
+  <string id="31060">СоÑ\81Ñ\82авной Ñ\84айл; Ð²Ñ\8bбеÑ\80иÑ\82е Ñ\87аÑ\81Ñ\82Ñ\8c Ð´Ð»Ñ\8f Ð¿Ñ\80оигÑ\80Ñ\8bваниÑ\8f.</string>
+  <string id="31061">ТекÑ\83Ñ\89ее Ð²ыделение</string>
   
-  <!-- обозначения настроек оболочки -->
+  <!-- Skin Settings labels -->
   <string id="31100"></string>
   <string id="31101">Настройки главного экрана</string>
   <string id="31102">Фон</string>
   <string id="31103">Показывать "Пауза" в режиме слайдшоу</string>
-  <string id="31104">Воспроизводить трейлеры в окне [COLOR=grey3](Только Для Диалога Информации о Видео)[/COLOR]</string>
-  <string id="31105"></string>
-  <string id="31106">РазлиÑ\87нÑ\8bе Ð¾Ð¿Ñ\86ии</string>
-  <string id="31107">Скрыть флаги читаемые из имени видео файла [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
-  <string id="31108">СпÑ\80Ñ\8fÑ\82аÑ\82Ñ\8c Ð\9aнопки Ð\93лавного Ð\9cеню</string>
-  <string id="31109">Фон главного экрана</string>
-  <string id="31110">Ð\98змениÑ\82Ñ\8c Ñ\84он Ð´Ð»Ñ\8f Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ Ñ\8dкÑ\80ана</string>
+  <string id="31104">Воспроизводить трейлеры в окне [COLOR=grey3](только для окна сведений)[/COLOR]</string>
+  <string id="31105">Кнопка "Видео" всегда открывает "Файлы"</string>
+  <string id="31106">РазлиÑ\87нÑ\8bе Ð¿Ð°Ñ\80амеÑ\82Ñ\80Ñ\8b</string>
+  <string id="31107">Скрыть флаги, полученные из имени видеофайла [COLOR=grey3](BluRray, HDTV)[/COLOR]</string>
+  <string id="31108">СкÑ\80Ñ\8bÑ\82Ñ\8c ÐºÐ½Ð¾Ð¿ÐºÐ¸ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ Ð¼еню</string>
+  <string id="31109">Фон разделов</string>
+  <string id="31110">Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\84он Ñ\80аздела</string>
   <string id="31111">Скрыть</string>
-  <string id="31112">Ð\9dаÑ\81Ñ\82Ñ\80ойки</string>
-  <string id="31113">Ð\9eдно Ð¸Ð·Ð¾Ð±Ñ\80.</string>
-  <string id="31114">Ð\9cного Ð¸Ð·Ð¾Ð±Ñ\80.</string>
-  <string id="31115">Ð\9dаÑ\81Ñ\82Ñ\80ойки</string>
+  <string id="31112">Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b</string>
+  <string id="31113">Ð\9eдна ÐºÐ°Ñ\80Ñ\82инка</string>
+  <string id="31114">Ð\9dабоÑ\80 ÐºÐ°Ñ\80Ñ\82инок</string>
+  <string id="31115">Ð\92Ñ\8bбоÑ\80</string>
   <string id="31116"></string>
-  <string id="31117">Ð\9fоказÑ\8bваÑ\82Ñ\8c Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ð¾Ðµ Ð\92идео</string>
-  <string id="31118">Ð\9fодменÑ\8e Ð\93лавного Ð­крана</string>
-  <string id="31119"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31117">Ð\9fоказÑ\8bваÑ\82Ñ\8c Ð¿Ð¾Ñ\81леднее Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ð¾Ðµ Ð²идео</string>
+  <string id="31118">Ð\9fодменÑ\8e Ð¿Ñ\80огÑ\80амм Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ Ñ\8dкрана</string>
+  <string id="31119">Скрыть фоновый фанарт</string>
   <string id="31120">НАЗВАНИЕ КНОПКИ</string>
   <string id="31121"></string>  <!-- blanked 2010-11-12 -->
-  <string id="31122">СÑ\82Ñ\80аниÑ\86а Ð\9fогоды</string>
-  <string id="31123">Ипользовать "Постеры" вместо "Баннеров" для TV шоу</string>
-  <string id="31124">Ð\9fоказÑ\8bваÑ\82Ñ\8c Ñ\84оновое "Ð\92оÑ\81пÑ\80оизводÑ\8fÑ\89ееÑ\81Ñ\8f" Ð\92идео</string>
-  <string id="31125">Ð\9fоказÑ\8bваÑ\82Ñ\8c Ñ\84оновÑ\83Ñ\8e "Ð\92оÑ\81пÑ\80оизводÑ\8fÑ\89Ñ\83Ñ\8eÑ\81Ñ\8f" Ð\92изÑ\83ализаÑ\86иÑ\8e</string>
+  <string id="31122">СÑ\82Ñ\80аниÑ\86а Ð¿огоды</string>
+  <string id="31123">Использовать постеры вместо баннеров для сериалов</string>
+  <string id="31124">Ð\92оÑ\81пÑ\80оизводимое Ð²Ð¸Ð´ÐµÐ¾ Ð² ÐºÐ°Ñ\87еÑ\81Ñ\82ве Ñ\84она</string>
+  <string id="31125">Ð\9cÑ\83зÑ\8bкалÑ\8cнаÑ\8f Ð²Ð¸Ð·Ñ\83ализаÑ\86иÑ\8f Ð² ÐºÐ°Ñ\87еÑ\81Ñ\82ве Ñ\84она</string>
 
-  <string id="31126"></string>  <!-- blanked 2010-11-12 -->
-  <string id="31127"></string>  <!-- blanked 2010-11-12 -->
-  <string id="31128">Тексты Песен</string>
+  <string id="31126">Играть мелодию сериала в медиатеке (дополнение TvTunes)</string>
+  <string id="31127">TvTunes</string>
+  <string id="31128">Тексты</string>
   <string id="31129"></string>  <!-- blanked 2010-11-12 -->
   <string id="31130"></string>  <!-- blanked 2010-11-12 -->
+  
+<string id="31131"></string> <!-- blanked 2010-12-23 -->
+  <string id="31132">Дополнение текстов песен</string>
+  <string id="31133">Дополнение субтитров</string>
+  <string id="31134">Подменю видео главного экрана</string>
+  <string id="31135">Подменю музыки главного экрана</string>
+  <string id="31136">Подменю фото главного экрана</string>
 
-  <string id="31131"></string>
-  <string id="31132">Дополнение Текстов Песен</string>
-  <string id="31133">Дополнение Субтитров</string>
-
-  <string id="31140">OSD Музыки</string>
-  <string id="31141">OSD Видео</string>
+  <string id="31140">OSD музыки</string>
+  <string id="31141">OSD видео</string>
 
-  <!-- обозначения скрипта -->
+  <!-- Script labels -->
   <string id="31200">Ярлыки</string>
   <string id="31201">Категории</string>
-  <string id="31202">Показывать Роли</string>
-  <string id="31203">Ð\92Ñ\8bбеÑ\80иÑ\82е Ð\92аÑ\88Ñ\83 Ð\9fесню</string>
-  <string id="31204">Ссылки Разделов</string>
-  <string id="31205">Источник Текстов Песен</string>
+  <string id="31202">Показывать роли</string>
+  <string id="31203">Ð\92Ñ\8bбеÑ\80иÑ\82е Ð¿есню</string>
+  <string id="31204">Ссылки разделов</string>
+  <string id="31205">Источник текстов песен</string>
 
-  <!-- Дополнительные обозначения -->
-  <string id="31300">Текущая Температура</string>
-  <string id="31301">Ð\9fоÑ\81леднее Ð\9eбновление</string>
+  <!-- Extra labels -->
+  <string id="31300">Текущая температура</string>
+  <string id="31301">Ð\9fоÑ\81леднее Ð¾бновление</string>
   <string id="31302">Меню</string>
-  <string id="31303"></string>
-  <string id="31304">Ð\98зобÑ\80ажение</string>
-  <string id="31305">Ð\9dе Ð\92Ñ\81Ñ\82авлен Ð\94иск</string>
+  <string id="31303">Источник данных</string>
+  <string id="31304">ФоÑ\82огÑ\80аÑ\84иÑ\8f</string>
+  <string id="31305">Ð\9dе Ð²Ñ\81Ñ\82авлен Ð´иск</string>
   <string id="31306">Извлечь</string>
-  <string id="31307">СпÑ\80Ñ\8fÑ\82аÑ\82Ñ\8c Ð¤анарт</string>
-  <string id="31308">Ð\9fодÑ\80обнее Ð¾ Ð¤ильме</string>
+  <string id="31307">СкÑ\80Ñ\8bÑ\82Ñ\8c Ñ\84анарт</string>
+  <string id="31308">СведениÑ\8f Ð¾ Ñ\84ильме</string>
   <string id="31309">Использовано памяти:</string>
   <string id="31310">Номер трека</string>
-  <string id="31311">ФÐ\90Ð\9dÐ\90РТ[CR][CR]Ð\9dÐ\95Ð\94Ð\9eСТУÐ\9fÐ\95Ð\9d[CR][CR] Ð\9dÐ\90Ð\96Ð\9cÐ\98ТÐ\95 Ð\9aÐ\9dÐ\9eÐ\9fÐ\9aУ Ð§Ð¢Ð\9eÐ\91Ы Ð\92ЫÐ\91РÐ\90ТЬ</string>
-  <string id="31312">ТекÑ\83Ñ\89ий Ð¡ÐºÑ\80Ñ\8dпеÑ\80</string>
-  <string id="31313">Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ð¡ÐºÑ\80Ñ\8dпеÑ\80</string>
-  <string id="31314">Ð\9eпÑ\86ии Ð¡ÐºÐ°Ð½Ð¸Ñ\80ованиÑ\8f Ð¡одержимого</string>
-  <string id="31315">Базовый(ая/е)</string>
+  <string id="31311">ФанаÑ\80Ñ\82[CR][CR]недоÑ\81Ñ\82Ñ\83пен,[CR][CR] Ð½Ð°Ð¶Ð¼Ð¸Ñ\82е ÐºÐ½Ð¾Ð¿ÐºÑ\83, Ñ\87Ñ\82обÑ\8b Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c</string>
+  <string id="31312">ТекÑ\83Ñ\89ий Ð¸Ð½Ñ\84оÑ\80еÑ\81Ñ\83Ñ\80Ñ\81</string>
+  <string id="31313">Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ð¸Ð½Ñ\84оÑ\80еÑ\81Ñ\83Ñ\80Ñ\81</string>
+  <string id="31314">Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b Ñ\81каниÑ\80ованиÑ\8f Ñ\81одержимого</string>
+  <string id="31315">Базовый</string>
   <string id="31316"></string>
-  <string id="31317">Указать Путь до Фанарта</string>
-  <string id="31318">Маленький Фанарт</string>
-  <string id="31319">Выбранный Профиль</string>
-  <string id="31320">Последний Вход</string>
-  <string id="31321">Выбор Песен для Караоке</string>
-  <string id="31322">Показан</string>
-  <string id="31323">Свежие Фильмы</string>
-  <string id="31324">Свежие Эпизоды</string>
-  <string id="31325">Опции Списков</string>
-  <string id="31326">Создано</string>
-  <string id="31327">Разрешение</string>
-  <string id="31328">Недавно Добавлено</string>
-  <string id="31329">[B]УСТАНОВЛЕН ТАЙМЕР![/B] [COLOR=grey2] - АВТОМАТИЧЕСКОЕ ОТКЛЮЧЕНИЕ ЧЕРЕЗ[/COLOR]</string>
-  <string id="31330">Нажмите кнопку для воспроизведения[CR][CR]Видео трэйлера</string>
+  <string id="31317">Выбрать расположение фанарта</string>
+  <string id="31318">Маленький фанарт</string>
+  <string id="31319">Выбранный профиль</string>
+  <string id="31320">Последний вход</string>
+  <string id="31321">Выбор песен для караоке</string>
+  <string id="31322">Премьера</string>
+  <string id="31323">Последние фильмы</string>
+  <string id="31324">Последние серии</string>
+  <string id="31325">Параметры плейлиста</string>
+  <string id="31326">Создан</string>
+  <string id="31327">Размеры</string>
+  <string id="31328">Последние</string>
+  <string id="31329">[B]Установлен таймер![/B] [COLOR=grey2] - Автоматическое отключение через[/COLOR]</string>
+  <string id="31330">Нажмите кнопку,[CR][CR]чтобы посмотреть кино-трейлер</string>
+  <string id="31331">Сведения об альбоме</string>
 
-  <!-- Обозначения для OSD Музыки и Видео  -->
+  <!-- Video and Music OSD Labels  -->
   <string id="31351">Пауза</string>
   <string id="31352">Стоп</string>
-  <string id="31353">Ð\9fеÑ\80емоÑ\82ка Ð\92пеÑ\80Ñ\91д</string>
-  <string id="31354">Ð\9fеÑ\80емоÑ\82ка Ð\9dазад</string>
+  <string id="31353">Ð\9fеÑ\80емоÑ\82ка Ð²Ð¿ÐµÑ\80ед</string>
+  <string id="31354">Ð\9fеÑ\80емоÑ\82ка Ð½азад</string>
   <string id="31355">Меню фильма</string>
-  <string id="31356">Скачать Субтитры</string>
+  <string id="31356">Скачать субтитры</string>
   <string id="31357"></string>
 
-  <!-- Наборы шрифтов обложки -->
-  <string id="31390">Ð\9fо-Ñ\83молÑ\87аниÑ\8e Ð´Ð»Ñ\8f Ð¾Ð±Ð»Ð¾Ð¶ÐºÐ¸</string>
-  <string id="31391">Ð\9fо-Ñ\83молÑ\87аниÑ\8e Ð´Ð»Ñ\8f Ð¾Ð±Ð»Ð¾Ð¶ÐºÐ¸ Ð±ÐµÐ· Ð\9aапÑ\81а</string>
-  <string id="31392">Ð\9dа Ð±Ð°Ð·Ðµ Arial</string>
+  <!-- Skin Fontsets -->
+  <string id="31390">СÑ\82андаÑ\80Ñ\82нÑ\8bе</string>
+  <string id="31391">СÑ\82андаÑ\80Ñ\82нÑ\8bе Ð±ÐµÐ· Ð\9fРÐ\9eÐ\9fÐ\98СÐ\9dЫХ</string>
+  <string id="31392">СÑ\82илÑ\8c Arial</string>
 
-  <!-- Описание в экране настроек  -->
-  <string id="31400">[B]НАСТРОИКА ПАРАМЕТРОВ ВНЕШНЕГО ВИДА[/B][CR][CR]Изменить обложку · Установить язык и регион · Изменить настройки списка файлов[CR]Установить хранитель экрана</string>
-  <string id="31401">[B]НАСТРОЙКА ПАРАМЕТРОВ ВИДЕО[/B][CR][CR]Управлять видео библиотекой · Установить опции воспроизведения видео[CR]Настроить список видео · Установить шрифт субтитров</string>
-  <string id="31402">[B]НАСТРОЙКА ПАРАМЕТРОВ МУЗЫКИ[/B][CR][CR]Управлять аудио библиотекой · Установить опции воспроизведения аудио[CR]Настроить список аудио · Настроить добавление песен · Настроить караоке</string>
-  <string id="31403">[B]НАСТРОЙКА ПАРАМЕТРОВ ИЗОБРАЖЕНИЙ[/B][CR][CR]Установить параметры списка изображений · Настройка слайдшоу</string>
-  <string id="31404">[B]НАСТРОЙКА ПАРАМЕТРОВ ПОГОДЫ[/B][CR][CR]Установить три города для получения информации о погоде</string>
-  <string id="31405">[B]НАСТРОЙКА ПАРАМЕТРОВ СЕТИ[/B][CR][CR]Настроить управление XBMC через UPnP и HTTP · Настроить обмен файлами[CR]Изменить настройки доступа в интернет</string>
-  <string id="31406">[B]НАСТРОЙКА ПАРАМЕТРОВ СИСТЕМЫ[/B][CR][CR]Настроить и откалибровать экраны · Настроить вывод аудио · Настроить[CR]дистанционное управление · Настроить параметры энергосбережения · Включить отладку · Настроить блокировку</string>
-  <string id="31407">[B]НАСТРОЙКА ПАРАМЕТРОВ ОБЛОЖКИ[/B][CR][CR]Настроить обложку Confluence · Добавить и удалить пункты главного меню[CR]Изменить фон обложки</string>
-<string id="31408">[B]НАСТРОЙКА ДОПОЛНЕНИЙ[/B][CR][CR]Управление установленными дополнениями · Установка дополнений с xbmc.org[CR]Изменение настроек дополнений</string>
+  <!-- Description Labels  -->
+  <string id="31400">[B]НАСТРОЙКА ВНЕШНЕГО ВИДА[/B][CR][CR]Изменение обложки • Выбор языка и региона • Изменение настроек списка файлов[CR]Настройка хранителя экрана</string>
+  <string id="31401">[B]НАСТРОЙКА ПАРАМЕТРОВ ВИДЕО[/B][CR][CR]Управление медиатекой видео • Параметры воспроизведения видео[CR]Настройка списка видео • Настройка шрифта субтитров</string>
+  <string id="31402">[B]НАСТРОЙКА ПАРАМЕТРОВ МУЗЫКИ[/B][CR][CR]Управление медиатекой аудио • Параметры воспроизведения аудио[CR]Настройка списка аудио • Настройка добавления песен • Настройка караоке</string>
+  <string id="31403">[B]НАСТРОЙКА ПАРАМЕТРОВ ФОТО[/B][CR][CR]Параметры списка фото • Настройка слайд-шоу</string>
+  <string id="31404">[B]НАСТРОЙКА ПАРАМЕТРОВ ПОГОДЫ[/B][CR][CR]Выбор трех городов для получения информации о погоде</string>
+  <string id="31405">[B]НАСТРОЙКА ПАРАМЕТРОВ СЕТИ[/B][CR][CR]Настройки управления XBMC по UPnP и HTTP • Настройки доступа к файлам[CR]Настройки доступа в Интернет</string>
+  <string id="31406">[B]НАСТРОЙКА ПАРАМЕТРОВ СИСТЕМЫ[/B][CR][CR]Настройка и калибровка дисплеев • Настройка вывода аудио • Настройка[CR]дистанционного управления • Настройка параметров энергосбережения • Включение отладки • Настройка блокировки</string>
+  <string id="31407">[B]НАСТРОЙКА ПАРАМЕТРОВ ОБЛОЖКИ[/B][CR][CR]Настройка обложки Confluence • Добавление и удаление пунктов главного меню[CR]Изменение фона обложки</string>
+  <string id="31408">[B]НАСТРОЙКА ДОПОЛНЕНИЙ[/B][CR][CR]Управление установленными дополнениями • Установка дополнений с xbmc.org[CR]Изменение настроек дополнений</string>
+
+  <string id="31421">Выберите профиль пользователя XBMC,[CR]чтобы войти в систему</string>
+  
+  <!-- Weather plugin -->
+  <string id="31900">Карты погоды</string>
+  <string id="31901">Прогноз на 36 ч.</string>
+  <string id="31902">Ежечасный прогноз</string>
+  <string id="31903">Прогноз на выходные</string>
+  <string id="31904">Прогноз на 10 дней</string>
+  <string id="31905">Прогноз</string>
+  <string id="31906">Карты и видео</string>
+  <string id="31907">Видео-прогноз [COLOR=grey2](полный экран)[/COLOR]</string>
+  <string id="31908">Возможны осадки</string>
+  <string id="31909">Получение прогноза…</string>
 
-  <string id="31421">Выберите ваш профиль пользователя XBMC[CR]чтобы войти в систему и продолжить.</string>
-</strings>
+  </strings>
index 1e0102d..4ff3252 100644 (file)
   <string id="31300">Temperatura</string>
   <string id="31301">Zadnja posodobitev</string>
   <string id="31302">Menu</string>
-  <string id="31303"></string>
+  <string id="31303">Ponudnik</string>
   <string id="31304">Slika</string>
   <string id="31305">Ni zaznanega diska</string>
   <string id="31306">Izvrzi</string>
index 03fb4fa..b7580ce 100644 (file)
@@ -1,15 +1,18 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--Language file translated with Team XBMC Translator-->
+<!--Translator: Juanjo-->
+<!--Date of translation: 01/14/2012-->
+<!--$Revision$-->
 <strings>
-  <!-- Misc labels -->
   <string id="31000">Cambiar tus</string>
   <string id="31001">Me gusta</string>
   <string id="31002">No me gusta</string>
   <string id="31003">Opciones de energía</string>
   <string id="31004">Cargando...</string>
   <string id="31005">Ocultar INFO</string>
-
+  <string id="31006">Opciones de vista</string>
   <string id="31007">Plugins</string>
-
+  <string id="31008">Pantalla completa</string>
   <string id="31020">Añadido recientemente</string>
   <string id="31021">Archivos - vídeo</string>
   <string id="31022">Archivos - música</string>
   <string id="31025">Elementos</string>
   <string id="31026">Opciones varias</string>
   <string id="31027">Ubicación</string>
-
-  <!-- View Type labels -->
   <string id="31028">Flujo de póster</string>
   <string id="31029">Fanart</string>
   <string id="31030">Lista completa</string>
   <string id="31031">Miniaturas</string>
   <string id="31032">Flujo de imagen</string>
   <string id="31033">Info</string>
-
-  <!-- Extra labels -->
   <string id="31040">Reproduciendo ahora</string>
-
   <string id="31042">REPRODUCIENDO</string>
   <string id="31043">PAUSA</string>
   <string id="31044">AVANCE RAPIDO</string>
@@ -38,9 +36,8 @@
   <string id="31047">Opciones preestablecidas actuales</string>
   <string id="31048">Visualización preestablecida</string>
   <string id="31049">Hora de finalización</string>
-
-
-  <!-- Playlist Editor labels -->
+  <string id="31050">Ordenar: Ascendente</string>
+  <string id="31051">Ordenar: Descendente</string>
   <string id="31055">Abrir lista de reproducción</string>
   <string id="31056">Guardar lista de reproducción</string>
   <string id="31057">Cerrar lista de reproducción</string>
@@ -48,8 +45,6 @@
   <string id="31059">Lista de reproducción actual</string>
   <string id="31060">Este archivo está agrupado, seleccione la parte que desee reproducir.</string>
   <string id="31061">Seleccionado</string>
-
-  <!-- Skin Settings labels -->
   <string id="31100"></string>
   <string id="31101">Opciones de la pantalla principal</string>
   <string id="31102">Fondo</string>
   <string id="31118">Submenús de programas de la pantalla principal</string>
   <string id="31119">Ocultar el Fanart del fondo</string>
   <string id="31120">ETIQUETA DEL BOTON</string>
-  <string id="31121"></string>  <!-- blanked 2010-11-12 -->
-  <string id="31122">El Tiempo</string>
+  <string id="31121"></string>
+  <string id="31122">El Clima</string>
   <string id="31123">Usar "Posters" en lugar de "Banners" para las Series de TV</string>
   <string id="31124">Mostrar vídeo en reproducción en el fondo</string>
   <string id="31125">Mostrar visualización en el fondo</string>
-
-  <string id="31126"></string>  <!-- blanked 2010-11-12 -->
-  <string id="31127"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31126"></string>
+  <string id="31127"></string>
   <string id="31128">Letras</string>
-  <string id="31129"></string>  <!-- blanked 2010-11-12 -->
-  <string id="31130"></string>  <!-- blanked 2010-11-12 -->
-  
+  <string id="31129"></string>
+  <string id="31130"></string>
   <string id="31131"></string>
   <string id="31132">Add-on para letras</string>
   <string id="31133">Add-on para subtitulos</string>
   <string id="31134">Submenú de vídeos de la pantalla principal</string>
   <string id="31135">Submenú de música de la pantalla principal</string>
   <string id="31136">Submenú de imágenes de la pantalla principal</string>
-
   <string id="31140">OSD de música</string>
   <string id="31141">OSD de vídeo</string>
-
-  <!-- Script labels -->
   <string id="31200">Accesos directos</string>
   <string id="31201">Categorías</string>
   <string id="31202">Mostrar reparto</string>
   <string id="31203">Elige tu canción</string>
   <string id="31204">Sección de links</string>
   <string id="31205">Fuente para letras</string>
-
-  <!-- Extra labels -->
   <string id="31300">Temperatura</string>
   <string id="31301">Última actualización</string>
   <string id="31302">Menú</string>
-  <string id="31303"></string>
+  <string id="31303">Proveedor de Datos</string>
   <string id="31304">Imagen</string>
   <string id="31305">Ningún disco detectado</string>
   <string id="31306">Expulsar</string>
   <string id="31307">Ocultar fanarts</string>
   <string id="31308">Detalles de la película</string>
   <string id="31309">Memoria usada:</string>
-  <string id="31310">Número canción</string>
-  <string id="31311">Imagen fanart[CR]no disponible[CR][CR]Click para elegir</string>
+  <string id="31310">Pista número</string>
+  <string id="31311">Imagen fanart[CR][CR]no disponible[CR][CR]Click para elegir</string>
   <string id="31312">Scraper actual</string>
   <string id="31313">Elige un scraper</string>
   <string id="31314">Opciones de escanéo de contenido</string>
   <string id="31328">Recientes</string>
   <string id="31329">[B]Temporizador[/B] [COLOR=grey2] - El sistema se apagará en[/COLOR]</string>
   <string id="31330">Click para reproducir[CR][CR]trailer de película</string>
-
-  <!-- Video and Music OSD Labels  -->
-  <string id="31351">Pausa</string>
+  <string id="31331">Detalles del Album</string>
+  <string id="31351">Pausar</string>
   <string id="31352">Detener</string>
   <string id="31353">Avance rápido</string>
-  <string id="31354">Retroceso</string>
+  <string id="31354">Retroceder</string>
   <string id="31355">Menú película</string>
   <string id="31356">Descargar subtítulos</string>
   <string id="31357"></string>
-
-  <!-- Skin Fontsets -->
   <string id="31390">Por defecto</string>
-  <string id="31391">Por defecto sin Maysuculas</string>
+  <string id="31391">Por defecto sin Mayúsculas</string>
   <string id="31392">Basada en Arial</string>
-
-  <!-- Description Labels  -->
   <string id="31400">[B]Configura las opciones de APARIENCIA[/B][CR][CR]Cambia la skin - Cambia el idioma y la configuración regional - Cambia opciones de listas de archivos[CR]Establece un salvapantallas</string>
   <string id="31401">[B]Configura las opciones de VIDEO[/B][CR][CR]Administra su videoteca - Ajusta reproducción de vídeol - Cambia opciones de listas de vídeo[CR]Configura fuentes de subtítulos</string>
   <string id="31402">[B]Configura las opciones de MUSICA[/B][CR][CR]Administra tu biblioteca musical - Ajusta reproducción de música - Cambia opciones de listas de música[CR[Configura sumisión de canciones - Configura el karaoke</string>
   <string id="31406">[B]Configura las opciones de SISTEMA[/B][CR][CR]Configura y calibra la pantalla - Configura salida de audio - Configura mandos a distancia[CR]Establece las opciones de ahorro de energía - Habilita depuración de errores - Configura bloqueo maestro</string>
   <string id="31407">[B]Configura las opciones de la SKIN[/B][CR][CR]Configura Confluence - Añade y elimina elementos del menú Inicio[CR]Cambia los fondos de la skin</string>
   <string id="31408">[B]Configura los ADD-ONS[/B][CR][CR]Administra tus addons instalados · Busca e instala addons desde xbmc.org[CR]Modifica la configuración de los addons</string>
-
   <string id="31421">Seleccione su perfil de usuario de XBMC[CR]para ingresar y continuar</string>
+  <string id="31900">Mapas de clima</string>
+  <string id="31901">Pronóstico de 36 hs</string>
+  <string id="31902">Pronóstico por hora</string>
+  <string id="31903">Pronóstico semanal</string>
+  <string id="31904">Pronóstico de 10 días</string>
+  <string id="31905">Pronóstico</string>
+  <string id="31906">Mapas y video</string>
+  <string id="31907">Pronóstico de video [COLOR=grey2](A pantalla completa)[/COLOR]</string>
+  <string id="31908">Probabilidada de precipitación</string>
+  <string id="31909">Obteniendo información</string>
 </strings>
index aaadf95..9b6c33a 100644 (file)
@@ -2,7 +2,7 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: blittan-->
 <!--Email: blittan@xbmc.org-->
-<!--Date of translation: 11/19/2010-->
+<!--Date of translation: 12/26/2011-->
 <!--$Revision$-->
 <strings>
   <string id="31000">Ändra din</string>
@@ -11,7 +11,9 @@
   <string id="31003">Strömalternativ</string>
   <string id="31004">Arbetar...</string>
   <string id="31005">Dölj INFO</string>
+  <string id="31006">Visa val</string>
   <string id="31007">Tillägg</string>
+  <string id="31008">Helskärm</string>
   <string id="31020">Nyligen tillagda</string>
   <string id="31021">Filmer - Filer</string>
   <string id="31022">Musik - Filer</string>
@@ -35,6 +37,8 @@
   <string id="31047">Nuvarande förval</string>
   <string id="31048">Visualiseringsförval</string>
   <string id="31049">Sluttid</string>
+  <string id="31050">Sort: stigande</string>
+  <string id="31051">Sort: fallande</string>
   <string id="31055">Öppna spellista</string>
   <string id="31056">Spara spellista</string>
   <string id="31057">Stäng spellista</string>
@@ -46,7 +50,7 @@
   <string id="31102">Bakgrund</string>
   <string id="31103">Visa "Pausad" i bildspel</string>
   <string id="31104">Spela trailers i ett fönster [COLOR=grey3](Endast i videoinformationsdialogen)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31105">Videoknappen öppnar alltid videofiler</string>
   <string id="31106">Övriga alternativ</string>
   <string id="31107">Dölj flaggläsning från videofilnamn [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
   <string id="31108">Dölj huvudmenyknappar</string>
   <string id="31115">Anpassare</string>
   <string id="31117">Visa nyligen tillagda filmer</string>
   <string id="31118">Hemsidans undermeny</string>
+  <string id="31119">Dölj bakgrundsfanart</string>
   <string id="31120">KNAPPETIKETT</string>
   <string id="31122">Vädersida</string>
   <string id="31123">Använd omslag istället för banner för TV-serier</string>
   <string id="31124">Visa bakgrund "Nu spelas" filmer</string>
   <string id="31125">Visa bakgrund "Nu spelas" visualisering</string>
+  <string id="31126">Spela TV-temasånger i videobiblioteket (TVTunes-tillägg)</string>
+  <string id="31127">TvTunes</string>
   <string id="31128">Sångtexter</string>
-  <string id="31131"></string>
+  <string id="31131">
+  </string>
   <string id="31132">Sångtextstillägg</string>
   <string id="31133">Undertextstillägg</string>
+  <string id="31134">Hemskärmens videoundermeny</string>
+  <string id="31135">Hemskärmens musikundermeny</string>
+  <string id="31136">Hemskärmens bildundermeny</string>
   <string id="31140">Musik-OSD</string>
   <string id="31141">Video-OSD</string>
   <string id="31200">Genvägar</string>
@@ -79,6 +90,7 @@
   <string id="31300">Nuvarande temp</string>
   <string id="31301">Sist uppdaterad</string>
   <string id="31302">Meny</string>
+  <string id="31303">Dataleverantör</string>
   <string id="31304">Bild</string>
   <string id="31305">Ingen diskmedia upptäckt</string>
   <string id="31306">Mata ut</string>
   <string id="31328">Nyligen tillagda</string>
   <string id="31329">[B]Timer satt![/B] [COLOR=grey2] - Automatisk avstängning av systemet om[/COLOR]</string>
   <string id="31330">Klicka på knappen för att[CR][CR]spela filmtrailer</string>
+  <string id="31331">Albumdetaljer</string>
   <string id="31351">Paus</string>
   <string id="31352">Stopp</string>
   <string id="31353">Spola framåt</string>
   <string id="31407">[B]KONFIGURERA SKALINSTÄLLNINGAR[/B][CR][CR]Ställa in Confluence-skalet · Lägga till och ta bort hemsidans menyknappar[CR]Ändra skalets bakgrunder</string>
   <string id="31408">[B]KONFIGURERA TILLÄGG[/B][CR][CR]Hantera installerade tillägg - Visa och installera tillägg från xbmc.org[CR]Ändra inställningar för tillägg</string>
   <string id="31421">Välj din XBMC användarprofil[CR]för att logga in  och fortsätta</string>
+  <string id="31900">Väderkartor</string>
+  <string id="31901">36-timmarsprognos</string>
+  <string id="31902">Timprognos</string>
+  <string id="31903">Helgprognos</string>
+  <string id="31904">10-dagarsprognos</string>
+  <string id="31905">Prognos</string>
+  <string id="31906">Karta &amp; video</string>
+  <string id="31907">Videoprognost [COLOR=grey2](Helskärmsuppspelning)[/COLOR]</string>
+  <string id="31908">Chans till nederbörd</string>
+  <string id="31909">Hämtar prognosinfo...</string>
 </strings>
\ No newline at end of file
index e595c18..4d2dddf 100644 (file)
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <!--Translator: Özgür BASKIN (queeup)-->
 <!--Email: ozgur.baskin@gmail.com-->
-<!--Date of translation: 20/04/2011-->
-<!--Turkish strings based on English strings commit 51ed57d4fede2c21c1ca-->
+<!--Date of translation: 25/11/2011-->
+<!--Turkish strings based on English strings commit 72696c450c -->
 <strings>
   <!-- Misc labels -->
   <string id="31000">Değiştir</string>
@@ -62,7 +62,7 @@
   <string id="31102">Arka Plan</string>
   <string id="31103">Resim slayt gösterisinde "DURAKLATILDI"yı göster</string>
   <string id="31104">Fragmanları pencere içinde oynat [COLOR=grey3](Sadece Video Bilgisi İletişim Kutusu İçin)[/COLOR]</string>
-  <string id="31105"></string>
+  <string id="31105">"Videolar" düğmesi herzaman video "Dosyalar"'a gider</string>
   <string id="31106">Çeşitli seçenekler</string>
   <string id="31107">Video dosya adlarında etiket okumayı gizle [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]</string>
   <string id="31108">Ana Menü Tuşlarını Gizle</string>
@@ -76,7 +76,7 @@
   <string id="31116"></string>
   <string id="31117">Son Eklenen Videoları Göster</string>
   <string id="31118">Ana Sayfa Programlar Alt Menüsü</string>
-  <string id="31119"></string>  <!-- blanked 2010-11-12 -->
+  <string id="31119">Arkaplan Fanartını Gizle</string>
   <string id="31120">TUŞ ETİKETİ</string>
   <string id="31121"></string>  <!-- blanked 2010-11-12 -->
   <string id="31122">Hava Durumu Sayfası</string>
   <string id="31124">Arkaplanda Oynatılan Videoyu göster</string>
   <string id="31125">Arkaplanda Görsel Ögeyi göster</string>
 
-  <string id="31126"></string>  <!-- blanked 2010-11-12 -->
-  <string id="31127"></string>  <!-- blanked 2010-11-12 -->
-  <string id="31128">Lyrics</string>
+  <string id="31126">TV tema şarkılarını video kitaplığında çal (TvTunes eklentisi)</string>
+  <string id="31127">TvTunes</string>
+  <string id="31128">Şarkı Sözleri</string>
   <string id="31129"></string>  <!-- blanked 2010-11-12 -->
   <string id="31130"></string>  <!-- blanked 2010-11-12 -->
   
   <string id="31131"></string>
-  <string id="31132">Lyrics Eklentisi</string>
+  <string id="31132">Şarkı Sözleri Eklentisi</string>
   <string id="31133">Altyazı Eklentisi</string>
   <string id="31134">Ana Sayfa Videolar Alt Menüsü</string>
   <string id="31135">Ana Sayfa Müzik Alt Menüsü</string>
   <string id="31201">Kategoriler</string>
   <string id="31202">Oyuncuları Göster</string>
   <string id="31203">Şarkını Seç</string>
-  <string id="31204">Bölge Bağlantıları</string>
-  <string id="31205">Lyrics Kaynağı</string>
+  <string id="31204">Bölüm Bağlantıları</string>
+  <string id="31205">Şarkı Sözleri Kaynağı</string>
 
   <!-- Extra labels -->
   <string id="31300">Mevcut Sıcaklık</string>
   <string id="31301">Son Güncelleme</string>
   <string id="31302">Menü</string>
-  <string id="31303"></string>
+  <string id="31303">Veri sağlayıcı</string>
   <string id="31304">Resim</string>
   <string id="31305">Disk Ortamı Algılanmadı</string>
   <string id="31306">Çıkart</string>
   <string id="31408">[B]EKLENTİLERİ YAPILANDIR[/B][CR][CR]Yüklenmiş eklentileri yönet · Eklentilere gözat ve yenilerini yükle[CR]Eklenti ayarlarını değiştir</string>
 
   <string id="31421">Oturum açıp devam etmek için[CR]XBMC kullanıcı profilinizi seçin</string>
+  
+  <!-- Weather plugin -->
+  <string id="31900">Hava Durumu Haritaları</string>
+  <string id="31901">36 Saatlik Hava Tahmini</string>
+  <string id="31902">Saatlik Hava Tahmini</string>
+  <string id="31903">Haftalık Hava Tahmini</string>
+  <string id="31904">10 Günlik Hava Tahmini</string>
+  <string id="31905">Hava Tahmini</string>
+  <string id="31906">Video ve Haritalar</string>
+  <string id="31907">Video Hava Tahmini [COLOR=grey2](Tam ekran oynatım)[/COLOR]</string>
+  <string id="31908">Chance of Precipitation</string>
+  <string id="31909">Hava tahmini bilgisi getiriliyor...</string>
+
 </strings>
diff --git a/addons/skin.confluence/media/flagging/audio/vorbis.png b/addons/skin.confluence/media/flagging/audio/vorbis.png
new file mode 100644 (file)
index 0000000..8b047cd
Binary files /dev/null and b/addons/skin.confluence/media/flagging/audio/vorbis.png differ
diff --git a/addons/skin.touched b/addons/skin.touched
new file mode 160000 (submodule)
index 0000000..6e29c2e
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 6e29c2ebb85c75a44418b13b06e5bc0583905be4
diff --git a/addons/skin.touched/4x3Hirez/AddonBrowser.xml b/addons/skin.touched/4x3Hirez/AddonBrowser.xml
deleted file mode 100644 (file)
index 04d2db6..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<window id="40">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <views>50,500</views>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>FileCountCommons</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[24001]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <include>CommonRootViewAddons</include> <!-- view id = 50 -->
-                       <include>ThumbnailView</include> <!-- view id = 500 -->
-                       <include>ScrollArrowsCommons</include>
-               </control>
-               <include>MediaSubMenu</include>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="button" id="3">
-                                               <description>Sort by button</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>103</label>
-                                       </control>
-                                       <control type="togglebutton" id="4">
-                                               <description>Sort asc</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <alttexturefocus>button-focus2.png</alttexturefocus>
-                                               <alttexturenofocus>button-nofocus.png</alttexturenofocus>
-                                               <label>31051</label>
-                                               <altlabel>31050</altlabel>
-                                               <usealttexture>Container.SortDirection(Ascending)</usealttexture>
-                                       </control>
-                                       <control type="radiobutton" id ="5">
-                                               <description>Enable auto-updates</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>24063</label>
-                                       </control>
-                                       <control type="radiobutton" id ="6">
-                                               <description>No notifications</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>25000</label>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <include>ScrollOffsetLabel</include>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogAddonInfo.xml b/addons/skin.touched/4x3Hirez/DialogAddonInfo.xml
deleted file mode 100644 (file)
index c8543e5..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-<window id="146">
-       <defaultcontrol always="true"></defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$LOCALIZE[24003]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-
-               <control type="group">
-                       <posy>70</posy>
-                       <posx>20</posx>
-                       <control type="label">
-                               <description>Addon Title value</description>
-                               <posx>20</posx>
-                               <posy>0</posy>
-                               <width>960</width>
-                               <height>30</height>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font28_title</font>
-                               <label>$INFO[ListItem.Property(Addon.Name)]</label>
-                               <textcolor>black</textcolor>
-                               <scroll>true</scroll>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>40</posy>
-                               <width>260</width>
-                               <height>300</height>
-                               <aspectratio>keep</aspectratio>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>280</posx>
-                               <posy>50</posy>
-                               <width>680</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[21821]$INFO[Container(601).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(601).NumPages,/, )]</label>
-                       </control>
-                       <control type="textbox" id="601">
-                               <description>Description Value for Albums</description>
-                               <posx>280</posx>
-                               <posy>80</posy>
-                               <width>680</width>
-                               <height>300</height>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <pagecontrol>-</pagecontrol>
-                               <label>$INFO[ListItem.Property(Addon.Description)]</label>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>390</posy>
-                               <width>960</width>
-                               <height>5</height>
-                               <texture>separator.png</texture>
-                       </control>
-                       <control type="group">
-                               <posx>0</posx>
-                               <posy>420</posy>
-                               <control type="label">
-                                       <description>Type txt</description>
-                                       <posx>200</posx>
-                                       <posy>0</posy>
-                                       <width>200</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[146]</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                               </control>
-                               <control type="label">
-                                       <description>Type Value</description>
-                                       <posx>210</posx>
-                                       <posy>0</posy>
-                                       <width>770</width>
-                                       <height>25</height>
-                                       <label fallback="416">$INFO[ListItem.Property(Addon.Type)]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <scroll>true</scroll>
-                               </control>
-                               <control type="label">
-                                       <description>Author txt</description>
-                                       <posx>200</posx>
-                                       <posy>30</posy>
-                                       <width>200</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[21863]:</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                               </control>
-                               <control type="label">
-                                       <description>Author Value</description>
-                                       <posx>210</posx>
-                                       <posy>30</posy>
-                                       <width>770</width>
-                                       <height>25</height>
-                                       <label fallback="416">$INFO[ListItem.Property(Addon.Creator)]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <scroll>true</scroll>
-                               </control>
-                               <control type="label">
-                                       <description>Version txt</description>
-                                       <posx>200</posx>
-                                       <posy>60</posy>
-                                       <width>200</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[24051]</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                               </control>
-                               <control type="label">
-                                       <description>Version Value</description>
-                                       <posx>210</posx>
-                                       <posy>60</posy>
-                                       <width>770</width>
-                                       <height>25</height>
-                                       <label fallback="416">$INFO[ListItem.Property(Addon.Version)]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <scroll>true</scroll>
-                               </control>
-                               <control type="label">
-                                       <description>Rating txt</description>
-                                       <posx>200</posx>
-                                       <posy>90</posy>
-                                       <width>200</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[563]:</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>208</posx>
-                                       <posy>88</posy>
-                                       <width>170</width>
-                                       <height>34</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture>$INFO[ListItem.Property(Addon.StarRating),dark/left_rating/]</texture>
-                               </control>
-                               <control type="label">
-                                       <description>Summary txt</description>
-                                       <posx>200</posx>
-                                       <posy>120</posy>
-                                       <width>200</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[20037]:</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                               </control>
-                               <control type="fadelabel">
-                                       <description>Summary Value</description>
-                                       <posx>210</posx>
-                                       <posy>120</posy>
-                                       <width>770</width>
-                                       <height>25</height>
-                                       <label fallback="416">$INFO[ListItem.Property(Addon.Summary)]</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <scrollout>false</scrollout>
-                                       <pauseatend>2000</pauseatend>
-                               </control>
-                               <control type="label">
-                                       <description>Disclaimer txt</description>
-                                       <posx>200</posx>
-                                       <posy>150</posy>
-                                       <width>200</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[24052]:</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                               </control>
-                               <control type="textbox">
-                                       <description>Disclaimer</description>
-                                       <posx>210</posx>
-                                       <posy>146</posy>
-                                       <width>770</width>
-                                       <height>60</height>
-                                       <font>font13</font>
-                                       <align>-</align>
-                                       <textcolor>black</textcolor>
-                                       <label fallback="231">$INFO[ListItem.Property(Addon.Disclaimer)]</label>
-                                       <autoscroll time="2000" delay="3000" repeat="5000">true</autoscroll>
-                               </control>
-                       </control>
-               </control>
-
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>830</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>50</onup>
-                       <ondown>49</ondown>
-                       <control type="button" id ="6">
-                               <description>Enable Addon button</description>
-                               <width>185</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>24022</label>
-                       </control>
-                       <control type="button" id="7">
-                               <description>Disable Addon button</description>
-                               <width>185</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>24021</label>
-                       </control>
-                       <control type="button" id="9">
-                               <description>Addon Settings</description>
-                               <width>185</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>24020</label>
-                       </control>
-                       <control type="button" id="8">
-                               <description>Update Addon button</description>
-                               <width>185</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>24069</label>
-                       </control>
-                       <control type="button" id="10">
-                               <description>Changelog button</description>
-                               <width>185</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>24036</label>
-                       </control>
-               </control>
-
-               <control type="group">
-                       <include>VisibleFadeEffect</include>
-                       <control type="group">
-                               <visible>!IsEmpty(ListItem.Property(Addon.broken))</visible>
-                               <posx>40</posx>
-                               <posy>720</posy>
-                               <control type="image">
-                                       <description>background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>920</width>
-                                       <height>100</height>
-                                       <texture border="20">OverlayDialogBackground.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Icon image</description>
-                                       <posx>18</posx>
-                                       <posy>18</posy>
-                                       <width>64</width>
-                                       <height>64</height>
-                                       <texture>DefaultIconError.png</texture>
-                               </control>
-                               <control type="label">
-                                       <description>header label</description>
-                                       <posx>100</posx>
-                                       <posy>15</posy>
-                                       <width>800</width>
-                                       <height>25</height>
-                                       <font>font13_title</font>
-                                       <label>24096</label>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>selected</textcolor>
-                               </control>
-                               <control type="textbox">
-                                       <description>Reason label</description>
-                                       <posx>100</posx>
-                                       <posy>35</posy>
-                                       <width>800</width>
-                                       <height>50</height>
-                                       <font>font13</font>
-                                       <label>$INFO[ListItem.Property(Addon.broken)]</label>
-                                       <align>left</align>
-                                       <textcolor>white</textcolor>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogAddonSettings.xml b/addons/skin.touched/4x3Hirez/DialogAddonSettings.xml
deleted file mode 100644 (file)
index cdd5657..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-<window id="10140">
-       <defaultcontrol></defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label" id="20">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>-</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-
-               <control type="group">
-                       <posx>20</posx>
-                       <posy>75</posy>
-                       <control type="button">
-                               <description>left Arrow</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>40</width>
-                               <height>40</height>
-                               <texturefocus>arrow-big-left.png</texturefocus>
-                               <texturenofocus>arrow-big-left.png</texturenofocus>
-                               <onclick>Control.Move(9,-1)</onclick>
-                               <include>VisibleFadeEffect</include>
-                               <visible>Container(9).HasPrevious</visible>
-                       </control>
-                       <control type="button" id="11001">
-                               <description>right Arrow</description>
-                               <posx>920</posx>
-                               <posy>0</posy>
-                               <width>40</width>
-                               <height>40</height>
-                               <texturefocus>arrow-big-right.png</texturefocus>
-                               <texturenofocus>arrow-big-right.png</texturenofocus>
-                               <onclick>Control.Move(9,1)</onclick>
-                               <include>VisibleFadeEffect</include>
-                               <visible>Container(9).HasNext</visible>
-                       </control>
-               </control>
-               <control type="grouplist" id="9">
-                       <description>button area</description>
-                       <posx>60</posx>
-                       <posy>70</posy>
-                       <width>880</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9</onleft>
-                       <onright>9</onright>
-                       <onup>2</onup>
-                       <ondown>2</ondown>
-               </control>
-               <control type="grouplist" id="2">
-                       <description>control area</description>
-                       <posx>40</posx>
-                       <posy>140</posy>
-                       <width>920</width>
-                       <height>670</height>
-                       <itemgap>-1</itemgap>
-                       <pagecontrol>30</pagecontrol>
-                       <onup>9</onup>
-                       <ondown>9001</ondown>
-                       <onleft>2</onleft>
-                       <onright>30</onright>
-               </control>
-               <control type="scrollbar" id="30">
-                       <posx>975</posx>
-                       <posy>120</posy>
-                       <width>20</width>
-                       <height>670</height>
-                       <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                       <texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
-                       <texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                       <textureslidernib>ScrollBarNib.png</textureslidernib>
-                       <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                       <onleft>2</onleft>
-                       <onright>9</onright>
-                       <showonepage>false</showonepage>
-                       <orientation>vertical</orientation>
-               </control>
-               <control type="grouplist" id="9001">
-                       <posx>20</posx>
-                       <posy>830</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9001</onleft>
-                       <onright>9001</onright>
-                       <onup>2</onup>
-                       <ondown>9</ondown>
-                       <control type="button" id="10">
-                               <description>OK Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-                       <control type="button" id="11">
-                               <description>Cancel Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-                       <control type="button" id="12">
-                               <description>Defaults Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>409</label>
-                       </control>
-               </control>
-
-               <control type="button" id="13">
-                       <description>Default Category Button</description>
-                       <width>200</width>
-                       <include>ButtonInfoDialogsCommonValues</include>
-               </control>
-               <control type="button" id="3">
-                       <description>Default Button</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="radiobutton" id="4">
-                       <description>Default RadioButton</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="spincontrolex" id="5">
-                       <description>Default SpinControlex</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                       <aligny>center</aligny>
-                       <reverse>yes</reverse>
-               </control>
-               <control type="image" id="6">
-                       <description>separator image</description>
-                       <height>5</height>
-                       <texture>separator.png</texture>
-               </control>
-               <control type="label" id="7">
-                       <height>50</height>
-                       <font>font13_title</font>
-                       <label>-</label>
-                       <textcolor>black</textcolor>
-                       <align>center</align>
-                       <aligny>center</aligny>
-               </control>
-               <control type="sliderex" id="8">
-                       <description>Default Slider</description>
-                       <height>55</height>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogAlbumInfo.xml b/addons/skin.touched/4x3Hirez/DialogAlbumInfo.xml
deleted file mode 100644 (file)
index e3086cc..0000000
+++ /dev/null
@@ -1,550 +0,0 @@
-<window id="2001">
-       <defaultcontrol always="true">5</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$INFO[Listitem.Album]</label>
-                       <visible>container.content(Albums)</visible>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$INFO[Listitem.Artist]</label>
-                       <visible>container.content(Artists)</visible>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-
-               <control type="group">
-                       <visible>Container.Content(Albums) + !Control.IsVisible(50)</visible>
-                       <posy>70</posy>
-                       <posx>20</posx>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>260</width>
-                               <height>360</height>
-                               <aspectratio>keep</aspectratio>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>280</posx>
-                               <posy>0</posy>
-                               <width>680</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[21821]$INFO[Container(601).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(601).NumPages,/, )]</label>
-                       </control>
-                       <control type="textbox" id="601">
-                               <description>Description Value for Albums</description>
-                               <posx>280</posx>
-                               <posy>30</posy>
-                               <width>680</width>
-                               <height>330</height>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <pagecontrol>-</pagecontrol>
-                               <label>$INFO[ListItem.Property(Album_Description)]</label>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>390</posy>
-                               <width>960</width>
-                               <height>5</height>
-                               <texture>separator.png</texture>
-                       </control>
-                       <control type="list" id="49">
-                               <posx>0</posx>
-                               <posy>400</posy>
-                               <width>960</width>
-                               <height>330</height>
-                               <onleft>49</onleft>
-                               <onright>49</onright>
-                               <onup>9000</onup>
-                               <ondown>61</ondown>
-                               <pagecontrol>-</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </focusedlayout>
-                               <content>
-                                       <item>
-                                               <label>$LOCALIZE[557]:</label>
-                                               <label2>$INFO[ListItem.Artist]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Artist)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[515]:</label>
-                                               <label2>$INFO[ListItem.Genre]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Genre)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[563]:</label>
-                                               <label2>$INFO[ListItem.Rating]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Rating)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[175]:</label>
-                                               <label2>$INFO[ListItem.Property(Album_Mood)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Album_Mood))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[176]:</label>
-                                               <label2>$INFO[ListItem.Property(Album_Style)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Album_Style))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[21895]:</label>
-                                               <label2>$INFO[ListItem.Property(Album_Theme)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Album_Theme))</visible>
-                                       </item>
-                                       <item>
-                                               <label>146</label>
-                                               <label2>$INFO[ListItem.Property(Album_Type)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Album_Type))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[21899]:</label>
-                                               <label2>$INFO[ListItem.Property(Album_Label)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Album_Label))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[562]:</label>
-                                               <label2>$INFO[ListItem.Year]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Year)</visible>
-                                       </item>
-                               </content>
-                       </control>
-               </control>
-
-               <control type="group">
-                       <visible>Container.Content(Artists) + !Control.IsVisible(50)</visible>
-                       <posy>70</posy>
-                       <posx>20</posx>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>260</width>
-                               <height>360</height>
-                               <aspectratio>keep</aspectratio>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>280</posx>
-                               <posy>0</posy>
-                               <width>680</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[21821]$INFO[Container(600).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(600).NumPages,/, )]</label>
-                       </control>
-                       <control type="textbox" id="600">
-                               <description>Description Value for Albums</description>
-                               <posx>280</posx>
-                               <posy>30</posy>
-                               <width>680</width>
-                               <height>330</height>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <pagecontrol>-</pagecontrol>
-                               <label>$INFO[ListItem.Property(Artist_Description)]</label>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>390</posy>
-                               <width>960</width>
-                               <height>5</height>
-                               <texture>separator.png</texture>
-                       </control>
-                       <control type="list" id="49">
-                               <posx>0</posx>
-                               <posy>400</posy>
-                               <width>960</width>
-                               <height>330</height>
-                               <onleft>49</onleft>
-                               <onright>49</onright>
-                               <onup>9000</onup>
-                               <ondown>61</ondown>
-                               <pagecontrol>-</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </focusedlayout>
-                               <content>
-                                       <item>
-                                               <label>$LOCALIZE[21893]:</label>
-                                               <label2>$INFO[ListItem.Property(Artist_Born)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Artist_Born))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[21894]:</label>
-                                               <label2>$INFO[ListItem.Property(Artist_Formed)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Artist_Formed))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[515]:</label>
-                                               <label2>$INFO[ListItem.Genre]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Genre)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[175]:</label>
-                                               <label2>$INFO[ListItem.Property(Artist_Mood)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Artist_Mood))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[176]:</label>
-                                               <label2>$INFO[ListItem.Property(Artist_Style)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Artist_Style))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[21892]:</label>
-                                               <label2>$INFO[ListItem.Property(Artist_Instrument)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Artist_Instrument))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[21897]:</label>
-                                               <label2>$INFO[ListItem.Property(Artist_Died)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Artist_Died))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[21896]:</label>
-                                               <label2>$INFO[ListItem.Property(Artist_Disbanded)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Artist_Disbanded))</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[21898]:</label>
-                                               <label2>$INFO[ListItem.Property(Artist_YearsActive)]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Property(Artist_YearsActive))</visible>
-                                       </item>
-                               </content>
-                       </control>
-               </control>
-
-               <control type="panel" id="50">
-                       <posx>0</posx>
-                       <posy>85</posy>
-                       <width>1000</width>
-                       <height>680</height>
-                       <onup>50</onup>
-                       <onleft>50</onleft>
-                       <onright>50</onright>
-                       <ondown>50</ondown>
-                       <pagecontrol>-</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <include>VisibleFadeEffect</include>
-                       <itemlayout condition="Container.Content(Albums)" height="60" width="1000">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>1000</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>30</posx>
-                                       <posy>0</posy>
-                                       <width>940</width>
-                                       <height>60</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <label>([B]$INFO[ListItem.TrackNumber][/B]) - $INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>970</posx>
-                                       <posy>0</posy>
-                                       <width>500</width>
-                                       <height>60</height>
-                                       <font>font13</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Duration]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout condition="Container.Content(Albums)" height="60" width="700">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>1000</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>30</posx>
-                                       <posy>0</posy>
-                                       <width>940</width>
-                                       <height>60</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <label>([B]$INFO[ListItem.TrackNumber][/B]) - $INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>970</posx>
-                                       <posy>0</posy>
-                                       <width>500</width>
-                                       <height>60</height>
-                                       <font>font13</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Duration]</label>
-                               </control>
-                       </focusedlayout>
-                       <itemlayout condition="Container.Content(Artists)" height="260" width="250">
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>230</width>
-                                       <height>230</height>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="8">ThumbShadow.png</bordertexture>
-                                       <bordersize>8</bordersize>
-                               </control>
-                               <control type="label">
-                                       <posx>125</posx>
-                                       <posy>230</posy>
-                                       <width>230</width>
-                                       <height>30</height>
-                                       <font>font12</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout condition="Container.Content(Artists)" height="260" width="250">
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>230</width>
-                                       <height>230</height>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="8">ThumbShadow.png</bordertexture>
-                                       <bordersize>8</bordersize>
-                               </control>
-                               <control type="label">
-                                       <posx>125</posx>
-                                       <posy>230</posy>
-                                       <width>230</width>
-                                       <height>30</height>
-                                       <font>font12</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <posx>980</posx>
-                       <posy>790</posy>
-                       <width>800</width>
-                       <height>30</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <scroll>true</scroll>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <label>$INFO[Container(50).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(50).NumPages,/, )]</label>
-                       <visible>Control.IsVisible(50)</visible>
-               </control>
-
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>830</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>10</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>50</onup>
-                       <ondown>49</ondown>
-                       <control type="button" id="5">
-                               <description>Cast/Review</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>206</label>
-                       </control>
-                       <control type="button" id="6">
-                               <description>Refresh</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>184</label>
-                       </control>
-                       <control type="button" id="10">
-                               <description>Get Thumb</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>13405</label>
-                       </control>
-                       <control type="button" id="12">
-                               <description>Get Fanart</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>20413</label>
-                       </control>
-               </control>
-
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogBusy.xml b/addons/skin.touched/4x3Hirez/DialogBusy.xml
deleted file mode 100644 (file)
index 5543873..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<window id="136">
-       <animation effect="fade" time="100">WindowOpen</animation>
-       <animation effect="fade" time="200">WindowClose</animation>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <colordiffuse>BBFFFFFF</colordiffuse>
-                       <texture>black-back.png</texture>
-               </control>
-               <control type="group">
-                       <posx>490</posx>
-                       <posy>420</posy>
-                       <control type="image">
-                               <description>background image</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>300</width>
-                               <height>100</height>
-                               <texture border="20">OverlayDialogBackground.png</texture>
-                       </control>
-                       <control type="image">
-                               <description>Busy animation</description>
-                               <posx>20</posx>
-                               <posy>25</posy>
-                               <width>50</width>
-                               <height>50</height>
-                               <texture>busy.png</texture>
-                               <aspectratio>keep</aspectratio>
-                               <animation effect="rotate" start="0" end="360" center="auto" time="1200" loop="true" condition="true">conditional</animation>
-                       </control>
-                       <control type="label">
-                               <description>Busy label</description>
-                               <posx>90</posx>
-                               <posy>34</posy>
-                               <width>180</width>
-                               <height>32</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[31009]</label>
-                               <font>font16</font>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogButtonMenu.xml b/addons/skin.touched/4x3Hirez/DialogButtonMenu.xml
deleted file mode 100644 (file)
index 939f55e..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-<window type="buttonMenu" id="111">
-       <defaultcontrol always="true">13</defaultcontrol>
-       <include>dialogeffect</include>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1280</width>
-                       <height>720</height>
-                       <texture>black-back.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1280</width>
-                       <height>720</height>
-                       <texture>black-back.png</texture>
-                       <colordiffuse>99FFFFFF</colordiffuse>
-               </control>
-               <control type="group">
-                       <posx>305</posx>
-                       <posy>245</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>670</width>
-                               <height>210</height>
-                               <texture border="20">OverlayDialogBackground.png</texture>
-                               <visible>!System.HasAlarm(shutdowntimer)</visible>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>670</width>
-                               <height>235</height>
-                               <texture border="20">OverlayDialogBackground.png</texture>
-                               <visible>System.HasAlarm(shutdowntimer)</visible>
-                       </control>
-                       <control type="image">
-                               <posx>10</posx>
-                               <posy>5</posy>
-                               <width>650</width>
-                               <height>60</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture>GlassTitleBar.png</texture>
-                       </control>
-                       <control type="button">
-                               <description>Close Window button</description>
-                               <posx>570</posx>
-                               <posy>5</posy>
-                               <width>64</width>
-                               <height>32</height>
-                               <label>-</label>
-                               <font>-</font>
-                               <onclick>PreviousMenu</onclick>
-                               <texturefocus>DialogCloseButton-focus.png</texturefocus>
-                               <texturenofocus>DialogCloseButton.png</texturenofocus>
-                               <onleft>13</onleft>
-                               <onright>13</onright>
-                               <onup>13</onup>
-                               <ondown>13</ondown>
-                               <visible>system.getbool(input.enablemouse)</visible>
-                       </control>
-                       <control type="label" id="3100">
-                               <description>Label control</description>
-                               <posx>10</posx>
-                               <posy>15</posy>
-                               <width>650</width>
-                               <height>35</height>
-                               <label>-</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font24_title</font>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                       </control>
-                       <control type="image">
-                               <posx>10</posx>
-                               <posy>60</posy>
-                               <width>650</width>
-                               <height>100</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture>GlassTitleBar.png</texture>
-                               <colordiffuse>99FFFFFF</colordiffuse>
-                       </control>
-                       <control type="grouplist">
-                               <posx>15</posx>
-                               <posy>85</posy>
-                               <width>640</width>
-                               <itemgap>20</itemgap>
-                               <align>center</align>
-                               <orientation>Horizontal</orientation>
-                               <control type="togglebutton" id="9">
-                                       <description>Master mode button</description>
-                                       <width>90</width>
-                                       <height>90</height>
-                                       <label>20046</label>
-                                       <altlabel>20045</altlabel>
-                                       <texturefocus>ButtonMenuMasterFO.png</texturefocus>
-                                       <texturenofocus>ButtonMenuMasterNF.png</texturenofocus>
-                                       <usealttexture>!System.IsMaster</usealttexture>
-                                       <alttexturefocus>ButtonMenuNoMasterFO.png</alttexturefocus>
-                                       <alttexturenofocus>ButtonMenuNoMasterNF.png</alttexturenofocus>
-                                       <onclick>xbmc.mastermode</onclick>
-                                       <pulseonselect>no</pulseonselect>
-                                       <font>-</font>
-                                       <visible>System.HasLocks</visible>
-                               </control>
-                               <control type="button" id="10">
-                                       <description>LogOff Profile</description>
-                                       <width>90</width>
-                                       <height>90</height>
-                                       <texturefocus>ButtonMenuLogOffFO.png</texturefocus>
-                                       <texturenofocus>ButtonMenuLogOffNF.png</texturenofocus>
-                                       <onclick>dialog.close(all,true)</onclick>
-                                       <onclick>System.LogOff</onclick>
-                                       <pulseonselect>no</pulseonselect>
-                                       <font>-</font>
-                                       <label>$LOCALIZE[20126] $INFO[system.profilename]</label>
-                                       <visible>System.HasLoginScreen | IntegerGreaterThan(System.ProfileCount,1)</visible>
-                                       <visible>System.Loggedon</visible>
-                               </control>
-                               <control type="button" id="11">
-                                       <description>Exit xbmc</description>
-                                       <width>90</width>
-                                       <height>90</height>
-                                       <texturefocus>ButtonMenuExitFO.png</texturefocus>
-                                       <texturenofocus>ButtonMenuExitNF.png</texturenofocus>
-                                       <onclick>XBMC.Quit()</onclick>
-                                       <pulseonselect>no</pulseonselect>
-                                       <font>-</font>
-                                       <label>$LOCALIZE[13012]</label>
-                               </control>
-                               <control type="group" id="13">
-                                       <width>90</width>
-                                       <defaultcontrol always="true">15</defaultcontrol>
-                                       <control type="button" id="17">
-                                               <description>Cancel Shutdown Timer button</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>90</width>
-                                               <height>90</height>
-                                               <texturefocus>-</texturefocus>
-                                               <texturenofocus>-</texturenofocus>
-                                               <onclick>XBMC.CancelAlarm(shutdowntimer)</onclick>
-                                               <pulseonselect>no</pulseonselect>
-                                               <font>-</font>
-                                               <label>20151</label>
-                                               <onleft>11</onleft>
-                                               <onright>12</onright>
-                                               <onup>15</onup>
-                                               <ondown>16</ondown>
-                                               <visible>System.HasAlarm(shutdowntimer)</visible>
-                                       </control>
-                                       <control type="button" id="16">
-                                               <description>Custom Shutdown Timer button</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>90</width>
-                                               <height>90</height>
-                                               <texturefocus>-</texturefocus>
-                                               <texturenofocus>-</texturenofocus>
-                                               <onclick>XBMC.AlarmClock(shutdowntimer,XBMC.Powerdown())</onclick>
-                                               <pulseonselect>no</pulseonselect>
-                                               <font>-</font>
-                                               <label>20150</label>
-                                               <onleft>11</onleft>
-                                               <onright>12</onright>
-                                               <onup>17</onup>
-                                               <ondown>15</ondown>
-                                       </control>
-                                       <control type="button" id="15">
-                                               <description>Shutdown button</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>90</width>
-                                               <height>90</height>
-                                               <texturefocus>-</texturefocus>
-                                               <texturenofocus>ButtonMenuShutdownNF.png</texturenofocus>
-                                               <onclick>XBMC.Powerdown()</onclick>
-                                               <pulseonselect>no</pulseonselect>
-                                               <font>-</font>
-                                               <label>13016</label>
-                                               <onleft>11</onleft>
-                                               <onright>12</onright>
-                                               <onup>16</onup>
-                                               <ondown>17</ondown>
-                                       </control>
-                                       <control type="image">
-                                               <description>Shutdown focus image</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>90</width>
-                                               <height>90</height>
-                                               <texture>ButtonMenuShutdownFO.png</texture>
-                                               <visible>Control.HasFocus(15) | Control.HasFocus(16) | Control.HasFocus(17)</visible>
-                                       </control>
-                               </control>
-                               <control type="button" id="12">
-                                       <description>Suspend xbmc</description>
-                                       <width>90</width>
-                                       <height>90</height>
-                                       <texturefocus>ButtonMenuSleepFO.png</texturefocus>
-                                       <texturenofocus>ButtonMenuSleepNF.png</texturenofocus>
-                                       <onclick>XBMC.Suspend()</onclick>
-                                       <pulseonselect>no</pulseonselect>
-                                       <font>-</font>
-                                       <label>$LOCALIZE[13011]</label>
-                               </control>
-                               <control type="button" id="14">
-                                       <description>Reboot button</description>
-                                       <width>90</width>
-                                       <height>90</height>
-                                       <texturefocus>ButtonMenuRestartFO.png</texturefocus>
-                                       <texturenofocus>ButtonMenuRestartNF.png</texturenofocus>
-                                       <onclick>XBMC.Reset()</onclick>
-                                       <pulseonselect>no</pulseonselect>
-                                       <font>-</font>
-                                       <label>13013</label>
-                               </control>
-                       </control>
-                       <control type="group">
-                               <posx>270</posx>
-                               <posy>70</posy>
-                               <visible>ControlGroup(13).HasFocus</visible>
-                               <include>VisibleFadeEffect</include>
-                               <animation effect="slide" start="0,0" end="55,0" time="0" condition="System.HasLocks">Conditional</animation>
-                               <animation effect="slide" start="0,0" end="55,0" time="0" condition="[System.HasLoginScreen | IntegerGreaterThan(System.ProfileCount,1)] + System.LoggedOn">Conditional</animation>
-                               <control type="image">
-                                       <description>Shutdown Arrow Up image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>20</width>
-                                       <height>15</height>
-                                       <texture>ArrowUp.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Shutdown Arrow Down image</description>
-                                       <posx>0</posx>
-                                       <posy>107</posy>
-                                       <width>20</width>
-                                       <height>15</height>
-                                       <texture>ArrowDown.png</texture>
-                               </control>
-                       </control>
-                       <control type="label">
-                               <posx>10</posx>
-                               <posy>190</posy>
-                               <width>650</width>
-                               <height>35</height>
-                               <font>font12</font>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[31329] [B]$INFO[System.Alarmpos][/B]</label>
-                               <visible>System.HasAlarm(shutdowntimer)</visible>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogContentSettings.xml b/addons/skin.touched/4x3Hirez/DialogContentSettings.xml
deleted file mode 100644 (file)
index 6c2806e..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-<window id="132">
-       <defaultcontrol always="true">3</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$LOCALIZE[20333]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-
-               <control type="group">
-                       <posx>20</posx>
-                       <control type="label">
-                               <description>Content Picker Header</description>
-                               <posx>0</posx>
-                               <posy>70</posy>
-                               <width>460</width>
-                               <height>40</height>
-                               <font>font13_title</font>
-                               <label>$LOCALIZE[20344]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <textcolor>black</textcolor>
-                       </control>
-                       <control type="spincontrolex" id="3">
-                               <description>Content Picker</description>
-                               <posx>0</posx>
-                               <posy>120</posy>
-                               <width>460</width>
-                               <height>50</height>
-                               <texturefocus border="5">ListNF.png</texturefocus>
-                               <texturenofocus border="5">ListNF.png</texturenofocus>
-                               <font>-</font>
-                               <label>-</label>
-                               <reverse>yes</reverse>
-                               <onup>28</onup>
-                               <ondown>5</ondown>
-                               <onleft>60</onleft>
-                               <onright>4</onright>
-                       </control>
-                       <control type="label">
-                               <description>Content Picker label</description>
-                               <posx>10</posx>
-                               <posy>120</posy>
-                               <width>280</width>
-                               <height>50</height>
-                               <font>font13</font>
-                               <label>$INFO[Control.GetLabel(3)]</label>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <textcolor>white</textcolor>
-                       </control>
-                       <control type="label">
-                               <description>Used Scraper Header</description>
-                               <posx>0</posx>
-                               <posy>180</posy>
-                               <width>460</width>
-                               <height>20</height>
-                               <font>font13</font>
-                               <label>$LOCALIZE[31312]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <textcolor>black</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                       </control>
-                       <control type="image">
-                               <description>Used Scraper Image</description>
-                               <posx>0</posx>
-                               <posy>210</posy>
-                               <width>460</width>
-                               <height>190</height>
-                               <aspectratio>keep</aspectratio>
-                               <texture>$INFO[ListItem.Icon]</texture>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                       </control>
-                       <control type="label">
-                               <description>Used Scaper Label</description>
-                               <posx>0</posx>
-                               <posy>400</posy>
-                               <width>460</width>
-                               <height>30</height>
-                               <font>font13</font>
-                               <label>[B]$INFO[ListItem.Label][/B]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <textcolor>black</textcolor>
-                       </control>
-               </control>
-               <control type="group">
-                       <posx>520</posx>
-                       <control type="label">
-                               <description>Scraper List Header</description>
-                               <posx>0</posx>
-                               <posy>70</posy>
-                               <width>460</width>
-                               <height>40</height>
-                               <font>font13_title</font>
-                               <label>$LOCALIZE[31313]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <textcolor>black</textcolor>
-                       </control>
-                       <control type="list" id="4">
-                               <posx>0</posx>
-                               <posy>120</posy>
-                               <width>460</width>
-                               <height>310</height>
-                               <onup>4</onup>
-                               <onleft>3</onleft>
-                               <onright>60</onright>
-                               <ondown>4</ondown>
-                               <pagecontrol>60</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="50" width="460">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>460</width>
-                                               <height>51</height>
-                                               <texture>MenuItemNF.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>5</posx>
-                                               <posy>5</posy>
-                                               <width>40</width>
-                                               <height>40</height>
-                                               <texture>$INFO[Listitem.Icon]</texture>
-                                       </control>
-                                       <control type="label" width="460">
-                                               <posx>60</posx>
-                                               <posy>0</posy>
-                                               <width>410</width>
-                                               <height>50</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="50">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>460</width>
-                                               <height>51</height>
-                                               <texture>MenuItemNF.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>5</posx>
-                                               <posy>5</posy>
-                                               <width>40</width>
-                                               <height>40</height>
-                                               <texture>$INFO[Listitem.Icon]</texture>
-                                       </control>
-                                       <control type="label" width="460">
-                                               <posx>60</posx>
-                                               <posy>0</posy>
-                                               <width>410</width>
-                                               <height>50</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                               </focusedlayout>
-                       </control>
-               </control>
-               <control type="image">
-                       <posx>20</posx>
-                       <posy>460</posy>
-                       <width>960</width>
-                       <height>5</height>
-                       <texture>separator.png</texture>
-               </control>
-               <control type="label">
-                       <description>Scanning Options Header</description>
-                       <posx>20</posx>
-                       <posy>490</posy>
-                       <width>960</width>
-                       <height>30</height>
-                       <font>font13_title</font>
-                       <label>$LOCALIZE[31314]</label>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="grouplist" id="5">
-                       <description>control area</description>
-                       <posx>20</posx>
-                       <posy>540</posy>
-                       <width>960</width>
-                       <height>250</height>
-                       <itemgap>-1</itemgap>
-                       <onup>3</onup>
-                       <ondown>28</ondown>
-                       <onleft>5</onleft>
-                       <onright>5</onright>
-               </control>
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>830</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>50</onup>
-                       <ondown>49</ondown>
-                       <control type="button" id="28">
-                               <description>OK Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-                       <control type="button" id="29">
-                               <description>Cancel Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-                       <control type="button" id="6">
-                               <description>Settings Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>5</label>
-                       </control>
-               </control>
-
-               <control type="button" id="7">
-                       <description>Default Button</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>50</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="radiobutton" id="8">
-                       <description>Default RadioButton</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>50</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-               </control>
-
-               <control type="group">
-                       <control type="image">
-                               <posx>370</posx>
-                               <posy>60</posy>
-                               <width>5</width>
-                               <height>280</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture>separator_vertical.png</texture>
-                       </control>
-                       <control type="scrollbar" id="60">
-                               <posx>745</posx>
-                               <posy>100</posy>
-                               <width>25</width>
-                               <height>240</height>
-                               <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                               <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
-                               <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                               <textureslidernib>ScrollBarNib.png</textureslidernib>
-                               <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                               <onleft>4</onleft>
-                               <onright>3</onright>
-                               <showonepage>false</showonepage>
-                               <orientation>vertical</orientation>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogContextMenu.xml b/addons/skin.touched/4x3Hirez/DialogContextMenu.xml
deleted file mode 100644 (file)
index 4e21f02..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<window id="106">
-       <defaultcontrol>1000</defaultcontrol>
-       <include>dialogeffect</include>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <control type="image" id="999">
-                       <description>background image</description>
-                       <posx>0</posx>
-                       <posy>-20</posy>
-                       <width>400</width>
-                       <height>760</height>
-                       <texture border="5">SubBack.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>-20</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>300</width>
-                       <label>$LOCALIZE[31007]</label>
-               </control>
-               <control type="group">
-                       <posx>330</posx>
-                       <posy>-20</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="grouplist" id="996">
-                       <description>grouplist for context buttons</description>
-                       <posx>10</posx>
-                       <posy>40</posy>
-                       <width>400</width>
-                       <height max="690">auto</height>
-                       <itemgap>0</itemgap>
-               </control>
-               <control type="button" id="1000">
-                       <description>button template</description>
-                       <posx>0</posx>
-                       <posy>-</posy>
-                       <width>380</width>
-                       <height>60</height>
-                       <font>font13</font>
-                       <align>center</align>
-                       <textcolor>black</textcolor>
-                       <texturefocus>button-focus2.png</texturefocus>
-                       <texturenofocus>button-nofocus.png</texturenofocus>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogFavourites.xml b/addons/skin.touched/4x3Hirez/DialogFavourites.xml
deleted file mode 100644 (file)
index 7fac8a2..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-<window type="dialog" id="134">
-       <defaultcontrol always="true">450</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>290</posx>
-               <posy>80</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>700</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>740</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>600</width>
-                       <label>$LOCALIZE[1036]</label>
-               </control>
-               <control type="group">
-                       <posx>630</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="list" id="450">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>680</height>
-                       <onup>450</onup>
-                       <onleft>450</onleft>
-                       <onright>450</onright>
-                       <ondown>450</ondown>
-                       <pagecontrol>-</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="80">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>700</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>20</posx>
-                                       <posy>0</posy>
-                                       <width>530</width>
-                                       <height>80</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="image">
-                                       <posx>560</posx>
-                                       <posy>4</posy>
-                                       <width>120</width>
-                                       <height>72</height>
-                                       <aspectratio align="right">keep</aspectratio>
-                                       <fadetime>IconCrossfadeTime</fadetime>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="5">ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="80">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>700</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>20</posx>
-                                       <posy>0</posy>
-                                       <width>530</width>
-                                       <height>80</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="image">
-                                       <posx>560</posx>
-                                       <posy>4</posy>
-                                       <width>120</width>
-                                       <height>72</height>
-                                       <aspectratio align="right">keep</aspectratio>
-                                       <fadetime>IconCrossfadeTime</fadetime>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="5">ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <description>Page label</description>
-                       <posx>680</posx>
-                       <posy>760</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <label>($INFO[Container(450).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(450).CurrentPage]/$INFO[Container(450).NumPages])</label>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogFileStacking.xml b/addons/skin.touched/4x3Hirez/DialogFileStacking.xml
deleted file mode 100644 (file)
index bfb1ca7..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-<window id="2008">
-       <defaultcontrol>450</defaultcontrol>
-       <include>dialogeffect</include>
-       <coordinates>
-               <system>1</system>
-               <posx>315</posx>
-               <posy>260</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>650</width>
-                       <height>200</height>
-                       <texture border="20">OverlayDialogBackground.png</texture>
-               </control>
-               <control type="button">
-                       <description>Close Window button</description>
-                       <posx>560</posx>
-                       <posy>5</posy>
-                       <width>64</width>
-                       <height>32</height>
-                       <label>-</label>
-                       <font>-</font>
-                       <onclick>PreviousMenu</onclick>
-                       <texturefocus>DialogCloseButton-focus.png</texturefocus>
-                       <texturenofocus>DialogCloseButton.png</texturenofocus>
-                       <onleft>13</onleft>
-                       <onright>13</onright>
-                       <onup>13</onup>
-                       <ondown>13</ondown>
-                       <visible>system.getbool(input.enablemouse)</visible>
-               </control>
-               <control type="label">
-                       <description>heading label</description>
-                       <posx>40</posx>
-                       <posy>18</posy>
-                       <width>570</width>
-                       <height>30</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <font>font13</font>
-                       <label>$INFO[ListItem.Label]</label>
-                       <textcolor>white</textcolor>
-               </control>
-               <control type="label">
-                       <posx>40</posx>
-                       <posy>60</posy>
-                       <width>570</width>
-                       <height>30</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <font>font12</font>
-                       <label>31060</label>
-                       <textcolor>grey2</textcolor>
-               </control>
-               <control type="image">
-                       <posx>50</posx>
-                       <posy>110</posy>
-                       <width>20</width>
-                       <height>25</height>
-                       <texture>scroll-left-focus.png</texture>
-                       <visible>Container(450).HasPrevious</visible>
-               </control>
-               <control type="image">
-                       <posx>575</posx>
-                       <posy>110</posy>
-                       <width>20</width>
-                       <height>25</height>
-                       <texture>scroll-right-focus.png</texture>
-                       <visible>Container(450).HasNext</visible>
-               </control>
-               <control type="list" id="450">
-                       <posx>85</posx>
-                       <posy>105</posy>
-                       <width>480</width>
-                       <height>100</height>
-                       <onleft>450</onleft>
-                       <onright>450</onright>
-                       <onup>450</onup>
-                       <ondown>450</ondown>
-                       <orientation>horizontal</orientation>
-                       <focusposition>2</focusposition>
-                       <viewtype label="535">list</viewtype>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout width="40">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>38</width>
-                                       <height>32</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture>StackNF.png</texture>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout width="40">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>38</width>
-                                       <height>32</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture>StackFO.png</texture>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <posx>40</posx>
-                       <posy>155</posy>
-                       <width>570</width>
-                       <height>22</height>
-                       <font>font13_title</font>
-                       <align>center</align>
-                       <info>Container(450).ListItem.Label</info>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogGamepad.xml b/addons/skin.touched/4x3Hirez/DialogGamepad.xml
deleted file mode 100644 (file)
index 5a24bfe..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<window id="110">
-       <defaultcontrol>-</defaultcontrol>
-       <coordinates>
-               <system>1</system>
-               <posx>290</posx>
-               <posy>300</posy>
-       </coordinates>
-       <include>dialogeffect</include>
-       <controls>
-               <control type="image">
-                       <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                       <posx>-30</posx>
-                       <posy>-30</posy>
-                       <width>760</width>
-                       <height>370</height>
-                       <texture border="30">DialogShadow.png</texture>
-               </control>
-               <control type="image">
-                       <description>Header Background</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>700</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="group">
-                       <posx>630</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>600</width>
-                       <label>$LOCALIZE[13406]</label>
-               </control>
-               <control type="image">
-                       <description>Background</description>
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>250</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label" id="2">
-                       <description>dialog line 1</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label" id="3">
-                       <description>dialog line 2</description>
-                       <posx>20</posx>
-                       <posy>110</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label" id="4">
-                       <description>dialog line 3</description>
-                       <posx>20</posx>
-                       <posy>200</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font30_title</font>
-                       <textcolor>black</textcolor>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogKaiToast.xml b/addons/skin.touched/4x3Hirez/DialogKaiToast.xml
deleted file mode 100644 (file)
index 27c8f66..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<window id="107">
-       <include>Window_OpenClose_Animation</include>
-       <controls>
-               <control type="group">
-                       <posx>526r</posx>
-                       <posy>110r</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>490</width>
-                               <height>80</height>
-                               <texture border="8">IconBack.png</texture>
-                       </control>
-                       <control type="image" id="400">
-                               <description>Icon</description>
-                               <posx>10</posx>
-                               <posy>10</posy>
-                               <width>70</width>
-                               <height>60</height>
-                               <aspectratio>keep</aspectratio>
-                               <texture>DefaultFile.png</texture>
-                       </control>
-                       <control type="fadelabel" id="401">
-                               <description>Line 1 Label</description>
-                               <posx>100</posx>
-                               <posy>10</posy>
-                               <width>370</width>
-                               <height>20</height>
-                               <font>font12_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <scrollout>false</scrollout>
-                               <pauseatend>2000</pauseatend>
-                       </control>
-                       <control type="textbox" id="402">
-                               <description>Line 2 Label</description>
-                               <posx>100</posx>
-                               <posy>25</posy>
-                               <width>370</width>
-                               <height>40</height>
-                               <font>font12</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                       </control>
-                       <control type="image" id="403">
-                               <description>avatar</description>
-                               <posx>10</posx>
-                               <posy>10</posy>
-                               <width>70</width>
-                               <height>60</height>
-                               <aspectratio>keep</aspectratio>
-                               <visible>false</visible>
-                               <texture>DefaultIconInfo.png</texture>
-                       </control>
-                       <control type="image" id="404">
-                               <description>avatar</description>
-                               <posx>10</posx>
-                               <posy>10</posy>
-                               <width>70</width>
-                               <height>60</height>
-                               <aspectratio>keep</aspectratio>
-                               <visible>false</visible>
-                               <texture>DefaultIconWarning.png</texture>
-                       </control>
-                       <control type="image" id="405">
-                               <description>avatar</description>
-                               <posx>10</posx>
-                               <posy>10</posy>
-                               <width>70</width>
-                               <height>60</height>
-                               <aspectratio>keep</aspectratio>
-                               <visible>false</visible>
-                               <texture>DefaultIconError.png</texture>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogKaraokeSongSelector.xml b/addons/skin.touched/4x3Hirez/DialogKaraokeSongSelector.xml
deleted file mode 100644 (file)
index 0523d9d..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<window type="dialog" id="143">
-       <include>dialogeffect</include>
-       <coordinates>
-               <system>1</system>
-               <posx>442</posx>
-               <posy>220</posy>
-       </coordinates>
-       <include>dialogeffect</include>
-       <controls>
-               <control type="image">
-                       <description>Header Background</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>395</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="group">
-                       <posx>325</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>290</width>
-                       <label>$LOCALIZE[31321]</label>
-               </control>
-               <control type="image">
-                       <description>Background</description>
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>395</width>
-                       <height>140</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label" id="401">
-                       <description>Song Number Label</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>355</width>
-                       <height>30</height>
-                       <font>font28_title</font>
-                       <textcolor>black</textcolor>
-                       <align>center</align>
-                       <aligny>center</aligny>
-               </control>
-               <control type="label" id="402">
-                       <description>Song Name Label</description>
-                       <posx>20</posx>
-                       <posy>150</posy>
-                       <width>355</width>
-                       <height>20</height>
-                       <font>font24</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <textcolor>black</textcolor>
-                       <scroll>true</scroll>
-               </control>
-               <control type="group">
-                       <posx>0</posx>
-                       <posy>205</posy>
-                       <include>KeypadButtons</include>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogKaraokeSongSelectorLarge.xml b/addons/skin.touched/4x3Hirez/DialogKaraokeSongSelectorLarge.xml
deleted file mode 100644 (file)
index 4159f50..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<window type="dialog" id="144">
-       <include>dialogeffect</include>
-       <coordinates>
-               <system>1</system>
-               <posx>442</posx>
-               <posy>220</posy>
-       </coordinates>
-       <include>dialogeffect</include>
-       <controls>
-               <control type="image">
-                       <description>Header Background</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>395</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="group">
-                       <posx>325</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>290</width>
-                       <label>$LOCALIZE[31321]</label>
-               </control>
-               <control type="image">
-                       <description>Background</description>
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>395</width>
-                       <height>140</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label" id="401">
-                       <description>Song Number Label</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>355</width>
-                       <height>30</height>
-                       <font>font28_title</font>
-                       <textcolor>black</textcolor>
-                       <align>center</align>
-                       <aligny>center</aligny>
-               </control>
-               <control type="label" id="402">
-                       <description>Song Name Label</description>
-                       <posx>20</posx>
-                       <posy>150</posy>
-                       <width>355</width>
-                       <height>20</height>
-                       <font>font24</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <textcolor>black</textcolor>
-                       <scroll>true</scroll>
-               </control>
-               <control type="group">
-                       <posx>0</posx>
-                       <posy>205</posy>
-                       <include>KeypadButtons</include>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogKeyboard.xml b/addons/skin.touched/4x3Hirez/DialogKeyboard.xml
deleted file mode 100644 (file)
index 20ff506..0000000
+++ /dev/null
@@ -1,752 +0,0 @@
-<window id="103">
-       <defaultcontrol always="true">65</defaultcontrol>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <texture>black-back.png</texture>
-                       <animation effect="fade" time="400">WindowOpen</animation>
-                       <animation effect="fade" time="200">WindowClose</animation>
-               </control>
-               <control type="button">
-                       <description>Hidden button to close the keyboard when its focused</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <texturenofocus>-</texturenofocus>
-                       <texturefocus>-</texturefocus>
-                       <onclick>PreviousMenu</onclick>
-               </control>
-               <control type="group">
-                       <animation effect="slide" start="0,500" end="0,0" time="400" easing="out" tween="quadratic" >WindowOpen</animation>
-                       <animation effect="slide" start="0,0" end="0,500" time="400" easing="in" tween="quadratic" >WindowClose</animation>
-                       <animation effect="slide" start="0,0" end="0,500" time="400" easing="in" tween="quadratic" condition="Window.IsVisible(numericinput)">Conditional</animation>
-                       <posx>15</posx>
-                       <posy>500r</posy>
-                       <control type="button">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>500</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>-</onclick>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>1250</width>
-                               <height>60</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture border="20">KeyboardEditArea.png</texture>
-                       </control>      
-                       <control type="label" id="310">
-                               <description>Edit Text</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>1250</width>
-                               <height>60</height>
-                               <font>font16</font>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="label" id="311">
-                               <description>dialog Heading</description>
-                               <posx>0</posx>
-                               <posy>-30</posy>
-                               <width>1250</width>
-                               <height>20</height>
-                               <font>font13_title</font>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="group">
-                               <posx>0</posx>
-                               <posy>70</posy>
-<!-- First Row -->
-                               <control type="image">
-                                       <description>Blank image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>65</width>
-                                       <height>80</height>
-                                       <texture border="5">KeyboardKeyDark.png</texture>
-                               </control>
-                               <control type="button" id="49">
-                                       <description>'1' button</description>
-                                       <posx>70</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="50">
-                                       <description>'2' button</description>
-                                       <posx>170</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="51">
-                                       <description>'3' button</description>
-                                       <posx>270</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="52">
-                                       <description>'4' button</description>
-                                       <posx>370</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="53">
-                                       <description>'5' button</description>
-                                       <posx>470</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="54">
-                                       <description>'6' button</description>
-                                       <posx>570</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="55">
-                                       <description>'7' button</description>
-                                       <posx>670</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="56">
-                                       <description>'8' button</description>
-                                       <posx>770</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="57">
-                                       <description>'9' button</description>
-                                       <posx>870</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="48">
-                                       <description>'0' button</description>
-                                       <posx>970</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="togglebutton" id="304">
-                                       <description>Symbols button</description>
-                                       <posx>1070</posx>
-                                       <posy>0</posy>
-                                       <width>180</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <alttexturenofocus border="5">KeyboardKeyDark.png</alttexturenofocus>
-                                       <alttexturefocus border="5">KeyboardKeyFocus.png</alttexturefocus>
-                                       <textcolor>white</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>@#$%</label>
-                                       <altlabel>[COLOR=blue]@#$%[/COLOR]</altlabel>
-                               </control>
-<!-- Second Row -->
-                               <control type="button" id="307">
-                                       <description>IP Input button</description>
-                                       <posx>0</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>white</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>31003</label>
-                               </control>
-                               <control type="button" id="81">
-                                       <description>'Q' button</description>
-                                       <posx>100</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="87">
-                                       <description>'W' button</description>
-                                       <posx>200</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="69">
-                                       <description>'E' button</description>
-                                       <posx>300</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="82">
-                                       <description>'R' button</description>
-                                       <posx>400</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="84">
-                                       <description>'T' button</description>
-                                       <posx>500</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="89">
-                                       <description>'Y' button</description>
-                                       <posx>600</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="85">
-                                       <description>'U' button</description>
-                                       <posx>700</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="73">
-                                       <description>'I' button</description>
-                                       <posx>800</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="79">
-                                       <description>'O' button</description>
-                                       <posx>900</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="80">
-                                       <description>'P' button</description>
-                                       <posx>1000</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="8">
-                                       <description>'BACKSPACE' button</description>
-                                       <posx>1100</posx>
-                                       <posy>85</posy>
-                                       <width>150</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>white</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                               </control>
-                               <control type="image">
-                                       <description>BackSpace Icon image</description>
-                                       <posx>1150</posx>
-                                       <posy>100</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <texture>icon_backspace.png</texture>
-                               </control>
-<!-- Third Row -->
-                               <control type="togglebutton" id="303">
-                                       <description>CAPS LOCK button</description>
-                                       <posx>0</posx>
-                                       <posy>170</posy>
-                                       <width>125</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <alttexturenofocus border="5">KeyboardKeyDark.png</alttexturenofocus>
-                                       <alttexturefocus border="5">KeyboardKeyFocus.png</alttexturefocus>
-                                       <textcolor>white</textcolor>
-                                       <font>font13</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>31004</label>
-                                       <altlabel>[COLOR=blue]$LOCALIZE[31004][/COLOR]</altlabel>
-                               </control>
-                               <control type="button" id="65">
-                                       <description>'A' button</description>
-                                       <posx>130</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="83">
-                                       <description>'S' button</description>
-                                       <posx>230</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="68">
-                                       <description>'D' button</description>
-                                       <posx>330</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="70">
-                                       <description>'F' button</description>
-                                       <posx>430</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="71">
-                                       <description>'G' button</description>
-                                       <posx>530</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="72">
-                                       <description>'H' button</description>
-                                       <posx>630</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="74">
-                                       <description>'J' button</description>
-                                       <posx>730</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="75">
-                                       <description>'K' button</description>
-                                       <posx>830</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="76">
-                                       <description>'L' button</description>
-                                       <posx>930</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="300">
-                                       <description>DONE button</description>
-                                       <posx>1030</posx>
-                                       <posy>170</posy>
-                                       <width>220</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>white</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                               </control>
-                               <control type="image">
-                                       <description>Enter\done Icon image</description>
-                                       <posx>1110</posx>
-                                       <posy>185</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>icon_enter.png</texture>
-                               </control>
-<!-- Forth Row -->
-                               <control type="button" id="302">
-                                       <description>SHIFT button</description>
-                                       <posx>0</posx>
-                                       <posy>255</posy>
-                                       <width>150</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>white</textcolor>
-                                       <font>font16</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                               </control>
-                               <control type="image">
-                                       <description>Enter\done Icon image</description>
-                                       <posx>50</posx>
-                                       <posy>270</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>icon_shift.png</texture>
-                               </control>
-                               <control type="button" id="90">
-                                       <description>'Z' button</description>
-                                       <posx>160</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="88">
-                                       <description>'X' button</description>
-                                       <posx>260</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="67">
-                                       <description>'C' button</description>
-                                       <posx>360</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="86">
-                                       <description>'V' button</description>
-                                       <posx>460</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="66">
-                                       <description>'B' button</description>
-                                       <posx>560</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="78">
-                                       <description>'N' button</description>
-                                       <posx>660</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="77">
-                                       <description>'M' button</description>
-                                       <posx>760</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                               </control>
-                               <control type="button" id="305">
-                                       <description>previous button</description>
-                                       <posx>860</posx>
-                                       <posy>255</posy>
-                                       <width>193</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>white</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                               </control>
-                               <control type="image">
-                                       <description>Previous Icon image</description>
-                                       <posx>930</posx>
-                                       <posy>275</posy>
-                                       <width>50</width>
-                                       <height>40</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture flipx="true">icon_arrowkey.png</texture>
-                               </control>
-                               <control type="button" id="306">
-                                       <description>next button</description>
-                                       <posx>1058</posx>
-                                       <posy>255</posy>
-                                       <width>191</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>white</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label></label>
-                               </control>
-                               <control type="image">
-                                       <description>Next Icon image</description>
-                                       <posx>1135</posx>
-                                       <posy>275</posy>
-                                       <width>50</width>
-                                       <height>40</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>icon_arrowkey.png</texture>
-                               </control>
-<!-- Fifth Row -->
-                               <control type="image">
-                                       <description>Blank image</description>
-                                       <posx>0</posx>
-                                       <posy>340</posy>
-                                       <width>185</width>
-                                       <height>80</height>
-                                       <texture border="5">KeyboardKeyDark.png</texture>
-                               </control>
-                               <control type="button" id="32">
-                                       <description>SPACE button</description>
-                                       <posx>190</posx>
-                                       <posy>340</posy>
-                                       <width>695</width>
-                                       <height>80</height>
-                                       <texturenofocus border="5">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="5">KeyboardKeyFocus.png</texturefocus>
-                                       <textcolor>black</textcolor>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>20182</label>
-                               </control>
-                               <control type="image">
-                                       <description>Blank image</description>
-                                       <posx>890</posx>
-                                       <posy>340</posy>
-                                       <width>360</width>
-                                       <height>80</height>
-                                       <texture border="5">KeyboardKeyDark.png</texture>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogMediaSource.xml b/addons/skin.touched/4x3Hirez/DialogMediaSource.xml
deleted file mode 100644 (file)
index 29df945..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-<window id="129">
-       <defaultcontrol>10</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>130</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label" id="2">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$LOCALIZE[13406]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>600</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label">
-                       <description>path label</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>960</width>
-                       <height>30</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <font>font13_title</font>
-                       <label>1021</label>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="list" id="10">
-                       <posx>20</posx>
-                       <posy>140</posy>
-                       <width>740</width>
-                       <height>650</height>
-                       <onup>9001</onup>
-                       <onleft>9000</onleft>
-                       <onright>60</onright>
-                       <ondown>12</ondown>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="50">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>740</width>
-                                       <height>51</height>
-                                       <texture border="5">MenuItemNF.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>720</width>
-                                       <height>50</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="50">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>740</width>
-                                       <height>51</height>
-                                       <texture border="5">MenuItemNF.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>720</width>
-                                       <height>50</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <label>[COLOR=blue] > [/COLOR] $INFO[ListItem.Label]</label>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="group" id="9000">
-                       <posx>780</posx>
-                       <posy>140</posy>
-                       <control type="button" id="11">
-                               <description>Browse Button</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>200</width>
-                               <height>50</height>
-                               <label>1024</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font12_title</font>
-                               <texturefocus border="5">IconBack-focus.png</texturefocus>
-                               <texturenofocus border="5">ListNF.png</texturenofocus>
-                               <pulseonselect>false</pulseonselect>
-                               <onup>18</onup>
-                               <onleft>60</onleft>
-                               <onright>10</onright>
-                               <ondown>13</ondown>
-                       </control>
-                       <control type="button" id="13">
-                               <description>Add Path Button</description>
-                               <posx>0</posx>
-                               <posy>55</posy>
-                               <width>200</width>
-                               <height>50</height>
-                               <label>15019</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font12_title</font>
-                               <texturefocus border="5">IconBack-focus.png</texturefocus>
-                               <texturenofocus border="5">ListNF.png</texturenofocus>
-                               <pulseonselect>false</pulseonselect>
-                               <onup>11</onup>
-                               <onleft>60</onleft>
-                               <onright>10</onright>
-                               <ondown>14</ondown>
-                       </control>
-                       <control type="button" id="14">
-                               <description>Remove Path Button</description>
-                               <posx>0</posx>
-                               <posy>110</posy>
-                               <width>200</width>
-                               <height>50</height>
-                               <label>1210</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font12_title</font>
-                               <texturefocus border="5">IconBack-focus.png</texturefocus>
-                               <texturenofocus border="5">ListNF.png</texturenofocus>
-                               <pulseonselect>false</pulseonselect>
-                               <onup>13</onup>
-                               <onleft>60</onleft>
-                               <onright>10</onright>
-                               <ondown>12</ondown>
-                       </control>
-               </control>
-               <control type="label">
-                       <description>Name label</description>
-                       <posx>20</posx>
-                       <posy>450</posy>
-                       <width>960</width>
-                       <height>30</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <font>font13_title</font>
-                       <label>1022</label>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="button" id="12">
-                       <description>Name Button</description>
-                       <posx>20</posx>
-                       <posy>490</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                       <onup>10</onup>
-                       <onleft>12</onleft>
-                       <onright>19</onright>
-                       <ondown>9001</ondown>
-               </control>
-               <control type="grouplist" id="9001">
-                       <posx>20</posx>
-                       <posy>590</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9001</onleft>
-                       <onright>9001</onright>
-                       <onup>50</onup>
-                       <ondown>49</ondown>
-                       <control type="button" id="18">
-                               <description>Ok Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-                       <control type="button" id="19">
-                               <description>Cancel Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-                       <control type="button" id="20">
-                               <description>Set Content Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>20333</label>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogMusicScan.xml b/addons/skin.touched/4x3Hirez/DialogMusicScan.xml
deleted file mode 100644 (file)
index 04ad9dd..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<window id="112">
-       <defaultcontrol></defaultcontrol>
-       <include>dialogeffect</include>
-       <controls>
-               <control type="group">
-                       <posx>420r</posx>
-                       <posy>25</posy>
-                       <visible>!Window.IsVisible(FullscreenVideo) + !Window.IsVisible(Visualisation)</visible>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>350</width>
-                               <height>67</height>
-                               <texture border="8">IconBack.png</texture>
-                       </control>
-                       <control type="fadelabel" id="401">
-                               <posx>10</posx>
-                               <posy>5</posy>
-                               <width>330</width>
-                               <height>15</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>black</textcolor>
-                       </control>
-                       <control type="fadelabel" id="402">
-                               <posx>10</posx>
-                               <posy>24</posy>
-                               <width>330</width>
-                               <height>20</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font12</font>
-                               <textcolor>black</textcolor>
-                               <haspath>true</haspath>
-                       </control>
-                       <control type="progress" id="403">
-                               <description>progress control</description>
-                               <posx>5</posx>
-                               <posy>47</posy>
-                               <width>340</width>
-                               <height>15</height>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogMuteBug.xml b/addons/skin.touched/4x3Hirez/DialogMuteBug.xml
deleted file mode 100644 (file)
index 0325d88..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<window id="113">
-       <defaultcontrol>-</defaultcontrol>
-       <include>dialogeffect</include>
-       <coordinates>
-               <system>0</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <control type="group">
-                       <posx>80r</posx>
-                       <posy>0</posy>
-                       <animation effect="slide" end="100,0" time="200" tween="quadratic" easing="out">WindowClose</animation>
-                       <animation effect="slide" start="100,0" time="200" tween="quadratic" easing="out">WindowOpen</animation>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>80</width>
-                               <height>35</height>
-                               <texture flipx="true" border="32,0,0,0">header.png</texture>
-                       </control>
-                       <control type="image">
-                               <posx>35</posx>
-                               <posy>0</posy>
-                               <width>30</width>
-                               <height>30</height>
-                               <aspectratio>keep</aspectratio>
-                               <texture>icon-mute.png</texture>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogNetworkSetup.xml b/addons/skin.touched/4x3Hirez/DialogNetworkSetup.xml
deleted file mode 100644 (file)
index 59dc469..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-<window id="128">
-       <defaultcontrol>10</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>240</posx>
-               <posy>220</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                       <posx>-30</posx>
-                       <posy>-30</posy>
-                       <width>860</width>
-                       <height>580</height>
-                       <texture border="30">DialogShadow.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>800</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label" id="2">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>710</width>
-                       <label>$LOCALIZE[1007]</label>
-               </control>
-               <control type="group">
-                       <posx>730</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>800</width>
-                       <height>460</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-
-               <control type="spincontrolex" id="10">
-                       <description>Protocol SpinControl</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <height>51</height>
-                       <width>760</width>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                       <textcolor>black</textcolor>
-                       <disabledcolor>grey3</disabledcolor>
-                       <textoffsetx>12</textoffsetx>
-                       <aligny>center</aligny>
-                       <reverse>yes</reverse>
-                       <font>font132</font>
-                       <label>1008</label>
-                       <onup>18</onup>
-                       <ondown>11</ondown>
-                       <onleft>10</onleft>
-                       <onright>10</onright>
-               </control>
-               <control type="button" id="11">
-                       <description>Server Address Button</description>
-                       <posx>20</posx>
-                       <posy>140</posy>
-                       <width>570</width>
-                       <height>51</height>
-                       <textoffsetx>12</textoffsetx>
-                       <textcolor>black</textcolor>
-                       <aligny>center</aligny>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                       <font>font13</font>
-                       <label>-</label>
-                       <onup>10</onup>
-                       <onleft>12</onleft>
-                       <onright>12</onright>
-                       <ondown>16</ondown>
-               </control>
-               <control type="button" id="12">
-                       <description>Server Browse Button</description>
-                       <posx>610</posx>
-                       <posy>140</posy>
-                       <width>170</width>
-                       <include>ButtonInfoDialogsCommonValues</include>
-                       <label>1024</label>
-                       <onup>10</onup>
-                       <onleft>11</onleft>
-                       <onright>11</onright>
-                       <ondown>16</ondown>
-               </control>
-               <control type="button" id="16">
-                       <description>Remote path Button</description>
-                       <posx>20</posx>
-                       <posy>200</posy>
-                       <width>760</width>
-                       <height>51</height>
-                       <textoffsetx>12</textoffsetx>
-                       <textcolor>black</textcolor>
-                       <aligny>center</aligny>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                       <font>font13</font>
-                       <label>-</label>
-                       <onup>11</onup>
-                       <onleft>16</onleft>
-                       <onright>16</onright>
-                       <ondown>13</ondown>
-               </control>
-               <control type="button" id="13">
-                       <description>Port Button</description>
-                       <posx>20</posx>
-                       <posy>250</posy>
-                       <width>760</width>
-                       <height>51</height>
-                       <textoffsetx>12</textoffsetx>
-                       <textcolor>black</textcolor>
-                       <aligny>center</aligny>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                       <font>font13</font>
-                       <label>1013</label>
-                       <onup>16</onup>
-                       <onleft>13</onleft>
-                       <onright>13</onright>
-                       <ondown>14</ondown>
-               </control>
-               <control type="button" id="14">
-                       <description>Username Button</description>
-                       <posx>20</posx>
-                       <posy>300</posy>
-                       <width>760</width>
-                       <height>51</height>
-                       <textcolor>black</textcolor>
-                       <textoffsetx>12</textoffsetx>
-                       <aligny>center</aligny>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                       <font>font13</font>
-                       <label>1014</label>
-                       <onup>13</onup>
-                       <onleft>14</onleft>
-                       <onright>14</onright>
-                       <ondown>15</ondown>
-               </control>
-               <control type="button" id="15">
-                       <description>Password Button</description>
-                       <posx>20</posx>
-                       <posy>350</posy>
-                       <width>760</width>
-                       <height>51</height>
-                       <textoffsetx>12</textoffsetx>
-                       <textcolor>black</textcolor>
-                       <aligny>center</aligny>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                       <font>font13</font>
-                       <label>15052</label>
-                       <onup>14</onup>
-                       <onleft>15</onleft>
-                       <onright>15</onright>
-                       <ondown>18</ondown>
-               </control>
-               <control type="grouplist" id="9001">
-                       <posx>20</posx>
-                       <posy>450</posy>
-                       <width>760</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9001</onleft>
-                       <onright>9001</onright>
-                       <onup>50</onup>
-                       <ondown>49</ondown>
-                       <control type="button" id="18">
-                               <description>Ok Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-                       <control type="button" id="19">
-                               <description>Cancel Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogNumeric.xml b/addons/skin.touched/4x3Hirez/DialogNumeric.xml
deleted file mode 100644 (file)
index 2035a0c..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-<window id="109">
-       <defaultcontrol always="true">21</defaultcontrol>
-       <coordinates>
-               <system>2</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <control type="button">
-                       <description>Hidden button to close the keyboard when its focused</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <texturenofocus>-</texturenofocus>
-                       <texturefocus>-</texturefocus>
-                       <onclick>PreviousMenu</onclick>
-               </control>
-               <control type="group">
-                       <posx>480</posx>
-                       <posy>170</posy>
-                       <animation effect="slide" start="0,-820" end="0,0" time="500" easing="out" tween="quadratic" >WindowOpen</animation>
-                       <animation effect="slide" start="0,0" end="0,-820" time="500" easing="in" tween="quadratic" >WindowClose</animation>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>70</posy>
-                               <width>395</width>
-                               <height>50</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture border="20">KeyboardEditArea.png</texture>
-                       </control>
-                       <control type="label" id="4">
-                               <description>Edit Text</description>
-                               <posx>20</posx>
-                               <posy>70</posy>
-                               <width>355</width>
-                               <height>50</height>
-                               <font>font16</font>
-                               <textcolor>selected</textcolor>
-                               <disabledcolor>grey2</disabledcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="label" id="1">
-                               <description>dialog Heading</description>
-                               <posx>0</posx>
-                               <posy>20</posy>
-                               <width>395</width>
-                               <height>40</height>
-                               <font>font13_title</font>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <wrapmultiline>true</wrapmultiline>
-                       </control>
-                       <control type="group">
-                               <posx>0</posx>
-                               <posy>130</posy>
-                               <control type="button" id="11">
-                                       <description>1 button</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12311</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>23</onleft>
-                                       <onright>12</onright>
-                                       <onup>20</onup>
-                                       <ondown>14</ondown>
-                               </control>
-                               <control type="button" id="12">
-                                       <description>2 button</description>
-                                       <posx>100</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12312</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>11</onleft>
-                                       <onright>13</onright>
-                                       <onup>10</onup>
-                                       <ondown>15</ondown>
-                               </control>
-                               <control type="button" id="13">
-                                       <description>3 button</description>
-                                       <posx>200</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12313</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>12</onleft>
-                                       <onright>23</onright>
-                                       <onup>22</onup>
-                                       <ondown>16</ondown>
-                               </control>
-                               <control type="button" id="23">
-                                       <description>Backspace button</description>
-                                       <posx>300</posx>
-                                       <posy>0</posy>
-                                       <width>95</width>
-                                       <height>165</height>
-                                       <font>font12</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <textwidth>120</textwidth>
-                                       <label>-</label>
-                                       <textcolor>white</textcolor>
-                                       <angle>270</angle>
-                                       <onleft>13</onleft>
-                                       <onright>11</onright>
-                                       <onup>21</onup>
-                                       <ondown>21</ondown>
-                               </control>
-                               <control type="image">
-                                       <description>BackSpace Icon image</description>
-                                       <posx>320</posx>
-                                       <posy>60</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <texture>icon_backspace.png</texture>
-                               </control>
-                               <control type="button" id="14">
-                                       <description>4 button</description>
-                                       <posx>0</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12314</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>23</onleft>
-                                       <onright>15</onright>
-                                       <onup>11</onup>
-                                       <ondown>17</ondown>
-                               </control>
-                               <control type="button" id="15">
-                                       <description>5 button</description>
-                                       <posx>100</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12315</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>14</onleft>
-                                       <onright>16</onright>
-                                       <onup>12</onup>
-                                       <ondown>18</ondown>
-                               </control>
-                               <control type="button" id="16">
-                                       <description>6 button</description>
-                                       <posx>200</posx>
-                                       <posy>85</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12316</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>15</onleft>
-                                       <onright>23</onright>
-                                       <onup>13</onup>
-                                       <ondown>19</ondown>
-                               </control>
-                               <control type="button" id="17">
-                                       <description>7 button</description>
-                                       <posx>0</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12317</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>21</onleft>
-                                       <onright>18</onright>
-                                       <onup>14</onup>
-                                       <ondown>20</ondown>
-                               </control>
-                               <control type="button" id="18">
-                                       <description>8 button</description>
-                                       <posx>100</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12318</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>17</onleft>
-                                       <onright>19</onright>
-                                       <onup>15</onup>
-                                       <ondown>10</ondown>
-                               </control>
-                               <control type="button" id="19">
-                                       <description>9 button</description>
-                                       <posx>200</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12319</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>18</onleft>
-                                       <onright>21</onright>
-                                       <onup>16</onup>
-                                       <ondown>22</ondown>
-                               </control>
-                               <control type="button" id="21">
-                                       <description>Done button</description>
-                                       <posx>300</posx>
-                                       <posy>170</posy>
-                                       <width>95</width>
-                                       <height>165</height>
-                                       <font>font12</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <textwidth>120</textwidth>
-                                       <label>-</label>
-                                       <textcolor>white</textcolor>
-                                       <angle>270</angle>
-                                       <onleft>19</onleft>
-                                       <onright>17</onright>
-                                       <onup>23</onup>
-                                       <ondown>23</ondown>
-                               </control>
-                               <control type="image">
-                                       <description>Enter\done Icon image</description>
-                                       <posx>320</posx>
-                                       <posy>230</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>icon_enter.png</texture>
-                               </control>
-                               <control type="button" id="20">
-                                       <description>prev button</description>
-                                       <posx>0</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font30</font>
-                                       <label>-</label>
-                                       <textcolor>white</textcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <onleft>21</onleft>
-                                       <onright>10</onright>
-                                       <onup>17</onup>
-                                       <ondown>11</ondown>
-                               </control>
-                               <control type="image">
-                                       <description>Previous Icon image</description>
-                                       <posx>22</posx>
-                                       <posy>275</posy>
-                                       <width>50</width>
-                                       <height>40</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture flipx="true">icon_arrowkey.png</texture>
-                               </control>
-                               <control type="button" id="10">
-                                       <description>0 button</description>
-                                       <posx>100</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font16</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <label>12310</label>
-                                       <textcolor>black</textcolor>
-                                       <onleft>20</onleft>
-                                       <onright>22</onright>
-                                       <onup>18</onup>
-                                       <ondown>12</ondown>
-                               </control>
-                               <control type="button" id="22">
-                                       <description>next button</description>
-                                       <posx>200</posx>
-                                       <posy>255</posy>
-                                       <width>95</width>
-                                       <height>80</height>
-                                       <font>font30</font>
-                                       <label>-</label>
-                                       <textcolor>white</textcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="8">KeyboardKeyDark.png</texturenofocus>
-                                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                                       <onleft>10</onleft>
-                                       <onright>21</onright>
-                                       <onup>19</onup>
-                                       <ondown>13</ondown>
-                               </control>
-                               <control type="image">
-                                       <description>Next Icon image</description>
-                                       <posx>222</posx>
-                                       <posy>275</posy>
-                                       <width>50</width>
-                                       <height>40</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>icon_arrowkey.png</texture>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogOK.xml b/addons/skin.touched/4x3Hirez/DialogOK.xml
deleted file mode 100644 (file)
index 133d69a..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<window id="2002">
-       <defaultcontrol always="true">10</defaultcontrol>
-       <coordinates>
-               <system>1</system>
-               <posx>290</posx>
-               <posy>300</posy>
-       </coordinates>
-       <include>dialogeffect</include>
-       <controls>
-               <control type="image">
-                       <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                       <posx>-30</posx>
-                       <posy>-30</posy>
-                       <width>760</width>
-                       <height>370</height>
-                       <texture border="30">DialogShadow.png</texture>
-               </control>
-               <control type="image">
-                       <description>Header Background</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>700</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="group">
-                       <posx>630</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>600</width>
-                       <label>$LOCALIZE[13406]</label>
-               </control>
-               <control type="image">
-                       <description>Background</description>
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>250</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label" id="2">
-                       <description>dialog line 1</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label" id="3">
-                       <description>dialog line 2</description>
-                       <posx>20</posx>
-                       <posy>110</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label" id="4">
-                       <description>dialog line 3</description>
-                       <posx>20</posx>
-                       <posy>140</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>250</posy>
-                       <width>660</width>
-                       <height>50</height>
-                       <itemgap>10</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>9000</onup>
-                       <ondown>9000</ondown>
-                       <control type="button" id="10">
-                               <description>OK button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogPictureInfo.xml b/addons/skin.touched/4x3Hirez/DialogPictureInfo.xml
deleted file mode 100644 (file)
index 0362bd0..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-<window id="139">
-       <defaultcontrol always="true">5</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$LOCALIZE[13406]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="list" id="5">
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>960</width>
-                       <height>800</height>
-                       <onleft>5</onleft>
-                       <onright>5</onright>
-                       <onup>5</onup>
-                       <ondown>5</ondown>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="40">
-                               <control type="label">
-                                       <posx>250</posx>
-                                       <posy>0</posy>
-                                       <width>250</width>
-                                       <height>40</height>
-                                       <font>font13_title</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <info>ListItem.Label</info>
-                               </control>
-                               <control type="label">
-                                       <posx>260</posx>
-                                       <posy>0</posy>
-                                       <width>670</width>
-                                       <height>40</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>white</selectedcolor>
-                                       <info>ListItem.Label2</info>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="40">
-                               <control type="label">
-                                       <posx>250</posx>
-                                       <posy>0</posy>
-                                       <width>250</width>
-                                       <height>40</height>
-                                       <font>font13_title</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <info>ListItem.Label</info>
-                               </control>
-                               <control type="label">
-                                       <posx>260</posx>
-                                       <posy>0</posy>
-                                       <width>670</width>
-                                       <height>40</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>white</selectedcolor>
-                                       <info>ListItem.Label2</info>
-                               </control>
-                       </focusedlayout>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogProgress.xml b/addons/skin.touched/4x3Hirez/DialogProgress.xml
deleted file mode 100644 (file)
index ea3372e..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<window id="101">
-       <defaultcontrol always="true">10</defaultcontrol>
-       <coordinates>
-               <system>1</system>
-               <posx>290</posx>
-               <posy>300</posy>
-       </coordinates>
-       <include>dialogeffect</include>
-       <controls>
-               <control type="image">
-                       <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                       <posx>-30</posx>
-                       <posy>-30</posy>
-                       <width>760</width>
-                       <height>370</height>
-                       <texture border="30">DialogShadow.png</texture>
-               </control>
-               <control type="image">
-                       <description>Header Background</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>700</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="group">
-                       <posx>630</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="label" id="1">
-                       <description>heading label</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>0</width>
-                       <height>0</height>
-                       <font>-</font>
-                       <visible>false</visible>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>600</width>
-                       <label>$INFO[Control.GetLabel(1)] $INFO[System.Progressbar,- ,%]</label>
-               </control>
-               <control type="image">
-                       <description>Background</description>
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>250</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label" id="2">
-                       <description>dialog line 1</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label" id="3">
-                       <description>dialog line 2</description>
-                       <posx>20</posx>
-                       <posy>110</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label" id="4">
-                       <description>dialog line 3</description>
-                       <posx>20</posx>
-                       <posy>140</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="progress">
-                       <description>Progressbar</description>
-                       <posx>20</posx>
-                       <posy>190</posy>
-                       <width>660</width>
-                       <height>32</height>
-                       <info>System.Progressbar</info>
-               </control>
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>250</posy>
-                       <width>660</width>
-                       <height>50</height>
-                       <itemgap>10</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>9000</onup>
-                       <ondown>9000</ondown>
-                       <control type="button" id="10">
-                               <description>OK button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogSeekBar.xml b/addons/skin.touched/4x3Hirez/DialogSeekBar.xml
deleted file mode 100644 (file)
index 4ec2dd7..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-<window id="115">
-       <defaultcontrol>1</defaultcontrol>
-       <visible>[Player.Seeking | Player.DisplayAfterSeek | Player.Paused | Player.Forwarding | Player.Rewinding] + [Window.IsVisible(FullscreenVideo) | Window.IsVisible(Visualisation)] + ![Window.IsVisible(VideoOSD) | Window.IsVisible(MusicOSD) | Window.IsVisible(PlayerControls)]</visible>
-       <animation effect="fade" start="0" end="100" time="200">WindowOpen</animation>
-       <animation effect="fade" start="100" end="0" time="200">WindowClose</animation>
-       <controls>
-               <control type="group">
-                       <posx>580r</posx>
-                       <posy>0</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>-5</posy>
-                               <width>315</width>
-                               <height>69</height>
-                               <texture border="8">DialogHeader.png</texture>
-                       </control>
-                       <control type="label">
-                               <description>Playing Label</description>
-                               <posx>15</posx>
-                               <posy>2</posy>
-                               <width>370</width>
-                               <height>18</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>blue</textcolor>
-                               <label>$LOCALIZE[31042]</label>
-                               <visible>Player.Playing + !Player.Seeking + !Player.DisplayAfterSeek</visible>
-                       </control>
-                       <control type="label">
-                               <description>Paused Label</description>
-                               <posx>15</posx>
-                               <posy>2</posy>
-                               <width>370</width>
-                               <height>18</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>blue</textcolor>
-                               <label>31043</label>
-                               <visible>[Player.Paused + !Player.Caching] + !Player.Seeking + !Player.DisplayAfterSeek</visible>
-                       </control>
-                       <control type="label">
-                               <description>Cache Label</description>
-                               <posx>15</posx>
-                               <posy>2</posy>
-                               <width>370</width>
-                               <height>18</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>blue</textcolor>
-                               <label>$LOCALIZE[15107] $INFO[Player.CacheLevel]%</label>
-                               <visible>[Player.Paused + Player.Caching] + !Player.Seeking</visible>
-                       </control>
-                       <control type="label">
-                               <description>Seeking Label</description>
-                               <posx>15</posx>
-                               <posy>2</posy>
-                               <width>370</width>
-                               <height>18</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>blue</textcolor>
-                               <label>[UPPERCASE]$LOCALIZE[773][/UPPERCASE]</label>
-                               <visible>Player.Seeking</visible>
-                       </control>
-                       <control type="label">
-                               <description>Final Seek amount Label</description>
-                               <posx>15</posx>
-                               <posy>2</posy>
-                               <width>370</width>
-                               <height>18</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>blue</textcolor>
-                               <label>[UPPERCASE]$LOCALIZE[773][/UPPERCASE][COLOR=grey] $INFO[Player.SeekOffset][/COLOR]</label>
-                               <visible>Player.DisplayAfterSeek + ![player.forwarding | player.rewinding]</visible>
-                       </control>
-                       <control type="label">
-                               <description>FF Label</description>
-                               <posx>15</posx>
-                               <posy>2</posy>
-                               <width>370</width>
-                               <height>18</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>blue</textcolor>
-                               <label>31044</label>
-                               <visible>Player.Forwarding</visible>
-                       </control>
-                       <control type="label">
-                               <description>RW Label</description>
-                               <posx>15</posx>
-                               <posy>2</posy>
-                               <width>370</width>
-                               <height>18</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>blue</textcolor>
-                               <label>31045</label>
-                               <visible>Player.Rewinding</visible>
-                       </control>
-                       <control type="label">
-                               <description>Elapsed Time Label</description>
-                               <posx>15</posx>
-                               <posy>20</posy>
-                               <width>150</width>
-                               <height>15</height>
-                               <font>font12</font>
-                               <textcolor>white</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[Player.Time]</label>
-                               <visible>!Player.Seeking</visible>
-                       </control>
-                       <control type="label">
-                               <description>Seek Time Label</description>
-                               <posx>15</posx>
-                               <posy>20</posy>
-                               <width>150</width>
-                               <height>15</height>
-                               <font>font13_title</font>
-                               <textcolor>white</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[Player.SeekTime]</label>
-                               <visible>Player.Seeking</visible>
-                       </control>
-                       <control type="label">
-                               <description>Total Time Label</description>
-                               <posx>300</posx>
-                               <posy>20</posy>
-                               <width>150</width>
-                               <height>15</height>
-                               <font>font12</font>
-                               <textcolor>white</textcolor>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[Player.Duration]</label>
-                       </control>
-                       <control type="progress">
-                               <description>ProgressbarCache</description>
-                               <posx>7</posx>
-                               <posy>40</posy>
-                               <width>300</width>
-                               <height>15</height>
-                               <info>Player.ProgressCache</info>
-                               <midtexture border="16,0,16,0">OSDProgressMidLight.png</midtexture>
-                               <visible>true</visible>
-                       </control>
-                       <control type="progress" id="23">
-                               <description>Progressbar</description>
-                               <posx>7</posx>
-                               <posy>40</posy>
-                               <width>300</width>
-                               <height>15</height>
-                               <info>Player.Progress</info>
-                               <texturebg border="16,0,16,0">OSDProgressBack2.png</texturebg>
-                               <visible>true</visible>
-                       </control>
-                       <control type="slider" id="401">
-                               <description>Seek Slider</description>
-                               <posx>7</posx>
-                               <posy>40</posy>
-                               <width>300</width>
-                               <height>15</height>
-                               <texturesliderbar>seekslider.png</texturesliderbar>
-                               <textureslidernib>osd_slider_nib.png</textureslidernib>
-                               <textureslidernibfocus>osd_slider_nib.png</textureslidernibfocus>
-                               <visible>Player.Seeking</visible>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogSelect.xml b/addons/skin.touched/4x3Hirez/DialogSelect.xml
deleted file mode 100644 (file)
index ee5f25f..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-<window type="dialog" id="2000">
-       <defaultcontrol always="true">3</defaultcontrol>
-       <coordinates>
-               <system>1</system>
-               <posx>335</posx>
-               <posy>35</posy>
-       </coordinates>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>290</posx>
-               <posy>80</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                       <posx>-30</posx>
-                       <posy>-30</posy>
-                       <width>760</width>
-                       <height>860</height>
-                       <texture border="30">DialogShadow.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>700</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>740</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>600</width>
-                       <label>$LOCALIZE[13406]</label>
-               </control>
-               <control type="group">
-                       <posx>630</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="list" id="3">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>650</height>
-                       <onup>3</onup>
-                       <ondown>3</ondown>
-                       <onleft>5</onleft>
-                       <onright>61</onright>
-                       <pagecontrol>-</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="60" width="700">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>700</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>20</posx>
-                                       <posy>0</posy>
-                                       <width>660</width>
-                                       <height>60</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="60" width="550">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>700</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>20</posx>
-                                       <posy>0</posy>
-                                       <width>660</width>
-                                       <height>60</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="list" id="6">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>650</height>
-                       <onup>6</onup>
-                       <ondown>6</ondown>
-                       <onleft>5</onleft>
-                       <onright>61</onright>
-                       <pagecontrol>-</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="100" width="700">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>700</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>20</posx>
-                                       <posy>5</posy>
-                                       <width>550</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>[B]$INFO[ListItem.Label][/B]</label>
-                               </control>
-                               <control type="textbox">
-                                       <posx>30</posx>
-                                       <posy>35</posy>
-                                       <width>540</width>
-                                       <height>60</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <align>left</align>
-                                       <label>$INFO[ListItem.Property(Addon.Summary)]</label>
-                               </control>
-                               <control type="image">
-                                       <posx>580</posx>
-                                       <posy>5</posy>
-                                       <width>100</width>
-                                       <height>90</height>
-                                       <texture>$INFO[Listitem.Icon]</texture>
-                                       <bordertexture>ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="100" width="700">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>700</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>20</posx>
-                                       <posy>5</posy>
-                                       <width>550</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>[B]$INFO[ListItem.Label][/B]</label>
-                               </control>
-                               <control type="textbox">
-                                       <posx>30</posx>
-                                       <posy>35</posy>
-                                       <width>540</width>
-                                       <height>60</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <align>left</align>
-                                       <label>$INFO[ListItem.Property(Addon.Summary)]</label>
-                               </control>
-                               <control type="image">
-                                       <posx>580</posx>
-                                       <posy>5</posy>
-                                       <width>100</width>
-                                       <height>90</height>
-                                       <texture>$INFO[Listitem.Icon]</texture>
-                                       <bordertexture>ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <description>number of files/pages in list text label</description>
-                       <posx>680</posx>
-                       <posy>750</posy>
-                       <width>300</width>
-                       <height>30</height>
-                       <font>font13</font>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <scroll>true</scroll>
-                       <textcolor>black</textcolor>
-                       <label>($INFO[Container(3).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(3).CurrentPage]/$INFO[Container(3).NumPages])</label>
-                       <visible>Control.IsVisible(3)</visible>
-               </control>
-               <control type="label">
-                       <description>number of files/pages in list text label</description>
-                       <posx>680</posx>
-                       <posy>750</posy>
-                       <width>300</width>
-                       <height>30</height>
-                       <font>font13</font>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <scroll>true</scroll>
-                       <textcolor>black</textcolor>
-                       <label>($INFO[Container(6).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(6).CurrentPage]/$INFO[Container(6).NumPages])</label>
-                       <visible>Control.IsVisible(6)</visible>
-               </control>
-               <control type="button" id="5">
-                       <description>Manual button</description>
-                       <posx>20</posx>
-                       <posy>740</posy>
-                       <width>200</width>
-                       <include>ButtonInfoDialogsCommonValues</include>
-                       <label>186</label>
-                       <onleft>61</onleft>
-                       <onright>3</onright>
-                       <onup>3</onup>
-                       <ondown>3</ondown>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogSongInfo.xml b/addons/skin.touched/4x3Hirez/DialogSongInfo.xml
deleted file mode 100644 (file)
index ec9a515..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-<window id="135">
-       <defaultcontrol always="true">10</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>190</posy>
-       </coordinates>
-       <controls>
-               <control type="group">
-                       <include>VisibleFadeEffect</include>
-                       <visible>!Window.IsVisible(MusicInformation)</visible>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>1000</width>
-                               <height>60</height>
-                               <texture border="5">DialogHeader.png</texture>
-                       </control>
-                       <control type="label">
-                               <description>header label</description>
-                               <posx>20</posx>
-                               <posy>0</posy>
-                               <include>WindowTitleCommons</include>
-                               <width>910</width>
-                               <label>658</label>
-                       </control>
-                       <control type="group">
-                               <posx>930</posx>
-                               <posy>0</posy>
-                               <include>DialogCloseButtonCommons</include>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>60</posy>
-                               <width>1000</width>
-                               <height>460</height>
-                               <texture border="5">DialogBack.png</texture>
-                       </control>
-                       <control type="label">
-                               <description>Song Title value</description>
-                               <posx>40</posx>
-                               <posy>80</posy>
-                               <width>960</width>
-                               <height>30</height>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font13_title</font>
-                               <label>[B]$INFO[ListItem.Title][/B]</label>
-                               <textcolor>black</textcolor>
-                               <scroll>true</scroll>
-                       </control>
-                       <control type="image">
-                               <posx>20</posx>
-                               <posy>140</posy>
-                               <width>250</width>
-                               <height>250</height>
-                               <aspectratio aligny="bottom">keep</aspectratio>
-                               <texture>$INFO[ListItem.Icon]</texture>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                       </control>
-                       <control type="group">
-                               <posx>280</posx>
-                               <posy>140</posy>
-                               <control type="label">
-                                       <description>Artist Title</description>
-                                       <posx>150</posx>
-                                       <posy>0</posy>
-                                       <width>150</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$LOCALIZE[557]:</label>
-                               </control>
-                               <control type="fadelabel">
-                                       <description>Artist Value</description>
-                                       <posx>160</posx>
-                                       <posy>0</posy>
-                                       <width>520</width>
-                                       <height>25</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <label fallback="161">$INFO[ListItem.Artist]</label>
-                               </control>
-                               <control type="label">
-                                       <description>Album Title</description>
-                                       <posx>150</posx>
-                                       <posy>30</posy>
-                                       <width>130</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$LOCALIZE[558]:</label>
-                               </control>
-                               <control type="fadelabel">
-                                       <description>Album Value</description>
-                                       <posx>160</posx>
-                                       <posy>30</posy>
-                                       <width>520</width>
-                                       <height>25</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <label fallback="161">$INFO[ListItem.Album]$INFO[listitem.discnumber, - $LOCALIZE[427] ]</label>
-                               </control>
-                               <control type="label">
-                                       <description>Genre Title</description>
-                                       <posx>150</posx>
-                                       <posy>60</posy>
-                                       <width>130</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$LOCALIZE[515]:</label>
-                               </control>
-                               <control type="fadelabel">
-                                       <description>Genre Value</description>
-                                       <posx>160</posx>
-                                       <posy>60</posy>
-                                       <width>520</width>
-                                       <height>25</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <label fallback="161">$INFO[ListItem.Genre]</label>
-                               </control>
-                               <control type="label">
-                                       <description>Year Title</description>
-                                       <posx>150</posx>
-                                       <posy>90</posy>
-                                       <width>130</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$LOCALIZE[562]:</label>
-                               </control>
-                               <control type="fadelabel">
-                                       <description>Year Value</description>
-                                       <posx>160</posx>
-                                       <posy>90</posy>
-                                       <width>520</width>
-                                       <height>25</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <label fallback="161">$INFO[ListItem.Year]</label>
-                               </control>
-                               <control type="label">
-                                       <description>Track Number Title</description>
-                                       <posx>150</posx>
-                                       <posy>120</posy>
-                                       <width>130</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$LOCALIZE[554]:</label>
-                               </control>
-                               <control type="fadelabel">
-                                       <description>Track Number Value</description>
-                                       <posx>160</posx>
-                                       <posy>120</posy>
-                                       <width>520</width>
-                                       <height>25</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <label fallback="161">$INFO[ListItem.TrackNumber]</label>
-                               </control>
-                               <control type="label">
-                                       <description>Rating Title</description>
-                                       <posx>150</posx>
-                                       <posy>150</posy>
-                                       <width>130</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$LOCALIZE[563]:</label>
-                               </control>
-                               <control type="group">
-                                       <posx>160</posx>
-                                       <posy>140</posy>
-                                       <control type="image">
-                                               <description>Rating value</description>
-                                               <posx>0</posx>
-                                               <posy>2</posy>
-                                               <width>200</width>
-                                               <height>40</height>
-                                               <aspectratio align="left">keep</aspectratio>
-                                               <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.StarRating,dark/left_rating/]</texture>
-                                       </control>
-                                       <control type="button" id="14">
-                                               <description>Decrease Rating</description>
-                                               <posx>170</posx>
-                                               <posy>0</posy>
-                                               <width>45</width>
-                                               <height>45</height>
-                                               <onclick>DecreaseRating</onclick>
-                                               <texturenofocus>Select_Down.png</texturenofocus>
-                                               <texturefocus>Select_Down.png</texturefocus>
-                                               <onleft>9000</onleft>
-                                               <onright>15</onright>
-                                               <ondown>14</ondown>
-                                               <onup>14</onup>
-                                       </control>
-                                       <control type="button" id="15">
-                                               <description>Increase Rating</description>
-                                               <posx>215</posx>
-                                               <posy>0</posy>
-                                               <width>45</width>
-                                               <height>45</height>
-                                               <onclick>IncreaseRating</onclick>
-                                               <texturenofocus>Select_Up.png</texturenofocus>
-                                               <texturefocus>Select_Up.png</texturefocus>
-                                               <onleft>14</onleft>
-                                               <onright>15</onright>
-                                               <ondown>15</ondown>
-                                               <onup>15</onup>
-                                       </control>
-                               </control>
-                               <control type="label">
-                                       <description>Comment Title</description>
-                                       <posx>150</posx>
-                                       <posy>200</posy>
-                                       <width>130</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$LOCALIZE[569]:</label>
-                               </control>
-                               <control type="textbox">
-                                       <description>Comment value</description>
-                                       <posx>165</posx>
-                                       <posy>195</posy>
-                                       <width>520</width>
-                                       <height>100</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <pagecontrol>-</pagecontrol>
-                                       <label fallback="161">$INFO[ListItem.Comment]</label>
-                               </control>
-                       </control>
-                       <control type="grouplist" id="9000">
-                               <posx>20</posx>
-                               <posy>450</posy>
-                               <width>960</width>
-                               <height>50</height>
-                               <itemgap>10</itemgap>
-                               <align>center</align>
-                               <orientation>horizontal</orientation>
-                               <onleft>9000</onleft>
-                               <onright>9000</onright>
-                               <onup>50</onup>
-                               <ondown>49</ondown>
-                               <control type="button" id ="10">
-                                       <description>Ok button</description>
-                                       <width>200</width>
-                                       <label>186</label>
-                                       <include>ButtonInfoDialogsCommonValues</include>
-                               </control>
-                               <control type="button" id="11">
-                                       <description>Cancel button</description>
-                                       <width>200</width>
-                                       <label>222</label>
-                                       <include>ButtonInfoDialogsCommonValues</include>
-                               </control>
-                               <control type="button" id="12">
-                                       <description>Album Info button</description>
-                                       <width>200</width>
-                                       <label>10523</label>
-                                       <include>ButtonInfoDialogsCommonValues</include>
-                               </control>
-                               <control type="button" id ="13">
-                                       <description>Get Thumb button</description>
-                                       <width>200</width>
-                                       <label>13405</label>
-                                       <include>ButtonInfoDialogsCommonValues</include>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogTextViewer.xml b/addons/skin.touched/4x3Hirez/DialogTextViewer.xml
deleted file mode 100644 (file)
index 9eb7fb3..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<window id="147">
-       <defaultcontrol>61</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label></label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="textbox" id="5">
-                       <description>textarea</description>
-                       <posx>20</posx>
-                       <posy>70</posy>
-                       <width>940</width>
-                       <height>820</height>
-                       <label>-</label>
-                       <font>font13</font>
-                       <align>justify</align>
-                       <textcolor>black</textcolor>
-                       <pagecontrol>61</pagecontrol>
-               </control>
-               <control type="scrollbar" id="61">
-                       <posx>970</posx>
-                       <posy>70</posy>
-                       <width>20</width>
-                       <height>820</height>
-                       <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                       <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
-                       <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                       <textureslidernib>ScrollBarNib.png</textureslidernib>
-                       <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                       <onleft>61</onleft>
-                       <onright>61</onright>
-                       <ondown>61</ondown>
-                       <onup>61</onup>
-                       <showonepage>true</showonepage>
-                       <orientation>vertical</orientation>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogVideoInfo.xml b/addons/skin.touched/4x3Hirez/DialogVideoInfo.xml
deleted file mode 100644 (file)
index 85b0795..0000000
+++ /dev/null
@@ -1,910 +0,0 @@
-<window id="2003">
-       <defaultcontrol always="true">49</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$INFO[Listitem.Title]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-
-               <control type="group">
-                       <visible>[!container.content(tvshows) + !container.content(episodes) + !container.content(musicvideos)] + !Control.IsVisible(50)</visible>
-                       <posy>70</posy>
-                       <posx>20</posx>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>240</width>
-                               <height>330</height>
-                               <aspectratio>keep</aspectratio>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>260</posx>
-                               <posy>0</posy>
-                               <width>700</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[207]$INFO[Container(600).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(600).NumPages,/, )]</label>
-                       </control>
-                       <control type="textbox" id="600">
-                               <description>Description Value for Movies</description>
-                               <posx>260</posx>
-                               <posy>30</posy>
-                               <width>700</width>
-                               <height>290</height>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <pagecontrol>-</pagecontrol>
-                               <label>$INFO[ListItem.Plot]</label>
-                       </control>
-                       <control type="grouplist">
-                               <description>Media Codec Flagging Images</description>
-                               <posx>0</posx>
-                               <posy>340</posy>
-                               <width>960</width>
-                               <height>45</height>
-                               <align>center</align>
-                               <itemgap>5</itemgap>
-                               <orientation>horizontal</orientation>
-                               <include>VisibleFadeEffect</include>
-                               <visible>Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)</visible>
-                               <include>VideoCodecFlaggingConditions</include>
-                               <include>AudioCodecFlaggingConditions</include>
-                               <include>AudioChannelsFlaggingConditions</include>
-                               <include>AspectCodecFlaggingConditions</include>
-                               <include>VideoTypeHackFlaggingConditions</include>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>390</posy>
-                               <width>960</width>
-                               <height>5</height>
-                               <texture>separator.png</texture>
-                       </control>
-                       <control type="list" id="49">
-                               <posx>0</posx>
-                               <posy>400</posy>
-                               <width>960</width>
-                               <height>330</height>
-                               <onleft>49</onleft>
-                               <onright>49</onright>
-                               <onup>9000</onup>
-                               <ondown>61</ondown>
-                               <pagecontrol>-</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </focusedlayout>
-                               <content>
-                                       <item>
-                                               <label>$LOCALIZE[20376]:</label>
-                                               <label2>$INFO[ListItem.OriginalTitle]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.OriginalTitle) + !stringcompare(ListItem.OriginalTitle,Listitem.Title)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20339]:</label>
-                                               <label2>$INFO[ListItem.Director]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Director)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20417]:</label>
-                                               <label2>$INFO[ListItem.Writer]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Writer)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[572]:</label>
-                                               <label2>$INFO[ListItem.Studio]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Studio)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[515]:</label>
-                                               <label2>$INFO[ListItem.Genre]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Genre)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[562]:</label>
-                                               <label2>$INFO[ListItem.Year]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Year)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[2050]:</label>
-                                               <label2>$INFO[ListItem.Duration] $LOCALIZE[12391]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Duration)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[563]:</label>
-                                               <label2>$INFO[ListItem.RatingAndVotes]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.RatingAndVotes)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[202]:</label>
-                                               <label2>$INFO[ListItem.TagLine]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.TagLine)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[203]:</label>
-                                               <label2>$INFO[ListItem.PlotOutline]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.PlotOutline)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20074]:</label>
-                                               <label2>$INFO[ListItem.mpaa]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.mpaa)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[15311]</label>
-                                               <label2>$INFO[ListItem.FilenameAndPath]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.FilenameAndPath)</visible>
-                                       </item>
-                               </content>
-                       </control>
-               </control>
-
-               <control type="group">
-                       <visible>Container.Content(TVShows) + !Control.IsVisible(50)</visible>
-                       <posy>70</posy>
-                       <posx>20</posx>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>960</width>
-                               <height>140</height>
-                               <aspectratio>keep</aspectratio>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>10</posx>
-                               <posy>150</posy>
-                               <width>940</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[207]$INFO[Container(601).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(601).NumPages,/, )]</label>
-                       </control>
-                       <control type="textbox" id="601">
-                               <description>Description Value for TV SHows</description>
-                               <posx>10</posx>
-                               <posy>180</posy>
-                               <width>940</width>
-                               <height>240</height>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <pagecontrol>-</pagecontrol>
-                               <label>$INFO[ListItem.Plot]</label>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>450</posy>
-                               <width>960</width>
-                               <height>5</height>
-                               <texture>separator.png</texture>
-                       </control>
-                       <control type="list" id="49">
-                               <posx>0</posx>
-                               <posy>460</posy>
-                               <width>960</width>
-                               <height>270</height>
-                               <onleft>49</onleft>
-                               <onright>49</onright>
-                               <onup>9000</onup>
-                               <ondown>61</ondown>
-                               <pagecontrol>-</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </focusedlayout>
-                               <content>
-                                       <item>
-                                               <label>$LOCALIZE[20360]:</label>
-                                               <label2>$INFO[listitem.episode] ($INFO[ListItem.Property(WatchedEpisodes),, $LOCALIZE[16102]] - $INFO[ListItem.Property(UnWatchedEpisodes), , $LOCALIZE[16101]])</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Episode)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[31322]:</label>
-                                               <label2>$INFO[ListItem.Premiered]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Premiered)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[515]:</label>
-                                               <label2>$INFO[ListItem.Genre]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Genre)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[562]:</label>
-                                               <label2>$INFO[ListItem.Year]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Year)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[563]:</label>
-                                               <label2>$INFO[ListItem.Rating]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Rating)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[15311]</label>
-                                               <label2>$INFO[ListItem.FilenameAndPath]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.FilenameAndPath)</visible>
-                                       </item>
-                               </content>
-                       </control>
-               </control>
-
-               <control type="group">
-                       <visible>Container.Content(Episodes) + !Control.IsVisible(50)</visible>
-                       <posy>70</posy>
-                       <posx>20</posx>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>450</width>
-                               <height>330</height>
-                               <aspectratio>scale</aspectratio>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>460</posx>
-                               <posy>0</posy>
-                               <width>500</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[207]$INFO[Container(602).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(602).NumPages,/, )]</label>
-                       </control>
-                       <control type="textbox" id="602">
-                               <description>Description Value for Episode</description>
-                               <posx>460</posx>
-                               <posy>30</posy>
-                               <width>500</width>
-                               <height>290</height>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <pagecontrol>-</pagecontrol>
-                               <label>$INFO[ListItem.Plot]</label>
-                       </control>
-                       <control type="grouplist">
-                               <description>Media Codec Flagging Images</description>
-                               <posx>0</posx>
-                               <posy>340</posy>
-                               <width>960</width>
-                               <height>45</height>
-                               <align>center</align>
-                               <itemgap>5</itemgap>
-                               <orientation>horizontal</orientation>
-                               <include>VisibleFadeEffect</include>
-                               <visible>Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)</visible>
-                               <include>VideoCodecFlaggingConditions</include>
-                               <include>AudioCodecFlaggingConditions</include>
-                               <include>AudioChannelsFlaggingConditions</include>
-                               <include>AspectCodecFlaggingConditions</include>
-                               <include>VideoTypeHackFlaggingConditions</include>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>390</posy>
-                               <width>960</width>
-                               <height>5</height>
-                               <texture>separator.png</texture>
-                       </control>
-                       <control type="list" id="49">
-                               <posx>0</posx>
-                               <posy>400</posy>
-                               <width>960</width>
-                               <height>330</height>
-                               <onleft>49</onleft>
-                               <onright>49</onright>
-                               <onup>9000</onup>
-                               <ondown>61</ondown>
-                               <pagecontrol>-</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </focusedlayout>
-                               <content>
-                                       <item>
-                                               <label>$LOCALIZE[20364]:</label>
-                                               <label2>$INFO[ListItem.TVShowTitle]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.TVShowTitle)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20373]:</label>
-                                               <label2>$INFO[ListItem.Season]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Season)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20359]:</label>
-                                               <label2>$INFO[ListItem.Episode]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Episode)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[31322]:</label>
-                                               <label2>$INFO[ListItem.Premiered]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Premiered)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[515]:</label>
-                                               <label2>$INFO[ListItem.Genre]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Genre)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20339]:</label>
-                                               <label2>$INFO[ListItem.Director]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Director)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20417]:</label>
-                                               <label2>$INFO[ListItem.Writer]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Writer)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[562]:</label>
-                                               <label2>$INFO[ListItem.Year]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Year)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[2050]:</label>
-                                               <label2>$INFO[ListItem.Duration] $LOCALIZE[12391]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Duration)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[563]:</label>
-                                               <label2>$INFO[ListItem.Rating]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Rating)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[15311]</label>
-                                               <label2>$INFO[ListItem.FilenameAndPath]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.FilenameAndPath)</visible>
-                                       </item>
-                               </content>
-                       </control>
-               </control>
-
-               <control type="group">
-                       <visible>Container.Content(MusicVideos) + !Control.IsVisible(50)</visible>
-                       <posy>70</posy>
-                       <posx>20</posx>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>450</width>
-                               <height>330</height>
-                               <aspectratio>scale</aspectratio>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>460</posx>
-                               <posy>0</posy>
-                               <width>500</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[207]$INFO[Container(603).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(603).NumPages,/, )]</label>
-                       </control>
-                       <control type="textbox" id="603">
-                               <description>Description Value for Episode</description>
-                               <posx>460</posx>
-                               <posy>30</posy>
-                               <width>500</width>
-                               <height>290</height>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <pagecontrol>-</pagecontrol>
-                               <label>$INFO[ListItem.Plot]</label>
-                       </control>
-                       <control type="grouplist">
-                               <description>Media Codec Flagging Images</description>
-                               <posx>0</posx>
-                               <posy>340</posy>
-                               <width>960</width>
-                               <height>45</height>
-                               <align>center</align>
-                               <itemgap>5</itemgap>
-                               <orientation>horizontal</orientation>
-                               <include>VisibleFadeEffect</include>
-                               <visible>Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)</visible>
-                               <include>VideoCodecFlaggingConditions</include>
-                               <include>AudioCodecFlaggingConditions</include>
-                               <include>AudioChannelsFlaggingConditions</include>
-                               <include>AspectCodecFlaggingConditions</include>
-                               <include>VideoTypeHackFlaggingConditions</include>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>390</posy>
-                               <width>960</width>
-                               <height>5</height>
-                               <texture>separator.png</texture>
-                       </control>
-                       <control type="list" id="49">
-                               <posx>0</posx>
-                               <posy>400</posy>
-                               <width>960</width>
-                               <height>330</height>
-                               <onleft>49</onleft>
-                               <onright>49</onright>
-                               <onup>9000</onup>
-                               <ondown>61</ondown>
-                               <pagecontrol>-</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="30">
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>30</height>
-                                               <font>font13_title</font>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>210</posx>
-                                               <posy>0</posy>
-                                               <width>750</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>white</selectedcolor>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </focusedlayout>
-                               <content>
-                                       <item>
-                                               <label>$LOCALIZE[557]:</label>
-                                               <label2>$INFO[ListItem.Artist]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Artist)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[558]:</label>
-                                               <label2>$INFO[ListItem.Album]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Album)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[515]:</label>
-                                               <label2>$INFO[ListItem.Genre]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Genre)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[572]:</label>
-                                               <label2>$INFO[ListItem.Studio]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Studio)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20417]:</label>
-                                               <label2>$INFO[ListItem.Writer]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Writer)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[20339]:</label>
-                                               <label2>$INFO[ListItem.Director]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Director)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[562]:</label>
-                                               <label2>$INFO[ListItem.Year]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Year)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[2050]:</label>
-                                               <label2>$INFO[ListItem.Duration] $LOCALIZE[12391]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.Duration)</visible>
-                                       </item>
-                                       <item>
-                                               <label>$LOCALIZE[15311]</label>
-                                               <label2>$INFO[ListItem.FilenameAndPath]</label2>
-                                               <onclick>-</onclick>
-                                               <visible>!IsEmpty(ListItem.FilenameAndPath)</visible>
-                                       </item>
-                               </content>
-                       </control>
-               </control>
-
-               <control type="panel" id="50">
-                       <posx>0</posx>
-                       <posy>65</posy>
-                       <width>1000</width>
-                       <height>702</height>
-                       <onup>50</onup>
-                       <onleft>50</onleft>
-                       <onright>50</onright>
-                       <ondown>50</ondown>
-                       <pagecontrol>-</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <include>VisibleFadeEffect</include>
-                       <itemlayout height="100" width="500">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>500</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>4</posy>
-                                       <width>100</width>
-                                       <height>92</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <fadetime>IconCrossfadeTime</fadetime>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="5">ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                               </control>
-                               <control type="textbox">
-                                       <posx>120</posx>
-                                       <posy>10</posy>
-                                       <width>360</width>
-                                       <height>80</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="100" width="500">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>700</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>4</posy>
-                                       <width>100</width>
-                                       <height>92</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <fadetime>IconCrossfadeTime</fadetime>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="5">ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                               </control>
-                               <control type="textbox">
-                                       <posx>120</posx>
-                                       <posy>10</posy>
-                                       <width>360</width>
-                                       <height>80</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <posx>980</posx>
-                       <posy>790</posy>
-                       <width>800</width>
-                       <height>30</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <scroll>true</scroll>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <label>$INFO[Container(50).CurrentPage, ( $LOCALIZE[31024] ]$INFO[Container(50).NumPages,/, )]</label>
-                       <visible>Control.IsVisible(50)</visible>
-               </control>
-
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>830</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>2</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>50</onup>
-                       <ondown>49</ondown>
-                       <control type="togglebutton" id="8">
-                               <description>Play/browse to Show</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>208</label>
-                               <alttexturefocus border="5">IconBack-focus.png</alttexturefocus>
-                               <alttexturenofocus border="5">ListNF.png</alttexturenofocus>
-                               <altlabel>1024</altlabel>
-                               <usealttexture>Container.Content(TVShows)</usealttexture>
-                       </control>
-                       <control type="button" id="5">
-                               <description>Cast/Review</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>206</label>
-                       </control>
-                       <control type="button" id="6">
-                               <description>Refresh</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>184</label>
-                       </control>
-                       <control type="button" id="10">
-                               <description>Get Thumb</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>13405</label>
-                       </control>
-                       <control type="button" id="12">
-                               <description>Get Fanart</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>20413</label>
-                       </control>
-                       <control type="button" id="11">
-                               <description>Play Trailer</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>20410</label>
-                               <visible>!IsEmpty(ListItem.Trailer) + !Skin.HasSetting(WindowedTrailer)</visible>
-                       </control>
-                       <control type="button" id="15">
-                               <description>Play Trailer Windowed</description>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>20410</label>
-                               <onclick>PlayMedia($INFO[ListItem.Trailer],1)</onclick>
-                               <visible>!IsEmpty(ListItem.Trailer) + Skin.HasSetting(WindowedTrailer)</visible>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/DialogVideoScan.xml b/addons/skin.touched/4x3Hirez/DialogVideoScan.xml
deleted file mode 100644 (file)
index d5e2e3e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<window id="133">
-       <defaultcontrol></defaultcontrol>
-       <include>dialogeffect</include>
-       <controls>
-               <control type="group">
-                       <posx>420r</posx>
-                       <posy>25</posy>
-                       <visible>!Window.IsVisible(FullscreenVideo) + !Window.IsVisible(Visualisation)</visible>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>350</width>
-                               <height>67</height>
-                               <texture border="8">IconBack.png</texture>
-                       </control>
-                       <control type="fadelabel" id="401">
-                               <posx>10</posx>
-                               <posy>5</posy>
-                               <width>330</width>
-                               <height>15</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>black</textcolor>
-                       </control>
-                       <control type="fadelabel" id="405">
-                               <posx>10</posx>
-                               <posy>24</posy>
-                               <width>330</width>
-                               <height>20</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font12</font>
-                               <textcolor>black</textcolor>
-                               <haspath>true</haspath>
-                       </control>
-                       <control type="progress" id="404">
-                               <description>progress control</description>
-                               <posx>5</posx>
-                               <posy>47</posy>
-                               <width>340</width>
-                               <height>15</height>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogVolumeBar.xml b/addons/skin.touched/4x3Hirez/DialogVolumeBar.xml
deleted file mode 100644 (file)
index 266eb87..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<window id="104">
-       <defaultcontrol>1</defaultcontrol>
-               <animation effect="slide" start="0,-40" end="0,0" time="100">WindowOpen</animation>
-               <animation effect="slide" start="0,0" end="0,-40" delay="400" time="100">WindowClose</animation>
-       <controls>
-               <control type="group">
-                       <posx>820</posx>
-                       <posy>0</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>-10</posy>
-                               <width>300</width>
-                               <height>50</height>
-                               <texture flipy="true" border="2">SubBack.png</texture>
-                       </control>
-                       <control type="group">
-                               <visible>!player.passthrough</visible>
-                               <control type="progress" id="1">
-                                       <description>progress control</description>
-                                       <posx>50</posx>
-                                       <posy>8</posy>
-                                       <width>230</width>
-                                       <height>18</height>
-                                       <info>Player.Volume</info>
-                               </control>
-                       </control>
-                       <control type="group">
-                               <visible>player.passthrough</visible>
-                               <control type="label">
-                                       <description>Passthrough Label</description>
-                                       <posx>50</posx>
-                                       <posy>6</posy>
-                                       <width>230</width>
-                                       <height>20</height>
-                                       <label>$LOCALIZE[29802]</label>
-                                       <font>font10_title</font>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/DialogYesNo.xml b/addons/skin.touched/4x3Hirez/DialogYesNo.xml
deleted file mode 100644 (file)
index ebf9036..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-<window id="100">
-       <defaultcontrol always="true">10</defaultcontrol>
-       <coordinates>
-               <system>1</system>
-               <posx>290</posx>
-               <posy>300</posy>
-       </coordinates>
-       <include>dialogeffect</include>
-       <controls>
-               <control type="image">
-                       <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                       <posx>-30</posx>
-                       <posy>-30</posy>
-                       <width>760</width>
-                       <height>370</height>
-                       <texture border="30">DialogShadow.png</texture>
-               </control>
-               <control type="image">
-                       <description>Header Background</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>700</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="group">
-                       <posx>630</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>600</width>
-                       <label>$LOCALIZE[13406]</label>
-               </control>
-               <control type="image">
-                       <description>Background</description>
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>700</width>
-                       <height>250</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label" id="2">
-                       <description>dialog line 1</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label" id="3">
-                       <description>dialog line 2</description>
-                       <posx>20</posx>
-                       <posy>110</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label" id="4">
-                       <description>dialog line 3</description>
-                       <posx>20</posx>
-                       <posy>140</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>250</posy>
-                       <width>660</width>
-                       <height>50</height>
-                       <itemgap>10</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>9000</onup>
-                       <ondown>9000</ondown>
-                       <control type="button" id="11">
-                               <description>Yes button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>107</label>
-                       </control>
-                       <control type="button" id="10">
-                               <description>No button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>106</label>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/FileBrowser.xml b/addons/skin.touched/4x3Hirez/FileBrowser.xml
deleted file mode 100644 (file)
index b05a4a5..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-<window id="126">
-       <defaultcontrol always="true">450</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label" id="411">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$LOCALIZE[1023]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-
-               <control type="label" id="412">
-                       <description>path label</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>960</width>
-                       <height>30</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <font>font13_title</font>
-                       <haspath>true</haspath>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="list" id="450">
-                       <posx>20</posx>
-                       <posy>120</posy>
-                       <width>960</width>
-                       <height>650</height>
-                       <onleft>9000</onleft>
-                       <onright>60</onright>
-                       <onup>450</onup>
-                       <ondown>450</ondown>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="50" width="960">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>960</width>
-                                       <height>51</height>
-                                       <texture border="5">MenuItemNF.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>2</posy>
-                                       <width>47</width>
-                                       <height>47</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>70</posx>
-                                       <posy>0</posy>
-                                       <width>780</width>
-                                       <height>50</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="50" width="960">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>960</width>
-                                       <height>51</height>
-                                       <texture border="5">MenuItemNF.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>2</posy>
-                                       <width>47</width>
-                                       <height>47</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>70</posx>
-                                       <posy>0</posy>
-                                       <width>780</width>
-                                       <height>50</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <description>Page label</description>
-                       <posx>980</posx>
-                       <posy>780</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <label>($INFO[Container(450).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(450).CurrentPage]/$INFO[Container(450).NumPages])</label>
-                       <visible>!Control.IsVisible(451)</visible>
-               </control>
-               <control type="panel" id="451">
-                       <posx>20</posx>
-                       <posy>120</posy>
-                       <width>960</width>
-                       <height>650</height>
-                       <onleft>9000</onleft>
-                       <onright>60</onright>
-                       <onup>451</onup>
-                       <ondown>451</ondown>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="250" width="320">
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>300</width>
-                                       <height>220</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="8">ThumbShadow.png</bordertexture>
-                                       <bordersize>8</bordersize>
-                               </control>
-                               <control type="label">
-                                       <posx>160</posx>
-                                       <posy>220</posy>
-                                       <width>300</width>
-                                       <height>20</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="250" width="320">
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>300</width>
-                                       <height>220</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="8">ThumbShadow.png</bordertexture>
-                                       <bordersize>8</bordersize>
-                               </control>
-                               <control type="label">
-                                       <posx>160</posx>
-                                       <posy>220</posy>
-                                       <width>300</width>
-                                       <height>20</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <description>Page label</description>
-                       <posx>980</posx>
-                       <posy>780</posy>
-                       <width>660</width>
-                       <height>30</height>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <label>($INFO[Container(451).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(451).CurrentPage]/$INFO[Container(451).NumPages])</label>
-                       <visible>Control.IsVisible(451)</visible>
-               </control>
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>830</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>50</onup>
-                       <ondown>49</ondown>
-                       <control type="button" id="413">
-                               <description>OK button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-                       <control type="button" id="414">
-                               <description>Cancel button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-                       <control type="button" id="415">
-                               <description>Create folder button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>119</label>
-                       </control>
-                       <control type="radiobutton" id="416">
-                               <description>Flip Image button</description>
-                               <width>270</width>
-                               <align>left</align>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>749</label>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/FileManager.xml b/addons/skin.touched/4x3Hirez/FileManager.xml
deleted file mode 100644 (file)
index 13f8618..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-<window id="3">
-       <defaultcontrol>20</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <include>CommonSettingsBackground</include>
-               <control type="group">
-                       <animation effect="slide" start="-620,0" end="0,0" time="400" tween="quadratic" easing="out">WindowOpen</animation>
-                       <animation effect="slide" start="0,0" end="-620,0" time="400" tween="quadratic" easing="out">WindowClose</animation>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>620</width>
-                               <height>720</height>
-                               <texture border="0,0,15,0">MediaBladeSub.png</texture>
-                       </control>
-                       <control type="image">
-                               <posx>480</posx>
-                               <posy>10</posy>
-                               <width>90</width>
-                               <height>90</height>
-                               <aspectratio>keep</aspectratio>
-                               <info>Container(20).ListItem.Icon</info>
-                       </control>
-                       <control type="label">
-                               <description>header label</description>
-                               <posx>35</posx>
-                               <posy>50</posy>
-                               <width>570</width>
-                               <height>30</height>
-                               <font>font30_title</font>
-                               <label>A</label>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <textcolor>blue</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                       </control>
-                       <control type="label" id="101">
-                               <description>current directory text label</description>
-                               <posx>35</posx>
-                               <posy>100</posy>
-                               <width>570</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <scroll>true</scroll>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="label">
-                               <description>number of files/pages in left list text label</description>
-                               <posx>35</posx>
-                               <posy>670</posy>
-                               <width>570</width>
-                               <font>font12</font>
-                               <align>left</align>
-                               <scroll>true</scroll>
-                               <textcolor>grey</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <label>([COLOR=blue]$INFO[Container(20).NumItems][/COLOR]) $LOCALIZE[31025] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(20).CurrentPage]/$INFO[Container(20).NumPages][/COLOR])</label>
-                       </control>
-                       <control type="scrollbar" id="30">
-                               <posx>25</posx>
-                               <posy>140</posy>
-                               <width>25</width>
-                               <height>490</height>
-                               <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                               <texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
-                               <texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                               <textureslidernib>-</textureslidernib>
-                               <textureslidernibfocus>-</textureslidernibfocus>
-                               <onleft>31</onleft>
-                               <onright>20</onright>
-                               <ondown>20</ondown>
-                               <onup>20</onup>
-                               <showonepage>false</showonepage>
-                               <orientation>vertical</orientation>
-                       </control>
-                       <control type="list" id="20">
-                               <posx>60</posx>
-                               <posy>140</posy>
-                               <width>540</width>
-                               <height>491</height>
-                               <onleft>30</onleft>
-                               <onright>21</onright>
-                               <onup>20</onup>
-                               <ondown>20</ondown>
-                               <pagecontrol>30</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="35">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>540</width>
-                                               <height>36</height>
-                                               <texture border="0,2,0,2">MenuItemNF.png</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>500</width>
-                                               <height>36</height>
-                                               <font>font13</font>
-                                               <aligny>center</aligny>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <textcolor>grey2</textcolor>
-                                               <align>left</align>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>530</posx>
-                                               <posy>5</posy>
-                                               <width>200</width>
-                                               <height>24</height>
-                                               <font>font12</font>
-                                               <aligny>center</aligny>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <textcolor>grey</textcolor>
-                                               <align>right</align>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="35">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>540</width>
-                                               <height>36</height>
-                                               <visible>!Control.HasFocus(20)</visible>
-                                               <texture border="0,2,0,2">MenuItemNF.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>540</width>
-                                               <height>36</height>
-                                               <visible>Control.HasFocus(20)</visible>
-                                               <texture border="0,2,0,2">MenuItemFO.png</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>500</width>
-                                               <height>36</height>
-                                               <font>font13</font>
-                                               <aligny>center</aligny>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <textcolor>white</textcolor>
-                                               <align>left</align>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>530</posx>
-                                               <posy>5</posy>
-                                               <width>200</width>
-                                               <height>24</height>
-                                               <font>font12</font>
-                                               <aligny>center</aligny>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <textcolor>grey</textcolor>
-                                               <align>right</align>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </focusedlayout>
-                       </control>
-               </control>
-               <control type="group">
-                       <animation effect="slide" start="620,0" end="0,0" time="400" tween="quadratic" easing="out">WindowOpen</animation>
-                       <animation effect="slide" start="0,0" end="620,0" time="400" tween="quadratic" easing="out">WindowClose</animation>
-                       <control type="image">
-                               <posx>620r</posx>
-                               <posy>0</posy>
-                               <width>620</width>
-                               <height>720</height>
-                               <texture border="15,0,0,0" flipx="true">MediaBladeSub.png</texture>
-                       </control>
-                       <control type="image">
-                               <posx>570r</posx>
-                               <posy>10</posy>
-                               <width>90</width>
-                               <height>90</height>
-                               <aspectratio>keep</aspectratio>
-                               <info>Container(21).ListItem.Icon</info>
-                       </control>
-                       <control type="label">
-                               <description>header label</description>
-                               <posx>35r</posx>
-                               <posy>50</posy>
-                               <width>570</width>
-                               <height>30</height>
-                               <font>font30_title</font>
-                               <label>B</label>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                               <textcolor>blue</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                       </control>
-                       <control type="label" id="102">
-                               <description>current directory text label right</description>
-                               <posx>35r</posx>
-                               <posy>100</posy>
-                               <width>570</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>white</textcolor>
-                               <scroll>true</scroll>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="label">
-                               <description>number of files/pages in left list text label</description>
-                               <posx>35r</posx>
-                               <posy>670</posy>
-                               <width>570</width>
-                               <font>font12</font>
-                               <align>right</align>
-                               <scroll>true</scroll>
-                               <textcolor>grey</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <label>([COLOR=blue]$INFO[Container(21).NumItems][/COLOR]) $LOCALIZE[31025] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(21).CurrentPage]/$INFO[Container(21).NumPages][/COLOR])</label>
-                       </control>
-                       <control type="scrollbar" id="31">
-                               <posx>50r</posx>
-                               <posy>140</posy>
-                               <width>25</width>
-                               <height>490</height>
-                               <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                               <texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
-                               <texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                               <textureslidernib>-</textureslidernib>
-                               <textureslidernibfocus>-</textureslidernibfocus>
-                               <onleft>21</onleft>
-                               <onright>30</onright>
-                               <ondown>21</ondown>
-                               <onup>21</onup>
-                               <showonepage>false</showonepage>
-                               <orientation>vertical</orientation>
-                       </control>
-                       <control type="list" id="21">
-                               <posx>590r</posx>
-                               <posy>140</posy>
-                               <width>540</width>
-                               <height>491</height>
-                               <onleft>20</onleft>
-                               <onright>31</onright>
-                               <onup>21</onup>
-                               <ondown>21</ondown>
-                               <pagecontrol>31</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="35">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>540</width>
-                                               <height>36</height>
-                                               <texture border="0,2,0,2">MenuItemNF.png</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>500</width>
-                                               <height>36</height>
-                                               <font>font13</font>
-                                               <aligny>center</aligny>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <textcolor>grey2</textcolor>
-                                               <align>left</align>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>530</posx>
-                                               <posy>5</posy>
-                                               <width>200</width>
-                                               <height>24</height>
-                                               <font>font12</font>
-                                               <aligny>center</aligny>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <textcolor>grey</textcolor>
-                                               <align>right</align>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="35">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>540</width>
-                                               <height>36</height>
-                                               <visible>!Control.HasFocus(21)</visible>
-                                               <texture border="0,2,0,2">MenuItemNF.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>540</width>
-                                               <height>36</height>
-                                               <visible>Control.HasFocus(21)</visible>
-                                               <texture border="0,2,0,2">MenuItemFO.png</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>500</width>
-                                               <height>36</height>
-                                               <font>font13</font>
-                                               <aligny>center</aligny>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <textcolor>white</textcolor>
-                                               <align>left</align>
-                                               <info>ListItem.Label</info>
-                                       </control>
-                                       <control type="label">
-                                               <posx>530</posx>
-                                               <posy>5</posy>
-                                               <width>200</width>
-                                               <height>24</height>
-                                               <font>font12</font>
-                                               <aligny>center</aligny>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <textcolor>grey</textcolor>
-                                               <align>right</align>
-                                               <info>ListItem.Label2</info>
-                                       </control>
-                               </focusedlayout>
-                       </control>
-               </control>
-               <control type="group">
-                       <posx>60</posx>
-                       <posy>0</posy>
-                       <animation effect="slide" end="-310,0" time="400" tween="quadratic" easing="out">WindowClose</animation>
-                       <animation effect="slide" start="-310,0" time="400" tween="quadratic" easing="out">WindowOpen</animation>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>250</width>
-                               <height>35</height>
-                               <texture border="0,0,32,0">header.png</texture>
-                       </control>
-                       <control type="label">
-                               <include>WindowTitleCommons</include>
-                               <posx>220</posx>
-                               <label>$LOCALIZE[7]</label>
-                       </control>
-               </control>
-               <include>WindowTitleHomeButton</include>
-               <include>Clock</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/Font.xml b/addons/skin.touched/4x3Hirez/Font.xml
deleted file mode 100644 (file)
index 9c477b0..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-<fonts>
-       <fontset id="Default" idloc="31390" unicode="true"> 
-       <!-- Normal Fonts -->
-               <font>
-                       <name>font10</name>
-                       <filename>Arial.ttf</filename>
-                       <size>12</size>
-               </font>
-               <font>
-                       <name>font11</name>
-                       <filename>Arial.ttf</filename>
-                       <size>14</size>
-               </font>
-               <font>
-                       <name>font12</name>
-                       <filename>Arial.ttf</filename>
-                       <size>16</size>
-               </font>
-               <font>
-                       <name>font13</name>
-                       <filename>Arial.ttf</filename>
-                       <size>20</size>
-               </font>
-               <font>
-                       <name>font16</name>
-                       <filename>Arial.ttf</filename>
-                       <size>25</size>
-               </font>
-               <font>
-                       <name>font30</name>
-                       <filename>Arial.ttf</filename>
-                       <size>30</size>
-               </font>
-               <font>
-                       <name>font55</name>
-                       <filename>Arial.ttf</filename>
-                       <size>55</size>
-               </font>
-       <!-- Title Fonts -->
-               <font>
-                       <name>font8_title</name>
-                       <filename>DejaVuSans-Bold.ttf</filename>
-                       <size>11</size>
-               </font>
-               <font>
-                       <name>font10_title</name>
-                       <filename>DejaVuSans-Bold.ttf</filename>
-                       <size>14</size>
-               </font>
-               <font>
-                       <name>font12_title</name>
-                       <filename>DejaVuSans-Bold.ttf</filename>
-                       <size>18</size>
-               </font>
-               <font>
-                       <name>font13_title</name>
-                       <filename>DejaVuSans-Bold.ttf</filename>
-                       <size>20</size>
-               </font>
-               <font>
-                       <name>font13caps_title</name>
-                       <filename>DejaVuSans-Bold-Caps.ttf</filename>
-                       <size>20</size>
-               </font>
-               <font>
-                       <name>font24_title</name>
-                       <filename>DejaVuSans-Bold.ttf</filename>
-                       <size>24</size>
-               </font>
-               <font>
-                       <name>font28_title</name>
-                       <filename>DejaVuSans-Bold.ttf</filename>
-                       <size>28</size>
-               </font>
-               <font>
-                       <name>font30_title</name>
-                       <filename>DejaVuSans-Bold.ttf</filename>
-                       <size>30</size>
-               </font>
-
-               <font>
-                       <name>WeatherTemp</name>
-                       <filename>DejaVuSans-Bold.ttf</filename>
-                       <size>80</size>
-               </font>
-       </fontset>
-
-       <fontset id="Arial" idloc="31391" unicode="true"> 
-       <!-- Normal Fonts -->
-               <font>
-                       <name>font10</name>
-                       <filename>Arial.ttf</filename>
-                       <size>12</size>
-               </font>
-               <font>
-                       <name>font11</name>
-                       <filename>Arial.ttf</filename>
-                       <size>14</size>
-               </font>
-               <font>
-                       <name>font12</name>
-                       <filename>Arial.ttf</filename>
-                       <size>16</size>
-               </font>
-               <font>
-                       <name>font13</name>
-                       <filename>Arial.ttf</filename>
-                       <size>20</size>
-               </font>
-               <font>
-                       <name>font16</name>
-                       <filename>Arial.ttf</filename>
-                       <size>25</size>
-               </font>
-               <font>
-                       <name>font30</name>
-                       <filename>Arial.ttf</filename>
-                       <size>30</size>
-               </font>
-               <font>
-                       <name>font55</name>
-                       <filename>Arial.ttf</filename>
-                       <size>55</size>
-               </font>
-       <!-- Title Fonts -->
-               <font>
-                       <name>font8_title</name>
-                       <filename>Arial.ttf</filename>
-                       <size>11</size>
-                       <style>bold</style>
-               </font>
-               <font>
-                       <name>font10_title</name>
-                       <filename>Arial.ttf</filename>
-                       <size>14</size>
-                       <style>bold</style>
-               </font>
-               <font>
-                       <name>font12_title</name>
-                       <filename>Arial.ttf</filename>
-                       <size>18</size>
-                       <style>bold</style>
-               </font>
-               <font>
-                       <name>font13_title</name>
-                       <filename>Arial.ttf</filename>
-                       <size>20</size>
-                       <style>bold</style>
-               </font>
-               <font>
-                       <name>font13caps_title</name>
-                       <filename>Arial.ttf</filename>
-                       <size>20</size>
-                       <style>bold</style>
-               </font>
-               <font>
-                       <name>font24_title</name>
-                       <filename>Arial.ttf</filename>
-                       <size>24</size>
-                       <style>bold</style>
-               </font>
-               <font>
-                       <name>font28_title</name>
-                       <filename>Arial.ttf</filename>
-                       <size>28</size>
-                       <style>bold</style>
-               </font>
-               <font>
-                       <name>font30_title</name>
-                       <filename>Arial.ttf</filename>
-                       <size>30</size>
-                       <style>bold</style>
-               </font>
-
-               <font>
-                       <name>WeatherTemp</name>
-                       <filename>Arial.ttf</filename>
-                       <size>80</size>
-                       <style>bold</style>
-               </font>
-       </fontset>
-</fonts>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/Home.xml b/addons/skin.touched/4x3Hirez/Home.xml
deleted file mode 100644 (file)
index e8ef634..0000000
+++ /dev/null
@@ -1,406 +0,0 @@
-<window id="0">
-       <defaultcontrol always="true">9000</defaultcontrol>
-       <allowoverlay>no</allowoverlay> 
-       <controls>
-               <include>CommonBackground</include>
-               <control type="image">
-                       <description>XBMC Logo</description>
-                       <posx>20</posx>
-                       <posy>36</posy>
-                       <width>360</width>
-                       <height>48</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>xbmc-logo.png</texture>
-                       <visible>!Player.HasMedia</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>Window_OpenClose_Animation</include>
-               </control>
-               <include>CommonNowPlaying</include>
-               <control type="group">
-                       <!-- weather Info -->
-                       <include>Window_OpenClose_Animation</include>
-                       <visible>Weather.IsFetched + ![Window.IsVisible(VideoScan) | Window.IsVisible(MusicScan)] + !Skin.HasSetting(HideHomeButtonWeather)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <posx>720r</posx>
-                       <posy>23</posy>
-                       <control type="button">
-                               <description>Goto Weather button</description>
-                               <posx>610</posx>
-                               <posy>0</posy>
-                               <width>160</width>
-                               <height>80</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>ActivateWindow(Weather)</onclick>
-                       </control>
-                       <control type="image">
-                               <description>Weather image</description>
-                               <posx>632</posx>
-                               <posy>0</posy>
-                               <width>74</width>
-                               <height>74</height>
-                               <aspectratio>keep</aspectratio>
-                               <texture>$INFO[Weather.Conditions]</texture>
-                       </control>
-                       <control type="label">
-                               <description>location label</description>
-                               <posx>620</posx>
-                               <posy>12</posy>
-                               <height>25</height>
-                               <width>410</width>
-                               <label>[B]$INFO[Weather.Location][/B]</label>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                               <font>font13</font>
-                               <shadowcolor>black</shadowcolor>
-                       </control>
-                       <control type="grouplist">
-                               <posx>0</posx>
-                               <posy>35</posy>
-                               <width>620</width>
-                               <height>35</height>
-                               <orientation>horizontal</orientation>
-                               <align>right</align>
-                               <itemgap>0</itemgap>
-                               <control type="label">
-                                       <description>Weather label</description>
-                                       <height>30</height>
-                                       <width max="400">auto</width>
-                                       <label>$INFO[Window(Weather).Property(Current.Condition)]  </label>
-                                       <font>font12</font>
-                                       <aligny>center</aligny>
-                                       <textcolor>grey</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>Temp Label</description>
-                                       <height>30</height>
-                                       <width max="400">auto</width>
-                                       <label>[B]$INFO[Window(Weather).Property(Current.Temperature)][/B]</label>
-                                       <aligny>center</aligny>
-                                       <font>font24_title</font>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>Temp Units Label</description>
-                                       <posy>2</posy>
-                                       <height>20</height>
-                                       <width max="200">auto</width>
-                                       <label>$INFO[System.TemperatureUnits]</label>
-                                       <font>font12</font>
-                                       <aligny>center</aligny>
-                                       <shadowcolor>black</shadowcolor>
-                                       <visible>!IsEmpty(Window(Weather).Property(Current.Temperature))</visible>
-                               </control>
-                       </control>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <control type="group">
-                               <posx>0</posx>
-                               <posy>130</posy>
-                               <control type="button">
-                                       <description>left Arrow</description>
-                                       <posx>30</posx>
-                                       <posy>320</posy>
-                                       <width>40</width>
-                                       <height>60</height>
-                                       <texturefocus>arrow-big-left.png</texturefocus>
-                                       <texturenofocus>arrow-big-left.png</texturenofocus>
-                                       <onclick>Control.Move(9000,-1)</onclick>
-                                       <visible>Container(9000).HasPrevious</visible>
-                                       <include>VisibleFadeEffect</include>
-                               </control>
-                               <control type="button">
-                                       <description>right Arrow</description>
-                                       <posx>70r</posx>
-                                       <posy>320</posy>
-                                       <width>40</width>
-                                       <height>60</height>
-                                       <texturefocus>arrow-big-right.png</texturefocus>
-                                       <texturenofocus>arrow-big-right.png</texturenofocus>
-                                       <onclick>Control.Move(9000,1)</onclick>
-                                       <visible>Container(9000).HasNext</visible>
-                                       <include>VisibleFadeEffect</include>
-                               </control>
-                               <control type="panel" id="9000">
-                                       <posx>80</posx>
-                                       <posy>0</posy>
-                                       <width>1120</width>
-                                       <height>720</height>
-                                       <onleft>20</onleft>
-                                       <onright>22</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <pagecontrol>-</pagecontrol>
-                                       <scrolltime>200</scrolltime>
-                                       <orientation>horizontal</orientation>
-                                       <preloaditems>2</preloaditems>
-                                       <itemlayout height="340" width="560">
-                                               <control type="image">
-                                                       <posx>0</posx>
-                                                       <posy>0</posy>
-                                                       <width>560</width>
-                                                       <height>360</height>
-                                                       <texture border="5">SubBack.png</texture>
-                                                       <bordertexture border="30">ShadowBorder.png</bordertexture>
-                                                       <bordersize>25</bordersize>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>30</posx>
-                                                       <posy>30</posy>
-                                                       <width>500</width>
-                                                       <height>250</height>
-                                                       <aspectratio>scale</aspectratio>
-                                                       <texture>$INFO[ListItem.Icon,special://skin/background/]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>30</posx>
-                                                       <posy>30</posy>
-                                                       <width>300</width>
-                                                       <height>300</height>
-                                                       <texture>GlassOverlay.png</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>40</posx>
-                                                       <posy>290</posy>
-                                                       <width>480</width>
-                                                       <height>30</height>
-                                                       <font>font13caps_title</font>
-                                                       <textcolor>white</textcolor>
-                                                       <shadowcolor>black</shadowcolor>
-                                                       <align>left</align>
-                                                       <aligny>center</aligny>
-                                                       <label>[B]$INFO[ListItem.Label][/B]</label>
-                                               </control>
-                                       </itemlayout>
-                                       <focusedlayout height="340" width="560">
-                                               <control type="image">
-                                                       <posx>0</posx>
-                                                       <posy>0</posy>
-                                                       <width>560</width>
-                                                       <height>360</height>
-                                                       <texture border="5">SubBack.png</texture>
-                                                       <bordertexture border="30">ShadowBorder.png</bordertexture>
-                                                       <bordersize>25</bordersize>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>30</posx>
-                                                       <posy>30</posy>
-                                                       <width>500</width>
-                                                       <height>250</height>
-                                                       <aspectratio>scale</aspectratio>
-                                                       <texture>$INFO[ListItem.Icon,special://skin/background/]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>30</posx>
-                                                       <posy>30</posy>
-                                                       <width>300</width>
-                                                       <height>300</height>
-                                                       <texture>GlassOverlay.png</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>40</posx>
-                                                       <posy>290</posy>
-                                                       <width>480</width>
-                                                       <height>30</height>
-                                                       <font>font13caps_title</font>
-                                                       <textcolor>white</textcolor>
-                                                       <shadowcolor>black</shadowcolor>
-                                                       <align>left</align>
-                                                       <aligny>center</aligny>
-                                                       <label>[B]$INFO[ListItem.Label][/B]</label>
-                                               </control>
-                                       </focusedlayout>
-                                       <content>
-                                               <item>
-                                                       <label>3</label>
-                                                       <onclick condition="!Skin.HasSetting(HomeVideosGoesToRoot)">ActivateWindow(Videos)</onclick>
-                                                       <onclick condition="Skin.HasSetting(HomeVideosGoesToRoot)">ActivateWindow(Videos,root)</onclick>
-                                                       <icon>videos.png</icon>
-                                                       <thumb>-</thumb>
-                                                       <visible>!Skin.HasSetting(HideHomeButtonVideo)</visible>
-                                               </item>
-                                               <item>
-                                                       <label>20342</label>
-                                                       <onclick>ActivateWindow(Videos,MovieTitles,Return)</onclick>
-                                                       <icon>movies.png</icon>
-                                                       <thumb>-</thumb>
-                                                       <visible>Library.HasContent(Movies)</visible>
-                                                       <visible>!Skin.HasSetting(HideHomeButtonMovies)</visible>
-                                               </item>
-                                               <item>
-                                                       <label>20343</label>
-                                                       <onclick>ActivateWindow(Videos,TVShowTitles,Return)</onclick>
-                                                       <icon>tvshows.png</icon>
-                                                       <thumb>-</thumb>
-                                                       <visible>Library.HasContent(TVShows)</visible>
-                                                       <visible>!Skin.HasSetting(HideHomeButtonTVShows)</visible>
-                                               </item>
-                                               <item>
-                                                       <label>2</label>
-                                                       <onclick>ActivateWindow(Music)</onclick>
-                                                       <icon>music.png</icon>
-                                                       <thumb>-</thumb>
-                                                       <visible>!Skin.HasSetting(HideHomeButtonMusic)</visible>
-                                               </item>
-                                               <item>
-                                                       <label>1</label>
-                                                       <onclick>ActivateWindow(Pictures)</onclick>
-                                                       <icon>pictures.png</icon>
-                                                       <thumb>-</thumb>
-                                                       <visible>!Skin.HasSetting(HideHomeButtonPictures)</visible>
-                                               </item>
-                                               <item>
-                                                       <label>0</label>
-                                                       <onclick>ActivateWindow(Programs,Addons,return)</onclick>
-                                                       <icon>programs.png</icon>
-                                                       <thumb>-</thumb>
-                                                       <visible>!Skin.HasSetting(HideHomeButtonPrograms)</visible>
-                                               </item>
-                                       </content>
-                               </control>
-                       </control>
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>13012</label>
-                                       <onclick>XBMC.Quit</onclick>
-                                       <icon>icon_shutdown.png</icon>
-                               </item>
-                               <item>
-                                       <label>20126</label>
-                                       <onclick>System.LogOff</onclick>
-                                       <icon>icon_logoff.png</icon>
-                                       <visible>System.HasLoginScreen | IntegerGreaterThan(System.ProfileCount,1)</visible>
-                               </item>
-                               <item>
-                                       <label>5</label>
-                                       <onclick>ActivateWindow(Settings)</onclick>
-                                       <icon>icon_settings.png</icon>
-                               </item>
-                               <item>
-                                       <label>13376</label>
-                                       <onclick>ActivateWindow(1112)</onclick>
-                                       <icon>icon_volume.png</icon>
-                                       <visible>false</visible>
-                               </item>
-                               <item>
-                                       <label>Reload Skin</label>
-                                       <onclick>ReloadSkin</onclick>
-                                       <icon>icon_refresh.png</icon>
-                                       <visible>false</visible>
-                               </item>
-                       </content>
-               </control>
-               <control type="panel" id="9003">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>Window_OpenClose_Animation</include>
-                       <animation effect="slide" start="0,0" end="112,0" time="0" condition="StringCompare(Container(9003).NumItems,3)">conditional</animation>
-                       <animation effect="slide" start="0,0" end="224,0" time="0" condition="StringCompare(Container(9003).NumItems,2)">conditional</animation>
-                       <animation effect="slide" start="0,0" end="336,0" time="0" condition="StringCompare(Container(9003).NumItems,1)">conditional</animation>
-                       <posx>570r</posx>
-                       <posy>105r</posy>
-                       <width>448</width>
-                       <height>120</height>
-                       <onleft>9002</onleft>
-                       <onright>9002</onright>
-                       <onup>9001</onup>
-                       <ondown>20</ondown>
-                       <pagecontrol>-</pagecontrol>
-                       <scrolltime>300</scrolltime>
-                       <orientation>Horizontal</orientation>
-                       <itemlayout height="200" width="112">
-                               <control type="image">
-                                       <posx>16</posx>
-                                       <posy>0</posy>
-                                       <width>80</width>
-                                       <height>80</height>
-                                       <texture diffuse="shortcut_diffuse.png">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>16</posx>
-                                       <posy>0</posy>
-                                       <width>80</width>
-                                       <height>80</height>
-                                       <texture>shortcut_border.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>56</posx>
-                                       <posy>82</posy>
-                                       <width>100</width>
-                                       <height>20</height>
-                                       <font>font11</font>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="200" width="112">
-                               <control type="image">
-                                       <posx>16</posx>
-                                       <posy>0</posy>
-                                       <width>80</width>
-                                       <height>80</height>
-                                       <texture diffuse="shortcut_diffuse.png">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>16</posx>
-                                       <posy>0</posy>
-                                       <width>80</width>
-                                       <height>80</height>
-                                       <texture>shortcut_border.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>56</posx>
-                                       <posy>82</posy>
-                                       <width>100</width>
-                                       <height>20</height>
-                                       <font>font11</font>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                       </focusedlayout>
-                       <content>
-                               <item>
-                                       <label>$INFO[system.addontitle(Skin.String(HomeAddonButton1))]</label>
-                                       <onclick>RunAddon($INFO[Skin.String(HomeAddonButton1)])</onclick>
-                                       <icon>$INFO[system.addonicon(Skin.String(HomeAddonButton1))]</icon>
-                                       <thumb>-</thumb>
-                                       <visible>!IsEmpty(Skin.String(HomeAddonButton1))</visible>
-                               </item>
-                               <item>
-                                       <label>$INFO[system.addontitle(Skin.String(HomeAddonButton2))]</label>
-                                       <onclick>RunAddon($INFO[Skin.String(HomeAddonButton2)])</onclick>
-                                       <icon>$INFO[system.addonicon(Skin.String(HomeAddonButton2))]</icon>
-                                       <thumb>-</thumb>
-                                       <visible>!IsEmpty(Skin.String(HomeAddonButton2))</visible>
-                               </item>
-                               <item>
-                                       <label>$INFO[system.addontitle(Skin.String(HomeAddonButton3))]</label>
-                                       <onclick>RunAddon($INFO[Skin.String(HomeAddonButton3)])</onclick>
-                                       <icon>$INFO[system.addonicon(Skin.String(HomeAddonButton3))]</icon>
-                                       <thumb>-</thumb>
-                                       <visible>!IsEmpty(Skin.String(HomeAddonButton3))</visible>
-                               </item>
-                               <item>
-                                       <label>$INFO[system.addontitle(Skin.String(HomeAddonButton4))]</label>
-                                       <onclick>RunAddon($INFO[Skin.String(HomeAddonButton4)])</onclick>
-                                       <icon>$INFO[system.addonicon(Skin.String(HomeAddonButton4))]</icon>
-                                       <thumb>-</thumb>
-                                       <visible>!IsEmpty(Skin.String(HomeAddonButton4))</visible>
-                               </item>
-                       </content>
-               </control>
-               <include>BehindDialogFadeOut</include>
-       </controls>     
-</window>
diff --git a/addons/skin.touched/4x3Hirez/IncludesCodecFlagging.xml b/addons/skin.touched/4x3Hirez/IncludesCodecFlagging.xml
deleted file mode 100644 (file)
index 49b3cdc..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<includes>
-       <include name="VideoCodecFlaggingConditions">
-               <control type="image">
-                       <description>Video rez Image</description>
-                       <width>70</width>
-                       <height>45</height>
-                       <aspectratio align="right">keep</aspectratio>
-                       <texture>$INFO[ListItem.VideoResolution,flagging/video/,.png]</texture>
-               </control>
-               <control type="image">
-                       <description>Common Codec Image</description>
-                       <width>100</width>
-                       <height>45</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>$INFO[ListItem.VideoCodec,flagging/video/,.png]</texture>
-                       <!-- Don't show if its one of the 500 divx codecs -->
-                       <visible>![substring(ListItem.VideoCodec,div,left) | stringcompare(ListItem.VideoCodec,dx50)]</visible>
-               </control>
-               <control type="image">
-                       <description>Divx Codec Image</description>
-                       <width>100</width>
-                       <height>45</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>flagging/video/divx.png</texture>
-                       <visible>[substring(ListItem.VideoCodec,div,left) | stringcompare(ListItem.VideoCodec,dx50)]</visible>
-               </control>
-       </include>
-       <include name="VideoTypeHackFlaggingConditions">
-               <control type="image">
-                       <description>Bluray Image</description>
-                       <width>100</width>
-                       <height>45</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>flagging/video/bluray.png</texture>
-                       <visible>[substring(ListItem.FilenameAndPath,bluray) | substring(ListItem.FilenameAndPath,bdrip)] + !Skin.HasSetting(HideFilenameFlagging)</visible>
-               </control>
-               <control type="image">
-                       <description>HDDVD Image</description>
-                       <width>100</width>
-                       <height>45</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>flagging/video/hddvd.png</texture>
-                       <visible>substring(ListItem.FilenameAndPath,hddvd) + !Skin.HasSetting(HideFilenameFlagging)</visible>
-               </control>
-               <control type="image">
-                       <description>DVD Image</description>
-                       <width>100</width>
-                       <height>45</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>flagging/video/dvd.png</texture>
-                       <visible>[substring(ListItem.FilenameAndPath,dvd) + ![substring(ListItem.FilenameAndPath,hddvd) | substring(ListItem.FilenameAndPath,bluray) | substring(ListItem.FilenameAndPath,bdrip)]] + !Skin.HasSetting(HideFilenameFlagging)</visible>
-               </control>
-               <control type="image">
-                       <description>TV Types Image</description>
-                       <width>100</width>
-                       <height>45</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>flagging/video/TV.png</texture>
-                       <visible>[substring(ListItem.FilenameAndPath,pdtv) | substring(ListItem.FilenameAndPath,hdtv) | substring(ListItem.FilenameAndPath,dsr)] + !Skin.HasSetting(HideFilenameFlagging)</visible>
-               </control>
-               <control type="image">
-                       <description>VHS Image</description>
-                       <width>100</width>
-                       <height>45</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>flagging/video/vhs.png</texture>
-                       <visible>substring(ListItem.FilenameAndPath,vhs) + !Skin.HasSetting(HideFilenameFlagging)</visible>
-               </control>
-       </include>
-       <include name="AudioCodecFlaggingConditions">
-               <control type="image">
-                       <description>Audio Codec Image</description>
-                       <width>100</width>
-                       <height>45</height>
-                       <aspectratio align="right">keep</aspectratio>
-                       <texture>$INFO[ListItem.AudioCodec,flagging/audio/,.png]</texture>
-               </control>
-       </include>
-       <include name="AudioChannelsFlaggingConditions">
-               <control type="image">
-                       <description>Audio Codec Image</description>
-                       <width>70</width>
-                       <height>45</height>
-                       <aspectratio align="left">keep</aspectratio>
-                       <texture>$INFO[ListItem.AudioChannels,flagging/audio/,.png]</texture>
-               </control>
-       </include>
-       <include name="AspectCodecFlaggingConditions">
-               <control type="image">
-                       <description>Aspectratio Image</description>
-                       <width>70</width>
-                       <height>45</height>
-                       <aspectratio align="right">keep</aspectratio>
-                       <texture>$INFO[ListItem.VideoAspect,flagging/aspectratio/,.png]</texture>
-               </control>
-       </include>
-</includes>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/IncludesKeypad.xml b/addons/skin.touched/4x3Hirez/IncludesKeypad.xml
deleted file mode 100644 (file)
index 3160317..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-<includes>
-       <include name="KeypadButtons">
-               <control type="button">
-                       <description>1 button</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12311</label>
-                       <textcolor>black</textcolor>
-                       <onleft>23</onleft>
-                       <onright>12</onright>
-                       <onup>20</onup>
-                       <ondown>14</ondown>
-                       <onclick>Number1</onclick>
-               </control>
-               <control type="button">
-                       <description>2 button</description>
-                       <posx>100</posx>
-                       <posy>0</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12312</label>
-                       <textcolor>black</textcolor>
-                       <onleft>11</onleft>
-                       <onright>13</onright>
-                       <onup>10</onup>
-                       <ondown>15</ondown>
-                       <onclick>Number2</onclick>
-               </control>
-               <control type="button">
-                       <description>3 button</description>
-                       <posx>200</posx>
-                       <posy>0</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12313</label>
-                       <textcolor>black</textcolor>
-                       <onleft>12</onleft>
-                       <onright>23</onright>
-                       <onup>22</onup>
-                       <ondown>16</ondown>
-                       <onclick>Number3</onclick>
-               </control>
-               <control type="button">
-                       <description>0 button</description>
-                       <posx>300</posx>
-                       <posy>0</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12310</label>
-                       <textcolor>black</textcolor>
-                       <onleft>20</onleft>
-                       <onright>22</onright>
-                       <onup>18</onup>
-                       <ondown>12</ondown>
-                       <onclick>Number0</onclick>
-               </control>
-               <control type="button">
-                       <description>4 button</description>
-                       <posx>0</posx>
-                       <posy>85</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12314</label>
-                       <textcolor>black</textcolor>
-                       <onleft>23</onleft>
-                       <onright>15</onright>
-                       <onup>11</onup>
-                       <ondown>17</ondown>
-                       <onclick>Number4</onclick>
-               </control>
-               <control type="button">
-                       <description>5 button</description>
-                       <posx>100</posx>
-                       <posy>85</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12315</label>
-                       <textcolor>black</textcolor>
-                       <onleft>14</onleft>
-                       <onright>16</onright>
-                       <onup>12</onup>
-                       <ondown>18</ondown>
-                       <onclick>Number5</onclick>
-               </control>
-               <control type="button">
-                       <description>6 button</description>
-                       <posx>200</posx>
-                       <posy>85</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12316</label>
-                       <textcolor>black</textcolor>
-                       <onleft>15</onleft>
-                       <onright>23</onright>
-                       <onup>13</onup>
-                       <ondown>19</ondown>
-                       <onclick>Number6</onclick>
-               </control>
-               <control type="button">
-                       <description>7 button</description>
-                       <posx>0</posx>
-                       <posy>170</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12317</label>
-                       <textcolor>black</textcolor>
-                       <onleft>21</onleft>
-                       <onright>18</onright>
-                       <onup>14</onup>
-                       <ondown>20</ondown>
-                       <onclick>Number7</onclick>
-               </control>
-               <control type="button">
-                       <description>8 button</description>
-                       <posx>100</posx>
-                       <posy>170</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12318</label>
-                       <textcolor>black</textcolor>
-                       <onleft>17</onleft>
-                       <onright>19</onright>
-                       <onup>15</onup>
-                       <ondown>10</ondown>
-                       <onclick>Number8</onclick>
-               </control>
-               <control type="button">
-                       <description>9 button</description>
-                       <posx>200</posx>
-                       <posy>170</posy>
-                       <width>95</width>
-                       <height>80</height>
-                       <font>font16</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKey.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <label>12319</label>
-                       <textcolor>black</textcolor>
-                       <onleft>18</onleft>
-                       <onright>21</onright>
-                       <onup>16</onup>
-                       <ondown>22</ondown>
-                       <onclick>Number9</onclick>
-               </control>
-               <control type="button">
-                       <description>Done button</description>
-                       <posx>300</posx>
-                       <posy>85</posy>
-                       <width>95</width>
-                       <height>165</height>
-                       <font>font12</font>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturenofocus border="8">KeyboardKeyDark.png</texturenofocus>
-                       <texturefocus border="8">KeyboardKeyFocus.png</texturefocus>
-                       <textwidth>120</textwidth>
-                       <label>-</label>
-                       <textcolor>white</textcolor>
-                       <angle>270</angle>
-                       <onleft>19</onleft>
-                       <onright>17</onright>
-                       <onup>23</onup>
-                       <ondown>23</ondown>
-                       <onclick>Select</onclick>
-               </control>
-               <control type="image">
-                       <description>Enter\done Icon image</description>
-                       <posx>320</posx>
-                       <posy>135</posy>
-                       <width>50</width>
-                       <height>50</height>
-                       <aspectratio>keep</aspectratio>
-                       <texture>icon_enter.png</texture>
-               </control>
-       </include>
-</includes>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/IncludesPlayerControls.xml b/addons/skin.touched/4x3Hirez/IncludesPlayerControls.xml
deleted file mode 100644 (file)
index 8647569..0000000
+++ /dev/null
@@ -1,1027 +0,0 @@
-<includes>
-       <include name="PlayerControlCommons">
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <colordiffuse>BBFFFFFF</colordiffuse>
-                       <texture>black-back.png</texture>
-                       <visible>!Window.IsVisible(Visualisation) + !Window.IsVisible(FullScreenVideo)</visible>
-               </control>
-               <include>CommonHeader</include>
-               <control type="group">
-                       <posx>0</posx>
-                       <posy>84</posy>
-                       <visible>Skin.HasSetting(PlayerControlsShowAudioInfo) + Player.HasAudio</visible>
-                       <animation effect="slide" start="0,-200" end="0,0" time="300" easing="out" tween="quadratic" >Visible</animation>
-                       <animation effect="slide" start="0,0" end="0,-200" time="300" easing="in" tween="quadratic" >Hidden</animation>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>200</height>
-                               <texture border="5">dialogback.png</texture>
-                       </control>
-                       <control type="group">
-                               <control type="image">
-                                       <description>cover image</description>
-                                       <posx>20</posx>
-                                       <posy>10</posy>
-                                       <width>180</width>
-                                       <height>180</height>
-                                       <info>MusicPlayer.Cover</info>
-                                       <aspectratio>keep</aspectratio>
-                                       <bordertexture>ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                               </control>
-                               <control type="label">
-                                       <description>Artist label</description>
-                                       <posx>220</posx>
-                                       <posy>25</posy>
-                                       <width>1020</width>
-                                       <height>25</height>
-                                       <align>left</align>
-                                       <font>font13</font>
-                                       <label>$INFO[MusicPlayer.Artist]</label>
-                                       <textcolor>black</textcolor>
-                               </control>
-                               <control type="label">
-                                       <posx>230</posx>
-                                       <posy>60</posy>
-                                       <width>1030</width>
-                                       <height>30</height>
-                                       <font>font30_title</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[MusicPlayer.Title]</label>
-                                       <textcolor>black</textcolor>
-                                       <scroll>true</scroll>
-                               </control>
-                               <control type="label">
-                                       <description>Album label</description>
-                                       <posx>220</posx>
-                                       <posy>95</posy>
-                                       <width>1020</width>
-                                       <height>25</height>
-                                       <align>left</align>
-                                       <font>font13</font>
-                                       <label>$INFO[MusicPlayer.Album]</label>
-                                       <textcolor>black</textcolor>
-                               </control>
-                               <control type="group">
-                                       <posx>220</posx>
-                                       <posy>140</posy>
-                                       <width>600</width>
-                                       <height>45</height>
-                                       <control type="image">
-                                               <description>Audio Codec Image</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>100</width>
-                                               <height>45</height>
-                                               <aspectratio align="left">keep</aspectratio>
-                                               <texture>$INFO[MusicPlayer.Codec,flagging/audio/,.png]</texture>
-                                       </control>
-                                       <control type="group">
-                                               <description>Rating</description>
-                                               <posx>105</posx>
-                                               <posy>0</posy>
-                                               <width>160</width>
-                                               <height>45</height>
-                                               <control type="image">
-                                                       <description>rating back</description>
-                                                       <posx>0</posx>
-                                                       <posy>0</posy>
-                                                       <width>160</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">stretch</aspectratio>
-                                                       <texture border="5">flagging/blank.png</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Rating</description>
-                                                       <posx>10</posx>
-                                                       <posy>0</posy>
-                                                       <width>140</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="center">keep</aspectratio>
-                                                       <texture fallback="LeftRating/rating0.png">$INFO[Player.StarRating,light/left_rating/]</texture>
-                                               </control>
-                                       </control>
-                               </control>
-                               <control type="label">
-                                       <description>Normal Header label</description>
-                                       <posx>1260</posx>
-                                       <posy>5</posy>
-                                       <width>300</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$LOCALIZE[589]</label>
-                                       <visible>MusicPartyMode.Enabled</visible>
-                               </control>
-                               <control type="label">
-                                       <description>Partymode Header label</description>
-                                       <posx>1260</posx>
-                                       <posy>5</posy>
-                                       <width>300</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[musicplayer.Playlistposition,$LOCALIZE[554]: ]$INFO[musicplayer.Playlistlength, / ]</label>
-                                       <visible>!MusicPartyMode.Enabled</visible>
-                               </control>
-                               <control type="label">
-                                       <posx>1260</posx>
-                                       <posy>160</posy>
-                                       <width>800</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[209]: $INFO[MusicPlayer.offset(1).Artist,, - ]$INFO[MusicPlayer.offset(1).Title]</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <scroll>true</scroll>
-                                       <visible>MusicPlayer.HasNext</visible>
-                               </control>
-                       </control>
-               </control>
-               <control type="group">
-                       <posx>0</posx>
-                       <posy>84</posy>
-                       <visible>Skin.HasSetting(PlayerControlsShowVideoInfo) + Player.HasVideo</visible>
-                       <animation effect="slide" start="0,-200" end="0,0" time="300" easing="out" tween="quadratic" >Visible</animation>
-                       <animation effect="slide" start="0,0" end="0,-200" time="300" easing="in" tween="quadratic" >Hidden</animation>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>200</height>
-                               <texture border="5">dialogback.png</texture>
-                       </control>
-                       <control type="group">
-                               <control type="group">
-                                       <visible>!VideoPlayer.Content(Movies) + !VideoPlayer.Content(Episodes)</visible>
-                                       <control type="image">
-                                               <description>cover image</description>
-                                               <posx>20</posx>
-                                               <posy>10</posy>
-                                               <width>250</width>
-                                               <height>180</height>
-                                               <info>VideoPlayer.Cover</info>
-                                               <aspectratio align="right">keep</aspectratio>
-                                               <bordertexture>ThumbBorderGrey.png</bordertexture>
-                                               <bordersize>2</bordersize>
-                                       </control>
-                                       <control type="label">
-                                               <description>studio label</description>
-                                               <posx>290</posx>
-                                               <posy>25</posy>
-                                               <width>950</width>
-                                               <height>25</height>
-                                               <align>left</align>
-                                               <font>font13</font>
-                                               <label>$INFO[VideoPlayer.Studio]</label>
-                                               <textcolor>black</textcolor>
-                                       </control>
-                                       <control type="label">
-                                               <posx>300</posx>
-                                               <posy>60</posy>
-                                               <width>940</width>
-                                               <height>30</height>
-                                               <font>font30_title</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[VideoPlayer.Title]</label>
-                                               <textcolor>black</textcolor>
-                                               <scroll>true</scroll>
-                                       </control>
-                                       <control type="label">
-                                               <description>Genre label</description>
-                                               <posx>290</posx>
-                                               <posy>95</posy>
-                                               <width>950</width>
-                                               <height>25</height>
-                                               <align>left</align>
-                                               <font>font13</font>
-                                               <label>$INFO[VideoPlayer.Genre]</label>
-                                               <textcolor>black</textcolor>
-                                       </control>
-                                       <control type="group">
-                                               <posx>290</posx>
-                                               <posy>140</posy>
-                                               <width>600</width>
-                                               <height>45</height>
-                                               <control type="image">
-                                                       <description>Video Codec Image</description>
-                                                       <posx>0</posx>
-                                                       <posy>0</posy>
-                                                       <width>100</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.VideoCodec,flagging/video/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Resolution Image</description>
-                                                       <posx>100</posx>
-                                                       <posy>0</posy>
-                                                       <width>75</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.VideoResolution,flagging/video/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Audio Codec Image</description>
-                                                       <posx>175</posx>
-                                                       <posy>0</posy>
-                                                       <width>100</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.AudioCodec,flagging/audio/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Audio Codec Image</description>
-                                                       <posx>275</posx>
-                                                       <posy>0</posy>
-                                                       <width>75</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.AudioChannels,flagging/audio/,.png]</texture>
-                                               </control>
-                                       </control>
-                               </control>
-                               <control type="group">
-                                       <visible>VideoPlayer.Content(Movies)</visible>
-                                       <control type="image">
-                                               <description>cover image</description>
-                                               <posx>20</posx>
-                                               <posy>10</posy>
-                                               <width>150</width>
-                                               <height>180</height>
-                                               <info>VideoPlayer.Cover</info>
-                                               <aspectratio>keep</aspectratio>
-                                               <bordertexture>ThumbBorderGrey.png</bordertexture>
-                                               <bordersize>2</bordersize>
-                                       </control>
-                                       <control type="label">
-                                               <description>Studio label</description>
-                                               <posx>190</posx>
-                                               <posy>25</posy>
-                                               <width>1050</width>
-                                               <height>25</height>
-                                               <align>left</align>
-                                               <font>font13</font>
-                                               <label>$INFO[VideoPlayer.Studio]</label>
-                                               <textcolor>black</textcolor>
-                                       </control>
-                                       <control type="label">
-                                               <posx>200</posx>
-                                               <posy>60</posy>
-                                               <width>1040</width>
-                                               <height>30</height>
-                                               <font>font30_title</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[VideoPlayer.Title]</label>
-                                               <textcolor>black</textcolor>
-                                               <scroll>true</scroll>
-                                       </control>
-                                       <control type="label">
-                                               <description>Genre label</description>
-                                               <posx>190</posx>
-                                               <posy>95</posy>
-                                               <width>1050</width>
-                                               <height>25</height>
-                                               <align>left</align>
-                                               <font>font13</font>
-                                               <label>$INFO[VideoPlayer.Genre]</label>
-                                               <textcolor>black</textcolor>
-                                       </control>
-                                       <control type="group">
-                                               <posx>190</posx>
-                                               <posy>140</posy>
-                                               <width>600</width>
-                                               <height>45</height>
-                                               <control type="image">
-                                                       <description>Video Codec Image</description>
-                                                       <posx>0</posx>
-                                                       <posy>0</posy>
-                                                       <width>100</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.VideoCodec,flagging/video/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Resolution Image</description>
-                                                       <posx>100</posx>
-                                                       <posy>0</posy>
-                                                       <width>75</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.VideoResolution,flagging/video/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Audio Codec Image</description>
-                                                       <posx>175</posx>
-                                                       <posy>0</posy>
-                                                       <width>100</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.AudioCodec,flagging/audio/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Audio Codec Image</description>
-                                                       <posx>275</posx>
-                                                       <posy>0</posy>
-                                                       <width>75</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.AudioChannels,flagging/audio/,.png]</texture>
-                                               </control>
-                                       </control>
-                               </control>
-                               <control type="group">
-                                       <visible>VideoPlayer.Content(Episodes)</visible>
-                                       <control type="image">
-                                               <description>cover image</description>
-                                               <posx>20</posx>
-                                               <posy>10</posy>
-                                               <width>250</width>
-                                               <height>180</height>
-                                               <info>VideoPlayer.Cover</info>
-                                               <aspectratio>scale</aspectratio>
-                                               <bordertexture>ThumbBorderGrey.png</bordertexture>
-                                               <bordersize>2</bordersize>
-                                       </control>
-                                       <control type="label">
-                                               <description>Show label</description>
-                                               <posx>290</posx>
-                                               <posy>25</posy>
-                                               <width>950</width>
-                                               <height>25</height>
-                                               <align>left</align>
-                                               <font>font13</font>
-                                               <label>$INFO[VideoPlayer.TVShowTitle]</label>
-                                               <textcolor>black</textcolor>
-                                       </control>
-                                       <control type="label">
-                                               <posx>300</posx>
-                                               <posy>60</posy>
-                                               <width>940</width>
-                                               <height>30</height>
-                                               <font>font30_title</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[VideoPlayer.Title]</label>
-                                               <textcolor>black</textcolor>
-                                               <scroll>true</scroll>
-                                       </control>
-                                       <control type="label">
-                                               <description>Episode label</description>
-                                               <posx>290</posx>
-                                               <posy>95</posy>
-                                               <width>950</width>
-                                               <height>25</height>
-                                               <align>left</align>
-                                               <font>font13</font>
-                                               <label>$INFO[VideoPlayer.Season,$LOCALIZE[20373]: ] &#32;&#32;&#32; $INFO[VideoPlayer.Episode,$LOCALIZE[20359]: ]</label>
-                                               <textcolor>black</textcolor>
-                                       </control>
-                                       <control type="group">
-                                               <posx>290</posx>
-                                               <posy>140</posy>
-                                               <width>600</width>
-                                               <height>45</height>
-                                               <control type="image">
-                                                       <description>Video Codec Image</description>
-                                                       <posx>0</posx>
-                                                       <posy>0</posy>
-                                                       <width>100</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.VideoCodec,flagging/video/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Resolution Image</description>
-                                                       <posx>100</posx>
-                                                       <posy>0</posy>
-                                                       <width>75</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.VideoResolution,flagging/video/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Audio Codec Image</description>
-                                                       <posx>175</posx>
-                                                       <posy>0</posy>
-                                                       <width>100</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.AudioCodec,flagging/audio/,.png]</texture>
-                                               </control>
-                                               <control type="image">
-                                                       <description>Audio Codec Image</description>
-                                                       <posx>275</posx>
-                                                       <posy>0</posy>
-                                                       <width>75</width>
-                                                       <height>45</height>
-                                                       <aspectratio align="left">keep</aspectratio>
-                                                       <texture>$INFO[VideoPlayer.AudioChannels,flagging/audio/,.png]</texture>
-                                               </control>
-                                       </control>
-                               </control>
-                               <control type="label">
-                                       <description>Chapter label</description>
-                                       <posx>1260</posx>
-                                       <posy>5</posy>
-                                       <width>1200</width>
-                                       <height>25</height>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[Player.Chapter,$LOCALIZE[21396]: ]$INFO[Player.ChapterCount, / ]$INFO[Player.ChapterName,[COLOR=grey3] (,)[/COLOR]]</label>
-                                       <visible>Player.ChapterCount</visible>
-                               </control>
-                               <control type="label">
-                                       <posx>1260</posx>
-                                       <posy>160</posy>
-                                       <width>800</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[31049] $INFO[Player.FinishTime]</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <scroll>true</scroll>
-                               </control>
-                       </control>
-               </control>
-               <include>CommonHeader</include>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>20</posy>
-                       <width>1280</width>
-                       <height>64</height>
-                       <texture>header.png</texture>
-               </control>
-               <control type="grouplist">
-                       <description>Top Left bar</description>
-                       <posx>0</posx>
-                       <posy>20</posy>
-                       <width>200</width>
-                       <height>64</height>
-                       <align>left</align>
-                       <itemgap>5</itemgap>
-                       <orientation>horizontal</orientation>
-                       <control type="button">
-                               <description>Playlist Button</description>
-                               <width>64</width>
-                               <height>64</height>
-                               <texturenofocus>icon_playlistmusic.png</texturenofocus>
-                               <texturefocus>icon_playlistmusic.png</texturefocus>
-                               <onclick>PreviousMenu</onclick>
-                               <onclick>ActivateWindow(MusicPlaylist)</onclick>
-                               <visible>Player.HasAudio</visible>
-                       </control>
-                       <control type="button">
-                               <description>Playlist Button</description>
-                               <width>64</width>
-                               <height>64</height>
-                               <texturenofocus>icon_playlistvideo.png</texturenofocus>
-                               <texturefocus>icon_playlistvideo.png</texturefocus>
-                               <onclick>PreviousMenu</onclick>
-                               <onclick>ActivateWindow(VideoPlaylist)</onclick>
-                               <visible>Player.HasVideo</visible>
-                       </control>
-                       <control type="image">
-                               <width>2</width>
-                               <height>62</height>
-                               <texture>header-divide.png</texture>
-                       </control>
-               </control>
-               <control type="grouplist">
-                       <description>Top Right bar</description>
-                       <posx>1080r</posx>
-                       <posy>25</posy>
-                       <width>1000</width>
-                       <height>64</height>
-                       <align>right</align>
-                       <itemgap>5</itemgap>
-                       <orientation>horizontal</orientation>
-                       <control type="radiobutton">
-                               <description>Show Info Button</description>
-                               <width>270</width>
-                               <height>50</height>
-                               <label>$LOCALIZE[544]</label>
-                               <font>font13</font>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <selected>Skin.HasSetting(PlayerControlsShowAudioInfo)</selected>
-                               <texturenofocus border="5">floor_button.png</texturenofocus>
-                               <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                               <onclick>Skin.ToggleSetting(PlayerControlsShowAudioInfo)</onclick>
-                               <visible>Player.HasAudio</visible>
-                       </control>
-                       <control type="radiobutton">
-                               <description>Show Info Button</description>
-                               <width>270</width>
-                               <height>50</height>
-                               <label>$LOCALIZE[544]</label>
-                               <font>font13</font>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <selected>Skin.HasSetting(PlayerControlsShowVideoInfo)</selected>
-                               <texturenofocus border="5">floor_button.png</texturenofocus>
-                               <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                               <onclick>Skin.ToggleSetting(PlayerControlsShowVideoInfo)</onclick>
-                               <visible>Player.HasVideo</visible>
-                       </control>
-                       <control type="button">
-                               <description>Submenu Button</description>
-                               <width>200</width>
-                               <height>50</height>
-                               <label>$LOCALIZE[33063]</label>
-                               <font>font13</font>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <texturenofocus border="5">floor_button.png</texturenofocus>
-                               <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                               <onclick>Skin.ToggleSetting(PlayerControlsSubMenuVisible)</onclick>
-                               <visible>!Window.IsVisible(Karaoke)</visible>
-                       </control>
-                       <control type="radiobutton">
-                               <description>Fullscreen Button</description>
-                               <posy>5</posy>
-                               <width>230</width>
-                               <height>50</height>
-                               <radiowidth>36</radiowidth>
-                               <radioheight>36</radioheight>
-                               <font>font13</font>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <texturenofocus border="5">floor_button.png</texturenofocus>
-                               <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                               <label>31008</label>
-                               <onclick>fullscreen</onclick>
-                               <textureradiofocus>GoFullscreen2.png</textureradiofocus>
-                               <textureradionofocus>GoFullscreen2.png</textureradionofocus>
-                               <visible>!Window.IsVisible(Visualisation) + !Window.IsVisible(FullScreenVideo) + !Window.IsVisible(Karaoke)</visible>
-                       </control>
-                       <control type="radiobutton">
-                               <description>Fullscreen Button</description>
-                               <posy>5</posy>
-                               <width>230</width>
-                               <height>50</height>
-                               <radiowidth>36</radiowidth>
-                               <radioheight>36</radioheight>
-                               <font>font13</font>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <texturenofocus border="5">floor_button.png</texturenofocus>
-                               <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                               <label>31008</label>
-                               <onclick>Dialog.Close(VideoOSD,true)</onclick>
-                               <onclick>Dialog.Close(MusicOSD,true)</onclick>
-                               <onclick>fullscreen</onclick>
-                               <textureradiofocus flipx="true" flipy="true">GoFullscreen2.png</textureradiofocus>
-                               <textureradionofocus flipx="true" flipy="true">GoFullscreen2.png</textureradionofocus>
-                               <visible>Window.IsVisible(Visualisation) | Window.IsVisible(FullScreenVideo) + !Window.IsVisible(Karaoke)</visible>
-                       </control>
-               </control>
-               <control type="group">
-                       <posx>65r</posx>
-                       <posy>20</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>2</width>
-                               <height>62</height>
-                               <texture>header-divide.png</texture>
-                       </control>
-                       <control type="button">
-                               <description>Close Button</description>
-                               <posx>5</posx>
-                               <posy>0</posy>
-                               <width>60</width>
-                               <height>60</height>
-                               <font>-</font>
-                               <onclick>previousmenu</onclick>
-                               <texturefocus>icon_close.png</texturefocus>
-                               <texturenofocus>icon_close.png</texturenofocus>
-                       </control>
-               </control>
-
-               <control type="group">
-                       <posx>0</posx>
-                       <posy>70r</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>1280</width>
-                               <height>71</height>
-                               <texture>floor.png</texture>
-                       </control>
-                       <control type="label">
-                               <posx>180</posx>
-                               <posy>16</posy>
-                               <width>180</width>
-                               <height>32</height>
-                               <font>font13</font>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[Player.Time(hh:mm:ss)]</label>
-                       </control>
-                       <control type="label">
-                               <posx>1100</posx>
-                               <posy>16</posy>
-                               <width>180</width>
-                               <height>32</height>
-                               <font>font13</font>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[Player.Duration(hh:mm:ss)]</label>
-                       </control>
-                       <control type="progress">
-                               <description>ProgressbarCache</description>
-                               <posx>200</posx>
-                               <posy>16</posy>
-                               <width>880</width>
-                               <height>32</height>
-                               <info>Player.ProgressCache</info>
-                               <midtexture border="16,0,16,0">OSDProgressMidLight.png</midtexture>
-                       </control>
-                       <control type="progress">
-                               <description>Progressbar</description>
-                               <posx>200</posx>
-                               <posy>16</posy>
-                               <width>880</width>
-                               <height>32</height>
-                               <info>Player.Progress</info>
-                               <texturebg border="16,0,16,0">OSDProgressBack2.png</texturebg>
-                       </control>
-                       <control type="slider" id="87">
-                               <description>Seek Slider</description>
-                               <posx>200</posx>
-                               <posy>16</posy>
-                               <width>880</width>
-                               <height>32</height>
-                               <action>seek</action>
-                               <texturesliderbar border="16,0,16,0">OSDProgressBack2.png</texturesliderbar>
-                               <textureslidernib>-</textureslidernib>
-                               <textureslidernibfocus>-</textureslidernibfocus>
-                       </control>
-
-               </control>
-               <control type="group">
-                       <posx>370</posx>
-                       <posy>200r</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>560</width>
-                               <height>80</height>
-                               <texture border="3">PlayerControls-Background.png</texture>
-                       </control>
-                       <control type="button" id="400">
-                               <posx>15</posx>
-                               <posy>0</posy>
-                               <width>85</width>
-                               <height>80</height>
-                               <label>-</label>
-                               <texturefocus>PlayerControls-PrevFO.png</texturefocus>
-                               <texturenofocus>PlayerControls-PrevNF.png</texturenofocus>
-                               <onleft>407</onleft>
-                               <onright>401</onright>
-                               <onup>400</onup>
-                               <ondown>400</ondown>
-                               <onclick>XBMC.PlayerControl(Previous)</onclick>
-                       </control>
-                       <control type="button" id="401">
-                               <posx>100</posx>
-                               <posy>0</posy>
-                               <width>85</width>
-                               <height>80</height>
-                               <label>-</label>
-                               <texturefocus>PlayerControls-RewindFO.png</texturefocus>
-                               <texturenofocus>PlayerControls-RewindNF.png</texturenofocus>
-                               <onleft>400</onleft>
-                               <onright>402</onright>
-                               <onup>401</onup>
-                               <ondown>401</ondown>
-                               <onclick>XBMC.PlayerControl(Rewind)</onclick>
-                       </control>
-                       <control type="button" id="402">
-                               <posx>190</posx>
-                               <posy>0</posy>
-                               <width>85</width>
-                               <height>80</height>
-                               <label>-</label>
-                               <texturefocus>PlayerControls-StopFO.png</texturefocus>
-                               <texturenofocus>PlayerControls-StopNF.png</texturenofocus>
-                               <onleft>401</onleft>
-                               <onright>403</onright>
-                               <onup>402</onup>
-                               <ondown>402</ondown>
-                               <onclick>XBMC.PlayerControl(Stop)</onclick>
-                       </control>
-                       <control type="togglebutton" id="403">
-                               <posx>280</posx>
-                               <posy>0</posy>
-                               <width>85</width>
-                               <height>80</height>
-                               <label>-</label>
-                               <texturefocus>PlayerControls-PauseFO.png</texturefocus>
-                               <texturenofocus>PlayerControls-PauseNF.png</texturenofocus>
-                               <usealttexture>Player.Paused | Player.Forwarding | Player.Rewinding</usealttexture>
-                               <alttexturefocus>PlayerControls-PlayFO.png</alttexturefocus>
-                               <alttexturenofocus>PlayerControls-PlayNF.png</alttexturenofocus>
-                               <onleft>402</onleft>
-                               <onright>404</onright>
-                               <onup>403</onup>
-                               <ondown>403</ondown>
-                               <onclick>XBMC.PlayerControl(Play)</onclick>
-                       </control>
-                       <control type="button" id="404">
-                               <posx>370</posx>
-                               <posy>0</posy>
-                               <width>85</width>
-                               <height>80</height>
-                               <label>-</label>
-                               <texturefocus>PlayerControls-ForwardFO.png</texturefocus>
-                               <texturenofocus>PlayerControls-ForwardNF.png</texturenofocus>
-                               <onleft>403</onleft>
-                               <onright>405</onright>
-                               <onup>404</onup>
-                               <ondown>404</ondown>
-                               <onclick>XBMC.PlayerControl(Forward)</onclick>
-                       </control>
-                       <control type="button" id="405">
-                               <posx>460</posx>
-                               <posy>0</posy>
-                               <width>85</width>
-                               <height>80</height>
-                               <label>-</label>
-                               <texturefocus>PlayerControls-NextFO.png</texturefocus>
-                               <texturenofocus>PlayerControls-NextNF.png</texturenofocus>
-                               <onleft>404</onleft>
-                               <onright>406</onright>
-                               <onup>405</onup>
-                               <ondown>405</ondown>
-                               <onclick>XBMC.PlayerControl(Next)</onclick>
-                       </control>
-               </control>
-               <control type="group">
-                       <visible>Window.IsVisible(FullscreenVideo)</visible>
-                       <posx>80r</posx>
-                       <posy>385</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>90</width>
-                               <height>170</height>
-                               <colordiffuse>EEFFFFFF</colordiffuse>
-                               <texture border="3">PlayerControls-Background.png</texture>
-                       </control>
-                       <control type="label">
-                               <description>header label</description>
-                               <posx>0</posx>
-                               <posy>10</posy>
-                               <height>20</height>
-                               <width>80</width>
-                               <label>287</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font8_title</font>
-                               <shadowcolor>black</shadowcolor>
-                       </control>
-                       <control type="label">
-                               <description>Video Has no Subtitles label</description>
-                               <posx>0</posx>
-                               <posy>40</posy>
-                               <height>20</height>
-                               <width>80</width>
-                               <label>31011</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>grey2</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <visible>!VideoPlayer.HasSubtitles</visible>
-                       </control>
-                       <control type="togglebutton">
-                               <description>Download with Subtitles script</description>
-                               <posx>10</posx>
-                               <posy>38</posy>
-                               <width>60</width>
-                               <height>35</height>
-                               <hitrect x="5" y="5" w="75" h="80" />
-                               <label>31356</label>
-                               <font>-</font>
-                               <texturefocus>radiobutton-nofocus.png</texturefocus>
-                               <texturenofocus>radiobutton-nofocus.png</texturenofocus>
-                               <alttexturefocus>radiobutton-focus.png</alttexturefocus>
-                               <alttexturenofocus>radiobutton-focus.png</alttexturenofocus>
-                               <onleft>605</onleft>
-                               <onright>702</onright>
-                               <onup>1000</onup>
-                               <ondown>1000</ondown>
-                               <onclick>Dialog.Close(VideoOSD,true)</onclick>
-                               <onclick>ShowSubtitles</onclick>
-                               <usealttexture>VideoPlayer.SubtitlesEnabled</usealttexture>
-                               <visible>VideoPlayer.HasSubtitles</visible>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>88</posy>
-                               <width>80</width>
-                               <height>2</height>
-                               <texture>header-divide.png</texture>
-                       </control>
-                       <control type="togglebutton">
-                               <posx>10</posx>
-                               <posy>100</posy>
-                               <width>65</width>
-                               <height>60</height>
-                               <label>31356</label>
-                               <hitrect x="5" y="100" w="75" h="70" />
-                               <font>-</font>
-                               <texturefocus flipy="true">icon_shift.png</texturefocus>
-                               <texturenofocus flipy="true">icon_shift.png</texturenofocus>
-                               <alttexturefocus flipy="true">icon_shift.png</alttexturefocus>
-                               <alttexturenofocus flipy="true">icon_shift.png</alttexturenofocus>
-                               <onleft>605</onleft>
-                               <onright>702</onright>
-                               <onup>1000</onup>
-                               <ondown>1000</ondown>
-                               <onclick>Close</onclick>
-                               <onclick>XBMC.RunScript($INFO[Skin.String(SubtitleScript_Path)])</onclick>
-                               <altclick>Skin.SetAddon(SubtitleScript_Path,xbmc.python.subtitles)</altclick>
-                               <altclick>Close</altclick>
-                               <altclick>XBMC.RunScript($INFO[Skin.String(SubtitleScript_Path)])</altclick>
-                               <usealttexture>IsEmpty(Skin.String(SubtitleScript_Path))</usealttexture>
-                       </control>
-               </control>
-
-               <control type="group">
-                       <visible>Skin.HasSetting(PlayerControlsSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(PlayerControlsSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>570r</posx>
-                               <posy>113</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>440</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>380</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>354</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>140</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>354</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>-1</itemgap>
-                                       <control type="radiobutton">
-                                               <description>Random Toggle</description>
-                                               <textwidth>170</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>$LOCALIZE[191]</label>
-                                               <onclick>XBMC.PlayerControl(Random)</onclick>
-                                               <selected>Playlist.IsRandom</selected>
-                                       </control>
-                                       <control type="button">
-                                               <description>Repeat</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>$LOCALIZE[486]$INFO[Playlist.Repeat,: ]</label>
-                                               <onclick>XBMC.PlayerControl(Repeat)</onclick>
-                                       </control>
-                                       <!-- Buttons for Fullscreen Video -->
-                                       <control type="button">
-                                               <include>ButtonCommonValues2</include>
-                                               <label>13395</label>
-                                               <onclick>Dialog.Close(VideoOSD,true)</onclick>
-                                               <onclick>Skin.Reset(PlayerControlsSubMenuVisible)</onclick>
-                                               <onclick>XBMC.ActivateWindow(123)</onclick>
-                                               <visible>Window.IsVisible(FullScreenVideo)</visible>
-                                       </control>
-                                       <control type="button">
-                                               <include>ButtonCommonValues2</include>
-                                               <label>31002</label>
-                                               <onclick>Dialog.Close(VideoOSD,true)</onclick>
-                                               <onclick>Skin.Reset(PlayerControlsSubMenuVisible)</onclick>
-                                               <onclick>XBMC.ActivateWindow(124)</onclick>
-                                               <visible>Window.IsVisible(FullScreenVideo)</visible>
-                                       </control>
-                                       <control type="button">
-                                               <include>ButtonCommonValues2</include>
-                                               <label>298</label>
-                                               <onclick>Dialog.Close(VideoOSD,true)</onclick>
-                                               <onclick>Skin.Reset(PlayerControlsSubMenuVisible)</onclick>
-                                               <onclick>XBMC.ActivateWindow(125)</onclick>
-                                               <visible>Window.IsVisible(FullScreenVideo)</visible>
-                                       </control>
-                                       <control type="togglebutton">
-                                               <include>ButtonCommonValues2</include>
-                                               <label>31018</label>
-                                               <onclick>-</onclick>
-                                               <onclick>Close</onclick>
-                                               <onclick>XBMC.RunScript($INFO[Skin.String(SubtitleScript_Path)])</onclick>
-                                               <altclick>Skin.SetAddon(SubtitleScript_Path,xbmc.python.subtitles)</altclick>
-                                               <altclick>Close</altclick>
-                                               <altclick>XBMC.RunScript($INFO[Skin.String(SubtitleScript_Path)])</altclick>
-                                               <alttexturefocus border="5">button-focus2.png</alttexturefocus>
-                                               <alttexturenofocus>-</alttexturenofocus>
-                                               <usealttexture>IsEmpty(Skin.String(SubtitleScript_Path))</usealttexture>
-                                               <visible>false</visible>
-                                               <visible>Window.IsVisible(FullScreenVideo)</visible>
-                                       </control>
-                                       <control type="button">
-                                               <include>ButtonCommonValues2</include>
-                                               <label>31355</label>
-                                               <onclick>PlayerControl(ShowVideoMenu)</onclick>
-                                               <visible>VideoPlayer.HasMenu</visible>
-                                               <visible>Window.IsVisible(FullScreenVideo)</visible>
-                                       </control>
-                                       <!-- Buttons for Fullscreen Audio -->
-                                       <control type="button">
-                                               <include>ButtonCommonValues2</include>
-                                               <label>250</label>
-                                               <onclick>Dialog.Close(MusicOSD,true)</onclick>
-                                               <onclick>Skin.Reset(PlayerControlsSubMenuVisible)</onclick>
-                                               <onclick>Addon.Default.Set(xbmc.player.musicviz)</onclick>
-                                               <visible>Window.IsVisible(Visualisation)</visible>
-                                       </control>
-                                       <control type="button">
-                                               <include>ButtonCommonValues2</include>
-                                               <label>31005</label>
-                                               <onclick>Dialog.Close(MusicOSD,true)</onclick>
-                                               <onclick>Skin.Reset(PlayerControlsSubMenuVisible)</onclick>
-                                               <onclick>Addon.Default.OpenSettings(xbmc.player.musicviz)</onclick>
-                                               <visible>Window.IsVisible(Visualisation)</visible>
-                                       </control>
-                                       <control type="button">
-                                               <include>ButtonCommonValues2</include>
-                                               <label>31006</label>
-                                               <onclick>Dialog.Close(MusicOSD,true)</onclick>
-                                               <onclick>Skin.Reset(PlayerControlsSubMenuVisible)</onclick>
-                                               <onclick>XBMC.ActivateWindow(122)</onclick>
-                                               <visible>Window.IsVisible(Visualisation)</visible>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-       </include>
-</includes>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/LockSettings.xml b/addons/skin.touched/4x3Hirez/LockSettings.xml
deleted file mode 100644 (file)
index 81460c0..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<window id="131">
-       <defaultcontrol>5</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$LOCALIZE[20043]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="grouplist" id="5">
-                       <description>control area</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>960</width>
-                       <height>720</height>
-                       <itemgap>-1</itemgap>
-                       <pagecontrol>60</pagecontrol>
-                       <onleft>28</onleft>
-                       <onright>60</onright>
-                       <onup>28</onup>
-                       <ondown>28</ondown>
-               </control>
-               <control type="button" id="7">
-                       <description>Default Button</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="radiobutton" id="8">
-                       <description>Default RadioButton</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="spincontrolex" id="9">
-                       <description>Default SpinControlex</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                       <aligny>center</aligny>
-                       <reverse>yes</reverse>
-               </control>
-               <control type="image" id="11">
-                       <description>separator image</description>
-                       <height>5</height>
-                       <texture>separator.png</texture>
-               </control>
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>830</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>10</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>9000</onup>
-                       <ondown>9000</ondown>
-                       <control type="button" id="28">
-                               <description>OK button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-                       <control type="button" id="29">
-                               <description>Cancel button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/LoginScreen.xml b/addons/skin.touched/4x3Hirez/LoginScreen.xml
deleted file mode 100644 (file)
index 7e14c18..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<window id="29">
-       <defaultcontrol></defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <include>CommonBackground</include>
-               <include>CommonNowPlaying</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[20096]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <control type="label">
-                               <posx>295</posx>
-                               <posy>140</posy>
-                               <width>690</width>
-                               <height>40</height>
-                               <font>font13_title</font>
-                               <textcolor>grey2</textcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[31421]</label>
-                       </control>
-                       <control type="panel" id="52">
-                               <posx>295</posx>
-                               <posy>210</posy>
-                               <width>690</width>
-                               <height>401</height>
-                               <onleft>20</onleft>
-                               <onright>20</onright>
-                               <onup>52</onup>
-                               <ondown>52</ondown>
-                               <viewtype label="535">list</viewtype>
-                               <pagecontrol>60</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="115" width="690">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>690</width>
-                                               <height>110</height>
-                                               <texture border="5">SubBack.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>10</posx>
-                                               <posy>10</posy>
-                                               <width>80</width>
-                                               <height>90</height>
-                                               <texture>$INFO[ListItem.Icon]</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>110</posx>
-                                               <posy>10</posy>
-                                               <width>580</width>
-                                               <height>40</height>
-                                               <font>font24_title</font>
-                                               <textcolor>grey2</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                                       <control type="label">
-                                               <posx>110</posx>
-                                               <posy>50</posy>
-                                               <width>580</width>
-                                               <height>40</height>
-                                               <font>font13</font>
-                                               <textcolor>grey2</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label2]</label>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="115" width="580">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>690</width>
-                                               <height>110</height>
-                                               <texture border="5">SubBack2.png</texture>
-                                               <include>VisibleFadeEffect</include>
-                                       </control>
-                                       <control type="image">
-                                               <posx>10</posx>
-                                               <posy>10</posy>
-                                               <width>90</width>
-                                               <height>80</height>
-                                               <texture>$INFO[ListItem.Icon]</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>110</posx>
-                                               <posy>10</posy>
-                                               <width>580</width>
-                                               <height>40</height>
-                                               <font>font24_title</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                                       <control type="label">
-                                               <posx>110</posx>
-                                               <posy>50</posy>
-                                               <width>580</width>
-                                               <height>40</height>
-                                               <font>font13</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label2]</label>
-                                       </control>
-                               </focusedlayout>
-                       </control>
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>13012</label>
-                                       <onclick>XBMC.Quit</onclick>
-                                       <icon>icon_shutdown.png</icon>
-                               </item>
-                       </content>
-               </control>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/MusicKaraokeLyrics.xml b/addons/skin.touched/4x3Hirez/MusicKaraokeLyrics.xml
deleted file mode 100644 (file)
index 892fde0..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<window id="2009">
-       <onunload>Dialog.Close(MusicOSD)</onunload>
-       <controls>
-               <control type="karvisualisation" id="1">
-                       <description>visualisation</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <visibility>false</visibility>
-               </control>
-               <control type="image" id="2">
-                       <description>fullscreen image</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <visibility>false</visibility>
-               </control>
-               <control type="group">
-                       <posx>70r</posx>
-                       <posy>405</posy>
-                       <include>Window_OpenClose_Animation</include>
-                       <include>VisibleFadeEffect</include>
-                       <visible>!Window.IsVisible(MusicOSD)</visible>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>80</width>
-                               <height>150</height>
-                               <texture border="5">SubBack.png</texture>
-                       </control>
-                       <control type="button">
-                               <posx>10</posx>
-                               <posy>10</posy>
-                               <width>55</width>
-                               <height>55</height>
-                               <label>-</label>
-                               <texturefocus>icon_player2.png</texturefocus>
-                               <texturenofocus>icon_player2.png</texturenofocus>
-                               <onclick>ActivateWindow(MusicOSD)</onclick>
-                       </control>
-                       <control type="button">
-                               <posx>10</posx>
-                               <posy>85</posy>
-                               <width>55</width>
-                               <height>55</height>
-                               <label>-</label>
-                               <texturefocus>icon_keypad.png</texturefocus>
-                               <texturenofocus>icon_keypad.png</texturenofocus>
-                               <onclick>Number0</onclick>
-                       </control>
-               </control>
-               <control type="group">
-                       <visible>MusicPlayer.Offset(number).Exists + !IntegerGreaterThan(Player.TimeRemaining,20)</visible>
-                       <animation effect="slide" start="0,-64" end="0,0" time="100">Visible</animation>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>64</height>
-                               <texture>header.png</texture>
-                       </control>
-                       <control type="label" id="402">
-                               <description>Next Song Name</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>60</height>
-                               <font>font16</font>
-                               <textcolor>white</textcolor>
-                               <label>$LOCALIZE[209] : $INFO[MusicPlayer.offset(1).Title]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/MusicOSD.xml b/addons/skin.touched/4x3Hirez/MusicOSD.xml
deleted file mode 100644 (file)
index 7acfa2f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<window type="dialog" id="120">
-       <defaultcontrol></defaultcontrol>
-       <include>dialogeffect</include>
-       <onunload>Skin.Reset(PlayerControlsSubMenuVisible)</onunload>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <include>PlayerControlCommons</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/MusicOverlay.xml b/addons/skin.touched/4x3Hirez/MusicOverlay.xml
deleted file mode 100644 (file)
index 510e6e3..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<window id="2903">
-       <defaultcontrol>-</defaultcontrol>
-       <controls>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/MusicVisualisation.xml b/addons/skin.touched/4x3Hirez/MusicVisualisation.xml
deleted file mode 100644 (file)
index 71f0342..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<window id="2006">
-       <defaultcontrol>-</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <control type="visualisation">
-                       <description>visualisation</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-               </control>
-               <!-- codec & viz infos -->
-               <control type="group" id="0">
-                       <posx>0</posx>
-                       <posy>50</posy>
-                       <visible>Player.ShowCodec + ![Window.IsVisible(script-XBMC_Lyrics-main.xml) | Window.IsVisible(VisualisationSettings) | Window.IsVisible(VisualisationPresetList)]</visible>
-                       <animation effect="fade" time="200">VisibleChange</animation>
-                       <control type="image">
-                               <description>media info background image</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>1280</width>
-                               <height>105</height>
-                               <colordiffuse>AAFFFFFF</colordiffuse>
-                               <texture>black-back.png</texture>
-                       </control>
-                       <control type="label">
-                               <description>row 1 label</description>
-                               <posx>50</posx>
-                               <posy>10</posy>
-                               <label>-</label>
-                               <align>left</align>
-                               <label>$INFO[musicplayer.Codec,$LOCALIZE[21446]: ,]$INFO[musicplayer.Bitrate, · $LOCALIZE[623]: ,kbps]$INFO[musicplayer.bitspersample, · $LOCALIZE[612]: ,bit]$INFO[musicplayer.Samplerate, · $LOCALIZE[613]: ,kHz]$INFO[musicplayer.Channels, · $LOCALIZE[21444]: ]</label>
-                               <font>font12</font>
-                       </control>
-                       <control type="label">
-                               <description>row 2 label</description>
-                               <posx>50</posx>
-                               <posy>40</posy>
-                               <label>-</label>
-                               <align>left</align>
-                               <label>$INFO[Visualisation.Name] [I][COLOR=orange]($LOCALIZE[20166])[/COLOR][/I] · fps: $INFO[System.FPS]</label>
-                               <font>font12</font>
-                               <visible>Visualisation.Locked</visible>
-                       </control>
-                       <control type="label">
-                               <description>Unlocked row 2 label</description>
-                               <posx>50</posx>
-                               <posy>40</posy>
-                               <label>-</label>
-                               <align>left</align>
-                               <label>$INFO[Visualisation.Name] · fps: $INFO[System.FPS]</label>
-                               <font>font12</font>
-                               <visible>!Visualisation.Locked</visible>
-                       </control>
-                       <control type="label">
-                               <description>row 3 label</description>
-                               <posx>50</posx>
-                               <posy>70</posy>
-                               <label>-</label>
-                               <align>left</align>
-                               <label>$LOCALIZE[13388]: $INFO[Visualisation.Preset]</label>
-                               <font>font12</font>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/MyMusicNav.xml b/addons/skin.touched/4x3Hirez/MyMusicNav.xml
deleted file mode 100644 (file)
index def22a8..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-<window id="502">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <views>50,500</views>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>FileCountCommons</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[10516]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <include>CommonRootView</include> <!-- view id = 50 -->
-                       <include>ThumbnailView</include> <!-- view id = 500 -->
-                       <include>ScrollArrowsCommons</include>
-               </control>
-               <include>MediaSubMenu</include>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="button" id="3">
-                                               <description>Sort by button</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>103</label>
-                                       </control>
-                                       <control type="togglebutton" id="4">
-                                               <description>Sort asc</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <alttexturefocus>button-focus2.png</alttexturefocus>
-                                               <alttexturenofocus>button-nofocus.png</alttexturenofocus>
-                                               <label>31051</label>
-                                               <altlabel>31050</altlabel>
-                                               <usealttexture>Container.SortDirection(Ascending)</usealttexture>
-                                       </control>
-                                       <control type="radiobutton" id="99">
-                                               <description>Library button</description>
-                                               <label>$LOCALIZE[29800]</label>
-                                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                                               <onclick>ReplaceWindow(MusicFiles)</onclick>
-                                               <selected>Window.IsVisible(MusicLibrary)</selected>
-                                               <include>ButtonCommonValues2</include>
-                                       </control>
-                                       <control type="button" id="8">
-                                               <description>Search</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>137</label>
-                                       </control>
-                                       <control type="radiobutton" id="16">
-                                               <description>PartyMode</description>
-                                               <label>589</label>
-                                               <include>ButtonCommonValues2</include>
-                                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <include>ScrollOffsetLabel</include>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/MyMusicPlaylist.xml b/addons/skin.touched/4x3Hirez/MyMusicPlaylist.xml
deleted file mode 100644 (file)
index fb93f72..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-<window id="500">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <views>50,500</views>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>FileCountCommons</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[10517]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <include>CommonRootView</include> <!-- view id = 50 -->
-                       <include>ThumbnailView</include> <!-- view id = 500 -->
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>ParentDir</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                       </content>
-               </control>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="radiobutton" id="20">
-                                               <description>Shuffle button</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>191</label>
-                                       </control>
-                                       <control type="button" id="26">
-                                               <description>Repeat button</description>
-                                               <textwidth>235</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>-</label>
-                                       </control>
-                                       <control type="button" id="21">
-                                               <description>Save button</description>
-                                               <label>190</label>
-                                               <textwidth>235</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                       </control>
-                                       <control type="button" id="22">
-                                               <description>Clear button</description>
-                                               <label>192</label>
-                                               <textwidth>235</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/MyMusicPlaylistEditor.xml b/addons/skin.touched/4x3Hirez/MyMusicPlaylistEditor.xml
deleted file mode 100644 (file)
index 1cf29b0..0000000
+++ /dev/null
@@ -1,395 +0,0 @@
-<window id="503">
-       <defaultcontrol allways="true">6</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[10503]</label>
-               </control>
-               <control type="group">
-                       <posx>40</posx>
-                       <posy>130</posy>
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <control type="label">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>590</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>white</textcolor>
-                               <scroll>true</scroll>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>31058</label>
-                       </control>
-                       <control type="label">
-                               <description>number of files/pages in left list text label</description>
-                               <posx>0</posx>
-                               <posy>710</posy>
-                               <width>590</width>
-                               <font>font13</font>
-                               <align>left</align>
-                               <scroll>true</scroll>
-                               <textcolor>grey2</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <label>($INFO[Container(50).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(50).CurrentPage]/$INFO[Container(50).NumPages])</label>
-                       </control>
-                       <control type="panel" id="50">
-                               <posx>0</posx>
-                               <posy>40</posy>
-                               <width>590</width>
-                               <height>660</height>
-                               <onleft>100</onleft>
-                               <onright>100</onright>
-                               <onup>50</onup>
-                               <ondown>50</ondown>
-                               <viewtype label="">list</viewtype>
-                               <pagecontrol>30</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="60" width="590">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>590</width>
-                                               <height>60</height>
-                                               <texture border="5">ListNF.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>10</posx>
-                                               <posy>5</posy>
-                                               <width>50</width>
-                                               <height>50</height>
-                                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>75</posx>
-                                               <posy>0</posy>
-                                               <width>410</width>
-                                               <height>60</height>
-                                               <font>font13</font>
-                                               <textcolor>white</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                                       <control type="label">
-                                               <posx>580</posx>
-                                               <posy>2</posy>
-                                               <width>400</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <textcolor>grey2</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label2]</label>
-                                       </control>
-                                       <control type="image">
-                                               <description>Rating value</description>
-                                               <posx>480</posx>
-                                               <posy>30</posy>
-                                               <width>100</width>
-                                               <height>25</height>
-                                               <aspectratio align="left">keep</aspectratio>
-                                               <texture fallback="light/left_rating/rating0.png">$INFO[ListItem.StarRating,light/left_rating/]</texture>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="60" width="590">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>590</width>
-                                               <height>60</height>
-                                               <texture border="5">ListFO.png</texture>
-                                               <include>VisibleFadeEffect</include>
-                                       </control>
-                                       <control type="image">
-                                               <posx>10</posx>
-                                               <posy>5</posy>
-                                               <width>50</width>
-                                               <height>50</height>
-                                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>75</posx>
-                                               <posy>0</posy>
-                                               <width>410</width>
-                                               <height>60</height>
-                                               <font>font13</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                                       <control type="label">
-                                               <posx>580</posx>
-                                               <posy>2</posy>
-                                               <width>400</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label2]</label>
-                                       </control>
-                                       <control type="image">
-                                               <description>Rating value</description>
-                                               <posx>480</posx>
-                                               <posy>30</posy>
-                                               <width>100</width>
-                                               <height>25</height>
-                                               <aspectratio align="left">keep</aspectratio>
-                                               <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.StarRating,dark/left_rating/]</texture>
-                                       </control>
-                               </focusedlayout>
-                       </control>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <posx>650</posx>
-                       <posy>130</posy>
-                       <control type="label">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>590</width>
-                               <height>30</height>
-                               <font>font13_title</font>
-                               <textcolor>white</textcolor>
-                               <scroll>true</scroll>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>31059</label>
-                       </control>
-                       <control type="label">
-                               <description>Page Count Label</description>
-                               <posx>590</posx>
-                               <posy>710</posy>
-                               <width>590</width>
-                               <font>font13</font>
-                               <align>right</align>
-                               <scroll>true</scroll>
-                               <textcolor>grey2</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <label>($INFO[Container(100).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(100).CurrentPage]/$INFO[Container(100).NumPages])</label>
-                       </control>
-                       <control type="panel" id="100">
-                               <posx>0</posx>
-                               <posy>40</posy>
-                               <width>590</width>
-                               <height>660</height>
-                               <onleft>50</onleft>
-                               <onright>50</onright>
-                               <onup>100</onup>
-                               <ondown>100</ondown>
-                               <viewtype label="">list</viewtype>
-                               <pagecontrol>30</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="60" width="590">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>590</width>
-                                               <height>60</height>
-                                               <texture border="5">ListNF.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>10</posx>
-                                               <posy>5</posy>
-                                               <width>50</width>
-                                               <height>50</height>
-                                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>75</posx>
-                                               <posy>0</posy>
-                                               <width>410</width>
-                                               <height>60</height>
-                                               <font>font13</font>
-                                               <textcolor>white</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                                       <control type="label">
-                                               <posx>580</posx>
-                                               <posy>2</posy>
-                                               <width>400</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <textcolor>grey2</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label2]</label>
-                                       </control>
-                                       <control type="image">
-                                               <description>Rating value</description>
-                                               <posx>480</posx>
-                                               <posy>30</posy>
-                                               <width>100</width>
-                                               <height>25</height>
-                                               <aspectratio align="left">keep</aspectratio>
-                                               <texture fallback="light/left_rating/rating0.png">$INFO[ListItem.StarRating,light/left_rating/]</texture>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="60" width="590">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>590</width>
-                                               <height>60</height>
-                                               <texture border="5">ListFO.png</texture>
-                                               <include>VisibleFadeEffect</include>
-                                       </control>
-                                       <control type="image">
-                                               <posx>10</posx>
-                                               <posy>5</posy>
-                                               <width>50</width>
-                                               <height>50</height>
-                                               <texture background="true">$INFO[ListItem.Icon]</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>75</posx>
-                                               <posy>0</posy>
-                                               <width>410</width>
-                                               <height>60</height>
-                                               <font>font13</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                                       <control type="label">
-                                               <posx>580</posx>
-                                               <posy>2</posy>
-                                               <width>400</width>
-                                               <height>30</height>
-                                               <font>font13</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>right</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label2]</label>
-                                       </control>
-                                       <control type="image">
-                                               <description>Rating value</description>
-                                               <posx>480</posx>
-                                               <posy>30</posy>
-                                               <width>100</width>
-                                               <height>25</height>
-                                               <aspectratio align="left">keep</aspectratio>
-                                               <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.StarRating,dark/left_rating/]</texture>
-                                       </control>
-                               </focusedlayout>
-                       </control>
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>ParentDir</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                       </content>
-               </control>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="button" id="6">
-                                               <label>31055</label>
-                                               <include>ButtonCommonValues2</include>
-                                       </control>
-                                       <control type="button" id="7">
-                                               <description>Save Button</description>
-                                               <label>31056</label>
-                                               <include>ButtonCommonValues2</include>
-                                               <onleft>50</onleft>
-                                       </control>
-                                       <control type="button" id="8">
-                                               <description>Clear button</description>
-                                               <label>31057</label>
-                                               <include>ButtonCommonValues2</include>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/MyMusicSongs.xml b/addons/skin.touched/4x3Hirez/MyMusicSongs.xml
deleted file mode 100644 (file)
index 8ee3a06..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<window id="501">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <views>50,500</views>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>FileCountCommons</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[31012]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <include>CommonRootView</include> <!-- view id = 50 -->
-                       <include>ThumbnailView</include> <!-- view id = 500 -->
-                       <include>ScrollArrowsCommons</include>
-               </control>
-               <include>MediaSubMenu</include>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="button" id="3">
-                                               <description>Sort by button</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>103</label>
-                                       </control>
-                                       <control type="togglebutton" id="4">
-                                               <description>Sort asc</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <alttexturefocus>button-focus2.png</alttexturefocus>
-                                               <alttexturenofocus>button-nofocus.png</alttexturenofocus>
-                                               <label>31051</label>
-                                               <altlabel>31050</altlabel>
-                                               <usealttexture>Container.SortDirection(Ascending)</usealttexture>
-                                       </control>
-                                       <control type="radiobutton" id="99">
-                                               <description>Library button</description>
-                                               <label>$LOCALIZE[29800]</label>
-                                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                                               <onclick>ReplaceWindow(MusicLibrary)</onclick>
-                                               <selected>Window.IsVisible(MusicLibrary)</selected>
-                                               <include>ButtonCommonValues2</include>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <include>ScrollOffsetLabel</include>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/MyPics.xml b/addons/skin.touched/4x3Hirez/MyPics.xml
deleted file mode 100644 (file)
index 2a97fd9..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-<window id="2">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <views>50,500</views>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>FileCountCommons</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[1]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <include>CommonRootView</include> <!-- view id = 50 -->
-                       <include>ThumbnailView</include> <!-- view id = 500 -->
-                       <include>ScrollArrowsCommons</include>
-               </control>
-               <include>MediaSubMenu</include>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="button" id="3">
-                                               <description>Sort by button</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>103</label>
-                                       </control>
-                                       <control type="togglebutton" id="4">
-                                               <description>Sort asc</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <alttexturefocus>button-focus2.png</alttexturefocus>
-                                               <alttexturenofocus>button-nofocus.png</alttexturenofocus>
-                                               <label>31051</label>
-                                               <altlabel>31050</altlabel>
-                                               <usealttexture>Container.SortDirection(Ascending)</usealttexture>
-                                       </control>
-                                       <control type="button" id="6">
-                                               <description>Slideshow</description>
-                                               <textwidth>235</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>108</label>
-                                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                                       </control>
-                                       <control type="button" id="7">
-                                               <description>Recersive Slideshow</description>
-                                               <textwidth>235</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>361</label>
-                                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                                       </control>
-                                       <control type="radiobutton" id="9">
-                                               <description>Randomize Toggle</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>13319</label>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <include>ScrollOffsetLabel</include>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/MyPrograms.xml b/addons/skin.touched/4x3Hirez/MyPrograms.xml
deleted file mode 100644 (file)
index c8a87cb..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<window id="1">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <views>50,500</views>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>FileCountCommons</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[0]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <include>CommonRootView</include> <!-- view id = 50 -->
-                       <include>ThumbnailView</include> <!-- view id = 500 -->
-                       <include>ScrollArrowsCommons</include>
-               </control>
-               <include>MediaSubMenu</include>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="button" id="3">
-                                               <description>Sort by button</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>103</label>
-                                       </control>
-                                       <control type="togglebutton" id="4">
-                                               <description>Sort asc</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <alttexturefocus>button-focus2.png</alttexturefocus>
-                                               <alttexturenofocus>button-nofocus.png</alttexturenofocus>
-                                               <label>31051</label>
-                                               <altlabel>31050</altlabel>
-                                               <usealttexture>Container.SortDirection(Ascending)</usealttexture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <include>ScrollOffsetLabel</include>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/MyVideoNav.xml b/addons/skin.touched/4x3Hirez/MyVideoNav.xml
deleted file mode 100644 (file)
index 05f86f3..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-<window id="25">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <views>50,550,500,502,552</views>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>FileCountCommons</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[3]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <include>CommonRootViewVideo</include> <!-- view id = 50 -->
-                       <include>ThumbnailView</include> <!-- view id = 500 -->
-                       <include>WideIconView</include> <!-- view id = 502 -->
-                       <include>RootViewMetaDataVideo</include> <!-- view id = 550 -->
-                       <include>WideIconMetaDataView</include> <!-- view id = 552 -->
-                       <include>ScrollArrowsCommons</include>
-               </control>
-               <include>MediaSubMenu</include>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="button" id="3">
-                                               <description>Sort by button</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>103</label>
-                                       </control>
-                                       <control type="togglebutton" id="4">
-                                               <description>Sort asc</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <alttexturefocus>button-focus2.png</alttexturefocus>
-                                               <alttexturenofocus>button-nofocus.png</alttexturenofocus>
-                                               <label>31051</label>
-                                               <altlabel>31050</altlabel>
-                                               <usealttexture>Container.SortDirection(Ascending)</usealttexture>
-                                       </control>
-                                       <control type="radiobutton" id="14">
-                                               <description>Watched Toggle</description>
-                                               <textwidth>170</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>20367</label>
-                                       </control>
-                                       <control type="button" id="8">
-                                               <description>Search</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>137</label>
-                                               <visible>false</visible>
-                                       </control>
-                                       <control type="radiobutton" id="7">
-                                               <description>Stack Toggle</description>
-                                               <textwidth>170</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>346</label>
-                                       </control>
-                                       <control type="radiobutton" id="17">
-                                               <description>Flatten</description>
-                                               <textwidth>170</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>20411</label>
-                                       </control>
-                                       <control type="radiobutton" id="16">
-                                               <description>PartyMode</description>
-                                               <label>589</label>
-                                               <include>ButtonCommonValues2</include>
-                                               <visible>Library.HasContent(MusicVideos)</visible>
-                                       </control>
-                                       <control type="radiobutton" id="11">
-                                               <description>Unlock Shares</description>
-                                               <textwidth>170</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>20336</label>
-                                               <onclick>xbmc.mastermode</onclick>
-                                               <selected>system.ismaster</selected>
-                                               <visible>false</visible>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <include>ScrollOffsetLabel</include>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/MyVideoPlaylist.xml b/addons/skin.touched/4x3Hirez/MyVideoPlaylist.xml
deleted file mode 100644 (file)
index 8008bd6..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-<window id="500">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <views>50,500</views>
-       <onunload>Skin.Reset(MediaSubMenuVisible)</onunload>
-       <controls>
-               <include>CommonBackground</include>
-               <include>FileCountCommons</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[10522]</label>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <include>CommonRootView</include> <!-- view id = 50 -->
-                       <include>ThumbnailView</include> <!-- view id = 500 -->
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>ParentDir</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                       </content>
-               </control>
-               <control type="group">
-                       <visible>Skin.HasSetting(MediaSubMenuVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(MediaSubMenuVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>340r</posx>
-                               <posy>130</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>300</width>
-                                       <height>420</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>270</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="grouplist">
-                                       <posx>11</posx>
-                                       <posy>10</posy>
-                                       <width>298</width>
-                                       <height>420</height>
-                                       <onleft>9000</onleft>
-                                       <onright>50</onright>
-                                       <onup>9000</onup>
-                                       <ondown>9000</ondown>
-                                       <itemgap>0</itemgap>
-                                       <control type="radiobutton" id="20">
-                                               <description>Shuffle button</description>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>191</label>
-                                       </control>
-                                       <control type="button" id="26">
-                                               <description>Repeat button</description>
-                                               <textwidth>235</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                               <label>-</label>
-                                       </control>
-                                       <control type="button" id="21">
-                                               <description>Save button</description>
-                                               <label>190</label>
-                                               <textwidth>235</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                       </control>
-                                       <control type="button" id="22">
-                                               <description>Clear button</description>
-                                               <label>192</label>
-                                               <textwidth>235</textwidth>
-                                               <include>ButtonCommonValues2</include>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>100</posy>
-                                               <width>298</width>
-                                               <height>10</height>
-                                               <texture>shelf_shadow.png</texture>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/MyWeather.xml b/addons/skin.touched/4x3Hirez/MyWeather.xml
deleted file mode 100644 (file)
index dfba728..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-<window id="2600">
-       <defaultcontrol always="true">50</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <include>CommonBackground</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <include>OptionsButtonCommons</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[8]</label>
-               </control>
-               <control type="button">
-                       <description>Options Button</description>
-                       <posx>64r</posx>
-                       <posy>25</posy>
-                       <width>64</width>
-                       <height>64</height>
-                       <texturenofocus>icon_system.png</texturenofocus>
-                       <texturefocus>icon_system.png</texturefocus>
-                       <onclick>ActivateWindow(MyWeatherSettings)</onclick>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <control type="image">
-                               <description>Shadow Background</description>
-                               <posx>50</posx>
-                               <posy>140</posy>
-                               <width>1180</width>
-                               <height>680</height>
-                               <texture border="30">ShadowBorder.png</texture>
-                               <include>Window_OpenClose_Animation_Zoom</include>
-                       </control>
-                       <control type="group">
-                               <posx>80</posx>
-                               <posy>170</posy>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>500</width>
-                                       <height>620</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>20</posx>
-                                       <posy>0</posy>
-                                       <width>460</width>
-                                       <height>90</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture>GlassTitleBar.png</texture>
-                               </control>
-                               <control type="label">
-                                       <description>header label</description>
-                                       <posx>20</posx>
-                                       <posy>10</posy>
-                                       <width>460</width>
-                                       <height>30</height>
-                                       <font>font13_title</font>
-                                       <label>31300</label>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>weather location label</description>
-                                       <posx>20</posx>
-                                       <posy>60</posy>
-                                       <width>460</width>
-                                       <height>30</height>
-                                       <font>font13_title</font>
-                                       <textcolor>white</textcolor>
-                                       <scroll>false</scroll>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[Weather.Location]</label>
-                               </control>
-                               <control type="label">
-                                       <description>update label</description>
-                                       <posx>20</posx>
-                                       <posy>80</posy>
-                                       <width>460</width>
-                                       <height>35</height>
-                                       <font>font12</font>
-                                       <label>$LOCALIZE[31301] - $INFO[Window.Property(Updated)]</label>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>grey2</textcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current temp Value</description>
-                                       <posx>195</posx>
-                                       <posy>175</posy>
-                                       <width>180</width>
-                                       <height>40</height>
-                                       <font>WeatherTemp</font>
-                                       <align>right</align>
-                                       <aligny>top</aligny>
-                                       <label>$INFO[Window.Property(Current.Temperature)]</label>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current temp Value Units</description>
-                                       <posx>190</posx>
-                                       <posy>185</posy>
-                                       <width>100</width>
-                                       <height>40</height>
-                                       <font>font16caps</font>
-                                       <align>left</align>
-                                       <aligny>top</aligny>
-                                       <label>$INFO[System.TemperatureUnits]</label>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="image">
-                                       <description>current weather icon</description>
-                                       <posx>230</posx>
-                                       <posy>135</posy>
-                                       <width>230</width>
-                                       <height>230</height>
-                                       <info>Window.Property(Current.ConditionIcon)</info>
-                                       <aspectratio>keep</aspectratio>
-                               </control>
-                               <control type="label">
-                                       <description>current condition label</description>
-                                       <posx>20</posx>
-                                       <posy>340</posy>
-                                       <width>460</width>
-                                       <height>30</height>
-                                       <info>Window.Property(Current.Condition)</info>
-                                       <wrapmultiline>true</wrapmultiline>
-                                       <font>font13</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="image">
-                                       <posx>20</posx>
-                                       <posy>390</posy>
-                                       <width>460</width>
-                                       <height>4</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <description>current feels like label</description>
-                                       <posx>170</posx>
-                                       <posy>400</posy>
-                                       <width>170</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$LOCALIZE[402] :</label>
-                                       <textcolor>grey2</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current dew label</description>
-                                       <posx>170</posx>
-                                       <posy>430</posy>
-                                       <width>170</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$LOCALIZE[405] :</label>
-                                       <textcolor>grey2</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current humidity label</description>
-                                       <posx>170</posx>
-                                       <posy>460</posy>
-                                       <width>170</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$LOCALIZE[406] :</label>
-                                       <textcolor>grey2</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current UV Index label</description>
-                                       <posx>170</posx>
-                                       <posy>490</posy>
-                                       <width>170</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$LOCALIZE[403] :</label>
-                                       <textcolor>grey2</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current Wind label</description>
-                                       <posx>170</posx>
-                                       <posy>520</posy>
-                                       <width>170</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$LOCALIZE[404] :</label>
-                                       <textcolor>grey2</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current feels like Value</description>
-                                       <posx>185</posx>
-                                       <posy>400</posy>
-                                       <width>300</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[Window.Property(Current.FeelsLike)]$INFO[System.TemperatureUnits]</label>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current dew Value</description>
-                                       <posx>185</posx>
-                                       <posy>430</posy>
-                                       <width>300</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[Window.Property(Current.DewPoint)]$INFO[System.TemperatureUnits]</label>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current humidity Value</description>
-                                       <posx>185</posx>
-                                       <posy>460</posy>
-                                       <width>300</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <info>Window.Property(Current.Humidity)</info>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current UV Index Value</description>
-                                       <posx>185</posx>
-                                       <posy>490</posy>
-                                       <width>300</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <info>Window.Property(Current.UVIndex)</info>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="label">
-                                       <description>current Wind Value</description>
-                                       <posx>185</posx>
-                                       <posy>520</posy>
-                                       <width>300</width>
-                                       <height>35</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <info>Window.Property(Current.Wind)</info>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                       </control>
-                       <control type="group">
-                               <posx>580</posx>
-                               <posy>170</posy>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>620</width>
-                                       <height>620</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>20</posx>
-                                       <posy>0</posy>
-                                       <width>580</width>
-                                       <height>90</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture>GlassTitleBar.png</texture>
-                               </control>
-                               <control type="label">
-                                       <description>header label</description>
-                                       <posx>20</posx>
-                                       <posy>10</posy>
-                                       <width>580</width>
-                                       <height>30</height>
-                                       <font>font13_title</font>
-                                       <label>10508</label>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                               </control>
-                               <control type="group">
-                                       <description>day 0</description>
-                                       <posx>20</posx>
-                                       <posy>60</posy>
-                                       <control type="label">
-                                               <description>Day label</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>460</width>
-                                               <height>35</height>
-                                               <font>font13_title</font>
-                                               <info>Window.Property(Day0.Title)</info>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                       </control>
-                                       <control type="image">
-                                               <description>day icon</description>
-                                               <posx>450</posx>
-                                               <posy>0</posy>
-                                               <height>120</height>
-                                               <width>120</width>
-                                               <info>Window.Property(Day0.OutlookIcon)</info>
-                                               <aspectratio align="right">keep</aspectratio>
-                                       </control>
-                                       <control type="label">
-                                               <description>high label</description>
-                                               <posx>40</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[419] :</label>
-                                               <textcolor>grey2</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>Weather.IsFetched</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>high value</description>
-                                               <posx>110</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <label>$INFO[Window.Property(Day0.HighTemp)]$INFO[System.TemperatureUnits]</label>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>!IsEmpty(Window.Property(Day0.HighTemp))</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>low label</description>
-                                               <posx>220</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[418] :</label>
-                                               <textcolor>grey2</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>Weather.IsFetched</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>low value</description>
-                                               <posx>290</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <label>$INFO[Window.Property(Day0.LowTemp)]$INFO[System.TemperatureUnits]</label>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>!IsEmpty(Window.Property(Day0.LowTemp))</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>conditions label</description>
-                                               <posx>40</posx>
-                                               <posy>80</posy>
-                                               <width>320</width>
-                                               <height>20</height>
-                                               <info>Window.Property(Day0.Outlook)</info>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                       </control>
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>120</posy>
-                                               <width>620</width>
-                                               <height>4</height>
-                                               <texture>separator.png</texture>
-                                       </control>
-                               </control>
-                               <control type="group">
-                                       <description>day 1</description>
-                                       <posx>20</posx>
-                                       <posy>190</posy>
-                                       <control type="label">
-                                               <description>Day label</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>460</width>
-                                               <height>35</height>
-                                               <font>font13_title</font>
-                                               <info>Window.Property(Day1.Title)</info>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                       </control>
-                                       <control type="image">
-                                               <description>day icon</description>
-                                               <posx>450</posx>
-                                               <posy>0</posy>
-                                               <height>120</height>
-                                               <width>120</width>
-                                               <info>Window.Property(Day1.OutlookIcon)</info>
-                                               <aspectratio align="right">keep</aspectratio>
-                                       </control>
-                                       <control type="label">
-                                               <description>high label</description>
-                                               <posx>40</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[419] :</label>
-                                               <textcolor>grey2</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>Weather.IsFetched</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>high value</description>
-                                               <posx>110</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <label>$INFO[Window.Property(Day1.HighTemp)]$INFO[System.TemperatureUnits]</label>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>!IsEmpty(Window.Property(Day1.HighTemp))</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>low label</description>
-                                               <posx>220</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[418] :</label>
-                                               <textcolor>grey2</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>Weather.IsFetched</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>low value</description>
-                                               <posx>290</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <label>$INFO[Window.Property(Day1.LowTemp)]$INFO[System.TemperatureUnits]</label>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>!IsEmpty(Window.Property(Day1.LowTemp))</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>conditions label</description>
-                                               <posx>40</posx>
-                                               <posy>80</posy>
-                                               <width>320</width>
-                                               <height>20</height>
-                                               <info>Window.Property(Day1.Outlook)</info>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                       </control>
-                                       <control type="image">
-                                               <posx>20</posx>
-                                               <posy>120</posy>
-                                               <width>620</width>
-                                               <height>4</height>
-                                               <texture>separator.png</texture>
-                                       </control>
-                               </control>
-                               <control type="group">
-                                       <description>day 2</description>
-                                       <posx>20</posx>
-                                       <posy>320</posy>
-                                       <control type="label">
-                                               <description>Day label</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>460</width>
-                                               <height>35</height>
-                                               <font>font13_title</font>
-                                               <info>Window.Property(Day2.Title)</info>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                       </control>
-                                       <control type="image">
-                                               <description>day icon</description>
-                                               <posx>450</posx>
-                                               <posy>0</posy>
-                                               <height>120</height>
-                                               <width>120</width>
-                                               <info>Window.Property(Day2.OutlookIcon)</info>
-                                               <aspectratio align="right">keep</aspectratio>
-                                       </control>
-                                       <control type="label">
-                                               <description>high label</description>
-                                               <posx>40</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[419] :</label>
-                                               <textcolor>grey2</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>Weather.IsFetched</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>high value</description>
-                                               <posx>110</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <label>$INFO[Window.Property(Day2.HighTemp)]$INFO[System.TemperatureUnits]</label>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>!IsEmpty(Window.Property(Day2.HighTemp))</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>low label</description>
-                                               <posx>220</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[418] :</label>
-                                               <textcolor>grey2</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>Weather.IsFetched</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>low value</description>
-                                               <posx>290</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <label>$INFO[Window.Property(Day2.LowTemp)]$INFO[System.TemperatureUnits]</label>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>!IsEmpty(Window.Property(Day2.LowTemp))</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>conditions label</description>
-                                               <posx>40</posx>
-                                               <posy>80</posy>
-                                               <width>320</width>
-                                               <height>20</height>
-                                               <info>Window.Property(Day2.Outlook)</info>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <shadowcolor>black</shadowcolor>
-                                               <textcolor>white</textcolor>
-                                       </control>
-                                       <control type="image">
-                                               <posx>20</posx>
-                                               <posy>120</posy>
-                                               <width>620</width>
-                                               <height>4</height>
-                                               <texture>separator.png</texture>
-                                       </control>
-                               </control>
-                               <control type="group">
-                                       <description>day 3</description>
-                                       <posx>20</posx>
-                                       <posy>450</posy>
-                                       <control type="label">
-                                               <description>Day label</description>
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>460</width>
-                                               <height>35</height>
-                                               <font>font13_title</font>
-                                               <info>Window.Property(Day3.Title)</info>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                       </control>
-                                       <control type="image">
-                                               <description>day icon</description>
-                                               <posx>450</posx>
-                                               <posy>0</posy>
-                                               <height>120</height>
-                                               <width>120</width>
-                                               <info>Window.Property(Day3.OutlookIcon)</info>
-                                               <aspectratio align="right">keep</aspectratio>
-                                       </control>
-                                       <control type="label">
-                                               <description>high label</description>
-                                               <posx>40</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[419] :</label>
-                                               <textcolor>grey2</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>Weather.IsFetched</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>high value</description>
-                                               <posx>110</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <label>$INFO[Window.Property(Day3.HighTemp)]$INFO[System.TemperatureUnits]</label>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>!IsEmpty(Window.Property(Day3.HighTemp))</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>low label</description>
-                                               <posx>220</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[418] :</label>
-                                               <textcolor>grey2</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>Weather.IsFetched</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>low value</description>
-                                               <posx>290</posx>
-                                               <posy>50</posy>
-                                               <height>20</height>
-                                               <label>$INFO[Window.Property(Day3.LowTemp)]$INFO[System.TemperatureUnits]</label>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                               <visible>!IsEmpty(Window.Property(Day3.LowTemp))</visible>
-                                       </control>
-                                       <control type="label">
-                                               <description>conditions label</description>
-                                               <posx>40</posx>
-                                               <posy>80</posy>
-                                               <width>320</width>
-                                               <height>20</height>
-                                               <info>Window.Property(Day3.Outlook)</info>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>white</textcolor>
-                                               <shadowcolor>black</shadowcolor>
-                                       </control>
-                               </control>
-                       </control>
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>ParentDir</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                               <item>
-                                       <label>184</label>
-                                       <onclick>Weather.Refresh</onclick>
-                                       <icon>icon_refresh.png</icon>
-                               </item>
-                               <item>
-                                       <label>31201</label>
-                                       <onclick>Weather.LocationNext</onclick>
-                                       <icon>icon_city.png</icon>
-                               </item>
-                       </content>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/PlayerControls.xml b/addons/skin.touched/4x3Hirez/PlayerControls.xml
deleted file mode 100644 (file)
index 4285f17..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<window type="dialog" id="114">
-       <defaultcontrol></defaultcontrol>
-       <include>dialogeffect</include>
-       <visible>Player.HasMedia + Window.IsActive(PlayerControls) + !Window.IsActive(FullscreenVideo) + !Window.IsActive(Visualisation)</visible>
-       <onunload>Skin.Reset(PlayerControlsSubMenuVisible)</onunload>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <include>PlayerControlCommons</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/Pointer.xml b/addons/skin.touched/4x3Hirez/Pointer.xml
deleted file mode 100644 (file)
index 54bf371..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<window id="105">
-       <defaultcontrol>1</defaultcontrol>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <control type="image" id="1">
-                       <description>Pointer Image</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>32</width>
-                       <height>32</height>
-                       <texture>pointer-focus.png</texture>
-               </control>
-               <control type="image" id="2">
-                       <description>Pointer Focus Image</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>32</width>
-                       <height>32</height>
-                       <texture>pointer-focus.png</texture>
-               </control>
-               <control type="image" id="3">
-                       <description>Pointer Drag Image</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>32</width>
-                       <height>32</height>
-                       <texture>pointer-focus.png</texture>
-               </control>
-               <control type="image" id="4">
-                       <description>Pointer Click Image</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>32</width>
-                       <height>32</height>
-                       <texture>pointer-focus.png</texture>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/ProfileSettings.xml b/addons/skin.touched/4x3Hirez/ProfileSettings.xml
deleted file mode 100644 (file)
index 7b5435e..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-<window id="130">
-       <defaultcontrol>1</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$INFO[Window.Property(heading)]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="image" id="2">
-                       <description>profile image</description>
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>250</width>
-                       <height>250</height>
-                       <align>left</align>
-                       <aspectratio>keep</aspectratio>
-                       <texture>unknown-user.png</texture>
-               </control>
-               <control type="label">
-                       <description>profile name label</description>
-                       <posx>300</posx>
-                       <posy>80</posy>
-                       <width>680</width>
-                       <height>25</height>
-                       <align>left</align>
-                       <font>font13_title</font>
-                       <textcolor>black</textcolor>
-                       <label>$LOCALIZE[20093]</label>
-               </control>
-               <control type="label" id="1000">
-                       <description>profile name Value</description>
-                       <posx>300</posx>
-                       <posy>110</posy>
-                       <width>680</width>
-                       <height>25</height>
-                       <align>left</align>
-                       <font>font16</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="label">
-                       <description>profile directory label</description>
-                       <posx>300</posx>
-                       <posy>180</posy>
-                       <width>680</width>
-                       <height>25</height>
-                       <align>left</align>
-                       <font>font13_title</font>
-                       <textcolor>black</textcolor>
-                       <label>$LOCALIZE[20070]</label>
-               </control>
-               <control type="label" id="1001">
-                       <description>profile directory Value</description>
-                       <posx>300</posx>
-                       <posy>210</posy>
-                       <width>680</width>
-                       <height>25</height>
-                       <align>left</align>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="grouplist" id="5">
-                       <description>control area</description>
-                       <posx>20</posx>
-                       <posy>350</posy>
-                       <width>960</width>
-                       <height>500</height>
-                       <itemgap>-1</itemgap>
-                       <pagecontrol>60</pagecontrol>
-                       <onleft>28</onleft>
-                       <onright>60</onright>
-                       <onup>28</onup>
-                       <ondown>28</ondown>
-               </control>
-               <control type="button" id="7">
-                       <description>Default Button</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="radiobutton" id="8">
-                       <description>Default RadioButton</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="spincontrolex" id="9">
-                       <description>Default SpinControlex</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                       <aligny>center</aligny>
-                       <reverse>yes</reverse>
-               </control>
-               <control type="image" id="11">
-                       <description>separator image</description>
-                       <height>5</height>
-                       <texture>separator.png</texture>
-               </control>
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>830</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>10</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>9000</onup>
-                       <ondown>9000</ondown>
-                       <control type="button" id="28">
-                               <description>OK button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-                       <control type="button" id="29">
-                               <description>Cancel button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/Settings.xml b/addons/skin.touched/4x3Hirez/Settings.xml
deleted file mode 100644 (file)
index fd9675d..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-<window id="4">
-       <defaultcontrol always="true">9000</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <include>CommonBackground</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[5]</label>
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>PreviousMenu</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                               <item>
-                                       <label>13200</label>
-                                       <onclick>ActivateWindow(Profiles)</onclick>
-                                       <icon>icon_profile.png</icon>
-                               </item>
-                               <item>
-                                       <label>20077</label>
-                                       <onclick>ActivateWindow(1113)</onclick>
-                                       <icon>icon_skin.png</icon>
-                               </item>
-                               <item>
-                                       <label>130</label>
-                                       <onclick>ActivateWindow(SystemInfo)</onclick>
-                                       <icon>icon_systeminfo.png</icon>
-                               </item>
-                       </content>
-               </control>
-               <control type="panel" id="9000">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <posx>30</posx>
-                       <posy>110</posy>
-                       <width>1220</width>
-                       <height>740</height>
-                       <onleft>9000</onleft>
-                       <onright>9001</onright>
-                       <onup>9000</onup>
-                       <ondown>9000</ondown>
-                       <pagecontrol>-</pagecontrol>
-                       <scrolltime>300</scrolltime>
-                       <itemlayout height="180" width="600">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>620</width>
-                                       <height>200</height>
-                                       <texture border="5">SubBack.png</texture>
-                                       <bordertexture border="30">ShadowBorder.png</bordertexture>
-                                       <bordersize>20</bordersize>
-                               </control>
-                               <control type="image">
-                                       <posx>430</posx>
-                                       <posy>25</posy>
-                                       <width>150</width>
-                                       <height>145</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>40</posx>
-                                       <posy>40</posy>
-                                       <width>360</width>
-                                       <height>20</height>
-                                       <font>font24_title</font>
-                                       <textcolor>white</textcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="textbox">
-                                       <posx>40</posx>
-                                       <posy>70</posy>
-                                       <width>390</width>
-                                       <height>100</height>
-                                       <font>font12</font>
-                                       <textcolor>grey2</textcolor>
-                                       <align>left</align>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="image">
-                                       <posx>20</posx>
-                                       <posy>20</posy>
-                                       <width>200</width>
-                                       <height>160</height>
-                                       <texture>GlassOverlay.png</texture>
-                                       <colordiffuse>55FFFFFF</colordiffuse>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="180" width="600">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>620</width>
-                                       <height>200</height>
-                                       <texture border="5">SubBack.png</texture>
-                                       <bordertexture border="30">ShadowBorder.png</bordertexture>
-                                       <bordersize>20</bordersize>
-                               </control>
-                               <control type="image">
-                                       <posx>430</posx>
-                                       <posy>25</posy>
-                                       <width>150</width>
-                                       <height>145</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>40</posx>
-                                       <posy>40</posy>
-                                       <width>360</width>
-                                       <height>20</height>
-                                       <font>font24_title</font>
-                                       <textcolor>white</textcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="textbox">
-                                       <posx>40</posx>
-                                       <posy>70</posy>
-                                       <width>390</width>
-                                       <height>100</height>
-                                       <font>font12</font>
-                                       <textcolor>grey2</textcolor>
-                                       <align>left</align>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="image">
-                                       <posx>20</posx>
-                                       <posy>20</posy>
-                                       <width>200</width>
-                                       <height>160</height>
-                                       <texture>GlassOverlay.png</texture>
-                                       <colordiffuse>55FFFFFF</colordiffuse>
-                               </control>
-                       </focusedlayout>
-                       <content>
-                               <item id="1">
-                                       <label>480</label>
-                                       <label2>31400</label2>
-                                       <onclick>ActivateWindow(AppearanceSettings)</onclick>
-                                       <icon>icon_big_appearence.png</icon>
-                               </item>
-                               <item id="2">
-                                       <label>157</label>
-                                       <label2>31401</label2>
-                                       <onclick>ActivateWindow(VideosSettings)</onclick>
-                                       <icon>icon_big_video.png</icon>
-                               </item>
-                               <item id="3">
-                                       <label>2</label>
-                                       <label2>31402</label2>
-                                       <onclick>ActivateWindow(MusicSettings)</onclick>
-                                       <icon>icon_big_music.png</icon>
-                               </item>
-                               <item id="4">
-                                       <label>1</label>
-                                       <label2>31403</label2>
-                                       <onclick>ActivateWindow(PicturesSettings)</onclick>
-                                       <icon>icon_big_pictures.png</icon>
-                               </item>
-                               <item id="5">
-                                       <label>8</label>
-                                       <label2>31404</label2>
-                                       <onclick>ActivateWindow(WeatherSettings)</onclick>
-                                       <icon>icon_big_weather.png</icon>
-                               </item>
-                               <item id="6">
-                                       <label>24001</label>
-                                       <label2>31408</label2>
-                                       <onclick>ActivateWindow(AddonBrowser)</onclick>
-                                       <icon>icon_big_addons.png</icon>
-                               </item>
-                               <item id="7">
-                                       <label>705</label>
-                                       <label2>31405</label2>
-                                       <onclick>ActivateWindow(NetworkSettings)</onclick>
-                                       <icon>icon_big_network.png</icon>
-                               </item>
-                               <item id="8">
-                                       <label>13000</label>
-                                       <label2>31406</label2>
-                                       <onclick>ActivateWindow(SystemSettings)</onclick>
-                                       <icon>icon_big_system.png</icon>
-                               </item>
-                               <item id="9">
-                                       <label>166</label>
-                                       <label2>31407</label2>
-                                       <onclick>ActivateWindow(1111)</onclick>
-                                       <icon>icon_big_skin.png</icon>
-                                       <visible>false</visible>
-                               </item>
-                       </content>
-               </control>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/SettingsCategory.xml b/addons/skin.touched/4x3Hirez/SettingsCategory.xml
deleted file mode 100644 (file)
index 054a0ec..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<window id="12">
-       <defaultcontrol>3</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <include>CommonBackground</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[5]$INFO[Control.GetLabel(2), - ]</label>
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>PreviousMenu</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                       </content>
-               </control>
-               <control type="group">
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <posx>50</posx>
-                       <posy>140</posy>
-                       <control type="grouplist" id="3">
-                               <description>button area</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>280</width>
-                               <height>720</height>
-                               <itemgap>-1</itemgap>
-                               <onleft>5</onleft>
-                               <onright>5</onright>
-                               <onup>3</onup>
-                               <ondown>3</ondown>
-                       </control>
-                       <control type="grouplist" id="5">
-                               <description>control area</description>
-                               <posx>300</posx>
-                               <posy>0</posy>
-                               <width>880</width>
-                               <height>720</height>
-                               <itemgap>0</itemgap>
-                               <pagecontrol>60</pagecontrol>
-                               <onleft>3</onleft>
-                               <onright>3</onright>
-                               <onup>5</onup>
-                               <ondown>5</ondown>
-                       </control>
-               </control>
-               <include>BehindDialogFadeOut</include>
-
-               <control type="button" id="10">
-                       <description>Default Category Button</description>
-                       <height>70</height>
-                       <textoffsetx>20</textoffsetx>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <font>font24_title</font>
-                       <textcolor>white</textcolor>
-                       <focusedcolor>selected</focusedcolor>
-                       <texturefocus border="5">button-nofocus2.png</texturefocus>
-                       <texturenofocus border="5">button-nofocus2.png</texturenofocus>
-                       <pulseonselect>false</pulseonselect>
-               </control>
-               <control type="button" id="7">
-                       <description>Default Button</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>60</height>
-                       <font>font13</font>
-                       <textcolor>white</textcolor>
-                       <focusedcolor>black</focusedcolor>
-                       <texturefocus border="5">ListFO.png</texturefocus>
-                       <texturenofocus border="5">ListNF.png</texturenofocus>
-               </control>
-               <control type="radiobutton" id="8">
-                       <description>Default RadioButton</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>60</height>
-                       <font>font13</font>
-                       <textcolor>white</textcolor>
-                       <focusedcolor>black</focusedcolor>
-                       <texturefocus border="5">ListFO.png</texturefocus>
-                       <texturenofocus border="5">ListNF.png</texturenofocus>
-               </control>
-               <control type="spincontrolex" id="9">
-                       <description>Default SpinControlex</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>60</height>
-                       <font>font13</font>
-                       <textcolor>white</textcolor>
-                       <focusedcolor>black</focusedcolor>
-                       <texturefocus border="5">ListFO.png</texturefocus>
-                       <texturenofocus border="5">ListNF.png</texturenofocus>
-                       <aligny>center</aligny>
-                       <reverse>yes</reverse>
-               </control>
-               <control type="image" id="11">
-                       <description>separator image</description>
-                       <height>5</height>
-                       <texture>separator.png</texture>
-               </control>
-               <control type="label" id="2">
-                       <description>Fake Label so we can pass it on</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>0</width>
-                       <height>0</height>
-                       <font>-</font>
-                       <visible>false</visible>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/SettingsProfile.xml b/addons/skin.touched/4x3Hirez/SettingsProfile.xml
deleted file mode 100644 (file)
index 8c70caf..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-<window id="34">
-       <defaultcontrol always="true">2</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <include>CommonBackground</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[10034]</label>
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>PreviousMenu</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                       </content>
-               </control>
-
-               <control type="group">
-                       <posx>40</posx>
-                       <posy>140</posy>
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <control type="radiobutton" id ="4">
-                               <description>Enable Login screen</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>350</width>
-                               <height>60</height>
-                               <align>left</align>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>20096</label>
-                               <onleft>2</onleft>
-                               <onright>2</onright>
-                               <onup>4</onup>
-                               <ondown>4</ondown>
-                               <enable>!Window.IsVisible(ProfileSettings)</enable>
-                       </control>
-                       <control type="group">
-                               <posx>0</posx>
-                               <posy>80</posy>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>350</width>
-                                       <height>500</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>10</posx>
-                                       <posy>20</posy>
-                                       <width>330</width>
-                                       <height>20</height>
-                                       <font>font12_title</font>
-                                       <textcolor>white</textcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>$LOCALIZE[31010]</label>
-                               </control>
-                               <control type="image">
-                                       <posx>20</posx>
-                                       <posy>60</posy>
-                                       <width>310</width>
-                                       <height>250</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture fallback="unknown-user.png">$INFO[System.ProfileThumb]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>10</posx>
-                                       <posy>330</posy>
-                                       <width>330</width>
-                                       <height>20</height>
-                                       <font>font13_title</font>
-                                       <textcolor>blue</textcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[System.ProfileName]</label>
-                               </control>
-                       </control>
-                       <control type="label">
-                               <posx>370</posx>
-                               <posy>0</posy>
-                               <width>830</width>
-                               <height>60</height>
-                               <font>font13_title</font>
-                               <textcolor>white</textcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>$LOCALIZE[31319]</label>
-                       </control>
-                       <control type="panel" id="2">
-                               <posx>370</posx>
-                               <posy>80</posy>
-                               <width>830</width>
-                               <height>560</height>
-                               <onleft>4</onleft>
-                               <onright>60</onright>
-                               <onup>53</onup>
-                               <ondown>53</ondown>
-                               <viewtype label="21371">list</viewtype>
-                               <pagecontrol>60</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="280" width="207">
-                                       <control type="image">
-                                               <posx>1</posx>
-                                               <posy>0</posy>
-                                               <width>207</width>
-                                               <height>280</height>
-                                               <texture border="5">SubBack.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>10</posx>
-                                               <posy>10</posy>
-                                               <width>187</width>
-                                               <height>190</height>
-                                               <texture fallback="unknown-user.png">$INFO[Listitem.Icon]</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>103</posx>
-                                               <posy>200</posy>
-                                               <width>197</width>
-                                               <height>25</height>
-                                               <font>font13</font>
-                                               <textcolor>white</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>center</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                                       <control type="label">
-                                               <posx>103</posx>
-                                               <posy>230</posy>
-                                               <width>197</width>
-                                               <height>20</height>
-                                               <font>font10_title</font>
-                                               <textcolor>grey2</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>center</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[31320]</label>
-                                               <visible>!IsEmpty(ListItem.Label2)</visible>
-                                       </control>
-                                       <control type="label">
-                                               <posx>103</posx>
-                                               <posy>250</posy>
-                                               <width>197</width>
-                                               <height>20</height>
-                                               <font>font10</font>
-                                               <textcolor>grey2</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>center</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label2]</label>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="280" width="207">
-                                       <control type="image">
-                                               <posx>1</posx>
-                                               <posy>0</posy>
-                                               <width>207</width>
-                                               <height>280</height>
-                                               <texture border="5">SubBack2.png</texture>
-                                       </control>
-                                       <control type="image">
-                                               <posx>10</posx>
-                                               <posy>10</posy>
-                                               <width>187</width>
-                                               <height>190</height>
-                                               <texture fallback="unknown-user.png">$INFO[Listitem.Icon]</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>103</posx>
-                                               <posy>200</posy>
-                                               <width>197</width>
-                                               <height>25</height>
-                                               <font>font13</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>center</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                                       <control type="label">
-                                               <posx>103</posx>
-                                               <posy>230</posy>
-                                               <width>197</width>
-                                               <height>20</height>
-                                               <font>font10_title</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>center</align>
-                                               <aligny>center</aligny>
-                                               <label>$LOCALIZE[31320]</label>
-                                               <visible>!IsEmpty(ListItem.Label2)</visible>
-                                       </control>
-                                       <control type="label">
-                                               <posx>103</posx>
-                                               <posy>250</posy>
-                                               <width>197</width>
-                                               <height>20</height>
-                                               <font>font10</font>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>center</align>
-                                               <aligny>center</aligny>
-                                               <label>$INFO[ListItem.Label2]</label>
-                                       </control>
-                               </focusedlayout>
-                       </control>
-                       <control type="scrollbar" id="60">
-                               <posx>1060</posx>
-                               <posy>60</posy>
-                               <width>25</width>
-                               <height>530</height>
-                               <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                               <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
-                               <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                               <textureslidernib>ScrollBarNib.png</textureslidernib>
-                               <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                               <onleft>2</onleft>
-                               <onright>4</onright>
-                               <showonepage>false</showonepage>
-                               <orientation>vertical</orientation>
-                       </control>
-               </control>
-               <include>BehindDialogFadeOut</include>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/SettingsScreenCalibration.xml b/addons/skin.touched/4x3Hirez/SettingsScreenCalibration.xml
deleted file mode 100644 (file)
index 9b79adf..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-<window id="11">
-       <defaultcontrol>8</defaultcontrol>
-       <controls>
-               <control type="videowindow" id="20">
-                       <description>videowindow</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1280</width>
-                       <height>720</height>
-                       <visible>Player.HasVideo</visible>
-               </control>
-               <control type="group">
-                       <visible>!Player.HasVideo</visible>
-                       <include>CommonSettingsBackground</include>
-               </control>
-               <control type="image">
-                       <description>Overlay</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1280</width>
-                       <height>720</height>
-                       <texture>black-back.png</texture>
-                       <include>dialogeffect</include>
-               </control>
-               <control type="button">
-                       <description>Close Window button</description>
-                       <posx>100r</posx>
-                       <posy>0</posy>
-                       <width>64</width>
-                       <height>32</height>
-                       <label>-</label>
-                       <font>-</font>
-                       <onclick>PreviousMenu</onclick>
-                       <texturefocus>DialogCloseButton-focus.png</texturefocus>
-                       <texturenofocus>DialogCloseButton.png</texturenofocus>
-                       <onleft>1</onleft>
-                       <onright>1</onright>
-                       <onup>1</onup>
-                       <ondown>1</ondown>
-                       <visible>system.getbool(input.enablemouse)</visible>
-               </control>
-               <control type="mover" id="8">
-                       <description>top left mover</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>128</width>
-                       <height>128</height>
-                       <texturefocus>CalibrateTopLeft.png</texturefocus>
-                       <texturenofocus>-</texturenofocus>
-               </control>
-               <control type="mover" id="9">
-                       <description>right bottom mover</description>
-                       <posx>700</posx>
-                       <posy>500</posy>
-                       <width>128</width>
-                       <height>128</height>
-                       <texturefocus>CalibrateBottomRight.png</texturefocus>
-                       <texturenofocus>-</texturenofocus>
-               </control>
-               <control type="mover" id="10">
-                       <description>subtitle position mover</description>
-                       <posx>200</posx>
-                       <posy>500</posy>
-                       <width>512</width>
-                       <height>128</height>
-                       <texturefocus>CalibrateSubtitles.png</texturefocus>
-                       <texturenofocus>-</texturenofocus>
-               </control>
-               <control type="resize" id="11">
-                       <description>pixel aspect ratio box</description>
-                       <posx>0</posx>
-                       <posy>232</posy>
-                       <width>256</width>
-                       <height>256</height>
-                       <texturefocus>CalibratePixelRatio.png</texturefocus>
-                       <texturenofocus>-</texturenofocus>
-               </control>
-               <control type="group">
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <control type="label" id="2">
-                               <description>coordinates label</description>
-                               <posx>0</posx>
-                               <posy>10</posy>
-                               <width>1240</width>
-                               <label>-</label>
-                               <align>center</align>
-                               <font>font13caps</font>
-                       </control>
-                       <control type="label" id="3">
-                               <description>help information</description>
-                               <posx>0</posx>
-                               <posy>40</posy>
-                               <width>1240</width>
-                               <label>-</label>
-                               <align>center</align>
-                               <font>font13caps</font>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/SettingsSystemInfo.xml b/addons/skin.touched/4x3Hirez/SettingsSystemInfo.xml
deleted file mode 100644 (file)
index 031221b..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-<window id="7">
-       <defaultcontrol always="true">95</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <include>CommonBackground</include>
-               <include>HomeButtonCommons</include>
-               <include>CommonNowPlaying</include>
-               <control type="label">
-                       <description>Window label</description>
-                       <include>MediaWindowTitleCommons</include>
-                       <label>$LOCALIZE[130]</label>
-               </control>
-               <control type="panel">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>PreviousMenu</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                       </content>
-               </control>
-               <control type="label" id="40">
-                       <description>Hiddenlabel to pass to above</description>
-                       <visible>false</visible>
-               </control>
-               <control type="group">
-                       <posx>50</posx>
-                       <posy>140</posy>
-                       <include>Window_OpenClose_Animation_Zoom</include>
-                       <control type="grouplist" id="9000">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>260</width>
-                               <height>481</height>
-                               <itemgap>-1</itemgap>
-                               <onup>9000</onup>
-                               <ondown>9000</ondown>
-                               <control type="button" id="95">
-                                       <description>Button Summary Values</description>
-                                       <height>70</height>
-                                       <width>280</width>
-                                       <textoffsetx>20</textoffsetx>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font24_title</font>
-                                       <textcolor>white</textcolor>
-                                       <focusedcolor>selected</focusedcolor>
-                                       <texturefocus border="5">button-nofocus2.png</texturefocus>
-                                       <texturenofocus border="5">button-nofocus2.png</texturenofocus>
-                                       <pulseonselect>false</pulseonselect>
-                                       <label>20037</label>
-                               </control>
-                               <control type="button" id="94">
-                                       <height>70</height>
-                                       <width>280</width>
-                                       <textoffsetx>20</textoffsetx>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font24_title</font>
-                                       <textcolor>white</textcolor>
-                                       <focusedcolor>selected</focusedcolor>
-                                       <texturefocus border="5">button-nofocus2.png</texturefocus>
-                                       <texturenofocus border="5">button-nofocus2.png</texturenofocus>
-                                       <pulseonselect>false</pulseonselect>
-                                       <label>13277</label>
-                               </control>
-                               <control type="button" id="96">
-                                       <description>Button Network</description>
-                                       <height>70</height>
-                                       <width>280</width>
-                                       <textoffsetx>20</textoffsetx>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font24_title</font>
-                                       <textcolor>white</textcolor>
-                                       <focusedcolor>selected</focusedcolor>
-                                       <texturefocus border="5">button-nofocus2.png</texturefocus>
-                                       <texturenofocus border="5">button-nofocus2.png</texturenofocus>
-                                       <pulseonselect>false</pulseonselect>
-                                       <label>13279</label>
-                               </control>
-                               <control type="button" id="97">
-                                       <description>Button Video</description>
-                                       <height>70</height>
-                                       <width>280</width>
-                                       <textoffsetx>20</textoffsetx>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font24_title</font>
-                                       <textcolor>white</textcolor>
-                                       <focusedcolor>selected</focusedcolor>
-                                       <texturefocus border="5">button-nofocus2.png</texturefocus>
-                                       <texturenofocus border="5">button-nofocus2.png</texturenofocus>
-                                       <pulseonselect>false</pulseonselect>
-                                       <label>13280</label>
-                               </control>
-                               <control type="button" id="98">
-                                       <description>Button Hardware</description>
-                                       <height>70</height>
-                                       <width>280</width>
-                                       <textoffsetx>20</textoffsetx>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <font>font24_title</font>
-                                       <textcolor>white</textcolor>
-                                       <focusedcolor>selected</focusedcolor>
-                                       <texturefocus border="5">button-nofocus2.png</texturefocus>
-                                       <texturenofocus border="5">button-nofocus2.png</texturenofocus>
-                                       <pulseonselect>false</pulseonselect>
-                                       <label>13281</label>
-                               </control>
-                       </control>
-                       <control type="group">
-                               <posx>300</posx>
-                               <posy>0</posy>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(2))</visible>
-                               </control>
-                               <control type="label" id="2">
-                                       <description>Label 2</description>
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>60</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(3))</visible>
-                               </control>
-                               <control type="label" id="3">
-                                       <description>Label 3</description>
-                                       <posx>10</posx>
-                                       <posy>60</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>120</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(4))</visible>
-                               </control>
-                               <control type="label" id="4">
-                                       <description>Label 4</description>
-                                       <posx>10</posx>
-                                       <posy>120</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>180</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(5))</visible>
-                               </control>
-                               <control type="label" id="5">
-                                       <description>Label 5</description>
-                                       <posx>10</posx>
-                                       <posy>180</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>240</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(6))</visible>
-                               </control>
-                               <control type="label" id="6">
-                                       <description>Label 6</description>
-                                       <posx>10</posx>
-                                       <posy>240</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>300</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(7))</visible>
-                               </control>
-                               <control type="label" id="7">
-                                       <description>Label 7</description>
-                                       <posx>10</posx>
-                                       <posy>300</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>360</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(8))</visible>
-                               </control>
-                               <control type="label" id="8">
-                                       <description>Label 8</description>
-                                       <posx>10</posx>
-                                       <posy>360</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>420</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(9))</visible>
-                               </control>
-                               <control type="label" id="9">
-                                       <description>Label 9</description>
-                                       <posx>10</posx>
-                                       <posy>420</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>480</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(10))</visible>
-                               </control>
-                               <control type="label" id="10">
-                                       <description>Label 10</description>
-                                       <posx>10</posx>
-                                       <posy>480</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>540</posy>
-                                       <width>880</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                                       <visible>!IsEmpty(Control.GetLabel(11))</visible>
-                               </control>
-                               <control type="label" id="11">
-                                       <description>Label 11</description>
-                                       <posx>10</posx>
-                                       <posy>540</posy>
-                                       <width>860</width>
-                                       <height>60</height>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>-</label>
-                                       <font>font13</font>
-                               </control>
-                       </control>
-                       <control type="group">
-                               <posx>60</posx>
-                               <posy>220r</posy>
-                               <control type="label" id="52">
-                                       <description>XBMC BUILD Version</description>
-                                       <posx>1130</posx>
-                                       <posy>0</posy>
-                                       <width>730</width>
-                                       <label>144</label>
-                                       <align>right</align>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                                       <font>font13_title</font>
-                               </control>
-                               <control type="label">
-                                       <description>CPU Text</description>
-                                       <posx>800</posx>
-                                       <posy>40</posy>
-                                       <width>800</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[13271] $INFO[System.CPUUsage]</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                                       <font>font12_title</font>
-                               </control>
-                               <control type="progress">
-                                       <description>CPU BAR</description>
-                                       <posx>810</posx>
-                                       <posy>40</posy>
-                                       <width>320</width>
-                                       <height>25</height>
-                                       <info>System.CPUUsage</info>
-                               </control>
-                               <control type="label">
-                                       <description>Memory Text</description>
-                                       <posx>800</posx>
-                                       <posy>70</posy>
-                                       <width>800</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[31309] $INFO[system.memory(used.percent)]</label>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                                       <font>font12_title</font>
-                               </control>
-                               <control type="progress">
-                                       <description>Memory BAR</description>
-                                       <posx>810</posx>
-                                       <posy>70</posy>
-                                       <width>320</width>
-                                       <height>25</height>
-                                       <info>system.memory(used)</info>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/SlideShow.xml b/addons/skin.touched/4x3Hirez/SlideShow.xml
deleted file mode 100644 (file)
index 778d873..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-<window id="2007">
-       <defaultcontrol>2</defaultcontrol>
-       <onunload>Skin.Reset(SlideShowShowOSD)</onunload>
-       <controls>
-               <control type="button">
-                       <description>Hidden button to close the keyboard when its focused</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <texturenofocus>-</texturenofocus>
-                       <texturefocus>-</texturefocus>
-                       <onclick>Skin.SetBool(SlideShowShowOSD)</onclick>
-               </control>
-               <control type="group">
-                       <visible>Skin.HasSetting(SlideShowShowOSD) + !Window.IsVisible(PictureInfo)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>CommonHeader</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>20</posy>
-                               <width>1280</width>
-                               <height>64</height>
-                               <texture>header.png</texture>
-                       </control>
-                       <control type="grouplist">
-                               <description>Top Left bar</description>
-                               <posx>0</posx>
-                               <posy>20</posy>
-                               <width>200</width>
-                               <height>64</height>
-                               <align>left</align>
-                               <itemgap>5</itemgap>
-                               <orientation>horizontal</orientation>
-                               <visible>Player.HasAudio</visible>
-                               <control type="button">
-                                       <description>Playlist Button</description>
-                                       <width>64</width>
-                                       <height>64</height>
-                                       <texturenofocus>icon_playlistmusic.png</texturenofocus>
-                                       <texturefocus>icon_playlistmusic.png</texturefocus>
-                                       <onclick>PreviousMenu</onclick>
-                                       <onclick>ActivateWindow(MusicPlaylist)</onclick>
-                               </control>
-                               <control type="image">
-                                       <width>2</width>
-                                       <height>62</height>
-                                       <texture>header-divide.png</texture>
-                               </control>
-                       </control>
-                       <control type="grouplist">
-                               <description>Top Right bar</description>
-                               <posx>1080r</posx>
-                               <posy>25</posy>
-                               <width>1000</width>
-                               <height>64</height>
-                               <align>right</align>
-                               <itemgap>5</itemgap>
-                               <orientation>horizontal</orientation>
-                               <control type="radiobutton">
-                                       <description>Show Audio Info Button</description>
-                                       <width>270</width>
-                                       <height>50</height>
-                                       <label>$LOCALIZE[544]</label>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <selected>Skin.HasSetting(SlideShowShowAudioInfo)</selected>
-                                       <texturenofocus border="5">floor_button.png</texturenofocus>
-                                       <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                                       <onclick>Skin.ToggleSetting(SlideShowShowAudioInfo)</onclick>
-                                       <visible>Player.HasAudio</visible>
-                               </control>
-                               <control type="button">
-                                       <description>Image Info Button</description>
-                                       <width>200</width>
-                                       <height>50</height>
-                                       <label>$LOCALIZE[31357]</label>
-                                       <font>font13</font>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="5">floor_button.png</texturenofocus>
-                                       <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                                       <onclick>ActivateWindow(PictureInfo)</onclick>
-                               </control>
-                               <control type="radiobutton">
-                                       <description>Fullscreen Button</description>
-                                       <posy>5</posy>
-                                       <width>230</width>
-                                       <height>50</height>
-                                       <radiowidth>36</radiowidth>
-                                       <radioheight>36</radioheight>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <texturenofocus border="5">floor_button.png</texturenofocus>
-                                       <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                                       <label>31008</label>
-                                       <onclick>back</onclick>
-                                       <textureradiofocus flipx="true" flipy="true">GoFullscreen2.png</textureradiofocus>
-                                       <textureradionofocus flipx="true" flipy="true">GoFullscreen2.png</textureradionofocus>
-                               </control>
-                       </control>
-                       <control type="group">
-                               <posx>65r</posx>
-                               <posy>20</posy>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>2</width>
-                                       <height>62</height>
-                                       <texture>header-divide.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Close Button</description>
-                                       <posx>5</posx>
-                                       <posy>0</posy>
-                                       <width>60</width>
-                                       <height>60</height>
-                                       <font>-</font>
-                                       <onclick>Skin.Reset(SlideShowShowOSD)</onclick>
-                                       <texturefocus>icon_close.png</texturefocus>
-                                       <texturenofocus>icon_close.png</texturenofocus>
-                               </control>
-                       </control>
-                       <control type="group">
-                               <posx>-10</posx>
-                               <posy>440</posy>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>90</width>
-                                       <height>90</height>
-                                       <colordiffuse>EEFFFFFF</colordiffuse>
-                                       <texture border="3">PlayerControls-Background.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Previous Image</description>
-                                       <posx>20</posx>
-                                       <posy>10</posy>
-                                       <width>55</width>
-                                       <height>70</height>
-                                       <hitrect x="15" y="5" w="80" h="80" />
-                                       <label>-</label>
-                                       <font>-</font>
-                                       <texturefocus flipx="true">icon_arrowkey.png</texturefocus>
-                                       <texturenofocus flipx="true">icon_arrowkey.png</texturenofocus>
-                                       <onclick>left</onclick>
-                               </control>
-                       </control>
-                       <control type="group">
-                               <posx>80r</posx>
-                               <posy>440</posy>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>90</width>
-                                       <height>90</height>
-                                       <colordiffuse>EEFFFFFF</colordiffuse>
-                                       <texture border="3">PlayerControls-Background.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Next Image</description>
-                                       <posx>15</posx>
-                                       <posy>10</posy>
-                                       <width>55</width>
-                                       <height>70</height>
-                                       <hitrect x="5" y="5" w="80" h="80" />
-                                       <label>-</label>
-                                       <font>-</font>
-                                       <texturefocus>icon_arrowkey.png</texturefocus>
-                                       <texturenofocus>icon_arrowkey.png</texturenofocus>
-                                       <onclick>right</onclick>
-                               </control>
-                       </control>
-               </control>
-               <!-- media infos -->
-               <control type="group">
-                       <posx>20</posx>
-                       <posy>160r</posy>
-                       <visible>Skin.HasSetting(SlideShowShowAudioInfo) + Player.HasMedia</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <description>cover image</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>150</width>
-                               <height>150</height>
-                               <info>MusicPlayer.Cover</info>
-                               <aspectratio>keep</aspectratio>
-                               <bordertexture border="8">ThumbShadow.png</bordertexture>
-                               <bordersize>8</bordersize>
-                       </control>
-                       <control type="label">
-                               <posx>160</posx>
-                               <posy>70</posy>
-                               <width>1000</width>
-                               <height>30</height>
-                               <font>font30_title</font>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[MusicPlayer.Title]</label>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <scroll>true</scroll>
-                       </control>
-                       <control type="label">
-                               <description>Album label</description>
-                               <posx>160</posx>
-                               <posy>105</posy>
-                               <width>1000</width>
-                               <height>25</height>
-                               <align>left</align>
-                               <font>font13</font>
-                               <label>$INFO[MusicPlayer.Album]</label>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/SmartPlaylistEditor.xml b/addons/skin.touched/4x3Hirez/SmartPlaylistEditor.xml
deleted file mode 100644 (file)
index 43fd5aa..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-<window id="136">
-       <defaultcontrol always="true">22</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="group">
-                       <visible>!Window.IsVisible(smartplaylistrule)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>1000</width>
-                               <height>60</height>
-                               <texture border="5">DialogHeader.png</texture>
-                       </control>
-                       <control type="label" id="2">
-                               <description>header label</description>
-                               <posx>20</posx>
-                               <posy>0</posy>
-                               <include>WindowTitleCommons</include>
-                               <width>910</width>
-                               <label>$LOCALIZE[21432]</label>
-                       </control>
-                       <control type="group">
-                               <posx>930</posx>
-                               <posy>0</posy>
-                               <include>DialogCloseButtonCommons</include>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>60</posy>
-                               <width>1000</width>
-                               <height>840</height>
-                               <texture border="5">DialogBack.png</texture>
-                       </control>
-                       <control type="spincontrolex" id="22">
-                               <description>Set Playlist type</description>
-                               <posx>20</posx>
-                               <posy>80</posy>
-                               <width>960</width>
-                               <height>50</height>
-                               <label>467</label>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus>MenuItemNF.png</texturefocus>
-                               <texturenofocus>MenuItemNF.png</texturenofocus>
-                               <onright>22</onright>
-                               <onleft>22</onleft>
-                               <onup>9001</onup>
-                               <ondown>12</ondown>
-                       </control>
-                       <control type="label">
-                               <description>Name Label</description>
-                               <posx>20</posx>
-                               <posy>140</posy>
-                               <width>960</width>
-                               <height>20</height>
-                               <label>21433</label>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>center</align>
-                       </control>
-                       <control type="edit" id="12">
-                               <description>Name Button</description>
-                               <posx>20</posx>
-                               <posy>180</posy>
-                               <width>960</width>
-                               <height>50</height>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <align>center</align>
-                               <texturefocus>MenuItemNF.png</texturefocus>
-                               <texturenofocus>MenuItemNF.png</texturenofocus>
-                               <label>-</label>
-                               <onup>22</onup>
-                               <onleft>12</onleft>
-                               <onright>12</onright>
-                               <ondown>10</ondown>
-                       </control>
-                       <control type="label">
-                               <description>rules label</description>
-                               <posx>20</posx>
-                               <posy>240</posy>
-                               <width>960</width>
-                               <height>20</height>
-                               <label>21434</label>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>center</align>
-                       </control>
-                       <control type="list" id="10">
-                               <posx>20</posx>
-                               <posy>280</posy>
-                               <width>740</width>
-                               <height>250</height>
-                               <onup>9001</onup>
-                               <onleft>9000</onleft>
-                               <onright>60</onright>
-                               <ondown>12</ondown>
-                               <pagecontrol>60</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="50">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>740</width>
-                                               <height>51</height>
-                                               <texture border="5">MenuItemNF.png</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>10</posx>
-                                               <posy>0</posy>
-                                               <width>720</width>
-                                               <height>50</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <label>$INFO[ListItem.Label]</label>
-                                       </control>
-                               </itemlayout>
-                               <focusedlayout height="50">
-                                       <control type="image">
-                                               <posx>0</posx>
-                                               <posy>0</posy>
-                                               <width>740</width>
-                                               <height>51</height>
-                                               <texture border="5">MenuItemNF.png</texture>
-                                       </control>
-                                       <control type="label">
-                                               <posx>10</posx>
-                                               <posy>0</posy>
-                                               <width>720</width>
-                                               <height>50</height>
-                                               <font>font13</font>
-                                               <align>left</align>
-                                               <aligny>center</aligny>
-                                               <textcolor>black</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <label>[COLOR=blue] > [/COLOR] $INFO[ListItem.Label]</label>
-                                       </control>
-                               </focusedlayout>
-                       </control>
-                       <control type="group" id="9000">
-                               <posx>780</posx>
-                               <posy>280</posy>
-                               <control type="button" id="13">
-                                       <description>Add Rule Button</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>200</width>
-                                       <height>50</height>
-                                       <label>15019</label>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <font>font12_title</font>
-                                       <texturefocus border="5">IconBack-focus.png</texturefocus>
-                                       <texturenofocus border="5">ListNF.png</texturenofocus>
-                                       <pulseonselect>false</pulseonselect>
-                                       <onup>18</onup>
-                                       <onleft>60</onleft>
-                                       <onright>10</onright>
-                                       <ondown>13</ondown>
-                               </control>
-                               <control type="button" id="14">
-                                       <description>Remove Rule Button</description>
-                                       <posx>0</posx>
-                                       <posy>55</posy>
-                                       <width>200</width>
-                                       <height>50</height>
-                                       <label>1210</label>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <font>font12_title</font>
-                                       <texturefocus border="5">IconBack-focus.png</texturefocus>
-                                       <texturenofocus border="5">ListNF.png</texturenofocus>
-                                       <pulseonselect>false</pulseonselect>
-                                       <onup>11</onup>
-                                       <onleft>60</onleft>
-                                       <onright>10</onright>
-                                       <ondown>14</ondown>
-                               </control>
-                               <control type="button" id="15">
-                                       <description>Edit Rule Button</description>
-                                       <posx>0</posx>
-                                       <posy>110</posy>
-                                       <width>200</width>
-                                       <height>50</height>
-                                       <label>21435</label>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <font>font12_title</font>
-                                       <texturefocus border="5">IconBack-focus.png</texturefocus>
-                                       <texturenofocus border="5">ListNF.png</texturenofocus>
-                                       <pulseonselect>false</pulseonselect>
-                                       <onup>13</onup>
-                                       <onleft>60</onleft>
-                                       <onright>10</onright>
-                                       <ondown>12</ondown>
-                               </control>
-                       </control>
-
-                       <control type="label">
-                               <description>Options Label</description>
-                               <posx>20</posx>
-                               <posy>550</posy>
-                               <width>960</width>
-                               <height>20</height>
-                               <label>31325</label>
-                               <font>font13_title</font>
-                               <textcolor>black</textcolor>
-                               <align>center</align>
-                       </control>
-                       <control type="spincontrolex" id="16">
-                               <posx>20</posx>
-                               <posy>590</posy>
-                               <width>960</width>
-                               <height>50</height>
-                               <label>21424</label>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus>MenuItemNF.png</texturefocus>
-                               <texturenofocus>MenuItemNF.png</texturenofocus>
-                               <onright>16</onright>
-                               <onleft>16</onleft>
-                               <onup>10</onup>
-                               <ondown>17</ondown>
-                       </control>
-
-                       <control type="spincontrolex" id="17">
-                               <posx>20</posx>
-                               <posy>645</posy>
-                               <width>960</width>
-                               <height>50</height>
-                               <label>21427</label>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus>MenuItemNF.png</texturefocus>
-                               <texturenofocus>MenuItemNF.png</texturenofocus>
-                               <onright>17</onright>
-                               <onleft>17</onleft>
-                               <onup>16</onup>
-                               <ondown>18</ondown>
-                       </control>
-
-                       <control type="spincontrolex" id="18">
-                               <posx>20</posx>
-                               <posy>700</posy>
-                               <width>750</width>
-                               <height>50</height>
-                               <label>21429</label>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus>MenuItemNF.png</texturefocus>
-                               <texturenofocus>MenuItemNF.png</texturenofocus>
-                               <onright>19</onright>
-                               <onleft>19</onleft>
-                               <onup>17</onup>
-                               <ondown>9001</ondown>
-                       </control>
-
-                       <control type="togglebutton" id="19">
-                               <posx>780</posx>
-                               <posy>700</posy>
-                               <width>200</width>
-                               <height>50</height>
-                               <font>font12_title</font>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <texturefocus border="5">IconBack-focus.png</texturefocus>
-                               <texturenofocus border="5">ListNF.png</texturenofocus>
-                               <alttexturefocus border="5">IconBack-focus.png</alttexturefocus>
-                               <alttexturenofocus border="5">ListNF.png</alttexturenofocus>
-                               <label>21431</label>
-                               <altlabel>21430</altlabel>
-                               <onright>18</onright>
-                               <onleft>18</onleft>
-                               <onup>17</onup>
-                               <ondown>9001</ondown>
-                       </control>
-                       <control type="grouplist" id="9002">
-                               <posx>20</posx>
-                               <posy>830</posy>
-                               <width>960</width>
-                               <height>50</height>
-                               <itemgap>20</itemgap>
-                               <align>center</align>
-                               <orientation>horizontal</orientation>
-                               <onleft>9000</onleft>
-                               <onright>9000</onright>
-                               <onup>50</onup>
-                               <ondown>49</ondown>
-                               <control type="button" id="20">
-                                       <description>OK Button</description>
-                                       <width>200</width>
-                                       <include>ButtonInfoDialogsCommonValues</include>
-                                       <label>186</label>
-                               </control>
-                               <control type="button" id="21">
-                                       <description>Cancel Button</description>
-                                       <width>200</width>
-                                       <include>ButtonInfoDialogsCommonValues</include>
-                                       <label>222</label>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/SmartPlaylistRule.xml b/addons/skin.touched/4x3Hirez/SmartPlaylistRule.xml
deleted file mode 100644 (file)
index f1de6f1..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-<window id="137">
-       <defaultcontrol always="true">9001</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>260</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$LOCALIZE[21421]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>300</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label">
-                       <description>Rule match label</description>
-                       <posx>20</posx>
-                       <posy>70</posy>
-                       <width>960</width>
-                       <height>20</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <font>font13_title</font>
-                       <textcolor>black</textcolor>
-                       <label>21422</label>
-               </control>
-               <control type="group" id="9001">
-                       <control type="spincontrolex" id="15">
-                               <description>Rule Field</description>
-                               <posx>20</posx>
-                               <posy>110</posy>
-                               <width>450</width>
-                               <height>50</height>
-                               <font>-</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="5">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                               <onright>16</onright>
-                               <onleft>16</onleft>
-                               <onup>9000</onup>
-                               <ondown>17</ondown>
-                       </control>
-                       <control type="label">
-                               <description>Rule Field label</description>
-                               <posx>25</posx>
-                               <posy>110</posy>
-                               <width>300</width>
-                               <height>50</height>
-                               <font>font13</font>
-                               <label>$INFO[Control.GetLabel(15)]</label>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <textcolor>black</textcolor>
-                       </control>
-                       <control type="spincontrolex" id="16">
-                               <description>Rule operator</description>
-                               <posx>510</posx>
-                               <posy>110</posy>
-                               <width>450</width>
-                               <height>50</height>
-                               <font>-</font>
-                               <texturefocus border="5">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                               <onright>15</onright>
-                               <onleft>15</onleft>
-                               <onup>9000</onup>
-                               <ondown>17</ondown>
-                       </control>
-                       <control type="label">
-                               <description>Rule Field label</description>
-                               <posx>515</posx>
-                               <posy>110</posy>
-                               <width>300</width>
-                               <height>50</height>
-                               <font>font13</font>
-                               <label>$INFO[Control.GetLabel(16)]</label>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <textcolor>black</textcolor>
-                       </control>
-               </control>
-               <control type="button" id="17">
-                       <description>Value Button</description>
-                       <posx>20</posx>
-                       <posy>170</posy>
-                       <width>740</width>
-                       <height>50</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <aligny>center</aligny>
-                       <texturefocus border="5">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                       <label>-</label>
-                       <onup>9001</onup>
-                       <onleft>20</onleft>
-                       <onright>20</onright>
-                       <ondown>9000</ondown>
-               </control>
-               <control type="button" id="20">
-                       <description>Browse Button</description>
-                       <posx>760</posx>
-                       <posy>170</posy>
-                       <width>200</width>
-                       <height>50</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <texturefocus border="5">IconBack-focus.png</texturefocus>
-                       <texturenofocus border="5">ListNF.png</texturenofocus>
-                       <label>1024</label>
-                       <font>font12_title</font>
-                       <onup>9001</onup>
-                       <onleft>17</onleft>
-                       <onright>17</onright>
-                       <ondown>9000</ondown>
-               </control>
-               <control type="grouplist" id="9002">
-                       <posx>20</posx>
-                       <posy>290</posy>
-                       <width>960</width>
-                       <height>50</height>
-                       <itemgap>20</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>50</onup>
-                       <ondown>49</ondown>
-                       <control type="button" id="18">
-                               <description>OK Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>186</label>
-                       </control>
-                       <control type="button" id="19">
-                               <description>Cancel Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>222</label>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/Startup.xml b/addons/skin.touched/4x3Hirez/Startup.xml
deleted file mode 100644 (file)
index 817031e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<window>
-       <defaultcontrol always="true">10</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <controls>
-               <include>CommonBackground</include>
-               <include>CommonNowPlaying</include>
-               <control type="button" id="10">
-                       <description>trigger</description>
-                       <onfocus>ReplaceWindow(Home)</onfocus>
-                       <texturenofocus>-</texturenofocus>
-                       <texturefocus>-</texturefocus>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/VideoFullScreen.xml b/addons/skin.touched/4x3Hirez/VideoFullScreen.xml
deleted file mode 100644 (file)
index ead0fba..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<window id="2005">
- <defaultcontrol>-</defaultcontrol>
-       <controls>
-               <!-- codec info -->
-               <control type="group" id="0">
-                       <posx>0</posx>
-                       <posy>20</posy>
-                       <animation effect="fade" time="200">VisibleChange</animation>
-                       <control type="image">
-                               <description>media info background image</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>1280</width>
-                               <height>140</height>
-                               <colordiffuse>AAFFFFFF</colordiffuse>
-                               <texture>black-back.png</texture>
-                       </control>
-                       <control type="label" id="10">
-                               <description>row 1 label</description>
-                               <posx>50</posx>
-                               <posy>10</posy>
-                               <width>1180</width>
-                               <height>30</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font12</font>
-                               <label>-</label>
-                       </control>
-                       <control type="label" id="11">
-                               <description>row 2 label</description>
-                               <posx>50</posx>
-                               <posy>40</posy>
-                               <width>1180</width>
-                               <height>30</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font12</font>
-                               <label>-</label>
-                       </control>
-                       <control type="label" id="12">
-                               <description>row 3 label</description>
-                               <posx>50</posx>
-                               <posy>85</posy>
-                               <width>1180</width>
-                               <height>30</height>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <font>font12</font>
-                               <label>-</label>
-                       </control>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/VideoOSD.xml b/addons/skin.touched/4x3Hirez/VideoOSD.xml
deleted file mode 100644 (file)
index 40dda23..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<window type="dialog" id="2901">
-       <defaultcontrol></defaultcontrol>
-       <include>dialogeffect</include>
-       <onunload>Skin.Reset(PlayerControlsSubMenuVisible)</onunload>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <include>PlayerControlCommons</include>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/VideoOSDBookmarks.xml b/addons/skin.touched/4x3Hirez/VideoOSDBookmarks.xml
deleted file mode 100644 (file)
index be1a0ab..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-<window id="125">
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>240</posx>
-               <posy>80</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                       <posx>-30</posx>
-                       <posy>-30</posy>
-                       <width>860</width>
-                       <height>860</height>
-                       <texture border="30">DialogShadow.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>800</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>800</width>
-                       <height>740</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>700</width>
-                       <label>$LOCALIZE[298]</label>
-               </control>
-               <control type="group">
-                       <posx>730</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="panel" id="11">
-                       <posx>20</posx>
-                       <posy>65</posy>
-                       <width>760</width>
-                       <height>620</height>
-                       <onleft>2</onleft>
-                       <onright>3</onright>
-                       <ondown>2</ondown>
-                       <onup>2</onup>
-                       <scrolltime>200</scrolltime>
-                       <viewtype label="536">icon</viewtype>
-                       <pagecontrol>-</pagecontrol>
-                       <itemlayout height="250" width="380">
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>360</width>
-                                       <height>220</height>
-                                       <aspectratio>scale</aspectratio>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="8">ThumbShadow.png</bordertexture>
-                                       <bordersize>8</bordersize>
-                               </control>
-                               <control type="label">
-                                       <posx>190</posx>
-                                       <posy>220</posy>
-                                       <width>260</width>
-                                       <height>20</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="250" width="380">
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>0</posy>
-                                       <width>360</width>
-                                       <height>220</height>
-                                       <aspectratio>scale</aspectratio>
-                                       <texture>$INFO[ListItem.Icon]</texture>
-                                       <bordertexture border="8">ThumbShadow.png</bordertexture>
-                                       <bordersize>8</bordersize>
-                               </control>
-                               <control type="label">
-                                       <posx>190</posx>
-                                       <posy>220</posy>
-                                       <width>260</width>
-                                       <height>20</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <description>Page Count Label</description>
-                       <posx>780</posx>
-                       <posy>700</posy>
-                       <width>500</width>
-                       <height>20</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <scroll>false</scroll>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <label>$INFO[Container(11).NumItems,(,) $LOCALIZE[31025]]$INFO[Container(11).CurrentPage, - $LOCALIZE[31024] (]$INFO[Container(11).NumPages,/,)]</label>
-               </control>
-               <control type="grouplist" id="9000">
-                       <posx>20</posx>
-                       <posy>740</posy>
-                       <width>760</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9000</onleft>
-                       <onright>9000</onright>
-                       <onup>11</onup>
-                       <ondown>11</ondown>
-                       <control type="button" id="2">
-                               <description>Create Bookmark button</description>
-                               <label>294</label>
-                               <width>250</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                       </control>
-                       <control type="button" id="3">
-                               <description>Clear Bookmark button</description>
-                               <label>296</label>
-                               <width>250</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                       </control>
-                       <control type="button" id="4">
-                               <description>Clear Bookmark button</description>
-                               <label>20406</label>
-                               <width>250</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <visible>videoplayer.content(episodes)</visible>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/VideoOSDSettings.xml b/addons/skin.touched/4x3Hirez/VideoOSDSettings.xml
deleted file mode 100644 (file)
index e04ee0f..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<window id="123">
-       <defaultcontrol>5</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>240</posx>
-               <posy>80</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                       <posx>-30</posx>
-                       <posy>-30</posy>
-                       <width>860</width>
-                       <height>860</height>
-                       <texture border="30">DialogShadow.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>800</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>800</width>
-                       <height>740</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>700</width>
-                       <label>$LOCALIZE[3] - $LOCALIZE[5]</label>
-                       <visible>Window.IsVisible(123)</visible>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>700</width>
-                       <label>$LOCALIZE[292] - $LOCALIZE[5]</label>
-                       <visible>Window.IsVisible(124)</visible>
-               </control>
-               <control type="group">
-                       <posx>730</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="label" id="3">
-                       <description>No Settings Label</description>
-                       <posx>20</posx>
-                       <posy>180</posy>
-                       <width>760</width>
-                       <align>center</align>
-                       <label>13390</label>
-                       <font>font13_title</font>
-               </control>
-               <control type="grouplist" id="5">
-                       <description>control area</description>
-                       <posx>20</posx>
-                       <posy>60</posy>
-                       <width>760</width>
-                       <height>650</height>
-                       <itemgap>-1</itemgap>
-                       <pagecontrol>-</pagecontrol>
-                       <onleft>5</onleft>
-                       <onright>5</onright>
-                       <onup>5</onup>
-                       <ondown>5</ondown>
-               </control>
-               <control type="sliderex" id="10">
-                       <description>Default Slider</description>
-                       <height>55</height>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="button" id="7">
-                       <description>Default Button</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="radiobutton" id="8">
-                       <description>Default RadioButton</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-               </control>
-               <control type="spincontrolex" id="9">
-                       <description>Default SpinControlex</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <height>55</height>
-                       <font>font13</font>
-                       <textcolor>black</textcolor>
-                       <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                       <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                       <aligny>center</aligny>
-                       <reverse>yes</reverse>
-               </control>
-               <control type="image" id="11">
-                       <description>separator image</description>
-                       <height>5</height>
-                       <texture>separator.png</texture>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/VideoOverlay.xml b/addons/skin.touched/4x3Hirez/VideoOverlay.xml
deleted file mode 100644 (file)
index 28b36e8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<window id="2904">
-       <defaultcontrol>-</defaultcontrol>
-       <controls>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/ViewsAddonBrowser.xml b/addons/skin.touched/4x3Hirez/ViewsAddonBrowser.xml
deleted file mode 100644 (file)
index a3243d9..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<includes>
-       <include name="CommonRootViewAddons">
-               <control type="panel" id="50">
-                       <posx>50</posx>
-                       <posy>120</posy>
-                       <width>1180</width>
-                       <height>720</height>
-                       <onleft>2</onleft>
-                       <onright>60</onright>
-                       <onup>50</onup>
-                       <ondown>50</ondown>
-                       <viewtype label="535">list</viewtype>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="60" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>1180</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>5</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>75</posx>
-                                       <posy>0</posy>
-                                       <width>1000</width>
-                                       <height>60</height>
-                                       <font>font16</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1130</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Property(Addon.Status),, - ]$INFO[ListItem.Property(Addon.Version)]</label>
-                                       <visible>!stringcompare(ListItem.Property(Addon.Status),$LOCALIZE[305])</visible>
-                               </control>
-                               <control type="label">
-                                       <posx>1130</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Property(Addon.Version)]</label>
-                                       <visible>stringcompare(ListItem.Property(Addon.Status),$LOCALIZE[305])</visible>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>1030</posx>
-                                       <posy>30</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="light/left_rating/rating0.png">$INFO[ListItem.Property(Addon.StarRating),light/left_rating/]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1140</posx>
-                                       <posy>15</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>light/OverlayWatched.png</texture>
-                                       <visible>stringcompare(ListItem.Label2,$LOCALIZE[305])</visible>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="60" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>1180</width>
-                                       <height>60</height>
-                                       <texture border="5">ListFO.png</texture>
-                                       <include>VisibleFadeEffect</include>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>5</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>75</posx>
-                                       <posy>0</posy>
-                                       <width>1000</width>
-                                       <height>60</height>
-                                       <font>font16</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1130</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Property(Addon.Status),, - ]$INFO[ListItem.Property(Addon.Version)]</label>
-                                       <visible>!stringcompare(ListItem.Property(Addon.Status),$LOCALIZE[305])</visible>
-                               </control>
-                               <control type="label">
-                                       <posx>1130</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Property(Addon.Version)]</label>
-                                       <visible>stringcompare(ListItem.Property(Addon.Status),$LOCALIZE[305])</visible>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>1030</posx>
-                                       <posy>30</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.Property(Addon.StarRating),light/left_rating/]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1140</posx>
-                                       <posy>15</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>dark/OverlayWatched.png</texture>
-                                       <visible>stringcompare(ListItem.Label2,$LOCALIZE[305])</visible>
-                               </control>
-                       </focusedlayout>
-               </control>
-       </include>
-</includes>
diff --git a/addons/skin.touched/4x3Hirez/ViewsCommon.xml b/addons/skin.touched/4x3Hirez/ViewsCommon.xml
deleted file mode 100644 (file)
index 6b2c044..0000000
+++ /dev/null
@@ -1,931 +0,0 @@
-<includes>
-       <include name="CommonRootView">
-               <control type="panel" id="50">
-                       <posx>50</posx>
-                       <posy>120</posy>
-                       <width>1180</width>
-                       <height>720</height>
-                       <onleft>2</onleft>
-                       <onright>60</onright>
-                       <onup>50</onup>
-                       <ondown>50</ondown>
-                       <viewtype label="535">list</viewtype>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="60" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>1180</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>5</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>75</posx>
-                                       <posy>0</posy>
-                                       <width>1000</width>
-                                       <height>60</height>
-                                       <font>font16</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1160</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>1065</posx>
-                                       <posy>30</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="light/left_rating/rating0.png">$INFO[ListItem.StarRating,light/left_rating/]</texture>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="60" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>1180</width>
-                                       <height>60</height>
-                                       <texture border="5">ListFO.png</texture>
-                                       <include>VisibleFadeEffect</include>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>5</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>75</posx>
-                                       <posy>0</posy>
-                                       <width>1000</width>
-                                       <height>60</height>
-                                       <font>font16</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1160</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>1065</posx>
-                                       <posy>30</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.StarRating,dark/left_rating/]</texture>
-                               </control>
-                       </focusedlayout>
-               </control>
-       </include>
-       <include name="CommonRootViewVideo">
-               <control type="panel" id="50">
-                       <posx>50</posx>
-                       <posy>120</posy>
-                       <width>1180</width>
-                       <height>720</height>
-                       <onleft>2</onleft>
-                       <onright>60</onright>
-                       <onup>50</onup>
-                       <ondown>50</ondown>
-                       <viewtype label="535">list</viewtype>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="60" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>1180</width>
-                                       <height>60</height>
-                                       <texture border="5">ListNF.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>5</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>75</posx>
-                                       <posy>0</posy>
-                                       <width>1000</width>
-                                       <height>60</height>
-                                       <font>font16</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1130</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                                       <visible>![Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>1030</posx>
-                                       <posy>30</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="light/left_rating/rating0.png">$INFO[ListItem.StarRating,light/left_rating/]</texture>
-                                       <visible>![Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="label">
-                                       <posx>1070</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                                       <visible>[Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>970</posx>
-                                       <posy>30</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="light/left_rating/rating0.png">$INFO[ListItem.StarRating,light/left_rating/]</texture>
-                                       <visible>[Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1080</posx>
-                                       <posy>10</posy>
-                                       <width>60</width>
-                                       <height>40</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                                       <visible>[Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1142</posx>
-                                       <posy>17</posy>
-                                       <width>25</width>
-                                       <height>25</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>OverlayWatching.png</texture>
-                                       <visible>ListItem.IsResumable</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1140</posx>
-                                       <posy>15</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.Overlay,light/]</texture>
-                                       <visible>!ListItem.IsResumable</visible>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="60" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>1180</width>
-                                       <height>60</height>
-                                       <texture border="5">ListFO.png</texture>
-                                       <include>VisibleFadeEffect</include>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>5</posy>
-                                       <width>50</width>
-                                       <height>50</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>75</posx>
-                                       <posy>0</posy>
-                                       <width>1000</width>
-                                       <height>60</height>
-                                       <font>font16</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1130</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                                       <visible>![Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>1030</posx>
-                                       <posy>30</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.StarRating,dark/left_rating/]</texture>
-                                       <visible>![Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="label">
-                                       <posx>1070</posx>
-                                       <posy>2</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                                       <visible>[Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>970</posx>
-                                       <posy>30</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.StarRating,dark/left_rating/]</texture>
-                                       <visible>[Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1080</posx>
-                                       <posy>10</posy>
-                                       <width>60</width>
-                                       <height>40</height>
-                                       <texture>$INFO[ListItem.VideoResolution,dark/,.png]</texture>
-                                       <visible>[Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1142</posx>
-                                       <posy>17</posy>
-                                       <width>25</width>
-                                       <height>25</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>OverlayWatching.png</texture>
-                                       <visible>ListItem.IsResumable</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1140</posx>
-                                       <posy>15</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.Overlay,dark/]</texture>
-                                       <visible>!ListItem.IsResumable</visible>
-                               </control>
-                       </focusedlayout>
-               </control>
-       </include>
-       <include name="ThumbnailView">
-               <control type="panel" id="500">
-                       <posx>50</posx>
-                       <posy>120</posy>
-                       <width>1180</width>
-                       <height>720</height>
-                       <onleft>2</onleft>
-                       <onright>60</onright>
-                       <onup>500</onup>
-                       <ondown>500</ondown>
-                       <viewtype label="21371">wide</viewtype>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <preloaditems>2</preloaditems>
-                       <itemlayout condition="!Container.Content(Movies) + !Container.Content(Seasons) + !Container.Content(Episodes)" height="240" width="236">
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>226</width>
-                                       <height>230</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>216</width>
-                                       <height>185</height>
-                                       <texture background="true">$INFO[Listitem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>119</posx>
-                                       <posy>200</posy>
-                                       <width>210</width>
-                                       <height>25</height>
-                                       <font>font12</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                               <control type="image">
-                                       <posx>184</posx>
-                                       <posy>11</posy>
-                                       <width>40</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                                       <visible>Container.Content(MusicVideos)</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>195</posx>
-                                       <posy>170</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Overlay]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>226</width>
-                                       <height>230</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout condition="!Container.Content(Movies) + !Container.Content(Seasons) + !Container.Content(Episodes)" height="240" width="236">
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>226</width>
-                                       <height>230</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>216</width>
-                                       <height>185</height>
-                                       <texture background="true">$INFO[Listitem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>119</posx>
-                                       <posy>200</posy>
-                                       <width>210</width>
-                                       <height>25</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                               <control type="image">
-                                       <posx>184</posx>
-                                       <posy>11</posy>
-                                       <width>40</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                                       <visible>Container.Content(MusicVideos)</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>195</posx>
-                                       <posy>170</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Overlay]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>226</width>
-                                       <height>230</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                       </focusedlayout>
-                       <itemlayout condition="Container.Content(Movies) | Container.Content(Seasons)" height="360" width="236">
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>226</width>
-                                       <height>350</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>15</posx>
-                                       <posy>15</posy>
-                                       <width>206</width>
-                                       <height>300</height>
-                                       <texture background="true">$INFO[Listitem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>119</posx>
-                                       <posy>320</posy>
-                                       <width>210</width>
-                                       <height>25</height>
-                                       <font>font12</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                               <control type="image">
-                                       <posx>184</posx>
-                                       <posy>11</posy>
-                                       <width>40</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>195</posx>
-                                       <posy>280</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Overlay]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>245</width>
-                                       <height>350</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout condition="Container.Content(Movies) | Container.Content(Seasons)" height="360" width="236">
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>226</width>
-                                       <height>350</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>15</posx>
-                                       <posy>15</posy>
-                                       <width>206</width>
-                                       <height>300</height>
-                                       <texture background="true">$INFO[Listitem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>119</posx>
-                                       <posy>320</posy>
-                                       <width>210</width>
-                                       <height>25</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                               <control type="image">
-                                       <posx>184</posx>
-                                       <posy>11</posy>
-                                       <width>40</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>195</posx>
-                                       <posy>280</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Overlay]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>245</width>
-                                       <height>350</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                       </focusedlayout>
-                       <itemlayout condition="Container.Content(Episodes)" height="240" width="295">
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>285</width>
-                                       <height>230</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>275</width>
-                                       <height>185</height>
-                                       <aspectratio>scale</aspectratio>
-                                       <texture background="true">$INFO[Listitem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>148</posx>
-                                       <posy>200</posy>
-                                       <width>275</width>
-                                       <height>25</height>
-                                       <font>font12</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                               <control type="image">
-                                       <posx>245</posx>
-                                       <posy>10</posy>
-                                       <width>40</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>250</posx>
-                                       <posy>170</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Overlay]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>226</width>
-                                       <height>230</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout condition="Container.Content(Episodes)" height="240" width="295">
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>285</width>
-                                       <height>230</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>275</width>
-                                       <height>185</height>
-                                       <aspectratio>scale</aspectratio>
-                                       <texture background="true">$INFO[Listitem.Icon]</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>148</posx>
-                                       <posy>200</posy>
-                                       <width>275</width>
-                                       <height>25</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <info>ListItem.Label</info>
-                               </control>
-                               <control type="image">
-                                       <posx>245</posx>
-                                       <posy>10</posy>
-                                       <width>40</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>250</posx>
-                                       <posy>170</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Overlay]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>5</posy>
-                                       <width>226</width>
-                                       <height>230</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                       </focusedlayout>
-               </control>
-       </include>
-       <include name="WideIconView">
-               <control type="panel" id="502">
-                       <visible>!Container.Content(Movies) + !Container.Content(Episodes) + !Container.Content(Seasons) + !Container.Content(MusicVideos)</visible>
-                       <posx>40</posx>
-                       <posy>145</posy>
-                       <width>1200</width>
-                       <height>640</height>
-                       <onleft>502</onleft>
-                       <onright>502</onright>
-                       <onup>502</onup>
-                       <ondown>502</ondown>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>300</scrolltime>
-                       <preloaditems>2</preloaditems>
-                       <viewtype label="539">wide</viewtype>
-                       <itemlayout height="160" width="600">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>590</width>
-                                       <height>155</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>15</posy>
-                                       <width>570</width>
-                                       <height>110</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>200</width>
-                                       <height>155</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>10</posx>
-                                       <posy>130</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <font>font13</font>
-                                       <textcolor>grey2</textcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>580</posx>
-                                       <posy>130</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <font>font12</font>
-                                       <textcolor>grey2</textcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="160" width="600">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>590</width>
-                                       <height>155</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>15</posy>
-                                       <width>570</width>
-                                       <height>110</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>200</width>
-                                       <height>155</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>10</posx>
-                                       <posy>130</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>580</posx>
-                                       <posy>130</posy>
-                                       <width>380</width>
-                                       <height>20</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                       </focusedlayout>
-               </control>
-       </include>
-       <include name="DVDPostersView">
-               <control type="fixedlist" id="501">
-                       <visible>!Container.Content(LiveTV)</visible>
-                       <posx>40</posx>
-                       <posy>260</posy>
-                       <width>1200</width>
-                       <height>390</height>
-                       <onleft>57</onleft>
-                       <onright>57</onright>
-                       <onup>2</onup>
-                       <ondown>60</ondown>
-                       <viewtype label="31028">bigwrap</viewtype>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <focusposition>2</focusposition>
-                       <orientation>horizontal</orientation>
-                       <preloaditems>4</preloaditems>
-                       <itemlayout height="350" width="240">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>240</width>
-                                       <height>350</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>220</width>
-                                       <height>330</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                                       <bordertexture>ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>240</width>
-                                       <height>350</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>192</posx>
-                                       <posy>6</posy>
-                                       <width>40</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                                       <visible>[Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="310" width="240">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>240</width>
-                                       <height>350</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture border="5">SubBack.png</texture>
-                                       <animation reversible="false" effect="zoom" center="auto" start="100" end="120" time="200">focus</animation>
-                                       <animation reversible="false" effect="zoom" center="auto" end="100" start="120" time="200">unfocus</animation>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>10</posy>
-                                       <width>220</width>
-                                       <height>330</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                                       <bordertexture>ThumbBorderGrey.png</bordertexture>
-                                       <bordersize>2</bordersize>
-                                       <animation reversible="false" effect="zoom" center="auto" start="100" end="120" time="200">focus</animation>
-                                       <animation reversible="false" effect="zoom" center="auto" end="100" start="120" time="200">unfocus</animation>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>240</width>
-                                       <height>350</height>
-                                       <texture>GlassOverlay.png</texture>
-                                       <animation reversible="false" effect="zoom" center="auto" start="100" end="120" time="200">focus</animation>
-                                       <animation reversible="false" effect="zoom" center="auto" end="100" start="120" time="200">unfocus</animation>
-                               </control>
-                               <control type="image">
-                                       <posx>192</posx>
-                                       <posy>6</posy>
-                                       <width>40</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                                       <visible>[Container.Content(Movies) | Container.Content(Episodes) | Container.Content(MusicVideos)]</visible>
-                                       <animation reversible="false" effect="slide" start="0,0" end="20,-30" time="200">focus</animation>
-                                       <animation reversible="false" effect="slide" end="0,0" start="20,-30" time="200">unfocus</animation>
-                               </control>
-                               <control type="image">
-                                       <posx>185</posx>
-                                       <posy>310</posy>
-                                       <width>35</width>
-                                       <height>35</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>$INFO[ListItem.Overlay]</texture>
-                                       <animation type="focus">
-                                               <effect type="fade" start="0" end="100" time="200" />
-                                               <effect type="slide" start="0,0" end="40,40" time="200" />
-                                       </animation>
-                                       <animation type="unfocus">
-                                               <effect type="fade" start="100" end="0" time="200" />
-                                               <effect type="slide" end="0,0" start="40,40" time="200" />
-                                       </animation>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="group">
-                       <visible>Control.IsVisible(501)</visible>
-                       <posx>0</posx>
-                       <posy>410</posy>
-                       <control type="button">
-                               <description>left Arrow</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>40</width>
-                               <height>60</height>
-                               <texturefocus>arrow-big-left.png</texturefocus>
-                               <texturenofocus>arrow-big-left.png</texturenofocus>
-                               <onclick>FirstPage</onclick>
-                               <visible>Container.HasPrevious</visible>
-                               <include>VisibleFadeEffect</include>
-                       </control>
-                       <control type="button">
-                               <description>right Arrow</description>
-                               <posx>40r</posx>
-                               <posy>0</posy>
-                               <width>40</width>
-                               <height>60</height>
-                               <texturefocus>arrow-big-right.png</texturefocus>
-                               <texturenofocus>arrow-big-right.png</texturenofocus>
-                               <onclick>LastPage</onclick>
-                               <visible>Container.HasNext</visible>
-                               <include>VisibleFadeEffect</include>
-                       </control>
-               </control>
-               <control type="label">
-                       <visible>Control.IsVisible(501)</visible>
-                       <posx>30</posx>
-                       <posy>160</posy>
-                       <width>1220</width>
-                       <height>30</height>
-                       <font>font28_title</font>
-                       <textcolor>white</textcolor>
-                       <scroll>true</scroll>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <label>$INFO[ListItem.Label]</label>
-               </control>
-               <control type="grouplist">
-                       <description>Media Codec Flagging Images</description>
-                       <visible>Control.IsVisible(501)</visible>
-                       <posx>0</posx>
-                       <posy>680</posy>
-                       <width>1280</width>
-                       <height>45</height>
-                       <align>center</align>
-                       <itemgap>2</itemgap>
-                       <orientation>horizontal</orientation>
-                       <include>VisibleFadeEffect</include>
-                       <include>VideoCodecFlaggingConditions</include>
-                       <include>AudioCodecFlaggingConditions</include>
-                       <include>AudioChannelsFlaggingConditions</include>
-                       <include>AspectCodecFlaggingConditions</include>
-                       <include>VideoTypeHackFlaggingConditions</include>
-               </control>
-       </include>
-</includes>
diff --git a/addons/skin.touched/4x3Hirez/ViewsMetaData.xml b/addons/skin.touched/4x3Hirez/ViewsMetaData.xml
deleted file mode 100644 (file)
index f81dc7c..0000000
+++ /dev/null
@@ -1,557 +0,0 @@
-<includes>
-       <include name="RootViewMetaDataVideo">
-               <control type="panel" id="550">
-                       <visible>Container.Content(Movies) | Container.Content(Episodes)</visible>
-                       <posx>50</posx>
-                       <posy>120</posy>
-                       <width>1180</width>
-                       <height>720</height>
-                       <onleft>2</onleft>
-                       <onright>60</onright>
-                       <onup>550</onup>
-                       <ondown>550</ondown>
-                       <viewtype label="31030">list</viewtype>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout condition="Container.Content(Movies)" height="180" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>1180</width>
-                                       <height>170</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>10</posy>
-                                       <width>110</width>
-                                       <height>160</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>210</width>
-                                       <height>170</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>130</posx>
-                                       <posy>15</posy>
-                                       <width>940</width>
-                                       <height>25</height>
-                                       <font>font13_title</font>
-                                       <textcolor>white</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>130</posx>
-                                       <posy>45</posy>
-                                       <width>940</width>
-                                       <height>20</height>
-                                       <font>font13</font>
-                                       <textcolor>white</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Genre]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1070</posx>
-                                       <posy>7</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>970</posx>
-                                       <posy>35</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="light/left_rating/rating0.png">$INFO[ListItem.StarRating,light/left_rating/]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1080</posx>
-                                       <posy>15</posy>
-                                       <width>60</width>
-                                       <height>40</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1142</posx>
-                                       <posy>22</posy>
-                                       <width>25</width>
-                                       <height>25</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>OverlayWatching.png</texture>
-                                       <visible>ListItem.IsResumable</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1140</posx>
-                                       <posy>20</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.Overlay,light/]</texture>
-                                       <visible>!ListItem.IsResumable</visible>
-                               </control>
-                               <control type="textbox">
-                                       <posx>130</posx>
-                                       <posy>65</posy>
-                                       <width>1030</width>
-                                       <height>95</height>
-                                       <font>font12</font>
-                                       <align>justify</align>
-                                       <textcolor>grey2</textcolor>
-                                       <label>$INFO[ListItem.Plot]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout condition="Container.Content(Movies)" height="180" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>1180</width>
-                                       <height>170</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>10</posy>
-                                       <width>110</width>
-                                       <height>160</height>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>210</width>
-                                       <height>170</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>130</posx>
-                                       <posy>15</posy>
-                                       <width>940</width>
-                                       <height>25</height>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>130</posx>
-                                       <posy>45</posy>
-                                       <width>940</width>
-                                       <height>20</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Genre]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1070</posx>
-                                       <posy>7</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>970</posx>
-                                       <posy>35</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.StarRating,dark/left_rating/]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1080</posx>
-                                       <posy>15</posy>
-                                       <width>60</width>
-                                       <height>40</height>
-                                       <texture>$INFO[ListItem.VideoResolution,dark/,.png]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1142</posx>
-                                       <posy>22</posy>
-                                       <width>25</width>
-                                       <height>25</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>OverlayWatching.png</texture>
-                                       <visible>ListItem.IsResumable</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1140</posx>
-                                       <posy>20</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.Overlay,dark/]</texture>
-                                       <visible>ListItem.IsResumable</visible>
-                               </control>
-                               <control type="textbox">
-                                       <posx>130</posx>
-                                       <posy>65</posy>
-                                       <width>1030</width>
-                                       <height>95</height>
-                                       <font>font12</font>
-                                       <align>justify</align>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Plot]</label>
-                               </control>
-                       </focusedlayout>
-                       <itemlayout condition="Container.Content(Episodes)" height="180" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>1180</width>
-                                       <height>170</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>10</posy>
-                                       <width>230</width>
-                                       <height>160</height>
-                                       <aspectratio>scale</aspectratio>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>200</width>
-                                       <height>170</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>250</posx>
-                                       <posy>15</posy>
-                                       <width>820</width>
-                                       <height>25</height>
-                                       <font>font13_title</font>
-                                       <textcolor>white</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>250</posx>
-                                       <posy>45</posy>
-                                       <width>820</width>
-                                       <height>20</height>
-                                       <font>font13</font>
-                                       <textcolor>white</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Premiered,$LOCALIZE[20416] : ]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1070</posx>
-                                       <posy>7</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>grey2</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>970</posx>
-                                       <posy>35</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="light/left_rating/rating0.png">$INFO[ListItem.StarRating,light/left_rating/]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1080</posx>
-                                       <posy>15</posy>
-                                       <width>60</width>
-                                       <height>40</height>
-                                       <texture>$INFO[ListItem.VideoResolution,light/,.png]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1142</posx>
-                                       <posy>22</posy>
-                                       <width>25</width>
-                                       <height>25</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>OverlayWatching.png</texture>
-                                       <visible>ListItem.IsResumable</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1140</posx>
-                                       <posy>20</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.Overlay,light/]</texture>
-                                       <visible>ListItem.IsResumable</visible>
-                               </control>
-                               <control type="textbox">
-                                       <posx>250</posx>
-                                       <posy>70</posy>
-                                       <width>910</width>
-                                       <height>83</height>
-                                       <font>font12</font>
-                                       <align>justify</align>
-                                       <textcolor>grey2</textcolor>
-                                       <label>$INFO[ListItem.Plot]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout condition="Container.Content(Episodes)" height="165" width="1180">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>1180</width>
-                                       <height>170</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>5</posx>
-                                       <posy>10</posy>
-                                       <width>230</width>
-                                       <height>160</height>
-                                       <aspectratio>scale</aspectratio>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>200</width>
-                                       <height>170</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>250</posx>
-                                       <posy>15</posy>
-                                       <width>820</width>
-                                       <height>25</height>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>250</posx>
-                                       <posy>45</posy>
-                                       <width>820</width>
-                                       <height>20</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Premiered,$LOCALIZE[20416] : ]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1070</posx>
-                                       <posy>7</posy>
-                                       <width>400</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>selected</selectedcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="image">
-                                       <description>Rating value</description>
-                                       <posx>970</posx>
-                                       <posy>35</posy>
-                                       <width>100</width>
-                                       <height>25</height>
-                                       <aspectratio align="left">keep</aspectratio>
-                                       <texture fallback="dark/left_rating/rating0.png">$INFO[ListItem.StarRating,dark/left_rating/]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1080</posx>
-                                       <posy>15</posy>
-                                       <width>60</width>
-                                       <height>40</height>
-                                       <texture>$INFO[ListItem.VideoResolution,dark/,.png]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>1142</posx>
-                                       <posy>22</posy>
-                                       <width>25</width>
-                                       <height>25</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture>OverlayWatching.png</texture>
-                                       <visible>ListItem.IsResumable</visible>
-                               </control>
-                               <control type="image">
-                                       <posx>1140</posx>
-                                       <posy>20</posy>
-                                       <width>30</width>
-                                       <height>30</height>
-                                       <texture>$INFO[ListItem.Overlay,dark/]</texture>
-                                       <visible>!ListItem.IsResumable</visible>
-                               </control>
-                               <control type="textbox">
-                                       <posx>250</posx>
-                                       <posy>70</posy>
-                                       <width>910</width>
-                                       <height>83</height>
-                                       <font>font12</font>
-                                       <align>justify</align>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Plot]</label>
-                               </control>
-                       </focusedlayout>
-               </control>
-       </include>
-       <include name="WideIconMetaDataView">
-               <control type="panel" id="552">
-                       <visible>Container.Content(TVShows)</visible>
-                       <posx>40</posx>
-                       <posy>120</posy>
-                       <width>1200</width>
-                       <height>720</height>
-                       <onleft>502</onleft>
-                       <onright>502</onright>
-                       <onup>552</onup>
-                       <ondown>552</ondown>
-                       <pagecontrol>60</pagecontrol>
-                       <scrolltime>300</scrolltime>
-                       <preloaditems>2</preloaditems>
-                       <viewtype label="31031">list</viewtype>
-                       <itemlayout height="144" width="1200">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>1200</width>
-                                       <height>134</height>
-                                       <texture border="5">SubBack.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>15</posy>
-                                       <width>610</width>
-                                       <height>114</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>200</width>
-                                       <height>134</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>630</posx>
-                                       <posy>15</posy>
-                                       <width>510</width>
-                                       <height>20</height>
-                                       <font>font13_title</font>
-                                       <textcolor>white</textcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1180</posx>
-                                       <posy>15</posy>
-                                       <width>280</width>
-                                       <height>20</height>
-                                       <font>font12</font>
-                                       <textcolor>white</textcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="textbox">
-                                       <posx>630</posx>
-                                       <posy>35</posy>
-                                       <width>550</width>
-                                       <height>80</height>
-                                       <font>font12</font>
-                                       <align>justify</align>
-                                       <textcolor>grey2</textcolor>
-                                       <label>$INFO[ListItem.Plot]</label>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="144" width="1200">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>1200</width>
-                                       <height>134</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>10</posx>
-                                       <posy>15</posy>
-                                       <width>610</width>
-                                       <height>114</height>
-                                       <aspectratio>keep</aspectratio>
-                                       <texture background="true">$INFO[ListItem.Icon]</texture>
-                               </control>
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>5</posy>
-                                       <width>200</width>
-                                       <height>134</height>
-                                       <texture>GlassOverlay.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>630</posx>
-                                       <posy>15</posy>
-                                       <width>510</width>
-                                       <height>20</height>
-                                       <font>font13_title</font>
-                                       <textcolor>black</textcolor>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label]</label>
-                               </control>
-                               <control type="label">
-                                       <posx>1180</posx>
-                                       <posy>15</posy>
-                                       <width>280</width>
-                                       <height>20</height>
-                                       <font>font12</font>
-                                       <textcolor>black</textcolor>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <label>$INFO[ListItem.Label2]</label>
-                               </control>
-                               <control type="textbox">
-                                       <posx>630</posx>
-                                       <posy>35</posy>
-                                       <width>550</width>
-                                       <height>80</height>
-                                       <font>font12</font>
-                                       <align>justify</align>
-                                       <textcolor>black</textcolor>
-                                       <label>$INFO[ListItem.Plot]</label>
-                               </control>
-                       </focusedlayout>
-               </control>
-       </include>
-</includes>
diff --git a/addons/skin.touched/4x3Hirez/VisualisationPresetList.xml b/addons/skin.touched/4x3Hirez/VisualisationPresetList.xml
deleted file mode 100644 (file)
index 9d522da..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<window id="122">
-       <defaultcontrol>2</defaultcontrol>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>$LOCALIZE[31048]</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-               <control type="label" id="4">
-                       <description>No Settings Label</description>
-                       <posx>20</posx>
-                       <posy>250</posy>
-                       <width>960</width>
-                       <align>center</align>
-                       <label>13389</label>
-                       <font>font13_title</font>
-                       <textcolor>black</textcolor>
-               </control>
-               <control type="list" id="2">
-                       <posx>20</posx>
-                       <posy>80</posy>
-                       <width>960</width>
-                       <height>750</height>
-                       <onleft>2</onleft>
-                       <onright>2</onright>
-                       <onup>2</onup>
-                       <ondown>2</ondown>
-                       <pagecontrol>-</pagecontrol>
-                       <scrolltime>200</scrolltime>
-                       <itemlayout height="60">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>960</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>960</width>
-                                       <height>50</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>blue</selectedcolor>
-                                       <info>ListItem.Label</info>
-                               </control>
-                       </itemlayout>
-                       <focusedlayout height="60">
-                               <control type="image">
-                                       <posx>0</posx>
-                                       <posy>-2</posy>
-                                       <width>960</width>
-                                       <height>5</height>
-                                       <texture>separator.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>960</width>
-                                       <height>50</height>
-                                       <font>font13</font>
-                                       <align>left</align>
-                                       <aligny>center</aligny>
-                                       <textcolor>black</textcolor>
-                                       <selectedcolor>blue</selectedcolor>
-                                       <info>ListItem.Label</info>
-                               </control>
-                       </focusedlayout>
-               </control>
-               <control type="label">
-                       <description>number of files/pages in list text label</description>
-                       <posx>980</posx>
-                       <posy>850</posy>
-                       <width>300</width>
-                       <height>30</height>
-                       <font>font13</font>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <scroll>true</scroll>
-                       <textcolor>black</textcolor>
-                       <label>($INFO[Container(2).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(2).CurrentPage]/$INFO[Container(2).NumPages])</label>
-               </control>
-       </controls>
-</window>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/custom_skinsettings_1113.xml b/addons/skin.touched/4x3Hirez/custom_skinsettings_1113.xml
deleted file mode 100644 (file)
index 9ad3403..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-<window type="dialog" id="1113">
-       <defaultcontrol>91</defaultcontrol>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>140</posx>
-               <posy>30</posy>
-       </coordinates>
-       <controls>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>1000</width>
-                       <height>60</height>
-                       <texture border="5">DialogHeader.png</texture>
-               </control>
-               <control type="label">
-                       <description>header label</description>
-                       <posx>20</posx>
-                       <posy>0</posy>
-                       <include>WindowTitleCommons</include>
-                       <width>910</width>
-                       <label>20077</label>
-               </control>
-               <control type="group">
-                       <posx>930</posx>
-                       <posy>0</posy>
-                       <include>DialogCloseButtonCommons</include>
-               </control>
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>60</posy>
-                       <width>1000</width>
-                       <height>840</height>
-                       <texture border="5">DialogBack.png</texture>
-               </control>
-
-               <control type="group">
-                       <posx>20</posx>
-                       <posy>75</posy>
-                       <control type="button">
-                               <description>left Arrow</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>40</width>
-                               <height>40</height>
-                               <texturefocus>arrow-big-left.png</texturefocus>
-                               <texturenofocus>arrow-big-left.png</texturenofocus>
-                               <onclick>Control.Move(9,-1)</onclick>
-                               <include>VisibleFadeEffect</include>
-                               <visible>Container(9).HasPrevious</visible>
-                       </control>
-                       <control type="button" id="11001">
-                               <description>right Arrow</description>
-                               <posx>920</posx>
-                               <posy>0</posy>
-                               <width>40</width>
-                               <height>40</height>
-                               <texturefocus>arrow-big-right.png</texturefocus>
-                               <texturenofocus>arrow-big-right.png</texturenofocus>
-                               <onclick>Control.Move(9,1)</onclick>
-                               <include>VisibleFadeEffect</include>
-                               <visible>Container(9).HasNext</visible>
-                       </control>
-               </control>
-               <control type="grouplist" id="9">
-                       <description>button area</description>
-                       <posx>60</posx>
-                       <posy>70</posy>
-                       <width>880</width>
-                       <height>50</height>
-                       <itemgap>5</itemgap>
-                       <align>center</align>
-                       <orientation>horizontal</orientation>
-                       <onleft>9</onleft>
-                       <onright>9</onright>
-                       <onup>2</onup>
-                       <ondown>2</ondown>
-                       <control type="button" id="91">
-                               <description>Home Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>10000</label>
-                               <onfocus>Skin.SetString(SkinSettings,1)</onfocus>
-                       </control>
-                       <control type="button" id="92">
-                               <description>Addon Button</description>
-                               <width>200</width>
-                               <include>ButtonInfoDialogsCommonValues</include>
-                               <label>24001</label>
-                               <onfocus>Skin.SetString(SkinSettings,2)</onfocus>
-                       </control>
-               </control>
-               <control type="grouplist" id="100">
-                       <description>control area</description>
-                       <posx>40</posx>
-                       <posy>140</posy>
-                       <width>920</width>
-                       <height>670</height>
-                       <itemgap>-1</itemgap>
-                       <pagecontrol>30</pagecontrol>
-                       <onup>9</onup>
-                       <ondown>9001</ondown>
-                       <onleft>2</onleft>
-                       <onright>30</onright>
-                       <visible>Skin.String(SkinSettings,1)</visible>
-                       <control type="label" id="101">
-                               <height>50</height>
-                               <width>920</width>
-                               <font>font13_title</font>
-                               <label>31500</label>
-                               <textcolor>black</textcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="radiobutton" id="102">
-                               <description>Hide Videos</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[3]</label>
-                               <onclick>Skin.ToggleSetting(HideHomeButtonVideo)</onclick>
-                               <selected>!Skin.HasSetting(HideHomeButtonVideo)</selected>
-                       </control>
-                       <control type="radiobutton" id="103">
-                               <description>Hide Movies</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[20342]</label>
-                               <onclick>Skin.ToggleSetting(HideHomeButtonMovies)</onclick>
-                               <selected>!Skin.HasSetting(HideHomeButtonMovies)</selected>
-                               <enable>Library.HasContent(Movies)</enable>
-                       </control>
-                       <control type="radiobutton" id="104">
-                               <description>Hide TVShows</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[20343]</label>
-                               <onclick>Skin.ToggleSetting(HideHomeButtonTVShows)</onclick>
-                               <selected>!Skin.HasSetting(HideHomeButtonTVShows)</selected>
-                               <enable>Library.HasContent(TVShows)</enable>
-               </control>
-                       <control type="radiobutton" id="105">
-                               <description>Hide Music</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[2]</label>
-                               <onclick>Skin.ToggleSetting(HideHomeButtonMusic)</onclick>
-                               <selected>!Skin.HasSetting(HideHomeButtonMusic)</selected>
-                       </control>
-                       <control type="radiobutton" id="106">
-                               <description>Hide Pictures</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[1]</label>
-                               <onclick>Skin.ToggleSetting(HideHomeButtonPictures)</onclick>
-                               <selected>!Skin.HasSetting(HideHomeButtonPictures)</selected>
-                       </control>
-                       <control type="radiobutton" id="107">
-                               <description>Hide Programs</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[0]</label>
-                               <onclick>Skin.ToggleSetting(HideHomeButtonPrograms)</onclick>
-                               <selected>!Skin.HasSetting(HideHomeButtonPrograms)</selected>
-                       </control>
-                       <control type="label" id="110">
-                               <height>50</height>
-                               <width>920</width>
-                               <font>font13_title</font>
-                               <label>31502</label>
-                               <textcolor>black</textcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="radiobutton" id="111">
-                               <description>Show Weather info and button</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[31550]</label>
-                               <onclick>Skin.ToggleSetting(HideHomeButtonWeather)</onclick>
-                               <selected>!Skin.HasSetting(HideHomeButtonWeather)</selected>
-                       </control>
-                       <control type="radiobutton" id="112">
-                               <description>Videos Goes to root button</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[31553]</label>
-                               <onclick>Skin.ToggleSetting(HomeVideosGoesToRoot)</onclick>
-                               <selected>Skin.HasSetting(HomeVideosGoesToRoot)</selected>
-                       </control>
-               </control>
-               <control type="grouplist" id="200">
-                       <description>control area</description>
-                       <posx>40</posx>
-                       <posy>140</posy>
-                       <width>920</width>
-                       <height>670</height>
-                       <itemgap>-1</itemgap>
-                       <pagecontrol>30</pagecontrol>
-                       <onup>9</onup>
-                       <ondown>9001</ondown>
-                       <onleft>2</onleft>
-                       <onright>30</onright>
-                       <visible>Skin.String(SkinSettings,2)</visible>
-                       <control type="label" id="201">
-                               <height>50</height>
-                               <width>920</width>
-                               <font>font13_title</font>
-                               <label>31501</label>
-                               <textcolor>black</textcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="button" id="202">
-                               <description>Home Addon Button</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[31551] 1</label>
-                               <label2>$INFO[system.addontitle(Skin.String(HomeAddonButton1))]</label2>
-                               <onclick>Skin.SetAddon(HomeAddonButton1,xbmc.addon.video)</onclick>
-                       </control>
-                       <control type="button" id="203">
-                               <description>Home Addon Button</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[31551] 2</label>
-                               <label2>$INFO[system.addontitle(Skin.String(HomeAddonButton2))]</label2>
-                               <onclick>Skin.SetAddon(HomeAddonButton2,xbmc.addon.video)</onclick>
-                       </control>
-                       <control type="button" id="204">
-                               <description>Home Addon Button</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[31551] 3</label>
-                               <label2>$INFO[system.addontitle(Skin.String(HomeAddonButton3))]</label2>
-                               <onclick>Skin.SetAddon(HomeAddonButton3,xbmc.addon.video)</onclick>
-                       </control>
-                       <control type="button" id="205">
-                               <description>Home Addon Button</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[31551] 4</label>
-                               <label2>$INFO[system.addontitle(Skin.String(HomeAddonButton4))]</label2>
-                               <onclick>Skin.SetAddon(HomeAddonButton4,xbmc.addon.video)</onclick>
-                       </control>
-                       <control type="label" id="220">
-                               <height>50</height>
-                               <width>920</width>
-                               <font>font13_title</font>
-                               <label>31503</label>
-                               <textcolor>black</textcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                       </control>
-                       <control type="button" id="221">
-                               <description>Subtitle Script Button</description>
-                               <height>55</height>
-                               <width>920</width>
-                               <font>font13</font>
-                               <textcolor>black</textcolor>
-                               <texturefocus border="0,2,0,2">MenuItemNF.png</texturefocus>
-                               <texturenofocus border="0,2,0,2">MenuItemNF.png</texturenofocus>
-                               <label>$LOCALIZE[31552]</label>
-                               <label2>$INFO[system.addontitle(Skin.String(SubtitleScript_Path))]</label2>
-                               <onclick>Skin.SetAddon(SubtitleScript_Path,xbmc.python.subtitles)</onclick>
-                       </control>
-               </control>
-               <control type="scrollbar" id="30">
-                       <posx>975</posx>
-                       <posy>120</posy>
-                       <width>20</width>
-                       <height>670</height>
-                       <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                       <texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
-                       <texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                       <textureslidernib>ScrollBarNib.png</textureslidernib>
-                       <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                       <onleft>2</onleft>
-                       <onright>9</onright>
-                       <showonepage>false</showonepage>
-                       <orientation>vertical</orientation>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/custom_volume_1112.xml b/addons/skin.touched/4x3Hirez/custom_volume_1112.xml
deleted file mode 100644 (file)
index 40ed021..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-<window id="1112" type="dialog">
-       <defaultcontrol always="true">9000</defaultcontrol>
-       <include>Window_OpenClose_Animation</include>
-       <controls>
-               <control type="button">
-                       <description>Hidden button to close the sort when its focused</description>
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <texturenofocus>-</texturenofocus>
-                       <texturefocus>-</texturefocus>
-                       <onclick>PreviousMenu</onclick>
-               </control>
-               <control type="group">
-                       <posx>205</posx>
-                       <posy>235r</posy>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>450</width>
-                               <height>80</height>
-                               <texture border="5">SubBack.png</texture>
-                       </control>
-                       <control type="image">
-                               <description>Panel Arrow image</description>
-                               <posx>100</posx>
-                               <posy>74</posy>
-                               <width>40</width>
-                               <height>40</height>
-                               <texture>arrow-big-down.png</texture>
-                       </control>
-                       <control type="progress">
-                               <description>Volume</description>
-                               <posx>20</posx>
-                               <posy>30</posy>
-                               <width>300</width>
-                               <height>20</height>
-                               <info>Player.Volume</info>
-                       </control>
-                       <control type="slider" id="1">
-                               <description>Volume Slider</description>
-                               <posx>20</posx>
-                               <posy>30</posy>
-                               <width>300</width>
-                               <height>15</height>
-                               <info>Player.Volume</info>
-                               <action>Volume</action>
-                               <texturesliderbar>seekslider.png</texturesliderbar>
-                               <textureslidernib>osd_slider_nibNF.png</textureslidernib>
-                               <textureslidernibfocus>osd_slider_nib.png</textureslidernibfocus>
-                       </control>
-                       <control type="label">
-                               <description>Volume Label</description>
-                               <posx>330</posx>
-                               <posy>30</posy>
-                               <width>100</width>
-                               <height>20</height>
-                               <label>$INFO[Player.Volume]</label>
-                               <font>font13</font>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/4x3Hirez/defaults.xml b/addons/skin.touched/4x3Hirez/defaults.xml
deleted file mode 100644 (file)
index d23b1de..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-<includes>
-       <default type="image">
-               <posx>0</posx>
-               <posy>0</posy>
-               <texture>-</texture>
-               <colorkey>0</colorkey>
-       </default>
-       <default type="label">
-               <posx>80</posx>
-               <posy>60</posy>
-               <label>-</label>
-               <font>font13</font>
-               <textcolor>white</textcolor>
-       </default>
-       <default type="fadelabel">
-               <posx>80</posx>
-               <posy>60</posy>
-               <font>font13</font>
-               <textcolor>white</textcolor>
-       </default>
-       <default type="button">
-               <posx>300</posx>
-               <posy>200</posy>
-               <width>300</width>
-               <height>42</height>
-               <texturefocus>button-focus.png</texturefocus>
-               <texturenofocus>button-nofocus.png</texturenofocus>
-               <font>font13</font>
-               <textcolor>white</textcolor>
-               <disabledcolor>grey3</disabledcolor>
-               <textoffsetx>10</textoffsetx>
-               <aligny>center</aligny>
-               <pulseonselect>no</pulseonselect>
-       </default>
-       <default type="togglebutton">
-               <posx>140</posx>
-               <posy>167</posy>
-               <width>20</width>
-               <height>20</height>
-               <texturefocus>scroll-up-focus.png</texturefocus>
-               <texturenofocus>scroll-up.png</texturenofocus>
-               <alttexturefocus>scroll-down-focus.png</alttexturefocus>
-               <alttexturenofocus>scroll-down.png</alttexturenofocus>
-               <textcolor>white</textcolor>
-               <label>-</label>
-               <font>font13</font>
-               <disabledcolor>grey3</disabledcolor>
-               <pulseonselect>no</pulseonselect>
-       </default>
-       <default type="textbox">
-               <posx>220</posx>
-               <posy>220</posy>
-               <width>410</width>
-               <height>215</height>
-               <align>left</align>
-               <textcolor>white</textcolor>
-               <font>font13</font>
-       </default>
-       <default type="progress">
-               <posx>100</posx>
-               <posy>325</posy>
-               <texturebg border="16,0,16,0">OSDProgressBack.png</texturebg>
-               <lefttexture>-</lefttexture>
-               <midtexture border="16,0,16,0">OSDProgressMid.png</midtexture>
-               <righttexture>-</righttexture>
-               <overlaytexture>-</overlaytexture>
-               <reveal>true</reveal>
-       </default>
-       <default type="spincontrol">
-               <posx>330</posx>
-               <posy>126</posy>
-               <spinwidth>45</spinwidth>
-               <spinheight>45</spinheight>
-               <textureup>Select_Up.png</textureup>
-               <texturedown>Select_Down.png</texturedown>
-               <textureupfocus>Select_Up.png</textureupfocus>
-               <texturedownfocus>Select_Down.png</texturedownfocus>
-               <align>right</align>
-               <width>33</width>
-               <height>22</height>
-               <font>font13</font>
-               <reverse>yes</reverse>
-               <textcolor>white</textcolor>
-               <disabledcolor>grey3</disabledcolor>
-               <subtype>text</subtype>
-               <textoffsetx>-5</textoffsetx>
-               <textoffsety>0</textoffsety>
-               <aligny>-</aligny>
-               <pulseonselect>no</pulseonselect>
-       </default>
-       <default type="spincontrolex">
-               <posx>530</posx>
-               <posy>160</posy>
-               <width>300</width>
-               <height>42</height>
-               <spinwidth>45</spinwidth>
-               <spinheight>45</spinheight>
-               <texturefocus>button-focus.png</texturefocus>
-               <texturenofocus>-</texturenofocus>
-               <textureup>Select_Up.png</textureup>
-               <texturedown>Select_Down.png</texturedown>
-               <textureupfocus>Select_Up.png</textureupfocus>
-               <texturedownfocus>Select_Down.png</texturedownfocus>
-               <font>font13</font>
-               <textcolor>white</textcolor>
-               <disabledcolor>grey3</disabledcolor>
-               <textoffsetx>10</textoffsetx>
-               <aligny>center</aligny>
-               <reverse>yes</reverse>
-               <pulseonselect>no</pulseonselect>
-       </default>
-       <default type="radiobutton">
-               <posx>300</posx>
-               <posy>200</posy>
-               <width>300</width>
-               <height>42</height>
-               <radiowidth>90</radiowidth>
-               <radioheight>45</radioheight>
-               <textureradiofocus>radiobutton-focus.png</textureradiofocus>
-               <textureradionofocus>radiobutton-nofocus.png</textureradionofocus>
-               <texturefocus>button-focus.png</texturefocus>
-               <texturenofocus>button-nofocus.png</texturenofocus>
-               <label>215</label>
-               <font>font13</font>
-               <textcolor>white</textcolor>
-               <disabledcolor>grey3</disabledcolor>
-               <textoffsetx>10</textoffsetx>
-               <aligny>center</aligny>
-               <pulseonselect>no</pulseonselect>
-       </default>
-       <default type="selectbutton">
-               <posx>490</posx>
-               <posy>335</posy>
-               <width>300</width>
-               <height>50</height>
-               <label>-</label>
-               <font>font12</font>
-               <texturefocus>-</texturefocus>
-               <texturenofocus>-</texturenofocus>
-               <texturebg>button-focus.png</texturebg>
-               <textureleft>scroll-left.png</textureleft>
-               <textureleftfocus>scroll-left-focus.png</textureleftfocus>
-               <textureright>scroll-right.png</textureright>
-               <texturerightfocus>scroll-right-focus.png</texturerightfocus>
-               <font>font13</font>
-               <textcolor>white</textcolor>
-               <disabledcolor>grey3</disabledcolor>
-               <aligny>center</aligny>
-       </default>
-       <default type="slider">
-               <controloffsetx>75</controloffsetx>
-               <controloffsety>0</controloffsety>
-       </default>
-       <default type="sliderex">
-               <height>35</height>
-               <textoffsetx>10</textoffsetx>
-               <aligny>center</aligny>
-               <texturefocus border="5">button-focus.png</texturefocus>
-               <texturenofocus border="5">button-nofocus.png</texturenofocus>
-               <sliderwidth>250</sliderwidth>
-               <sliderheight>20</sliderheight>
-               <texturesliderbar>osd_slider_bg.png</texturesliderbar>
-               <textureslidernib>osd_slider_nibNF.png</textureslidernib>
-               <textureslidernibfocus>osd_slider_nib.png</textureslidernibfocus>
-               <font>font12</font>
-               <textcolor>white</textcolor>
-               <disabledcolor>grey3</disabledcolor>
-       </default>
-       <default type="mover">
-               <posx>60</posx>
-               <posy>192</posy>
-               <texturefocus>button-focus.png</texturefocus>
-               <texturenofocus>button-nofocus.png</texturenofocus>
-       </default>
-       <default type="resize">
-               <posx>60</posx>
-               <posy>192</posy>
-               <texturefocus>button-focus.png</texturefocus>
-               <texturenofocus>button-nofocus.png</texturenofocus>
-       </default>
-       <default type="edit">
-               <posx>300</posx>
-               <posy>200</posy>
-               <width>300</width>
-               <height>42</height>
-               <texturefocus>button-focus.png</texturefocus>
-               <texturenofocus>button-nofocus.png</texturenofocus>
-               <font>font13</font>
-               <textcolor>white</textcolor>
-               <disabledcolor>grey3</disabledcolor>
-               <textoffsetx>10</textoffsetx>
-               <aligny>center</aligny>
-               <pulseonselect>no</pulseonselect>
-       </default>
-</includes>
\ No newline at end of file
diff --git a/addons/skin.touched/4x3Hirez/includes.xml b/addons/skin.touched/4x3Hirez/includes.xml
deleted file mode 100644 (file)
index 2b10b05..0000000
+++ /dev/null
@@ -1,628 +0,0 @@
-<includes>
-       <include file="defaults.xml" />
-       <include file="ViewsCommon.xml" />
-       <include file="ViewsMetaData.xml" />
-       <include file="ViewsAddonBrowser.xml" />
-       <include file="IncludesCodecFlagging.xml" />
-       <include file="IncludesPlayerControls.xml" />
-       <include file="IncludesKeypad.xml" />
-
-       <constant name="ScreenWidth">1280</constant>
-       <constant name="ScreenHeight">960</constant>
-       <constant name="FanartCrossfadeTime">500</constant>
-       <constant name="IconCrossfadeTime">400</constant>
-
-       <include name="CommonBackground">
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <aspectratio>scale</aspectratio>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <texture>special://skin/background/background.png</texture>
-               </control>
-               <include>CommonHeader</include>
-               <control type="group">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>100</posy>
-                               <width>ScreenWidth</width>
-                               <height>10</height>
-                               <texture>shelf_shadow.png</texture>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>20</posy>
-                               <width>ScreenWidth</width>
-                               <height>80</height>
-                               <texture border="0,0,0,2">header.png</texture>
-                       </control>
-                       <control type="button">
-                               <description>Previous Button</description>
-                               <posx>550</posx>
-                               <posy>30</posy>
-                               <width>45</width>
-                               <height>45</height>
-                               <label>-</label>
-                               <texturenofocus>PlayerControls2-PreviousNF.png</texturenofocus>
-                               <texturefocus>PlayerControls2-PreviousFO.png</texturefocus>
-                               <onclick>XBMC.PlayerControl(Previous)</onclick>
-                       </control>
-                       <control type="togglebutton">
-                               <description>Play Button</description>
-                               <posx>612</posx>
-                               <posy>23</posy>
-                               <width>56</width>
-                               <height>56</height>
-                               <label>-</label>
-                               <texturefocus>PlayerControls2-PlayFO.png</texturefocus>
-                               <texturenofocus>PlayerControls2-PlayNF.png</texturenofocus>
-                               <usealttexture>Player.Paused | Player.Forwarding | Player.Rewinding</usealttexture>
-                               <alttexturefocus>PlayerControls2-PauseFO.png</alttexturefocus>
-                               <alttexturenofocus>PlayerControls2-PauseNF.png</alttexturenofocus>
-                               <onclick>XBMC.PlayerControl(Play)</onclick>
-                       </control>
-                       <control type="button">
-                               <description>Next Button</description>
-                               <posx>680</posx>
-                               <posy>30</posy>
-                               <width>45</width>
-                               <height>45</height>
-                               <label>-</label>
-                               <texturenofocus>PlayerControls2-NextNF.png</texturenofocus>
-                               <texturefocus>PlayerControls2-NextFO.png</texturefocus>
-                               <onclick>XBMC.PlayerControl(Next)</onclick>
-                       </control>
-                       <control type="progress">
-                               <description>Progressbar</description>
-                               <posx>450</posx>
-                               <posy>83</posy>
-                               <width>380</width>
-                               <height>15</height>
-                               <info>Player.Progress</info>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>64r</posy>
-                               <width>ScreenWidth</width>
-                               <height>64</height>
-                               <texture>floor.png</texture>
-                       </control>
-                       <control type="group">
-                               <posx>122r</posx>
-                               <posy>105r</posy>
-                               <visible>!Window.IsVisible(LoginScreen) + !Window.IsActive(InfoDialog)</visible>
-                               <include>VisibleFadeEffect</include>
-                               <control type="image">
-                                       <posx>16</posx>
-                                       <posy>80</posy>
-                                       <width>80</width>
-                                       <height>40</height>
-                                       <texture border="5">IconBack_reflect.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Favourties Button</description>
-                                       <posx>16</posx>
-                                       <posy>0</posy>
-                                       <width>80</width>
-                                       <height>80</height>
-                                       <label>-</label>
-                                       <font>-</font>
-                                       <texturenofocus border="5">IconBack.png</texturenofocus>
-                                       <texturefocus border="5">IconBack-focus.png</texturefocus>
-                                       <onclick>ActivateWindow(Favourites)</onclick>
-                               </control>
-                               <control type="image">
-                                       <posx>28</posx>
-                                       <posy>12</posy>
-                                       <width>56</width>
-                                       <height>56</height>
-                                       <texture>icon_favourites.png</texture>
-                               </control>
-                               <control type="label">
-                                       <posx>6</posx>
-                                       <posy>82</posy>
-                                       <width>100</width>
-                                       <height>20</height>
-                                       <font>font11</font>
-                                       <textcolor>white</textcolor>
-                                       <shadowcolor>black</shadowcolor>
-                                       <align>center</align>
-                                       <aligny>center</aligny>
-                                       <label>$LOCALIZE[1036]</label>
-                               </control>
-                       </control>
-               </control>
-       </include>
-       <include name="CommonHeader">
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>20</height>
-                       <texture>black.png</texture>
-               </control>
-               <control type="label">
-                       <description>XBMC label</description>
-                       <posx>5</posx>
-                       <posy>0</posy>
-                       <width>200</width>
-                       <height>18</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <font>font10_title</font>
-                       <textcolor>white</textcolor>
-                       <label>XBMC</label>
-               </control>
-               <control type="label">
-                       <description>time label</description>
-                       <posx>200</posx>
-                       <posy>0</posy>
-                       <width>880</width>
-                       <height>18</height>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <font>font10_title</font>
-                       <textcolor>white</textcolor>
-                       <label>$INFO[System.Time]</label>
-               </control>
-               <control type="progress">
-                       <description>Battery Percent</description>
-                       <posx>35r</posx>
-                       <posy>2</posy>
-                       <width>30</width>
-                       <height>15</height>
-                       <texturebg>BatteryBack.png</texturebg>
-                       <midtexture>BatteryFront.png</midtexture>
-                       <info>System.BatteryLevel</info>
-               </control>
-               <control type="label">
-                       <posx>45r</posx>
-                       <posy>0</posy>
-                       <width>200</width>
-                       <height>18</height>
-                       <font>font10_title</font>
-                       <textcolor>white</textcolor>
-                       <align>right</align>
-                       <aligny>center</aligny>
-                       <label>$INFO[System.BatteryLevel]</label>
-               </control>
-       </include>
-       <include name="BehindDialogFadeOut">
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>ScreenWidth</width>
-                       <height>ScreenHeight</height>
-                       <texture>black-back.png</texture>
-                       <animation effect="fade" time="400">Visible</animation>
-                       <animation effect="fade" time="200">Hidden</animation>
-                       <visible>Window.IsActive(ContextMenu) | Window.IsActive(MovieInformation) | Window.IsActive(MusicInformation) | Window.IsActive(SongInformation) | Window.IsActive(FileBrowser) | Window.IsActive(TextViewer) | Window.IsActive(AddonSettings) | Window.IsActive(ContentSettings) | Window.IsActive(SelectDialog) | Window.IsActive(FileStackingDialog) | Window.IsActive(MediaSource) | Window.IsActive(PictureInfo) | [Window.IsActive(NumericInput) + !Window.IsVisible(VirtualKeyboard)] | Window.IsActive(ProfileSettings) | Window.IsActive(LockSettings) | Window.IsActive(SmartPlaylistEditor) | Window.IsActive(SmartPlaylistRule) | Window.IsActive(script-RSS_Editor-rssEditor.xml) | Window.IsActive(script-RSS_Editor-setEditor.xml) | Window.IsActive(AddonInformation) | Window.IsActive(Favourites) | Window.IsActive(PictureInfo) | Window.IsActive(KaraokeLargeSelector) | Window.IsActive(custom_skinsettings_1113.xml)</visible>
-               </control>
-       </include>
-       <include name="MediaWindowTitleCommons">
-               <posx>300</posx>
-               <posy>64r</posy>
-               <width>680</width>
-               <height>64</height>
-               <align>center</align>
-               <aligny>center</aligny>
-               <font>font13_title</font>
-               <textcolor>white</textcolor>
-               <shadowcolor>black</shadowcolor>
-       </include>
-       <include name="WindowTitleCommons">
-               <height>60</height>
-               <align>left</align>
-               <aligny>center</aligny>
-               <font>font16</font>
-               <textcolor>white</textcolor>
-               <shadowcolor>black</shadowcolor>
-       </include>
-       <include name="FileCountCommons">
-               <control type="group">
-                       <posx>0</posx>
-                       <posy>35</posy>
-                       <include>Window_OpenClose_Animation</include>
-                       <control type="image">
-                               <posx>120r</posx>
-                               <posy>0</posy>
-                               <width>45</width>
-                               <height>45</height>
-                               <aspectratio>keep</aspectratio>
-                               <texture>filecount.png</texture>
-                       </control>
-                       <control type="label">
-                               <description>Page Count Label 1</description>
-                               <posx>130r</posx>
-                               <posy>2</posy>
-                               <width>500</width>
-                               <height>20</height>
-                               <font>font12</font>
-                               <textcolor>grey2</textcolor>
-                               <scroll>false</scroll>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[Window.Property(filter),$LOCALIZE[587] , - ]$INFO[Container.NumItems,, $LOCALIZE[31025]]</label>
-                       </control>
-                       <control type="label">
-                               <description>Page Count Label 2</description>
-                               <posx>130r</posx>
-                               <posy>22</posy>
-                               <width>500</width>
-                               <height>20</height>
-                               <font>font12</font>
-                               <textcolor>grey2</textcolor>
-                               <scroll>false</scroll>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[Container.CurrentPage,$LOCALIZE[31024] ]$INFO[Container.NumPages, of ,]</label>
-                       </control>
-               </control>
-       </include>
-       <include name="ScrollArrowsCommons">
-               <control type="scrollbar" id="60">
-                       <posx>25r</posx>
-                       <posy>120</posy>
-                       <width>17</width>
-                       <height>720</height>
-                       <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                       <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
-                       <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                       <textureslidernib>ScrollBarNib.png</textureslidernib>
-                       <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                       <onleft>60</onleft>
-                       <onright>60</onright>
-                       <ondown>60</ondown>
-                       <onup>60</onup>
-                       <showonepage>true</showonepage>
-                       <orientation>vertical</orientation>
-                       <visible>Container.Scrolling</visible>
-                       <animation effect="fade" time="150">Visible</animation>
-                       <animation effect="fade" time="150">Hidden</animation>
-               </control>
-       </include>
-       <include name="HomeButtonCommons">
-               <control type="button">
-                       <description>Home Button</description>
-                       <posx>0</posx>
-                       <posy>25</posy>
-                       <width>64</width>
-                       <height>64</height>
-                       <texturenofocus>icon_home.png</texturenofocus>
-                       <texturefocus>icon_home.png</texturefocus>
-                       <onclick>ActivateWindow(Home)</onclick>
-               </control>
-       </include>
-       <include name="OptionsButtonCommons">
-               <control type="button">
-                       <description>Options Button</description>
-                       <posx>64r</posx>
-                       <posy>25</posy>
-                       <width>64</width>
-                       <height>64</height>
-                       <texturenofocus>icon_system.png</texturenofocus>
-                       <texturefocus>icon_system.png</texturefocus>
-                       <onclick>Skin.ToggleSetting(MediaSubMenuVisible)</onclick>
-               </control>
-       </include>
-       <include name="DialogCloseButtonCommons">
-               <control type="image">
-                       <posx>0</posx>
-                       <posy>0</posy>
-                       <width>2</width>
-                       <height>59</height>
-                       <texture>header-divide.png</texture>
-               </control>
-               <control type="button">
-                       <description>Close Button</description>
-                       <posx>7</posx>
-                       <posy>0</posy>
-                       <width>60</width>
-                       <height>60</height>
-                       <font>-</font>
-                       <onclick>previousmenu</onclick>
-                       <texturefocus>icon_close.png</texturefocus>
-                       <texturenofocus>icon_close.png</texturenofocus>
-               </control>
-       </include>
-       <include name="MediaSubMenu">
-               <control type="button" id="19">
-                       <description>Filter button needed for panel below to work</description>
-                       <visible>false</visible>
-               </control>
-               <control type="panel" id="9002">
-                       <visible>!Window.IsActive(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <include>SubMenuCommonLayout</include>
-                       <content>
-                               <item>
-                                       <label>31200</label>
-                                       <onclick>ParentDir</onclick>
-                                       <icon>icon_back.png</icon>
-                               </item>
-                               <item>
-                                       <label>31202</label>
-                                       <onclick>Container.NextViewMode</onclick>
-                                       <icon>icon_view.png</icon>
-                               </item>
-                               <item>
-                                       <label>587</label>
-                                       <onclick>SendClick(19)</onclick>
-                                       <icon>icon_filter.png</icon>
-                                       <visible>IsEmpty(Window.Property(filter))</visible>
-                               </item>
-                               <item>
-                                       <label>587</label>
-                                       <onclick>SendClick(19)</onclick>
-                                       <icon>icon_filter_on.png</icon>
-                                       <visible>!IsEmpty(Window.Property(filter))</visible>
-                               </item>
-                       </content>
-               </control>
-       </include>
-       <include name="SubMenuCommonLayout">
-               <include>Window_OpenClose_Animation</include>
-               <posx>10</posx>
-               <posy>105r</posy>
-               <width>620</width>
-               <height>120</height>
-               <onleft>9002</onleft>
-               <onright>9002</onright>
-               <onup>9001</onup>
-               <ondown>20</ondown>
-               <pagecontrol>-</pagecontrol>
-               <scrolltime>300</scrolltime>
-               <orientation>Horizontal</orientation>
-               <itemlayout height="200" width="112">
-                       <control type="image">
-                               <posx>16</posx>
-                               <posy>80</posy>
-                               <width>80</width>
-                               <height>40</height>
-                               <texture border="5">IconBack_reflect.png</texture>
-                       </control>
-                       <control type="image">
-                               <posx>16</posx>
-                               <posy>0</posy>
-                               <width>80</width>
-                               <height>80</height>
-                               <bordertexture border="5">IconBack.png</bordertexture>
-                               <bordersize>12</bordersize>
-                               <texture>$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>56</posx>
-                               <posy>82</posy>
-                               <width>100</width>
-                               <height>20</height>
-                               <font>font11</font>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[ListItem.Label]</label>
-                       </control>
-               </itemlayout>
-               <focusedlayout height="200" width="112">
-                       <control type="image">
-                               <posx>16</posx>
-                               <posy>80</posy>
-                               <width>80</width>
-                               <height>40</height>
-                               <texture border="5">IconBack_reflect.png</texture>
-                       </control>
-                       <control type="image">
-                               <posx>16</posx>
-                               <posy>0</posy>
-                               <width>80</width>
-                               <height>80</height>
-                               <bordertexture border="5">IconBack-focus.png</bordertexture>
-                               <bordersize>12</bordersize>
-                               <texture>$INFO[ListItem.Icon]</texture>
-                       </control>
-                       <control type="label">
-                               <posx>56</posx>
-                               <posy>82</posy>
-                               <width>100</width>
-                               <height>20</height>
-                               <font>font11</font>
-                               <textcolor>white</textcolor>
-                               <shadowcolor>black</shadowcolor>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>$INFO[ListItem.Label]</label>
-                       </control>
-               </focusedlayout>
-       </include>
-       <include name="ButtonCommonValues2">
-               <height>60</height>
-               <width>298</width>
-               <textoffsetx>10</textoffsetx>
-               <textwidth>280</textwidth>
-               <textcolor>black</textcolor>
-               <align>left</align>
-               <aligny>center</aligny>
-               <font>font13</font>
-               <texturefocus>button-focus2.png</texturefocus>
-               <texturenofocus>button-nofocus.png</texturenofocus>
-               <pulseonselect>false</pulseonselect>
-       </include>
-       <include name="ButtonInfoDialogsCommonValues">
-               <height>50</height>
-               <width>158</width>
-               <align>center</align>
-               <aligny>center</aligny>
-               <font>font12_title</font>
-               <texturefocus border="5">IconBack-focus.png</texturefocus>
-               <texturenofocus border="5">ListNF.png</texturenofocus>
-               <pulseonselect>false</pulseonselect>
-       </include>
-       <include name="CommonNowPlaying">
-               <control type="group">
-                       <posx>110</posx>
-                       <posy>25</posy>
-                       <visible>Player.HasMedia + !Window.IsVisible(PlayerControls)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>270</width>
-                               <height>67</height>
-                               <texturefocus border="8">IconBack.png</texturefocus>
-                               <texturenofocus border="8">IconBack.png</texturenofocus>
-                               <onclick>ActivateWindow(PlayerControls)</onclick>
-                       </control>
-                       <control type="fadelabel">
-                               <posx>10</posx>
-                               <posy>5</posy>
-                               <width>250</width>
-                               <height>15</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <label>$LOCALIZE[31040]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>black</textcolor>
-                               <visible>!Player.Paused</visible>
-                       </control>
-                       <control type="fadelabel">
-                               <posx>10</posx>
-                               <posy>5</posy>
-                               <width>250</width>
-                               <height>15</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <label>$LOCALIZE[31043]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10_title</font>
-                               <textcolor>black</textcolor>
-                               <visible>Player.Paused</visible>
-                       </control>
-                       <control type="fadelabel">
-                               <posx>10</posx>
-                               <posy>24</posy>
-                               <width>250</width>
-                               <height>20</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <label>[B]$INFO[MusicPlayer.Title]$INFO[VideoPlayer.Title][/B]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font12</font>
-                               <textcolor>black</textcolor>
-                       </control>
-                       <control type="fadelabel">
-                               <posx>10</posx>
-                               <posy>45</posy>
-                               <width>250</width>
-                               <height>15</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <label>[B]$INFO[MusicPlayer.Artist][/B]</label>
-                               <label>[B]$INFO[MusicPlayer.Album][/B]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10</font>
-                               <textcolor>black</textcolor>
-                               <visible>Player.HasAudio</visible>
-                       </control>
-                       <control type="fadelabel">
-                               <posx>10</posx>
-                               <posy>45</posy>
-                               <width>250</width>
-                               <height>15</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <label>[B]$INFO[VideoPlayer.Studio][/B]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10</font>
-                               <textcolor>black</textcolor>
-                               <visible>Player.HasVideo + VideoPlayer.Content(Movies)</visible>
-                       </control>
-                       <control type="fadelabel">
-                               <posx>10</posx>
-                               <posy>45</posy>
-                               <width>250</width>
-                               <height>15</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <label>[B]$INFO[VideoPlayer.TVShowTitle][/B]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10</font>
-                               <textcolor>black</textcolor>
-                               <visible>Player.HasVideo + VideoPlayer.Content(Episodes)</visible>
-                       </control>
-                       <control type="fadelabel">
-                               <posx>10</posx>
-                               <posy>45</posy>
-                               <width>250</width>
-                               <height>15</height>
-                               <scrollout>false</scrollout>
-                               <pauseatend>3000</pauseatend>
-                               <label>[B]$INFO[VideoPlayer.Artist][/B]</label>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <font>font10</font>
-                               <textcolor>black</textcolor>
-                               <visible>Player.HasVideo + VideoPlayer.Content(MusicVideos)</visible>
-                       </control>
-               </control>
-       </include>
-       <include name="ScrollOffsetLabel">
-               <control type="group">
-                       <visible>Container.Scrolling + [StringCompare(Container.SortMethod,$LOCALIZE[551]) | StringCompare(Container.SortMethod,$LOCALIZE[561]) | StringCompare(Container.SortMethod,$LOCALIZE[558]) | StringCompare(Container.SortMethod,$LOCALIZE[557]) | StringCompare(Container.SortMethod,$LOCALIZE[556])]</visible>
-                       <animation effect="fade" time="100">Visible</animation>
-                       <animation effect="fade" time="300">Hidden</animation>
-                       <posx>600</posx>
-                       <posy>410</posy>
-                       <width>320</width>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>80</width>
-                               <height>80</height>
-                               <texture border="5">IconBack.png</texture>
-                       </control>
-                       <control type="label">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>80</width>
-                               <height>80</height>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>[B]$INFO[ListItem.SortLetter][/B]</label>
-                               <textcolor>black</textcolor>
-                               <font>font30</font>
-                       </control>
-               </control>
-       </include>
-       <include name="Window_OpenClose_Animation">
-               <animation effect="fade" time="250">WindowOpen</animation>
-               <animation effect="fade" time="250">WindowClose</animation>
-       </include>
-       <include name="Window_OpenClose_Animation_Zoom">
-               <animation type="WindowOpen" reversible="false">
-                       <effect type="zoom" start="80" end="100" center="640,480" easing="out" tween="back" time="300" />
-                       <effect type="fade" start="0" end="100" time="300" />
-               </animation>
-               <animation type="WindowClose" reversible="false">
-                       <effect type="zoom" start="100" end="80" center="640,480" easing="in" tween="back" time="300" />
-                       <effect type="fade" start="100" end="0" time="300" />
-               </animation>
-       </include>
-       <include name="dialogeffect">
-               <animation effect="fade" time="250">WindowOpen</animation>
-               <animation effect="fade" time="250">WindowClose</animation>
-       </include>
-       <include name="VisibleFadeEffect">
-               <animation effect="fade" time="300">Visible</animation>
-               <animation effect="fade" time="300">Hidden</animation>
-       </include>
-</includes>
diff --git a/addons/skin.touched/4x3Hirez/script-XBMC-Subtitles-main.xml b/addons/skin.touched/4x3Hirez/script-XBMC-Subtitles-main.xml
deleted file mode 100644 (file)
index 8cf823b..0000000
+++ /dev/null
@@ -1,418 +0,0 @@
-<window>
-       <allowoverlay>no</allowoverlay>
-       <include>Window_OpenClose_Animation_Zoom</include>
-       <coordinates>
-               <system>1</system>
-               <posx>0</posx>
-               <posy>0</posy>
-       </coordinates>
-       <controls>
-               <control type="group">
-                       <posx>240</posx>
-                       <posy>80</posy>
-                       <control type="image">
-                               <description>Shadow Background for dialogs without BehindDialogFadeOut include</description>
-                               <posx>-30</posx>
-                               <posy>-30</posy>
-                               <width>860</width>
-                               <height>860</height>
-                               <texture border="30">DialogShadow.png</texture>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>800</width>
-                               <height>60</height>
-                               <texture border="5">DialogHeader.png</texture>
-                       </control>
-                       <control type="image">
-                               <posx>0</posx>
-                               <posy>60</posy>
-                               <width>800</width>
-                               <height>740</height>
-                               <texture border="5">DialogBack.png</texture>
-                       </control>
-                       <control type="label">
-                               <description>header label</description>
-                               <posx>20</posx>
-                               <posy>0</posy>
-                               <include>WindowTitleCommons</include>
-                               <width>700</width>
-                               <label>XBMC Subtitles</label>
-                       </control>
-                       <control type="group">
-                               <posx>730</posx>
-                               <posy>0</posy>
-                               <include>DialogCloseButtonCommons</include>
-                       </control>
-                       <control type="button">
-                               <description>Subtitle chooser Button</description>
-                               <posx>10</posx>
-                               <posy>70</posy>
-                               <width>250</width>
-                               <height>46</height>
-                               <label>-</label>
-                               <texturenofocus border="5">floor_button.png</texturenofocus>
-                               <texturefocus border="5">floor_buttonFO.png</texturefocus>
-                               <onclick>Skin.ToggleSetting(SubtitleSourceChooserVisible)</onclick>
-                       </control>
-                       <control type="image" id="110">
-                               <description>Service Logo</description>
-                               <posx>20</posx>
-                               <posy>75</posy>
-                               <width>230</width>
-                               <height>40</height>
-                               <aspectratio>keep</aspectratio>
-                       </control>
-                       <control type="label" id="100">
-                               <description>textarea</description>
-                               <posx>270</posx>
-                               <posy>70</posy>
-                               <width>490</width>
-                               <height>50</height>
-                               <font>font12_title</font>
-                               <textcolor>black</textcolor>
-                               <align>left</align>
-                               <aligny>center</aligny>
-                               <wrapmultiline>true</wrapmultiline>
-                       </control>
-                       <control type="group" id="250">
-                               <control type="group" id="111">
-                                       <control type="grouplist">
-                                               <posx>20</posx>
-                                               <posy>120</posy>
-                                               <width>760</width>
-                                               <height>40</height>
-                                               <align>center</align>
-                                               <orientation>horizontal</orientation>
-                                               <itemgap>5</itemgap>
-                                               <control type="image">
-                                                       <width>40</width>
-                                                       <height>40</height>
-                                                       <texture>DefaultIconInfo.png</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <description>notification</description>
-                                                       <width min="1" max="720">auto</width>
-                                                       <height>40</height>
-                                                       <font>font13</font>
-                                                       <textcolor>black</textcolor>
-                                                       <label>$LOCALIZE[SCRIPT655]</label>
-                                                       <aligny>center</aligny>
-                                               </control>
-                                       </control>
-                               </control>
-                               <control type="list" id="120">
-                                       <posx>20</posx>
-                                       <posy>160</posy>
-                                       <width>760</width>
-                                       <height>540</height>
-                                       <onleft>120</onleft>
-                                       <onright>120</onright>
-                                       <onup>120</onup>
-                                       <ondown>120</ondown>
-                                       <viewtype label="535">list</viewtype>
-                                       <pagecontrol>-</pagecontrol>
-                                       <scrolltime>200</scrolltime>
-                                       <itemlayout width="760" height="60">
-                                               <control type="image">
-                                                       <posx>0</posx>
-                                                       <posy>-2</posy>
-                                                       <width>760</width>
-                                                       <height>5</height>
-                                                       <texture>separator.png</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>0</posx>
-                                                       <posy>5</posy>
-                                                       <width>700</width>
-                                                       <height>25</height>
-                                                       <font>font13</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>black</textcolor>
-                                                       <selectedcolor>selected</selectedcolor>
-                                                       <align>left</align>
-                                                       <info>ListItem.Label2</info>
-                                                       <visible>ListItem.property(sync)</visible>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>710</posx>
-                                                       <posy>5</posy>
-                                                       <width>50</width>
-                                                       <height>25</height>
-                                                       <texture border="5">flagging/blank.png</texture>
-                                                       <visible>ListItem.property(sync)</visible>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>735</posx>
-                                                       <posy>5</posy>
-                                                       <width>50</width>
-                                                       <height>23</height>
-                                                       <font>font8_title</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>white</textcolor>
-                                                       <align>center</align>
-                                                       <aligny>center</aligny>
-                                                       <label>[B]SYNC[/B]</label>
-                                                       <visible>ListItem.property(sync)</visible>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>0</posx>
-                                                       <posy>5</posy>
-                                                       <width>760</width>
-                                                       <height>25</height>
-                                                       <font>font13</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>black</textcolor>
-                                                       <selectedcolor>selected</selectedcolor>
-                                                       <align>left</align>
-                                                       <info>ListItem.Label2</info>
-                                                       <visible>!ListItem.property(sync)</visible>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>0</posx>
-                                                       <posy>34</posy>
-                                                       <width>30</width>
-                                                       <height>20</height>
-                                                       <texture>$INFO[Listitem.Thumb]</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>35</posx>
-                                                       <posy>30</posy>
-                                                       <width>80</width>
-                                                       <height>25</height>
-                                                       <font>font12</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>black</textcolor>
-                                                       <selectedcolor>selected</selectedcolor>
-                                                       <align>left</align>
-                                                       <info>ListItem.Label</info>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>660</posx>
-                                                       <posy>30</posy>
-                                                       <width>100</width>
-                                                       <height>25</height>
-                                                       <aspectratio align="right">keep</aspectratio>
-                                                       <texture>$INFO[ListItem.ActualIcon,light/rating1to10/rating,.png]</texture>
-                                               </control>
-                                       </itemlayout>
-                                       <focusedlayout width="760" height="60">
-                                               <control type="image">
-                                                       <posx>0</posx>
-                                                       <posy>-2</posy>
-                                                       <width>760</width>
-                                                       <height>5</height>
-                                                       <texture>separator.png</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>0</posx>
-                                                       <posy>5</posy>
-                                                       <width>700</width>
-                                                       <height>25</height>
-                                                       <font>font13</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>black</textcolor>
-                                                       <selectedcolor>selected</selectedcolor>
-                                                       <align>left</align>
-                                                       <info>ListItem.Label2</info>
-                                                       <visible>ListItem.property(sync)</visible>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>710</posx>
-                                                       <posy>5</posy>
-                                                       <width>50</width>
-                                                       <height>25</height>
-                                                       <texture border="5">flagging/blank.png</texture>
-                                                       <visible>ListItem.property(sync)</visible>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>735</posx>
-                                                       <posy>5</posy>
-                                                       <width>50</width>
-                                                       <height>23</height>
-                                                       <font>font8_title</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>white</textcolor>
-                                                       <align>center</align>
-                                                       <aligny>center</aligny>
-                                                       <label>[B]SYNC[/B]</label>
-                                                       <visible>ListItem.property(sync)</visible>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>0</posx>
-                                                       <posy>5</posy>
-                                                       <width>760</width>
-                                                       <height>25</height>
-                                                       <font>font13</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>black</textcolor>
-                                                       <selectedcolor>selected</selectedcolor>
-                                                       <align>left</align>
-                                                       <info>ListItem.Label2</info>
-                                                       <visible>!ListItem.property(sync)</visible>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>0</posx>
-                                                       <posy>34</posy>
-                                                       <width>30</width>
-                                                       <height>20</height>
-                                                       <texture>$INFO[Listitem.Thumb]</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>35</posx>
-                                                       <posy>30</posy>
-                                                       <width>80</width>
-                                                       <height>25</height>
-                                                       <font>font12</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>black</textcolor>
-                                                       <selectedcolor>selected</selectedcolor>
-                                                       <align>left</align>
-                                                       <info>ListItem.Label</info>
-                                               </control>
-                                               <control type="image">
-                                                       <posx>660</posx>
-                                                       <posy>30</posy>
-                                                       <width>100</width>
-                                                       <height>25</height>
-                                                       <aspectratio align="right">keep</aspectratio>
-                                                       <texture>$INFO[ListItem.ActualIcon,light/rating1to10/rating,.png]</texture>
-                                               </control>
-                                       </focusedlayout>
-                               </control>
-                               <control type="label">
-                                       <description>number of files/pages in list text label</description>
-                                       <posx>780</posx>
-                                       <posy>750</posy>
-                                       <width>300</width>
-                                       <height>30</height>
-                                       <font>font13</font>
-                                       <align>right</align>
-                                       <aligny>center</aligny>
-                                       <scroll>true</scroll>
-                                       <textcolor>black</textcolor>
-                                       <label>($INFO[Container(120).NumItems]) $LOCALIZE[31025] - $LOCALIZE[31024] ($INFO[Container(120).CurrentPage]/$INFO[Container(120).NumPages])</label>
-                               </control>
-                       </control>
-               </control>
-               <control type="group">
-                       <visible>Skin.HasSetting(SubtitleSourceChooserVisible)</visible>
-                       <include>VisibleFadeEffect</include>
-                       <control type="button">
-                               <description>Hidden button to close the sort when its focused</description>
-                               <posx>0</posx>
-                               <posy>0</posy>
-                               <width>ScreenWidth</width>
-                               <height>ScreenHeight</height>
-                               <texturenofocus>-</texturenofocus>
-                               <texturefocus>-</texturefocus>
-                               <onclick>Skin.Reset(SubtitleSourceChooserVisible)</onclick>
-                       </control>
-                       <control type="group">
-                               <posx>330</posx>
-                               <posy>230</posy>
-                               <control type="image">
-                                       <description>Shadow Background</description>
-                                       <posx>-30</posx>
-                                       <posy>-30</posy>
-                                       <width>380</width>
-                                       <height>500</height>
-                                       <texture border="30">ShadowBorder.png</texture>
-                               </control>
-                               <control type="button">
-                                       <description>Panel Background image</description>
-                                       <posx>0</posx>
-                                       <posy>0</posy>
-                                       <width>320</width>
-                                       <height>440</height>
-                                       <texturefocus border="5">SubBack.png</texturefocus>
-                                       <texturenofocus border="5">SubBack.png</texturenofocus>
-                                       <onclick>-</onclick>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Forground image</description>
-                                       <posx>10</posx>
-                                       <posy>40</posy>
-                                       <width>300</width>
-                                       <height>390</height>
-                                       <texture border="5">SubBack2.png</texture>
-                               </control>
-                               <control type="image">
-                                       <description>Panel Arrow image</description>
-                                       <posx>50</posx>
-                                       <posy>-34</posy>
-                                       <width>40</width>
-                                       <height>40</height>
-                                       <texture>arrow-big-up.png</texture>
-                               </control>
-                               <control type="label">
-                                       <description>Available sources label</description>
-                                       <posx>10</posx>
-                                       <posy>5</posy>
-                                       <width>300</width>
-                                       <height>25</height>
-                                       <label>$LOCALIZE[SCRIPT760]</label>
-                                       <font>font12_title</font>
-                                       <align>center</align>
-                                       <aligny>top</aligny>
-                                       <textcolor>white</textcolor>
-                               </control>
-                               <control type="panel" id="150">
-                                       <posx>11</posx>
-                                       <posy>40</posy>
-                                       <width>298</width>
-                                       <height>390</height>
-                                       <onleft>150</onleft>
-                                       <onright>150</onright>
-                                       <onup>150</onup>
-                                       <ondown>150</ondown>
-                                       <viewtype label="535">list</viewtype>
-                                       <scrolltime>200</scrolltime>
-                                       <itemlayout width="298" height="60">
-                                               <control type="image">
-                                                       <posx>0</posx>
-                                                       <posy>0</posy>
-                                                       <width>298</width>
-                                                       <height>60</height>
-                                                       <texture>button-nofocus.png</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>149</posx>
-                                                       <posy>0</posy>
-                                                       <width>290</width>
-                                                       <height>60</height>
-                                                       <font>font13</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>black</textcolor>
-                                                       <selectedcolor>selected</selectedcolor>
-                                                       <align>center</align>
-                                                       <info>ListItem.Label</info>
-                                               </control>
-                                       </itemlayout>
-                                       <focusedlayout width="298" height="60">
-                                               <control type="image">
-                                                       <posx>0</posx>
-                                                       <posy>0</posy>
-                                                       <width>298</width>
-                                                       <height>60</height>
-                                                       <texture>button-focus2.png</texture>
-                                               </control>
-                                               <control type="label">
-                                                       <posx>149</posx>
-                                                       <posy>0</posy>
-                                                       <width>290</width>
-                                                       <height>60</height>
-                                                       <font>font13</font>
-                                                       <aligny>center</aligny>
-                                                       <textcolor>black</textcolor>
-                                                       <selectedcolor>selected</selectedcolor>
-                                                       <align>center</align>
-                                                       <info>ListItem.Label</info>
-                                               </control>
-                                       </focusedlayout>
-                               </control>
-                       </control>
-               </control>
-       </controls>
-</window>
diff --git a/addons/skin.touched/addon.xml b/addons/skin.touched/addon.xml
deleted file mode 100644 (file)
index d0c10e9..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<addon
-  id="skin.touched"
-  version="0.8.5"
-  name="Touched"
-  provider-name="Jezz_X">
-  <requires>
-    <import addon="xbmc.gui" version="3.00"/>
-  </requires>
-  <extension
-    point="xbmc.gui.skin"
-    defaultthemename="textures.xbt"
-    debugging="false">
-    <res width="1280" height="960" aspect="4:3" default="true" folder="4x3Hirez" />
-  </extension>
-  <extension point="xbmc.addon.metadata">
-    <summary lang="en">Touched skin by Jezz_X designed to be used on touch screen devices</summary>
-    <description lang="en">Skin designed from the ground up to be used on touch screen devices like the iPad</description>
-    <disclaimer lang="en">Do not use this skin unless you have either touch screen or a mouse connected or you may lose navigation</disclaimer>
-    <platform>all</platform>
-  </extension>
-</addon>
diff --git a/addons/skin.touched/background/background.png b/addons/skin.touched/background/background.png
deleted file mode 100644 (file)
index c1a58b1..0000000
Binary files a/addons/skin.touched/background/background.png and /dev/null differ
diff --git a/addons/skin.touched/background/movies.png b/addons/skin.touched/background/movies.png
deleted file mode 100644 (file)
index 256442f..0000000
Binary files a/addons/skin.touched/background/movies.png and /dev/null differ
diff --git a/addons/skin.touched/background/music.png b/addons/skin.touched/background/music.png
deleted file mode 100644 (file)
index b9a35ac..0000000
Binary files a/addons/skin.touched/background/music.png and /dev/null differ
diff --git a/addons/skin.touched/background/pictures.png b/addons/skin.touched/background/pictures.png
deleted file mode 100644 (file)
index 6964562..0000000
Binary files a/addons/skin.touched/background/pictures.png and /dev/null differ
diff --git a/addons/skin.touched/background/programs.png b/addons/skin.touched/background/programs.png
deleted file mode 100644 (file)
index d47f803..0000000
Binary files a/addons/skin.touched/background/programs.png and /dev/null differ
diff --git a/addons/skin.touched/background/tvshows.png b/addons/skin.touched/background/tvshows.png
deleted file mode 100644 (file)
index b8bd91f..0000000
Binary files a/addons/skin.touched/background/tvshows.png and /dev/null differ
diff --git a/addons/skin.touched/background/videos.png b/addons/skin.touched/background/videos.png
deleted file mode 100644 (file)
index f45b1c3..0000000
Binary files a/addons/skin.touched/background/videos.png and /dev/null differ
diff --git a/addons/skin.touched/colors/defaults.xml b/addons/skin.touched/colors/defaults.xml
deleted file mode 100644 (file)
index 802b33d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<colors>
-       <color name="white">FFFFFFFF</color>
-       <color name="grey">FFb4b4b4</color>
-       <color name="grey2">FF999999</color>
-       <color name="grey3">FF505050</color>
-       <color name="black">FF000000</color>
-       <color name="blue">FF0084ff</color>
-       <color name="selected">FFEB9E17</color>
-</colors>
\ No newline at end of file
diff --git a/addons/skin.touched/fonts/DejaVuSans-Bold-Caps.ttf b/addons/skin.touched/fonts/DejaVuSans-Bold-Caps.ttf
deleted file mode 100644 (file)
index 5af21ea..0000000
Binary files a/addons/skin.touched/fonts/DejaVuSans-Bold-Caps.ttf and /dev/null differ
diff --git a/addons/skin.touched/fonts/DejaVuSans-Bold.ttf b/addons/skin.touched/fonts/DejaVuSans-Bold.ttf
deleted file mode 100644 (file)
index 54aade0..0000000
Binary files a/addons/skin.touched/fonts/DejaVuSans-Bold.ttf and /dev/null differ
diff --git a/addons/skin.touched/icon.png b/addons/skin.touched/icon.png
deleted file mode 100644 (file)
index b328845..0000000
Binary files a/addons/skin.touched/icon.png and /dev/null differ
diff --git a/addons/skin.touched/language/Chinese (Simple)/strings.xml b/addons/skin.touched/language/Chinese (Simple)/strings.xml
deleted file mode 100644 (file)
index 4dc0243..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<strings>
-  <!-- Misc labels -->
-  <string id="31000">更改你的</string>
-  <string id="31001">关闭</string>
-  <string id="31002">音频设置</string>
-  <string id="31003">IP</string>
-  <string id="31004">大写锁定</string>
-  <string id="31005">视觉效果选项</string>
-  <string id="31006">视觉效果预设</string>
-  <string id="31007">功能菜单</string>
-  <string id="31008">全屏</string>
-  <string id="31009">工作中...</string>
-  <string id="31010">当前登录为</string>
-  <string id="31011">N/A</string> <!-- Used for subtitle button in the OSD -->
-  <string id="31012">音乐 - 文件</string>
-
-  <string id="31024">页</string>
-  <string id="31025">项</string>
-  <!-- ViewType labels -->
-  <string id="31030">信息列表</string>
-  <string id="31031">宽信息列表</string>
-
-  <!-- Extra labels -->
-  <string id="31040">正在播放</string>
-
-  <string id="31042">播放</string>
-  <string id="31043">暂停</string>
-  <string id="31044">快进</string>
-  <string id="31045">回退</string>
-  <string id="31046">音频属性</string>
-  <string id="31047">当前预设</string>
-  <string id="31048">可视化效果设置</string>
-  <string id="31049">结束时间</string>
-  <string id="31050">排序: 升序</string>
-  <string id="31051">排序: 降序</string>
-
-
-  <!-- Playlist Editor labels -->
-  <string id="31055">打开播放列表</string>
-  <string id="31056">保存播放列表</string>
-  <string id="31057">关闭播放列表</string>
-  <string id="31058">系统音乐文件</string>
-  <string id="31059">当前播放列表</string>
-  <string id="31060">这是一个堆叠文件,请选择要播放的片段。</string>
-  
-  <!-- Submenu labels -->
-  <string id="31200">返回</string>
-  <string id="31201">位置</string>
-
-  <!-- Extra labels -->
-  <string id="31300">当前温度</string>
-  <string id="31301">最近修改</string>
-
-  <string id="31309">内存使用:</string>
-  <string id="31312">当前刮削器</string>
-  <string id="31313">选择刮削器</string>
-  <string id="31314">内容扫描选项</string>
-
-  <string id="31319">选择用户配置文件</string>
-  <string id="31320">最近登录</string>
-  <string id="31321">卡拉OK歌曲选择</string>
-  <string id="31322">首播</string>
-
-  <string id="31325">播放列表选项</string>
-
-  <!-- Video and Music OSD Labels  -->
-  <string id="31351">暂停</string>
-  <string id="31352">停止</string>
-  <string id="31353">快进</string>
-  <string id="31354">快退</string>
-  <string id="31355">电影菜单</string>
-  <string id="31356">下载字幕</string>
-
-  <!-- Skin Fontsets -->
-  <string id="31390">皮肤默认</string>
-  <string id="31391">基于Arial字体</string>
-
-  <!-- Description Labels  -->
-  <string id="31400">[B]设置用户界面[/B][CR][CR]变换皮肤 · 设置语言和区域 · 修改文件列表参数 · 设置屏幕保护</string>
-  <string id="31401">[B]设置视频参数[/B][CR][CR]管理视频资料库 · 设置视频播放参数 · 修改视频列表参数 · 设置字幕字体</string>
-  <string id="31402">[B]设置音乐参数[/B][CR][CR]管理音乐资料库 · 设置音乐播放参数 · 修改音乐列表参数 · 设置音乐提交 · 设置卡拉OK选项</string>
-  <string id="31403">[B]设置图片参数[/B][CR][CR]设置图片列表参数 · 设置幻灯片播放</string>
-  <string id="31404">[B]设置天气预报[/B][CR][CR]设置三个获取天气信息的城市</string>
-  <string id="31405">[B]设置网络参数[/B][CR][CR]设置通过UPnP和HTTP控制XBMC · 设置文件共享 · 设置互联网访问参数</string>
-  <string id="31406">[B]设置系统参数[/B][CR][CR]设置和校正显示器 · 设置音频输出 · 设置摇控器 · 设置节电参数 · 启用调试 · 设置管理员和锁定</string>
-  <string id="31407">[B]设置皮肤参数[/B][CR][CR]设置Confluence皮肤 · 增加和删除主菜单项 · 修改皮肤背景</string>
-  <string id="31408">[B]设置扩展功能[/B][CR][CR]管理你安装的扩展功能 · 在xbmc.org浏览并安装扩展功能 · 修改扩展功能设置</string>
-  
-  <string id="31421">选择您的用户配置文件[CR]登录并继续</string>
-</strings>
\ No newline at end of file
diff --git a/addons/skin.touched/language/Dutch/strings.xml b/addons/skin.touched/language/Dutch/strings.xml
deleted file mode 100644 (file)
index 7df80fd..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
-<strings>
-  <!-- Misc labels -->
-  <string id="31000">Verander je</string>
-  <string id="31001">Sluiten</string>
-  <string id="31002">Geluidsinstellingen</string>
-  <string id="31003">IP</string>
-  <string id="31004">Caps[CR]Lock</string>
-  <string id="31005">Visualisatie Opties</string>
-  <string id="31006">Visualisatie standaardinstellingen</string>
-  <string id="31007">Context Menu</string>
-  <string id="31008">Volledig Scherm</string>
-  <string id="31009">Bezig...</string>
-  <string id="31010">Momenteel ingelogd als</string>
-  <string id="31011">N/A</string> <!-- Used for subtitle button in the OSD -->
-  <string id="31012">Muziek - Bestanden</string>
-
-  <string id="31024">Pagina</string>
-  <string id="31025">Items</string>
-  <!-- ViewType labels -->
-  <string id="31030">Info Lijst</string>
-  <string id="31031">Info Breed</string>
-
-  <!-- Extra labels -->
-  <string id="31040">Speel nu</string>
-
-  <string id="31042">SPELEN</string>
-  <string id="31043">GEPAUZEERD</string>
-  <string id="31044">VOORUITSPOELEN</string>
-  <string id="31045">TERUGSPOELEN</string>
-  <string id="31046">Geluidsinstellingen</string>
-  <string id="31047">Huidige Instellingen</string>
-  <string id="31048">Visualisatie Standaardinstellingen</string>
-  <string id="31049">End Time</string>
-  <string id="31050">Sorteren: Oplopend</string>
-  <string id="31051">Sorteren: Aflopend</string>
-
-
-  <!-- Playlist Editor labels -->
-  <string id="31055">Open playlist</string>
-  <string id="31056">Save playlist</string>
-  <string id="31057">Sluit playlist</string>
-  <string id="31058">Muziek bestanden</string>
-  <string id="31059">Huidige playlist</string>
-  <string id="31060">Dit bestand is gestapeld, selecteer het deel dat u wilt afspelen.</string>
-  
-  <!-- Submenu labels -->
-  <string id="31200">Terug</string>
-  <string id="31201">Locatie</string>
-
-  <!-- Extra labels -->
-  <string id="31300">Huidige temperatuur</string>
-  <string id="31301">Laatste update</string>
-
-  <string id="31309">Geheugen-verbruik:</string>
-  <string id="31312">Huidige Scraper</string>
-  <string id="31313">Kies een Scraper</string>
-  <string id="31314">Inhoudsscan opties</string>
-
-  <string id="31319">Beschikbare XBMC gebruikersprofielen</string>
-  <string id="31320">Laatste login</string>
-  <string id="31321">Karaoke liedjeskiezer</string>
-  <string id="31322">Uitgezonden</string>
-
-  <string id="31325">Playlist Opties</string>
-
-  <!-- Video and Music OSD Labels  -->
-  <string id="31351">Pauze</string>
-  <string id="31352">Stop</string>
-  <string id="31353">Vooruitspoelen</string>
-  <string id="31354">Terugspoelen</string>
-  <string id="31355">Video Menu</string>
-  <string id="31356">Ondertitels downloaden</string>
-
-  <!-- Skin Fontsets -->
-  <string id="31390">Standaard Skin</string>
-  <string id="31391">Arial lettertype</string>
-
-  <!-- Description Labels  -->
-  <string id="31400">Verander je Skin � Instellen van Taal en Land � Verander bestandslijst opties � Stel een screensaver in</string>
-  <string id="31401">Manage je video bibliotheek � Afspeelopties voor Video � Verander videolijst opties � Stel ondertitel font in</string>
-  <string id="31402">Manage je Muziek bibliotheek � Afspeelopties voor Muziek � Verander Muzieklijst opties � Stel liedjesaanbod in � Stel karaokeopties in</string>
-  <string id="31403">Stel fotolijst opties in � Configureer diashow</string>
-  <string id="31404">Stel drie steden in om weerinformatie te verzamelen</string>
-  <string id="31405">Instellingen voor bedienen XBMC via UPnP en HTTP � Instellingen voor delen van bestanden � Internet instellingen</string>
-  <string id="31406">Instellen en kalibreren van scherm � Configureer geluidsuitgang � Instellen van afstandsbediening � Instellingen voor energiebesparing � Zet debugging aan � Instellingen voor vergrendeling</string>
-  <string id="31407">Instellingen voor Confluence Skin � Toevoegen en verwijderen van Home menu items � Verander skin achtergrond</string>
-  <string id="31408">Manage je geïnstalleerde add-ons � Zoek en installeer add-ons op xbmc.org � Verander add-on instellingen</string>
-
-  <string id="31421">Kies je XBMC gebruikersprofiel[CR]om door te gaan</string>
-</strings>
\ No newline at end of file
diff --git a/addons/skin.touched/language/English/strings.xml b/addons/skin.touched/language/English/strings.xml
deleted file mode 100644 (file)
index a9b534f..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
-<strings>
-  <!-- Misc labels -->
-  <string id="31000">Change Your</string>
-  <string id="31001">Close</string>
-  <string id="31002">Audio Settings</string>
-  <string id="31003">IP</string>
-  <string id="31004">Caps[CR]Lock</string>
-  <string id="31005">Visualization Options</string>
-  <string id="31006">Visualization Presets</string>
-  <string id="31007">Context Menu</string>
-  <string id="31008">Fullscreen</string>
-  <string id="31009">Working...</string>
-  <string id="31010">Currently logged in as</string>
-  <string id="31011">N/A</string> <!-- Used for subtitle button in the OSD -->
-  <string id="31012">Music - Files</string>
-
-  <string id="31024">Page</string>
-  <string id="31025">Items</string>
-  <!-- ViewType labels -->
-  <string id="31030">Info List</string>
-  <string id="31031">Info Wide</string>
-
-  <!-- Extra labels -->
-  <string id="31040">Now Playing</string>
-
-  <string id="31042">PLAYING</string>
-  <string id="31043">PAUSED</string>
-  <string id="31044">FAST FORWARD</string>
-  <string id="31045">REWIND</string>
-  <string id="31046">Audio Properties</string>
-  <string id="31047">Current Preset</string>
-  <string id="31048">Visualization Presets</string>
-  <string id="31049">End Time</string>
-  <string id="31050">Sort: Ascending</string>
-  <string id="31051">Sort: Descending</string>
-
-
-  <!-- Playlist Editor labels -->
-  <string id="31055">Open playlist</string>
-  <string id="31056">Save playlist</string>
-  <string id="31057">Close playlist</string>
-  <string id="31058">System music files</string>
-  <string id="31059">Current playlist</string>
-  <string id="31060">This file is stacked, select the part you want to play from.</string>
-  
-  <!-- Submenu labels -->
-  <string id="31200">Back</string>
-  <string id="31201">Location</string>
-  <string id="31202">View</string>
-
-  <!-- Extra labels -->
-  <string id="31300">Current Temp</string>
-  <string id="31301">Last Updated</string>
-
-  <string id="31309">Memory Used:</string>
-  <string id="31312">Current Scraper</string>
-  <string id="31313">Choose a Scraper</string>
-  <string id="31314">Content Scanning Options</string>
-
-  <string id="31319">Currently available XBMC user profiles</string>
-  <string id="31320">Last Logged In</string>
-  <string id="31321">Karaoke Song Selector</string>
-  <string id="31322">Aired</string>
-
-  <string id="31325">Playlist Options</string>
-
-  <!-- Video and Music OSD Labels  -->
-  <string id="31351">Pause</string>
-  <string id="31352">Stop</string>
-  <string id="31353">Fast Forward</string>
-  <string id="31354">Rewind</string>
-  <string id="31355">Video Menu</string>
-  <string id="31356">Download Subtitles</string>
-  <string id="31357">Image Info</string>
-
-  <!-- Skin Fontsets -->
-  <string id="31390">Skin default</string>
-  <string id="31391">Arial based</string>
-
-  <!-- Description Labels  -->
-  <string id="31400">Change the skin · Set language and region · Change file listing options · Set up a screensaver</string>
-  <string id="31401">Manage your video library · Set video playback options · Change video listing options · Set subtitle fonts</string>
-  <string id="31402">Manage your music library · Set music playback options · Change music listing options · Setup song submission · Set karaoke options</string>
-  <string id="31403">Set picture listing options · Configure slideshows</string>
-  <string id="31404">Set three cities to collect weather information</string>
-  <string id="31405">Setup control of XBMC via UPnP and HTTP · Configure file sharing · Set internet access options</string>
-  <string id="31406">Setup and calibrate displays · Configure audio output · Setup remote controls · Set power saving options · Enable debugging · Setup master lock</string>
-  <string id="31407">Setup the Confluence skin · Add and remove home menu items · Change skin backgrounds</string>
-  <string id="31408">Manage your installed Add-ons · Browse for and install Add-ons from xbmc.org · Modify Add-on settings</string>
-
-  <string id="31421">Select your XBMC user Profile[CR]to login and continue</string>
-
-  <!-- Skin Setting Headers  -->
-  <string id="31500">Home Menu Catagory Buttons</string>
-  <string id="31501">Home Page Add-on Quick Links</string>
-  <string id="31502">Miscellaneous Options</string>
-  <string id="31503">Media Window Add-ons</string>
-
-  <!-- Skin Setting Options  -->
-  <string id="31550">Home Screen Weather Info and button</string>
-  <string id="31551">Add-on Shortcut</string>
-  <string id="31552">Set Add-on to use for subtitles</string>
-  <string id="31553">"Videos" always goes to video root path</string>
-
-  </strings>
diff --git a/addons/skin.touched/language/Korean/strings.xml b/addons/skin.touched/language/Korean/strings.xml
deleted file mode 100644 (file)
index 1e67880..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<strings>
-  <!-- Misc labels -->
-  <string id="31000">변경</string>
-  <string id="31001">닫기</string>
-  <string id="31002">오디오 설정</string>
-  <string id="31003">IP</string>
-  <string id="31004">Caps[CR]Lock</string>
-  <string id="31005">시각화 옵션</string>
-  <string id="31006">시각화 사전설정</string>
-  <string id="31007">컨텍스트 메뉴</string>
-  <string id="31008">전체 화면</string>
-  <string id="31009">작업중...</string>
-  <string id="31010">로그인한 프로파일</string>
-  <string id="31011">N/A</string> <!-- Used for subtitle button in the OSD -->
-  <string id="31012">음악 - 파일</string>
-  
-  <string id="31024">페이지</string>
-  <string id="31025">항목</string>
-
-  <!-- ViewType labels -->
-  <string id="31030">정보표시 목록</string>
-  <string id="31031">정보표시 배너</string>
-
-  <!-- Extra labels -->
-  <string id="31040">지금 재생중</string>
-
-  <string id="31042">재생중</string>
-  <string id="31043">일시정지</string>
-  <string id="31044">빠르게</string>
-  <string id="31045">뒤로</string>
-  <string id="31046">오디오 속성</string>
-  <string id="31047">현재 사전설정</string>
-  <string id="31048">시각화 사전설정</string>
-  <string id="31049">종료 시간</string>
-  <string id="31050">정렬: 오름차</string>
-  <string id="31051">정렬: 내림차</string>
-
-
-  <!-- Playlist Editor labels -->
-  <string id="31055">재생목록 열기</string>
-  <string id="31056">재생목록 저장</string>
-  <string id="31057">재생목록 닫기</string>
-  <string id="31058">시스템 음악 파일</string>
-  <string id="31059">현재 재생목록</string>
-  <string id="31060">이 파일은 연결되었습니다, 재생할 부분을 선택하세요.</string>
-
-  <!-- Submenu Icon labels -->
-  <string id="31200">뒤로</string>
-  <string id="31201">위치</string>
-
-  <!-- Extra labels -->
-  <string id="31300">현재 온도</string>
-  <string id="31301">마지막 업데이트</string>
-
-  <string id="31309">사용 메모리:</string>
-  <string id="31312">현재 자료수집기</string>
-  <string id="31313">자료수집기 선택</string>
-  <string id="31314">컨텐츠 검색 옵션</string>
-
-  <string id="31319">사용가능한 프로파일</string>
-  <string id="31320">마지막 로그인</string>
-  <string id="31321">노래방 노래 선택기</string>
-  <string id="31322">방송</string>
-
-  <string id="31325">재생목록 옵션</string>
-
-  <!-- Video and Music OSD Labels  -->
-  <string id="31351">일시정지</string>
-  <string id="31352">정지</string>
-  <string id="31353">빠르게</string>
-  <string id="31354">뒤로</string>
-  <string id="31355">비디오 메뉴</string>
-  <string id="31356">자막 다운로드</string>
-
-  <!-- Skin Fontsets -->
-  <string id="31390">스킨 기본값</string>
-  <string id="31391">Arial 기본값</string>
-
-  <!-- Description Labels  -->
-  <string id="31400">스킨 변경 · 언어 및 지역 설정 · 파일 목록 옵션 변경 · 화면보호기 설정</string>
-  <string id="31401">비디오 라이브러리 관리 · 비디오 재생 옵션 변경 · 비디오 목록 옵션 변경 · 자막 글꼴 설정</string>
-  <string id="31402">음악 라이브러리 관리 · 음악 재생 옵션 변경 · 음악 목록 옵션 변경 · 노래 전송 설정 · 노래방 옵션 설정</string>
-  <string id="31403">사진 목록 옵션 변경 · 슬라이드쇼 설정</string>
-  <string id="31404">날씨 정보를 수집할 세 도시 설정</string>
-  <string id="31405">UPnP 및 HTTP 를 통한 XBMC 제어 설정 · 파일 공유 설정 · 인터넷 접근 옵션 설정</string>
-  <string id="31406">화면 설정 및 조정 · 오디오 출력 설정 · 원격 제어 설정 · 전원 절약 옵션 설정 · 디버깅 사용 · 마스터 잠금 설정</string>
-  <string id="31407">Confluence 스킨 설정 · 홈 메뉴 항목 추가 및 제거 · 스킨 배경 변경</string>
-  <string id="31408">설치된 추가기능 관리 · xbmc.org 에서 추가기능 찾기 및 설치 · 추가기능 설정 변경</string>
-
-  <string id="31421">로그인할 XBMC 사용자 프로파일을[CR]선택하고 계속하세요</string>
-</strings>
diff --git a/addons/skin.touched/media/Textures.xbt b/addons/skin.touched/media/Textures.xbt
deleted file mode 100644 (file)
index f1aae69..0000000
Binary files a/addons/skin.touched/media/Textures.xbt and /dev/null differ
index c95f255..31935c5 100644 (file)
@@ -8,6 +8,7 @@
     point="xbmc.player.musicviz"
     library_windx="Spectrum_win32dx.vis"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Визуализация представяща ротиращ се 3D спектрален анализатор</summary>
     <summary lang="en">Visualisation showing a rotating 3D Spectrum Analyzer</summary>
     <summary lang="es">Visualización que muestra un analizador de espectro en 3D girando</summary>
     <summary lang="fi">Pyörivä 3D-spektrianalysaattori</summary>
@@ -20,6 +21,8 @@
     <summary lang="ro">Vizualizare care afișează un analizator de spectre 3D rotativ</summary>
     <summary lang="se">Visualisering som visar en roterande 3D-spektrumanalysator</summary>
     <summary lang="zh">显示旋转三维频谱分析图像的可视化效果</summary>
+    <description lang="bg">DirectX Spectrum е визуализация изобразяваща ротиращ се 3D спектрален анализатор (рендването се извършва от DirectX). Ротацията е според ритъма на музиката и предизвиква вълнови ефект по спектралната решетка.
+Можете да настройвате височината на спектралната лента, скоростта и рендването (solid, points, wire frame). Характеризира се с отличен вид, като същевременно почти не натоварва процесора.</description>
     <description lang="en">DirectX Spectrum is a Visualisation showing a rotating 3D Spectrum Analyzer rendered in DirectX that moves to the beat of the music creating a wave effect across the spectrum grid.
 It also has settings to adjust the spectrum bar height, Its speed, and how the bars are rendered (solid, points, wire frame) and is a nice light weight, low cpu useage visualisation that looks great</description>
    <description lang="es">DirectX Spectrum es una visualización que muestra un analizador de espectro en 3D girando renderizado con DirectX que se mueve al ritmo de la música creando un efecto de onda en la rejilla del espectro.
diff --git a/addons/visualization.dxspectrum/resources/language/Slovenian/strings.xml b/addons/visualization.dxspectrum/resources/language/Slovenian/strings.xml
new file mode 100644 (file)
index 0000000..fc8964a
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Način</string>
+    <string id="30001">Polno</string>
+    <string id="30002">Shema</string>
+    <string id="30003">Točke</string>
+    <string id="30004">Višina stolpcev</string>
+    <string id="30005">Majhna</string>
+    <string id="30006">Privzeto</string>
+    <string id="30007">Velika</string>
+    <string id="30008">Zelo velika</string>
+    <string id="30009">Hitrost</string>
+    <string id="30010">Zelo počasno</string>
+    <string id="30011">Počasno</string>
+    <string id="30012">Privzeto</string>
+    <string id="30013">Hitro</string>
+    <string id="30014">Zelo hitro</string>
+</strings>
index 0402c85..856989d 100644 (file)
@@ -9,6 +9,7 @@
     library_linux="opengl_spectrum.vis"
     library_osx="opengl_spectrum.vis" />
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Визуализация представяща ротиращ се 3D спектрален анализатор</summary>
     <summary lang="en">Visualisation showing a rotating 3D Spectrum Analyzer</summary>
     <summary lang="es">Visualización que muestra un analizador de espectro en 3D girando</summary>
     <summary lang="fi">Pyörivä 3D-spektrianalysaattori</summary>
@@ -21,6 +22,8 @@
     <summary lang="ro">Vizualizare care afișează un analizator de spectre 3D rotativ</summary>
     <summary lang="se">Visualisering som visar en roterande 3D-spektrumanalysator</summary>
     <summary lang="zh">显示旋转三维频谱分析图像的可视化效果</summary>
+    <description lang="bg">Opengl Spectrum е визуализация изобразяваща ротиращ се 3D спектрален анализатор (рендването се извършва от Opengl). Ротацията е според ритъма на музиката и предизвиква вълнови ефект по спектралната решетка.
+Можете да настройвате височината на спектралната лента, скоростта и рендването (solid, points, wire frame). Характеризира се с отличен вид, като същевременно почти не натоварва процесора.</description>
     <description lang="en">Opengl Spectrum is a Visualisation showing a rotating 3D Spectrum Analyzer rendered in Opengl that moves to the beat of the music creating a wave effect across the spectrum grid.
 It also has settings to adjust the spectrum bar height, Its speed, and how the bars are rendered (solid, points, wire frame) and is a nice light weight, low cpu useage visualisation that looks great</description>
    <description lang="es">OpenGL Spectrum es una visualización que muestra un analizador de espectro en 3D girando renderizado con OpenGL que se mueve al ritmo de la música creando un efecto de onda en la rejilla del espectro.
diff --git a/addons/visualization.glspectrum/resources/language/Romanian/strings.xml b/addons/visualization.glspectrum/resources/language/Romanian/strings.xml
new file mode 100644 (file)
index 0000000..a9f8a99
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Mod</string>
+    <string id="30001">umplere</string>
+    <string id="30002">contur</string>
+    <string id="30003">puncte</string>
+    <string id="30004">Înălțime bară</string>
+    <string id="30005">mică</string>
+    <string id="30006">standard</string>
+    <string id="30007">mare</string>
+    <string id="30008">foarte mare</string>
+    <string id="30009">Viteză</string>
+    <string id="30010">foarte încet</string>
+    <string id="30011">încet</string>
+    <string id="30012">standard</string>
+    <string id="30013">repede</string>
+    <string id="30014">foarte repede</string>
+</strings>
diff --git a/addons/visualization.glspectrum/resources/language/Slovenian/strings.xml b/addons/visualization.glspectrum/resources/language/Slovenian/strings.xml
new file mode 100644 (file)
index 0000000..fc8964a
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Način</string>
+    <string id="30001">Polno</string>
+    <string id="30002">Shema</string>
+    <string id="30003">Točke</string>
+    <string id="30004">Višina stolpcev</string>
+    <string id="30005">Majhna</string>
+    <string id="30006">Privzeto</string>
+    <string id="30007">Velika</string>
+    <string id="30008">Zelo velika</string>
+    <string id="30009">Hitrost</string>
+    <string id="30010">Zelo počasno</string>
+    <string id="30011">Počasno</string>
+    <string id="30012">Privzeto</string>
+    <string id="30013">Hitro</string>
+    <string id="30014">Zelo hitro</string>
+</strings>
index d8968c2..8963ffb 100644 (file)
@@ -8,6 +8,7 @@
     point="xbmc.player.musicviz"
     library_osx="iTunes.mvis"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Обвивка за визуализации от iTunes</summary>
     <summary lang="en">iTunes Visualization Wrapper</summary>
     <summary lang="es">Wrapper de visualizaciones de iTunes</summary>
     <summary lang="de">iTunes Visualisierung</summary>
     <summary lang="nl">iTunes-visualisaties</summary>
     <summary lang="pl">Wrapper wizualizacji iTunes</summary>
     <summary lang="pt">Visualização iTunes</summary>
+    <summary lang="ro">Wrapper vizualizare iTunes</summary>
     <summary lang="se">iTunes visualiseringsomslag</summary>
     <summary lang="zh">iTunes可视化效果包</summary>
+    <description lang="bg">iTunes Visualization Wrapper ви позволява да използвате визуализациите от локалната инсталация на OSX iTunes в XBMC</description>
     <description lang="en">iTunes Visualization Wrapper allows you to use visualizations from your OSX iTunes install in XBMC</description>
     <description lang="es">El Wrapper de visualizaciones de iTunes le permite usar las visualizaciones de su OSX iTunes en XBMC</description>
     <description lang="de">iTunes Visualisierung ermöglicht es von der OSX iTunes Installation die Visualisierung in XBMC nutzen zu können</description>
@@ -30,6 +33,7 @@
     <description lang="nl">Dankzij iTunes-visualisaties kan XBMC gebruik maken van de visualisaties van uw iTunesinstallatie in OS X</description>
     <description lang="pl">Wrapper pozwala XBMC na użycie wizualizacji z iTunes (tylko system OSX)</description>
     <description lang="pt">O iTunes Visualization Wrapper permite usar visualizações do seu OSX iTunes no XBMC</description>
+    <description lang="ro">Wrapper vizualizare iTunes vă permite să folosiți vizualizări din instalarea iTunes de pe OSX în XBMC</description>
     <description lang="se">iTunes visualiseringsomslag tillåter dig att använda visualiseringar från din OSX iTunes installation i XBMC</description>
     <description lang="zh">iTunes可视化效果包允许你使用安装到XBMC的来自于OSX iTunes的可视化效果</description>
     <platform>osx</platform>
index 4d3225f..0c24597 100644 (file)
@@ -8,6 +8,7 @@
     point="xbmc.player.musicviz"
     library_windx="MilkDrop_win32dx.vis"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">MilkDrop ще ви отведе на пътешествие между звуковите вълни, които чувате</summary>
     <summary lang="en">MilkDrop takes you flying through the soundwaves you're hearing</summary>
     <summary lang="es">Milkdrop te lleva volando a través de las ondas que estás escuchando</summary>
     <summary lang="fi">MilkDrop lennättää sinut ääniaaltojen läpi</summary>
@@ -20,6 +21,7 @@
     <summary lang="ro">MilkDrop vă face să zburați printre undele audio pe care le auziți</summary>
     <summary lang="se">MilkDrop tar med dig på en flygtur genom ljudvågorna du hör</summary>
     <summary lang="zh">MilkDrop带你与声波一起飞翔</summary>
+    <description lang="bg">Първоначално MilkDrop е замислена като приставка за музикалния плеър Winamp. Докато слушате музикалната си колекция MilkDrop ще ви накара да "полетите" измежду звуковите вълни, които чувате. Ползва ритъма за да създаде безброй еуфорични ефекти. Така създава едно богато визуално пътешествие в звука.</description>
     <description lang="en">MilkDrop was originally a music visualizer "plug-in" to the Winamp music player. As you listen to your music, MilkDrop takes you flying through the actual soundwaves you're hearing, and uses beat detection to trigger myriad psychedelic effects, creating a rich visual journey through sound.</description>
     <description lang="es">MilkDrop era originalmente un plug-in visualizador de música para Winamp. Mientras escuchas música, MilkDrop te lleva volando a través de las ondas que estás escuchando, y utiliza la detección del ritmo para activar una gran cantidad de efectos psicodélicos, creando una rica experiencia visual a través del sonido.</description>
     <description lang="fi">MilkDrop oli alunperin Winampin visualisaattorilisäosa. Kuunnellessasi musiikkia MilkDrop lennättää sinut kuulemiesi ääniaaltojen läpi ja käyttää tahdintunnistusta lukemattomien psykedeelisten tehosteiden toistamiseen, luoden visuaalisen matkan musiikin läpi.</description>
diff --git a/addons/visualization.milkdrop/resources/language/Slovenian/strings.xml b/addons/visualization.milkdrop/resources/language/Slovenian/strings.xml
new file mode 100644 (file)
index 0000000..e468dd4
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Samodejen čas prelivanja</string>
+    <string id="30001">Čas med predlogami</string>
+    <string id="30002">Dodaten naključen čas</string>
+    <string id="30003">Vključi anisotropično filtriranje</string>
+    <string id="30004">Vključi ostre prehode</string>
+    <string id="30005">Glasnost za ostre prehode</string>
+    <string id="30006">Povprečen čas med ostrimi prehodi</string>
+    <string id="30007">Največja frekvenca osveževanja</string>
+    <string id="30008">Vključi stereo 3D</string>
+    <string id="30009">Paket predlog</string>
+    <string id="30010">Uporabniška mapa s predlogami        </string>
+    <string id="30011">Način mešanja predlog</string>
+
+    <string id="30020">WA51 predloge</string>
+    <string id="30021">Winamp predloge</string>
+    <string id="30022">Uporabniško določena mapa s predlogami</string>
+
+    <!-- setting value formats -->
+    <string id="30050">%2.0f sekund</string>
+    <string id="30051">%2.0f %%</string>
+    <string id="30052">%2.0f fps</string>
+</strings>
index c699fdc..e944eae 100644 (file)
@@ -2,7 +2,7 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: blittan-->
 <!--Email: blittan@xbmc.org-->
-<!--Date of translation: 09/11/2010-->
+<!--Date of translation: 12/26/2011-->
 <!--$Revision$-->
 <strings>
   <string id="30000">Automatisk bländningstid</string>
   <string id="30007">Maximal uppdateringsfrekvens</string>
   <string id="30008">Aktivera stereo-3D</string>
   <string id="30009">Förvalspaket</string>
+  <string id="30010">Användarförvalsmapp</string>
+  <string id="30011">Förvalsslumpningsläge</string>
+  <string id="30020">WA51-förval</string>
+  <string id="30021">Winamp-förval</string>
+  <string id="30022">Användardefineradförvalsmapp</string>
+  <string id="30050">%2.0f sek</string>
+  <string id="30051">%2.0f %%</string>
+  <string id="30052">%2.0f fps</string>
 </strings>
\ No newline at end of file
index 8f4ef18..16e51ff 100644 (file)
@@ -16,6 +16,7 @@
     </settings>
   </extension>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">projectM ще ви отведе на пътешествие между звуковите вълни, които чувате</summary>
     <summary lang="en">projectM takes you flying through the soundwaves you're hearing</summary>
     <summary lang="es">projectM te lleva volando a través de las ondas que estás escuchando</summary>
     <summary lang="fi">projectM lennättää sinut ääniaaltojen läpi</summary>
     <summary lang="ko">projectM 은 사운드웨이브 속으로 날아가는듯한 효과를 보여줍니다.</summary>
     <summary lang="pl">projectM zabiera Cię w niesamowity lot w chmurach aktualnie słuchanych dźwięków</summary>
     <summary lang="pt">O projectM leva-o a voar nas ondas sonoras que está a ouvir</summary>
+    <summary lang="ro">projectM te plimbă printre undele sonore pe care le asculți</summary>
     <summary lang="se">projectM tar dig flygande genom ljudvågorna du hör</summary>
     <summary lang="zh">projectM带你与声波一起飞翔</summary>
+    <description lang="bg">projectM е страхотна визуализация, плод на упорит труд от страна на общността. В света на Unix не съществува нищо по-добро. Потребители, като вас, създават предварително комбинации от настройки, които ползват като модел за визуализацията и така свързват звука с невероятни визуални ефекти. Пробвайте!
+Визуализацията projectM е преработка на Milkdrop под лиценза LGPL, основана на OpenGL.
+Всичко необходимо на projectM е видео карта с 3D и любимата ви музика.</description>
     <description lang="en">projectM is an awesome music visualizer. There is nothing better in the world of Unix. projectM's greatness comes from the hard work of the community. Users like you can create presets that connect music with incredible visuals. Try it!
 projectM Visualization is an LGPL'ed reimplementation of Milkdrop under OpenGL
 All projectM requires is a video card with 3D acceleration and your favorite music.</description>
@@ -50,6 +55,9 @@ projectM jest reimplementacją Milkdropa na licencji LGPL i używa OpenGL
 Wszystko czego wymaga projectM, to karta graficzna wspierająca akcelerację 3D oraz zasoby Twojej muzyki.</description>
     <description lang="pt">O projectM é um fantástico visualizador de música. Não existe nenhum melhor no mundo Unix. A grandeza do projectM advém do trabalho árduo da comunidade. Utilizadores como você podem criar pré-definições que ligam a música a visualizações incríveis. Experimente!
 O visualizador projectM é uma reimplementação do Milkdrop OpenGL sob uma licença LGPL. Tudo o que o projectM necessita é de uma placa gráfica com aceleração 3D e a sua música favorita.</description>
+       <description lang="ro">projectM este o vizualizare de muzică uimitoare. Nu există nimic mai bun în lumea Unix. Măreția projectM vine din munca întregii comunități. Utilizatori ca și tine pot crea presetări care conectează muzica cu vizualizări incredibile. Încearcă și tu!
+Vizualizarea projectM este o reimplementare LGPL a lui Milkdrop sub OpenGL.
+Tot ceea ce necesită projectM este o placă video cu accelerare 3D și muzica ta favorită.</description>
     <description lang="se">projectM är en fantastisk musikvisualisering. Det finns inget bättre i Unixvärlden. projectM's storhet kommer från hårt arbete i gemenskapen. Användare som dig kan skapa förval som anluter musiken med dom otroliga visualiseringarna. Prova det!
 projectM visualiseringen är en LGPL återskapning av Milkdrop från OpenGL
 Alla projectM kräver ett grafikkort med 3D-acceleration och din favoritmusik.</description>
diff --git a/addons/visualization.projectm/resources/language/Romanian/strings.xml b/addons/visualization.projectm/resources/language/Romanian/strings.xml
new file mode 100644 (file)
index 0000000..ae93b7f
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Calitate randare</string>
+    <string id="30001">Mică</string>
+    <string id="30002">Medie</string>
+    <string id="30003">Mare</string>
+    <string id="30004">Maximă</string>
+    <string id="30005">Mod amestecare</string>
+    <string id="30006">Durată presetare fină</string>
+    <string id="30007">Durată presetare</string>
+    <string id="30008">Senzitivitate bătaie</string>
+    <string id="30009">Pachet presetări</string>
+    <string id="30010">Pachet implicit</string>
+    <string id="30011">Dosar presetări definite de utilizator</string>
+    <string id="30012">Dosar presetări utilizator</string>
+
+    <!-- setting value formats -->
+    <string id="30050">%2.0f sec</string>
+    <string id="30051">%2.0f %%</string>
+</strings>
diff --git a/addons/visualization.projectm/resources/language/Slovenian/strings.xml b/addons/visualization.projectm/resources/language/Slovenian/strings.xml
new file mode 100644 (file)
index 0000000..c8fa2ea
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+    <!-- settings labels -->
+    <string id="30000">Kakovost</string>
+    <string id="30001">Nizka</string>
+    <string id="30002">Srednja</string>
+    <string id="30003">Visoka</string>
+    <string id="30004">Najvišja</string>
+    <string id="30005">Način mešanja</string>
+    <string id="30006">Trajanje prelivanja med predlogami</string>
+    <string id="30007">Trajanje predlog</string>
+    <string id="30008">Občutljivost</string>
+    <string id="30009">Paket predlog</string>
+    <string id="30010">Privzet paket</string>
+    <string id="30011">Uporabniško določena mapa s predlogami</string>
+    <string id="30012">Uporabniško določena mapa</string>
+
+    <!-- setting value formats -->
+    <string id="30050">%2.0f sekund</string>
+    <string id="30051">%2.0f %%</string>
+</strings>
index 356a9a3..6e9d0b6 100644 (file)
@@ -2,7 +2,7 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: blittan-->
 <!--Email: blittan@xbmc.org-->
-<!--Date of translation: 09/11/2010-->
+<!--Date of translation: 12/26/2011-->
 <!--$Revision$-->
 <strings>
   <string id="30000">Renderingskvalitet</string>
   <string id="30006">Mjukt förvalslängd</string>
   <string id="30007">Förvalslängd</string>
   <string id="30008">Taktkänslighet</string>
+  <string id="30009">Förvalspaket</string>
+  <string id="30010">Standardpaket</string>
+  <string id="30011">Användardefineradförvalsmapp</string>
+  <string id="30012">Användarförvalsmapp</string>
+  <string id="30050">%2.0f sek</string>
+  <string id="30051">%2.0f %%</string>
 </strings>
\ No newline at end of file
index 974480d..3205923 100644 (file)
@@ -10,6 +10,7 @@
     library_windx="Waveform_win32.vis"
     library_osx="Waveform.vis"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Визуализация представяща графика на две осцилиращи вълни на екрана</summary>
     <summary lang="en">Visualization showing 2 Waveform Graphs on the screen</summary>
     <summary lang="es">Visualización mostrando 2 gráficos de ondas en la pantalla</summary>
     <summary lang="de">Eine Visualisierung, welche 2 wellenförmige Grafiken auf dem Bildschirm zeigt</summary>
@@ -23,6 +24,7 @@
     <summary lang="ro">Vizualizare care arată 2 grafice Waveform pe ecran</summary>
     <summary lang="se">Visualisering som visar 2 vågformsgrafer på skärmen</summary>
     <summary lang="zh">在屏幕上显示两个波形图的可视化效果</summary>
+    <description lang="bg">Waveform представя графика на две осцилиращи вълни на екрана, по една за всеки канал (ляв и десен), който реагират на ритъма на музиката.</description>
     <description lang="en">Waveform is a simple Visualization showing 2 Waveform Graphs on the screen, One each for Left and Right channels that move to the beat of the music</description>
     <description lang="es">Waveform es un sencillo visualizador que muestra 2 gráficos de ondas en la pantalla, uno para cada canal, derecho e izquierdo, que se mueven al ritmo de la música.</description>
     <description lang="de">Waveform  ist eine einfache Visualisierung, welche 2 wellenförmige Grafiken zeigt. Je eine Grafik für den linken und rechten Kanal, welche sich im Takt der Musik bewegen</description>
@@ -33,7 +35,7 @@
     <description lang="nl">Waveform is een simpele muziekvisualisatie die twee golfvormen op het scherm toont, respectievelijk voor het linker- en rechtergeluidskanaal. De golfvormen bewegen mee met de beat van de muziek.</description>
     <description lang="pl">Waveform jest prostą wizualizacją pokazującą dwie fale dźwiękowe na ekranie. Każda na jeden kanał dźwięku.</description>
     <description lang="pt">O Waveform é um visualizador simples que mostra 2 gráficos ondulantes no ecrã, um para cada canal estéreo.</description>
-    <description lang="ro">Waveform este o vizualizare simplă care arată 2 grafice Waveform pe ecran, câte unul pentru fiecare canal stâng și drept și care se mișcă după bătăile muzicii</description>
+    <description lang="ro">Waveform este o vizualizare simplă care arată 2 grafice în formă de undă pe ecran, câte unul pentru fiecare canal stâng și drept și care se mișcă după bătăile muzicii.</description>
     <description lang="se">Waveform är en enkel visualisering som visar 2 vågformsgrafer på skärmen, en för vänster och en för höger kanal som rör sig i takt med musiken</description>
     <description lang="zh">Waveform是一个简单的可视化效果,它在屏幕上显示两个波形图,分别与音乐左右声道的节拍相呼应。</description>
     <platform>all</platform>
diff --git a/addons/weather.wunderground/LICENSE.txt b/addons/weather.wunderground/LICENSE.txt
new file mode 100644 (file)
index 0000000..ab123ff
--- /dev/null
@@ -0,0 +1,282 @@
+
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+-------------------------------------------------------------------------
diff --git a/addons/weather.wunderground/addon.xml b/addons/weather.wunderground/addon.xml
new file mode 100644 (file)
index 0000000..9396393
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<addon id="weather.wunderground" name="Weather Underground" version="0.0.9" provider-name="Team XBMC">
+       <requires>
+               <import addon="xbmc.python" version="2.0"/>
+               <import addon="script.module.simplejson" version="2.0.10"/>
+       </requires>
+       <extension point="xbmc.python.weather" library="default.py"/>
+       <extension point="xbmc.addon.metadata">
+               <summary lang="bg">Синоптична прогноза от wunderground.com</summary>
+               <summary lang="en">Weather forecast from wunderground.com</summary>
+               <summary lang="fi">Sääennusteet wunderground.com -sivustolta</summary>
+               <summary lang="se">Väderprognos från wunderground.com</summary>
+               <summary lang="zh">来自wunderground.com的天气预报</summary>
+               <description lang="bg">Прогноза за времето осигурена от Weather Underground (http://www.wunderground.com/)</description>
+               <description lang="en">Weather forecast provided by Weather Underground (http://www.wunderground.com/)</description>
+               <description lang="fi">Sääennusteet Weather Underground -sivuston tarjoamina (http://www.wunderground.com/)</description>
+               <description lang="se">Väderprognos tillhandahållen av Weather Underground (http://www.wunderground.com/)</description>
+               <description lang="zh">由Weather Underground(http://www.wunderground.com/)提供的天气预报</description>
+               <disclaimer lang="en">Use of this add-on implies that you have agreed to the Terms of Service located at http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="fi">Tämän lisäosan käyttäminen tarkoittaa, että olet hyväksynyt käyttöehdot, jotka sijaitsevat osoitteessa http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="se">Användning av detta tillägg innebär att du har godkänt Terms of Service från http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="zh">使用此扩展功能意味着你同意此连接下的服务条款:http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <platform>all</platform>
+       </extension>
+</addon>
diff --git a/addons/weather.wunderground/changelog.txt b/addons/weather.wunderground/changelog.txt
new file mode 100644 (file)
index 0000000..f9c0fe0
--- /dev/null
@@ -0,0 +1,34 @@
+v0.0.9
+- clear 7 day labels not 6
+- save only the actual location code
+
+v0.0.8
+- fix error if no internet connection is available when searching for a location
+
+v0.0.7
+- fix: import error on Windows with non/extended-ascii profile paths
+
+v0.0.6
+- ignore various n/a values in wu data
+- use kph value for windspeed
+
+v0.0.5
+- add geoip support
+- fetch 7 day forecast
+- workaround: when user switches weather addon, xbmc may call the script with a location id that has not been setup. try to fallback to id 1 in this case.
+
+v0.0.4
+- don't fetch weather when no locations are set up
+- fix incrementing values on each weather refresh when no locations are set up
+- workaround: stop xbmc from running the script in a loop when no locations are set up
+
+v0.0.3
+- added Simplified Chinese translation
+
+v0.0.2
+- show dialog instead of empty list when no locations are found
+- added german translation
+- use 'location' string instead of 'area code'
+
+v0.0.1
+- initial beta
diff --git a/addons/weather.wunderground/default.py b/addons/weather.wunderground/default.py
new file mode 100644 (file)
index 0000000..5d7eae4
--- /dev/null
@@ -0,0 +1,174 @@
+# *  This Program is free software; you can redistribute it and/or modify
+# *  it under the terms of the GNU General Public License as published by
+# *  the Free Software Foundation; either version 2, or (at your option)
+# *  any later version.
+# *
+# *  This Program is distributed in the hope that it will be useful,
+# *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+# *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# *  GNU General Public License for more details.
+# *
+# *  You should have received a copy of the GNU General Public License
+# *  along with XBMC; see the file COPYING. If not, write to
+# *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+# *  http://www.gnu.org/copyleft/gpl.html
+# *
+
+import os, sys, urllib2, base64, socket, simplejson
+import xbmcgui, xbmcaddon
+
+__addon__      = xbmcaddon.Addon()
+__provider__   = __addon__.getAddonInfo('name')
+__cwd__        = __addon__.getAddonInfo('path')
+__resource__   = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'lib')).decode("utf-8")
+
+sys.path.append (__resource__)
+
+from utilities import *
+
+LOCATION_URL    = 'http://autocomplete.wunderground.com/aq?query=%s&format=JSON'
+WEATHER_URL     = 'http://api.wunderground.com/api/%s/conditions/forecast7day/hourly/q/%s.json'
+GEOIP_URL       = 'http://api.wunderground.com/api/%s/geolookup/q/autoip.json'
+A_I_K           = 'NDEzNjBkMjFkZjFhMzczNg=='
+WEATHER_WINDOW  = xbmcgui.Window(12600)
+MAXDAYS         = 6
+
+socket.setdefaulttimeout(10)
+
+def set_property(name, value):
+    WEATHER_WINDOW.setProperty(name, value)
+
+def refresh_locations():
+    location_set1 = __addon__.getSetting('Location1')
+    location_set2 = __addon__.getSetting('Location2')
+    location_set3 = __addon__.getSetting('Location3')
+    locations = 0
+    if location_set1 != '':
+        locations += 1
+        set_property('Location1', location_set1)
+    else:
+        set_property('Location1', '')
+    if location_set2 != '':
+        locations += 1 
+        set_property('Location2', location_set2)
+    else:
+        set_property('Location2', '')
+    if location_set3 != '':
+        locations += 1
+        set_property('Location3', location_set3)
+    else:
+        set_property('Location3', '')
+    set_property('Locations', str(locations))
+
+def fetch(url):
+    try:
+        req = urllib2.urlopen(url)
+        json_string = req.read()
+        req.close()
+    except:
+        json_string = ''
+    try:
+        json_clean = json_string.replace('"-9999.00"','""').replace('"-9998"','""').replace('"NA"','""')
+        parsed_json = simplejson.loads(json_clean)
+    except:
+        parsed_json = ''
+    return parsed_json
+
+def location(string):
+    loc   = []
+    locid = []
+    query = fetch(LOCATION_URL % (urllib2.quote(string)))
+    if query != '':
+        for item in query['RESULTS']:
+            location   = item['name']
+            locationid = item['l'][3:]
+            loc.append(location)
+            locid.append(locationid)
+    return loc, locid
+
+def geoip():
+    data = fetch(GEOIP_URL % aik[::-1])
+    if data != '' and data.has_key('location'):
+        location = data['location']['l'][3:]
+        __addon__.setSetting('Location1', data['location']['city'])
+        __addon__.setSetting('Location1id', location)
+    else:
+        location = ''
+    return location
+
+def forecast(city):
+    data = fetch(WEATHER_URL % (aik[::-1], city))
+    if data != '':
+        properties(data)
+
+def properties(query):
+    weathercode = WEATHER_CODES[query['current_observation']['icon_url'][31:-4]]
+    set_property('Current.Condition'     , query['current_observation']['weather'])
+    set_property('Current.Temperature'   , str(query['current_observation']['temp_c']))
+    set_property('Current.Wind'          , str(query['current_observation']['wind_kph']))
+    set_property('Current.WindDirection' , query['current_observation']['wind_dir'])
+    set_property('Current.Humidity'      , query['current_observation']['relative_humidity'].rstrip('%'))
+    set_property('Current.FeelsLike'     , str((int(query['hourly_forecast'][0]['feelslike']['english'])-32)*5/9))
+    set_property('Current.UVIndex'       , query['hourly_forecast'][0]['uvi'])
+    set_property('Current.DewPoint'      , str(query['current_observation']['dewpoint_c']))
+    set_property('Current.OutlookIcon'   , '%s.png' % weathercode)
+    set_property('Current.FanartCode'    , weathercode)
+    for count, item in enumerate(query['forecast']['simpleforecast']['forecastday']):
+        weathercode = WEATHER_CODES[item['icon_url'][31:-4]]
+        day = DAYS[item['date']['weekday_short']]
+        set_property('Day%i.Title'       % count, day)
+        set_property('Day%i.HighTemp'    % count, str(item['high']['celsius']))
+        set_property('Day%i.LowTemp'     % count, str(item['low']['celsius']))
+        set_property('Day%i.Outlook'     % count, item['conditions'])
+        set_property('Day%i.OutlookIcon' % count, '%s.png' % weathercode)
+        set_property('Day%i.FanartCode'  % count, weathercode)
+        if count == MAXDAYS:
+            break
+
+if sys.argv[1].startswith('Location'):
+    keyboard = xbmc.Keyboard('', xbmc.getLocalizedString(14024), False)
+    keyboard.doModal()
+    if (keyboard.isConfirmed() and keyboard.getText() != ''):
+        text = keyboard.getText()
+        locations, locationids = location(text)
+        dialog = xbmcgui.Dialog()
+        if locations != []:
+            selected = dialog.select(xbmc.getLocalizedString(396), locations)
+            if selected != -1: 
+                __addon__.setSetting(sys.argv[1], locations[selected])
+                __addon__.setSetting(sys.argv[1] + 'id', locationids[selected])
+        else:
+            dialog.ok(__provider__, xbmc.getLocalizedString(284))
+
+else:
+    location = __addon__.getSetting('Location%sid' % sys.argv[1])
+    aik = base64.b64decode(A_I_K)
+    if (location == '') and (sys.argv[1] != '1'):
+        location = __addon__.getSetting('Location1id')
+    if location == '':
+        location = geoip()
+    if not location == '':
+        if location.startswith('/q/'): # backwards compatibility
+            location = location[3:]
+        forecast(location)
+    else:
+        set_property('Current.Condition'     , 'N/A')
+        set_property('Current.Temperature'   , '0')
+        set_property('Current.Wind'          , '0')
+        set_property('Current.WindDirection' , 'N/A')
+        set_property('Current.Humidity'      , '0')
+        set_property('Current.FeelsLike'     , '0')
+        set_property('Current.UVIndex'       , '0')
+        set_property('Current.DewPoint'      , '0')
+        set_property('Current.OutlookIcon'   , 'na.png')
+        set_property('Current.FanartCode'    , 'na')
+        for count in range (0, MAXDAYS+1):
+            set_property('Day%i.Title'       % count, 'N/A')
+            set_property('Day%i.HighTemp'    % count, '0')
+            set_property('Day%i.LowTemp'     % count, '0')
+            set_property('Day%i.Outlook'     % count, 'N/A')
+            set_property('Day%i.OutlookIcon' % count, 'na.png')
+            set_property('Day%i.FanartCode'  % count, 'na')
+
+refresh_locations()
+set_property('WeatherProvider', 'Weather Underground')
diff --git a/addons/weather.wunderground/icon.png b/addons/weather.wunderground/icon.png
new file mode 100644 (file)
index 0000000..4374af3
Binary files /dev/null and b/addons/weather.wunderground/icon.png differ
diff --git a/addons/weather.wunderground/resources/language/Chinese (Simple)/strings.xml b/addons/weather.wunderground/resources/language/Chinese (Simple)/strings.xml
new file mode 100644 (file)
index 0000000..bf8ec85
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+       <string id="30101">所在地设置</string>
+       <string id="30111">更改地点1</string>
+       <string id="30112">更改地点2</string>
+       <string id="30113">更改地点3</string>
+</strings>
diff --git a/addons/weather.wunderground/resources/language/Dutch/strings.xml b/addons/weather.wunderground/resources/language/Dutch/strings.xml
new file mode 100644 (file)
index 0000000..ad380a7
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+       <string id="30101">Plaatsen Instellen</string>
+       <string id="30111">Wijzig plaats 1</string>
+       <string id="30112">Wijzig plaats 2</string>
+       <string id="30113">Wijzig plaats 3</string>
+</strings>
diff --git a/addons/weather.wunderground/resources/language/English/strings.xml b/addons/weather.wunderground/resources/language/English/strings.xml
new file mode 100644 (file)
index 0000000..42ca9ea
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+       <string id="30101">Location Setup</string>
+       <string id="30111">Change location 1</string>
+       <string id="30112">Change location 2</string>
+       <string id="30113">Change location 3</string>
+</strings>
diff --git a/addons/weather.wunderground/resources/language/Finnish/strings.xml b/addons/weather.wunderground/resources/language/Finnish/strings.xml
new file mode 100644 (file)
index 0000000..104535d
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+       <string id="30101">Valitse sijainti</string>
+       <string id="30111">Vaihda sijainti 1</string>
+       <string id="30112">Vaihda sijainti 2</string>
+       <string id="30113">Vaihda sijainti 3</string>
+</strings>
diff --git a/addons/weather.wunderground/resources/language/German/strings.xml b/addons/weather.wunderground/resources/language/German/strings.xml
new file mode 100644 (file)
index 0000000..36286f0
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+       <string id="30101">Orte</string>
+       <string id="30111">Ort 1</string>
+       <string id="30112">Ort 2</string>
+       <string id="30113">Ort 3</string>
+</strings>
diff --git a/addons/weather.wunderground/resources/language/Swedish/strings.xml b/addons/weather.wunderground/resources/language/Swedish/strings.xml
new file mode 100644 (file)
index 0000000..9ef01b7
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--Language file translated with Team XBMC Translator-->
+<!--Translator: blittan-->
+<!--Email: blittan@xbmc.org-->
+<!--Date of translation: 12/26/2011-->
+<!--$Revision$-->
+<strings>
+  <string id="30101">Platsinställning</string>
+  <string id="30111">Ändra plats 1</string>
+  <string id="30112">Ändra plats 2</string>
+  <string id="30113">Ändra plats 3</string>
+</strings>
\ No newline at end of file
diff --git a/addons/weather.wunderground/resources/lib/utilities.py b/addons/weather.wunderground/resources/lib/utilities.py
new file mode 100644 (file)
index 0000000..b31f732
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*- 
+import xbmc
+
+DAYS = { "Mon": xbmc.getLocalizedString( 11 ),
+         "Tue": xbmc.getLocalizedString( 12 ),
+         "Wed": xbmc.getLocalizedString( 13 ),
+         "Thu": xbmc.getLocalizedString( 14 ),
+         "Fri": xbmc.getLocalizedString( 15 ),
+         "Sat": xbmc.getLocalizedString( 16 ),
+         "Sun": xbmc.getLocalizedString( 17 )}
+
+WEATHER_CODES = { 'chanceflurries'    : '41',
+                  'chancerain'        : '39',
+                  'chancesleet'       : '6',
+                  'chancesnow'        : '41',
+                  'chancetstorms'     : '38',
+                  'clear'             : '32',
+                  'cloudy'            : '26',
+                  'flurries'          : '13',
+                  'fog'               : '20',
+                  'hazy'              : '21',
+                  'mostlycloudy'      : '28',
+                  'mostlysunny'       : '34',
+                  'partlycloudy'      : '30',
+                  'partlysunny'       : '34',
+                  'sleet'             : '18',
+                  'rain'              : '11',
+                  'snow'              : '42',
+                  'sunny'             : '32',
+                  'tstorms'           : '35',
+                  'unknown'           : 'na',
+                  'nt_chanceflurries' : '46',
+                  'nt_chancerain'     : '45',
+                  'nt_chancesleet'    : '45',
+                  'nt_chancesnow'     : '46',
+                  'nt_chancetstorms'  : '47',
+                  'nt_clear'          : '31',
+                  'nt_cloudy'         : '27',
+                  'nt_flurries'       : '46',
+                  'nt_fog'            : '20',
+                  'nt_hazy'           : '21',
+                  'nt_mostlycloudy'   : '27',
+                  'nt_mostlysunny'    : '33',
+                  'nt_partlycloudy'   : '29',
+                  'nt_partlysunny'    : '33',
+                  'nt_sleet'          : '45',
+                  'nt_rain'           : '45',
+                  'nt_snow'           : '46',
+                  'nt_sunny'          : '31',
+                  'nt_tstorms'        : '47',
+                  'nt_unknown'        : 'na'}
diff --git a/addons/weather.wunderground/resources/settings.xml b/addons/weather.wunderground/resources/settings.xml
new file mode 100644 (file)
index 0000000..38fc86e
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<settings>
+       <category label="30101">
+               <setting id="Location1" label="30111" type="action" action="RunScript($ID,Location1)" default=""/>
+               <setting id="Location2" label="30112" type="action" action="RunScript($ID,Location2)" enable="!eq( -1,)" default=""/>
+               <setting id="Location3" label="30113" type="action" action="RunScript($ID,Location3)" enable="!eq( -1,)" default=""/>
+               <setting id="Location1id" type="text" visible="false" default=""/>
+               <setting id="Location2id" type="text" visible="false" default=""/>
+               <setting id="Location3id" type="text" visible="false" default=""/>
+       </category>
+</settings>
diff --git a/addons/weather.xbmc.builtin/addon.xml b/addons/weather.xbmc.builtin/addon.xml
deleted file mode 100644 (file)
index 595436d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="weather.xbmc.builtin"
-       name="Weather.com (standard)"
-       version="1.0.0"
-       provider-name="Team XBMC">
-  <extension point="xbmc.python.weather" library=""/>
-  <extension point="xbmc.addon.metadata">
-    <summary lang="br">Condições meteorológicas atuais.</summary>
-    <summary lang="ca">Condicions meteorològiques actuals.</summary>
-    <summary lang="en">Current weather conditions.</summary>
-    <summary lang="es">Condiciones meteorológicas actuales.</summary>
-    <summary lang="de">Aktuelle Wetterbedingungen</summary>
-    <summary lang="fr">Conditions météorologiques en cours.</summary>
-    <summary lang="hu">A jelenlegi időjárás.</summary>
-    <summary lang="ko">현재 날씨</summary>
-    <summary lang="nl">Huidige weersomstandigheden.</summary>
-    <summary lang="pl">Aktualne warunki pogodowe.</summary>
-    <summary lang="pt">Condições meteorológicas actuais.</summary>
-    <summary lang="ro">Condiții meteo curente.</summary>
-    <summary lang="ru">Текущие погодные условия.</summary>
-    <summary lang="se">Aktuella väderförhållanden.</summary>
-    <summary lang="zh">当前天气状况</summary>
-    <description lang="br">Esta é a origem padrão de informação meteorológicas.[CR][CR]Ela provê as condições atuais e previsão para quatro dias.</description>
-    <description lang="ca">Aquesta és la font per defecte de la informació meteorològica.[CR][CR]Proporciona les condicions meteorològiques actuals i una predicció a 4 dies.</description>
-    <description lang="en">This is the default weather source.[CR][CR]It provides current weather conditions and a four day outlook.</description>
-    <description lang="es">Fuente para las condiciones meteorológicas.[CR][CR]Proporciona las condiciones meteorológicas actuales y una previsión para 4 días.</description>
-    <description lang="de">Standardquelle für Wetterinformationen[CR][CR]Das aktuelle Wetter sowie eine 4 tägige Vorausschau werden angezeigt</description>
-    <description lang="fr">C'est la source météo par défaut.[CR][CR]Fournit les conditions climatiques en cours et les prévisions sur 4 jours.</description>
-    <description lang="hu">Ez az alapértelmezett időjárás információforrás.[CR][CR]Tájékoztat a jelenlegi időjárásról, valamint négynapos előrejelzést ad.</description>
-    <description lang="ko">기본 날씨 정보입니다.[CR][CR] 현재날씨와 4일치 예보를 제공합니다.</description>
-    <description lang="nl">Dit is de standaardbron voor weersinformatie.[CR][CR]Het toont de huidige weersomstandigheden en de voorspellingen voor de vier volgende dagen.</description>
-    <description lang="pl">Jest to domyślne źródło pogody.[CR][CR]Dostarcza aktualną pogodę oraz prognozę na cztery dni.</description>
-    <description lang="pt">Fonte padrão das condições meteorológicas.[CR][CR]Providencia as condições meteorológicas actuais e previsão para quatro dias.</description>
-    <description lang="ro">Sursă implicită pentru informații meteorologice.[CR][CR]Furnizează condiții meteo curente plus prognoza pe 4 zile.</description>
-    <description lang="ru">Это источник информации о погоде.[CR][CR]Он предоставляет текущие погодные условия и прогноза на четыре дня.</description>
-    <description lang="se">Detta är standardkällan för väder.[CR][CR]Det tillhandahåller nuvarande väderförhållanden och en fyra dagars prognos.</description>
-    <description lang="zh">这是默认的天气预报信息来源。[CR][CR]它提供了当前的天气状况和未来4天的天气预报。</description>
-    <platform>all</platform>
-  </extension>
-</addon>
diff --git a/addons/weather.xbmc.builtin/icon.png b/addons/weather.xbmc.builtin/icon.png
deleted file mode 100644 (file)
index 7ca3fb2..0000000
Binary files a/addons/weather.xbmc.builtin/icon.png and /dev/null differ
diff --git a/addons/webinterface.debug/addon.xml b/addons/webinterface.debug/addon.xml
deleted file mode 100644 (file)
index 4b9ee8d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<addon
-  id="webinterface.debug"
-  version="1.0.0"
-  name="JSONRPC Debug Interface"
-  provider-name="Team XBMC">
-  <requires>
-    <import addon="xbmc.gui" version="2.11"/>
-  </requires>
-  <extension
-    point="xbmc.gui.webinterface"/>
-  <extension point="xbmc.addon.metadata">
-    <summary lang="en">Team XBMC Debug Web Interface</summary>
-    <summary lang="se">Team XBMC's debubwebbgränssnitt</summary>
-    <description lang="en">Provides test harness and debug samples for the JSONRPC</description>
-    <description lang="se">Tillhandahåller provutrustning och prover för JSONRPC</description>
-    <platform>all</platform>
-  </extension>
-</addon>
diff --git a/addons/webinterface.debug/favicon.ico b/addons/webinterface.debug/favicon.ico
deleted file mode 100644 (file)
index 38ce097..0000000
Binary files a/addons/webinterface.debug/favicon.ico and /dev/null differ
diff --git a/addons/webinterface.debug/index.html b/addons/webinterface.debug/index.html
deleted file mode 100644 (file)
index 6b6697b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<html>
-       <head>
-               <title>XBMC - Debug Interface</title>
-               <meta http-equiv="Content-Language" content="EN" />
-               <meta http-equiv="Content-Type" content="UTF-8" />
-               <link rel="icon" href="/favicon.ico" type="image/x-icon">
-               <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> 
-               <meta name="robots" content="NOINDEX, NOFOLLOW">
-               <script type="text/javascript" src="/js/jquery-1.4.2.js"></script>
-               <script type="text/javascript" src="/js/testinvoker.js"></script>
-       </head>
-       <body>
-               <table>
-                       <tr>
-                               <th>Method</th>
-                               <th>Invoker</th>
-                               <th>Result</th>
-                       </tr>
-                       <tr>
-                               <td>AudioLibrary.GetGenres</td>
-                               <td><a href="#" onclick="call(GET_GENRES, 'audioLibraryGetGenresResult'); return false;">Invoke</a></td>
-                               <td id="audioLibraryGetGenresResult"></td>
-                       </tr>
-               </table>
-       </body>
-</html>
\ No newline at end of file
diff --git a/addons/webinterface.debug/js/jquery-1.4.2.js b/addons/webinterface.debug/js/jquery-1.4.2.js
deleted file mode 100644 (file)
index fff6776..0000000
+++ /dev/null
@@ -1,6240 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function( window, undefined ) {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-               // The jQuery object is actually just the init constructor 'enhanced'
-               return new jQuery.fn.init( selector, context );
-       },
-
-       // Map over jQuery in case of overwrite
-       _jQuery = window.jQuery,
-
-       // Map over the $ in case of overwrite
-       _$ = window.$,
-
-       // Use the correct document accordingly with window argument (sandbox)
-       document = window.document,
-
-       // A central reference to the root jQuery(document)
-       rootjQuery,
-
-       // A simple way to check for HTML strings or ID strings
-       // (both of which we optimize for)
-       quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
-
-       // Is it a simple selector
-       isSimple = /^.[^:#\[\.,]*$/,
-
-       // Check if a string has a non-whitespace character in it
-       rnotwhite = /\S/,
-
-       // Used for trimming whitespace
-       rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
-
-       // Match a standalone tag
-       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-       // Keep a UserAgent string for use with jQuery.browser
-       userAgent = navigator.userAgent,
-
-       // For matching the engine and version of the browser
-       browserMatch,
-       
-       // Has the ready events already been bound?
-       readyBound = false,
-       
-       // The functions to execute on DOM ready
-       readyList = [],
-
-       // The ready event handler
-       DOMContentLoaded,
-
-       // Save a reference to some core methods
-       toString = Object.prototype.toString,
-       hasOwnProperty = Object.prototype.hasOwnProperty,
-       push = Array.prototype.push,
-       slice = Array.prototype.slice,
-       indexOf = Array.prototype.indexOf;
-
-jQuery.fn = jQuery.prototype = {
-       init: function( selector, context ) {
-               var match, elem, ret, doc;
-
-               // Handle $(""), $(null), or $(undefined)
-               if ( !selector ) {
-                       return this;
-               }
-
-               // Handle $(DOMElement)
-               if ( selector.nodeType ) {
-                       this.context = this[0] = selector;
-                       this.length = 1;
-                       return this;
-               }
-               
-               // The body element only exists once, optimize finding it
-               if ( selector === "body" && !context ) {
-                       this.context = document;
-                       this[0] = document.body;
-                       this.selector = "body";
-                       this.length = 1;
-                       return this;
-               }
-
-               // Handle HTML strings
-               if ( typeof selector === "string" ) {
-                       // Are we dealing with HTML string or an ID?
-                       match = quickExpr.exec( selector );
-
-                       // Verify a match, and that no context was specified for #id
-                       if ( match && (match[1] || !context) ) {
-
-                               // HANDLE: $(html) -> $(array)
-                               if ( match[1] ) {
-                                       doc = (context ? context.ownerDocument || context : document);
-
-                                       // If a single string is passed in and it's a single tag
-                                       // just do a createElement and skip the rest
-                                       ret = rsingleTag.exec( selector );
-
-                                       if ( ret ) {
-                                               if ( jQuery.isPlainObject( context ) ) {
-                                                       selector = [ document.createElement( ret[1] ) ];
-                                                       jQuery.fn.attr.call( selector, context, true );
-
-                                               } else {
-                                                       selector = [ doc.createElement( ret[1] ) ];
-                                               }
-
-                                       } else {
-                                               ret = buildFragment( [ match[1] ], [ doc ] );
-                                               selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
-                                       }
-                                       
-                                       return jQuery.merge( this, selector );
-                                       
-                               // HANDLE: $("#id")
-                               } else {
-                                       elem = document.getElementById( match[2] );
-
-                                       if ( elem ) {
-                                               // Handle the case where IE and Opera return items
-                                               // by name instead of ID
-                                               if ( elem.id !== match[2] ) {
-                                                       return rootjQuery.find( selector );
-                                               }
-
-                                               // Otherwise, we inject the element directly into the jQuery object
-                                               this.length = 1;
-                                               this[0] = elem;
-                                       }
-
-                                       this.context = document;
-                                       this.selector = selector;
-                                       return this;
-                               }
-
-                       // HANDLE: $("TAG")
-                       } else if ( !context && /^\w+$/.test( selector ) ) {
-                               this.selector = selector;
-                               this.context = document;
-                               selector = document.getElementsByTagName( selector );
-                               return jQuery.merge( this, selector );
-
-                       // HANDLE: $(expr, $(...))
-                       } else if ( !context || context.jquery ) {
-                               return (context || rootjQuery).find( selector );
-
-                       // HANDLE: $(expr, context)
-                       // (which is just equivalent to: $(context).find(expr)
-                       } else {
-                               return jQuery( context ).find( selector );
-                       }
-
-               // HANDLE: $(function)
-               // Shortcut for document ready
-               } else if ( jQuery.isFunction( selector ) ) {
-                       return rootjQuery.ready( selector );
-               }
-
-               if (selector.selector !== undefined) {
-                       this.selector = selector.selector;
-                       this.context = selector.context;
-               }
-
-               return jQuery.makeArray( selector, this );
-       },
-
-       // Start with an empty selector
-       selector: "",
-
-       // The current version of jQuery being used
-       jquery: "1.4.2",
-
-       // The default length of a jQuery object is 0
-       length: 0,
-
-       // The number of elements contained in the matched element set
-       size: function() {
-               return this.length;
-       },
-
-       toArray: function() {
-               return slice.call( this, 0 );
-       },
-
-       // Get the Nth element in the matched element set OR
-       // Get the whole matched element set as a clean array
-       get: function( num ) {
-               return num == null ?
-
-                       // Return a 'clean' array
-                       this.toArray() :
-
-                       // Return just the object
-                       ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
-       },
-
-       // Take an array of elements and push it onto the stack
-       // (returning the new matched element set)
-       pushStack: function( elems, name, selector ) {
-               // Build a new jQuery matched element set
-               var ret = jQuery();
-
-               if ( jQuery.isArray( elems ) ) {
-                       push.apply( ret, elems );
-               
-               } else {
-                       jQuery.merge( ret, elems );
-               }
-
-               // Add the old object onto the stack (as a reference)
-               ret.prevObject = this;
-
-               ret.context = this.context;
-
-               if ( name === "find" ) {
-                       ret.selector = this.selector + (this.selector ? " " : "") + selector;
-               } else if ( name ) {
-                       ret.selector = this.selector + "." + name + "(" + selector + ")";
-               }
-
-               // Return the newly-formed element set
-               return ret;
-       },
-
-       // Execute a callback for every element in the matched set.
-       // (You can seed the arguments with an array of args, but this is
-       // only used internally.)
-       each: function( callback, args ) {
-               return jQuery.each( this, callback, args );
-       },
-       
-       ready: function( fn ) {
-               // Attach the listeners
-               jQuery.bindReady();
-
-               // If the DOM is already ready
-               if ( jQuery.isReady ) {
-                       // Execute the function immediately
-                       fn.call( document, jQuery );
-
-               // Otherwise, remember the function for later
-               } else if ( readyList ) {
-                       // Add the function to the wait list
-                       readyList.push( fn );
-               }
-
-               return this;
-       },
-       
-       eq: function( i ) {
-               return i === -1 ?
-                       this.slice( i ) :
-                       this.slice( i, +i + 1 );
-       },
-
-       first: function() {
-               return this.eq( 0 );
-       },
-
-       last: function() {
-               return this.eq( -1 );
-       },
-
-       slice: function() {
-               return this.pushStack( slice.apply( this, arguments ),
-                       "slice", slice.call(arguments).join(",") );
-       },
-
-       map: function( callback ) {
-               return this.pushStack( jQuery.map(this, function( elem, i ) {
-                       return callback.call( elem, i, elem );
-               }));
-       },
-       
-       end: function() {
-               return this.prevObject || jQuery(null);
-       },
-
-       // For internal use only.
-       // Behaves like an Array's method, not like a jQuery method.
-       push: push,
-       sort: [].sort,
-       splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-       // copy reference to target object
-       var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
-
-       // Handle a deep copy situation
-       if ( typeof target === "boolean" ) {
-               deep = target;
-               target = arguments[1] || {};
-               // skip the boolean and the target
-               i = 2;
-       }
-
-       // Handle case when target is a string or something (possible in deep copy)
-       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-               target = {};
-       }
-
-       // extend jQuery itself if only one argument is passed
-       if ( length === i ) {
-               target = this;
-               --i;
-       }
-
-       for ( ; i < length; i++ ) {
-               // Only deal with non-null/undefined values
-               if ( (options = arguments[ i ]) != null ) {
-                       // Extend the base object
-                       for ( name in options ) {
-                               src = target[ name ];
-                               copy = options[ name ];
-
-                               // Prevent never-ending loop
-                               if ( target === copy ) {
-                                       continue;
-                               }
-
-                               // Recurse if we're merging object literal values or arrays
-                               if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
-                                       var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
-                                               : jQuery.isArray(copy) ? [] : {};
-
-                                       // Never move original objects, clone them
-                                       target[ name ] = jQuery.extend( deep, clone, copy );
-
-                               // Don't bring in undefined values
-                               } else if ( copy !== undefined ) {
-                                       target[ name ] = copy;
-                               }
-                       }
-               }
-       }
-
-       // Return the modified object
-       return target;
-};
-
-jQuery.extend({
-       noConflict: function( deep ) {
-               window.$ = _$;
-
-               if ( deep ) {
-                       window.jQuery = _jQuery;
-               }
-
-               return jQuery;
-       },
-       
-       // Is the DOM ready to be used? Set to true once it occurs.
-       isReady: false,
-       
-       // Handle when the DOM is ready
-       ready: function() {
-               // Make sure that the DOM is not already loaded
-               if ( !jQuery.isReady ) {
-                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                       if ( !document.body ) {
-                               return setTimeout( jQuery.ready, 13 );
-                       }
-
-                       // Remember that the DOM is ready
-                       jQuery.isReady = true;
-
-                       // If there are functions bound, to execute
-                       if ( readyList ) {
-                               // Execute all of them
-                               var fn, i = 0;
-                               while ( (fn = readyList[ i++ ]) ) {
-                                       fn.call( document, jQuery );
-                               }
-
-                               // Reset the list of functions
-                               readyList = null;
-                       }
-
-                       // Trigger any bound ready events
-                       if ( jQuery.fn.triggerHandler ) {
-                               jQuery( document ).triggerHandler( "ready" );
-                       }
-               }
-       },
-       
-       bindReady: function() {
-               if ( readyBound ) {
-                       return;
-               }
-
-               readyBound = true;
-
-               // Catch cases where $(document).ready() is called after the
-               // browser event has already occurred.
-               if ( document.readyState === "complete" ) {
-                       return jQuery.ready();
-               }
-
-               // Mozilla, Opera and webkit nightlies currently support this event
-               if ( document.addEventListener ) {
-                       // Use the handy event callback
-                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-                       
-                       // A fallback to window.onload, that will always work
-                       window.addEventListener( "load", jQuery.ready, false );
-
-               // If IE event model is used
-               } else if ( document.attachEvent ) {
-                       // ensure firing before onload,
-                       // maybe late but safe also for iframes
-                       document.attachEvent("onreadystatechange", DOMContentLoaded);
-                       
-                       // A fallback to window.onload, that will always work
-                       window.attachEvent( "onload", jQuery.ready );
-
-                       // If IE and not a frame
-                       // continually check to see if the document is ready
-                       var toplevel = false;
-
-                       try {
-                               toplevel = window.frameElement == null;
-                       } catch(e) {}
-
-                       if ( document.documentElement.doScroll && toplevel ) {
-                               doScrollCheck();
-                       }
-               }
-       },
-
-       // See test/unit/core.js for details concerning isFunction.
-       // Since version 1.3, DOM methods and functions like alert
-       // aren't supported. They return false on IE (#2968).
-       isFunction: function( obj ) {
-               return toString.call(obj) === "[object Function]";
-       },
-
-       isArray: function( obj ) {
-               return toString.call(obj) === "[object Array]";
-       },
-
-       isPlainObject: function( obj ) {
-               // Must be an Object.
-               // Because of IE, we also have to check the presence of the constructor property.
-               // Make sure that DOM nodes and window objects don't pass through, as well
-               if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
-                       return false;
-               }
-               
-               // Not own constructor property must be Object
-               if ( obj.constructor
-                       && !hasOwnProperty.call(obj, "constructor")
-                       && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
-                       return false;
-               }
-               
-               // Own properties are enumerated firstly, so to speed up,
-               // if last one is own, then all properties are own.
-       
-               var key;
-               for ( key in obj ) {}
-               
-               return key === undefined || hasOwnProperty.call( obj, key );
-       },
-
-       isEmptyObject: function( obj ) {
-               for ( var name in obj ) {
-                       return false;
-               }
-               return true;
-       },
-       
-       error: function( msg ) {
-               throw msg;
-       },
-       
-       parseJSON: function( data ) {
-               if ( typeof data !== "string" || !data ) {
-                       return null;
-               }
-
-               // Make sure leading/trailing whitespace is removed (IE can't handle it)
-               data = jQuery.trim( data );
-               
-               // Make sure the incoming data is actual JSON
-               // Logic borrowed from http://json.org/json2.js
-               if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
-                       .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
-                       .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
-
-                       // Try to use the native JSON parser first
-                       return window.JSON && window.JSON.parse ?
-                               window.JSON.parse( data ) :
-                               (new Function("return " + data))();
-
-               } else {
-                       jQuery.error( "Invalid JSON: " + data );
-               }
-       },
-
-       noop: function() {},
-
-       // Evalulates a script in a global context
-       globalEval: function( data ) {
-               if ( data && rnotwhite.test(data) ) {
-                       // Inspired by code by Andrea Giammarchi
-                       // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
-                       var head = document.getElementsByTagName("head")[0] || document.documentElement,
-                               script = document.createElement("script");
-
-                       script.type = "text/javascript";
-
-                       if ( jQuery.support.scriptEval ) {
-                               script.appendChild( document.createTextNode( data ) );
-                       } else {
-                               script.text = data;
-                       }
-
-                       // Use insertBefore instead of appendChild to circumvent an IE6 bug.
-                       // This arises when a base node is used (#2709).
-                       head.insertBefore( script, head.firstChild );
-                       head.removeChild( script );
-               }
-       },
-
-       nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-       },
-
-       // args is for internal usage only
-       each: function( object, callback, args ) {
-               var name, i = 0,
-                       length = object.length,
-                       isObj = length === undefined || jQuery.isFunction(object);
-
-               if ( args ) {
-                       if ( isObj ) {
-                               for ( name in object ) {
-                                       if ( callback.apply( object[ name ], args ) === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( ; i < length; ) {
-                                       if ( callback.apply( object[ i++ ], args ) === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-
-               // A special, fast, case for the most common use of each
-               } else {
-                       if ( isObj ) {
-                               for ( name in object ) {
-                                       if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( var value = object[0];
-                                       i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
-                       }
-               }
-
-               return object;
-       },
-
-       trim: function( text ) {
-               return (text || "").replace( rtrim, "" );
-       },
-
-       // results is for internal usage only
-       makeArray: function( array, results ) {
-               var ret = results || [];
-
-               if ( array != null ) {
-                       // The window, strings (and functions) also have 'length'
-                       // The extra typeof function check is to prevent crashes
-                       // in Safari 2 (See: #3039)
-                       if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
-                               push.call( ret, array );
-                       } else {
-                               jQuery.merge( ret, array );
-                       }
-               }
-
-               return ret;
-       },
-
-       inArray: function( elem, array ) {
-               if ( array.indexOf ) {
-                       return array.indexOf( elem );
-               }
-
-               for ( var i = 0, length = array.length; i < length; i++ ) {
-                       if ( array[ i ] === elem ) {
-                               return i;
-                       }
-               }
-
-               return -1;
-       },
-
-       merge: function( first, second ) {
-               var i = first.length, j = 0;
-
-               if ( typeof second.length === "number" ) {
-                       for ( var l = second.length; j < l; j++ ) {
-                               first[ i++ ] = second[ j ];
-                       }
-               
-               } else {
-                       while ( second[j] !== undefined ) {
-                               first[ i++ ] = second[ j++ ];
-                       }
-               }
-
-               first.length = i;
-
-               return first;
-       },
-
-       grep: function( elems, callback, inv ) {
-               var ret = [];
-
-               // Go through the array, only saving the items
-               // that pass the validator function
-               for ( var i = 0, length = elems.length; i < length; i++ ) {
-                       if ( !inv !== !callback( elems[ i ], i ) ) {
-                               ret.push( elems[ i ] );
-                       }
-               }
-
-               return ret;
-       },
-
-       // arg is for internal usage only
-       map: function( elems, callback, arg ) {
-               var ret = [], value;
-
-               // Go through the array, translating each of the items to their
-               // new value (or values).
-               for ( var i = 0, length = elems.length; i < length; i++ ) {
-                       value = callback( elems[ i ], i, arg );
-
-                       if ( value != null ) {
-                               ret[ ret.length ] = value;
-                       }
-               }
-
-               return ret.concat.apply( [], ret );
-       },
-
-       // A global GUID counter for objects
-       guid: 1,
-
-       proxy: function( fn, proxy, thisObject ) {
-               if ( arguments.length === 2 ) {
-                       if ( typeof proxy === "string" ) {
-                               thisObject = fn;
-                               fn = thisObject[ proxy ];
-                               proxy = undefined;
-
-                       } else if ( proxy && !jQuery.isFunction( proxy ) ) {
-                               thisObject = proxy;
-                               proxy = undefined;
-                       }
-               }
-
-               if ( !proxy && fn ) {
-                       proxy = function() {
-                               return fn.apply( thisObject || this, arguments );
-                       };
-               }
-
-               // Set the guid of unique handler to the same of original handler, so it can be removed
-               if ( fn ) {
-                       proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-               }
-
-               // So proxy can be declared as an argument
-               return proxy;
-       },
-
-       // Use of jQuery.browser is frowned upon.
-       // More details: http://docs.jquery.com/Utilities/jQuery.browser
-       uaMatch: function( ua ) {
-               ua = ua.toLowerCase();
-
-               var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
-                       /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
-                       /(msie) ([\w.]+)/.exec( ua ) ||
-                       !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||
-                       [];
-
-               return { browser: match[1] || "", version: match[2] || "0" };
-       },
-
-       browser: {}
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-       jQuery.browser[ browserMatch.browser ] = true;
-       jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-       jQuery.browser.safari = true;
-}
-
-if ( indexOf ) {
-       jQuery.inArray = function( elem, array ) {
-               return indexOf.call( array, elem );
-       };
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-       DOMContentLoaded = function() {
-               document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-               jQuery.ready();
-       };
-
-} else if ( document.attachEvent ) {
-       DOMContentLoaded = function() {
-               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-               if ( document.readyState === "complete" ) {
-                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
-                       jQuery.ready();
-               }
-       };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-       if ( jQuery.isReady ) {
-               return;
-       }
-
-       try {
-               // If IE is used, use the trick by Diego Perini
-               // http://javascript.nwbox.com/IEContentLoaded/
-               document.documentElement.doScroll("left");
-       } catch( error ) {
-               setTimeout( doScrollCheck, 1 );
-               return;
-       }
-
-       // and execute any waiting functions
-       jQuery.ready();
-}
-
-function evalScript( i, elem ) {
-       if ( elem.src ) {
-               jQuery.ajax({
-                       url: elem.src,
-                       async: false,
-                       dataType: "script"
-               });
-       } else {
-               jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
-       }
-
-       if ( elem.parentNode ) {
-               elem.parentNode.removeChild( elem );
-       }
-}
-
-// Mutifunctional method to get and set values to a collection
-// The value/s can be optionally by executed if its a function
-function access( elems, key, value, exec, fn, pass ) {
-       var length = elems.length;
-       
-       // Setting many attributes
-       if ( typeof key === "object" ) {
-               for ( var k in key ) {
-                       access( elems, k, key[k], exec, fn, value );
-               }
-               return elems;
-       }
-       
-       // Setting one attribute
-       if ( value !== undefined ) {
-               // Optionally, function values get executed if exec is true
-               exec = !pass && exec && jQuery.isFunction(value);
-               
-               for ( var i = 0; i < length; i++ ) {
-                       fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-               }
-               
-               return elems;
-       }
-       
-       // Getting an attribute
-       return length ? fn( elems[0], key ) : undefined;
-}
-
-function now() {
-       return (new Date).getTime();
-}
-(function() {
-
-       jQuery.support = {};
-
-       var root = document.documentElement,
-               script = document.createElement("script"),
-               div = document.createElement("div"),
-               id = "script" + now();
-
-       div.style.display = "none";
-       div.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-       var all = div.getElementsByTagName("*"),
-               a = div.getElementsByTagName("a")[0];
-
-       // Can't get basic test support
-       if ( !all || !all.length || !a ) {
-               return;
-       }
-
-       jQuery.support = {
-               // IE strips leading whitespace when .innerHTML is used
-               leadingWhitespace: div.firstChild.nodeType === 3,
-
-               // Make sure that tbody elements aren't automatically inserted
-               // IE will insert them into empty tables
-               tbody: !div.getElementsByTagName("tbody").length,
-
-               // Make sure that link elements get serialized correctly by innerHTML
-               // This requires a wrapper element in IE
-               htmlSerialize: !!div.getElementsByTagName("link").length,
-
-               // Get the style information from getAttribute
-               // (IE uses .cssText insted)
-               style: /red/.test( a.getAttribute("style") ),
-
-               // Make sure that URLs aren't manipulated
-               // (IE normalizes it by default)
-               hrefNormalized: a.getAttribute("href") === "/a",
-
-               // Make sure that element opacity exists
-               // (IE uses filter instead)
-               // Use a regex to work around a WebKit issue. See #5145
-               opacity: /^0.55$/.test( a.style.opacity ),
-
-               // Verify style float existence
-               // (IE uses styleFloat instead of cssFloat)
-               cssFloat: !!a.style.cssFloat,
-
-               // Make sure that if no value is specified for a checkbox
-               // that it defaults to "on".
-               // (WebKit defaults to "" instead)
-               checkOn: div.getElementsByTagName("input")[0].value === "on",
-
-               // Make sure that a selected-by-default option has a working selected property.
-               // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-               optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
-
-               parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
-
-               // Will be defined later
-               deleteExpando: true,
-               checkClone: false,
-               scriptEval: false,
-               noCloneEvent: true,
-               boxModel: null
-       };
-
-       script.type = "text/javascript";
-       try {
-               script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
-       } catch(e) {}
-
-       root.insertBefore( script, root.firstChild );
-
-       // Make sure that the execution of code works by injecting a script
-       // tag with appendChild/createTextNode
-       // (IE doesn't support this, fails, and uses .text instead)
-       if ( window[ id ] ) {
-               jQuery.support.scriptEval = true;
-               delete window[ id ];
-       }
-
-       // Test to see if it's possible to delete an expando from an element
-       // Fails in Internet Explorer
-       try {
-               delete script.test;
-       
-       } catch(e) {
-               jQuery.support.deleteExpando = false;
-       }
-
-       root.removeChild( script );
-
-       if ( div.attachEvent && div.fireEvent ) {
-               div.attachEvent("onclick", function click() {
-                       // Cloning a node shouldn't copy over any
-                       // bound event handlers (IE does this)
-                       jQuery.support.noCloneEvent = false;
-                       div.detachEvent("onclick", click);
-               });
-               div.cloneNode(true).fireEvent("onclick");
-       }
-
-       div = document.createElement("div");
-       div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
-
-       var fragment = document.createDocumentFragment();
-       fragment.appendChild( div.firstChild );
-
-       // WebKit doesn't clone checked state correctly in fragments
-       jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
-
-       // Figure out if the W3C box model works as expected
-       // document.body must exist before we can do this
-       jQuery(function() {
-               var div = document.createElement("div");
-               div.style.width = div.style.paddingLeft = "1px";
-
-               document.body.appendChild( div );
-               jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
-               document.body.removeChild( div ).style.display = 'none';
-
-               div = null;
-       });
-
-       // Technique from Juriy Zaytsev
-       // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
-       var eventSupported = function( eventName ) { 
-               var el = document.createElement("div"); 
-               eventName = "on" + eventName; 
-
-               var isSupported = (eventName in el); 
-               if ( !isSupported ) { 
-                       el.setAttribute(eventName, "return;"); 
-                       isSupported = typeof el[eventName] === "function"; 
-               } 
-               el = null; 
-
-               return isSupported; 
-       };
-       
-       jQuery.support.submitBubbles = eventSupported("submit");
-       jQuery.support.changeBubbles = eventSupported("change");
-
-       // release memory in IE
-       root = script = div = all = a = null;
-})();
-
-jQuery.props = {
-       "for": "htmlFor",
-       "class": "className",
-       readonly: "readOnly",
-       maxlength: "maxLength",
-       cellspacing: "cellSpacing",
-       rowspan: "rowSpan",
-       colspan: "colSpan",
-       tabindex: "tabIndex",
-       usemap: "useMap",
-       frameborder: "frameBorder"
-};
-var expando = "jQuery" + now(), uuid = 0, windowData = {};
-
-jQuery.extend({
-       cache: {},
-       
-       expando:expando,
-
-       // The following elements throw uncatchable exceptions if you
-       // attempt to add expando properties to them.
-       noData: {
-               "embed": true,
-               "object": true,
-               "applet": true
-       },
-
-       data: function( elem, name, data ) {
-               if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-                       return;
-               }
-
-               elem = elem == window ?
-                       windowData :
-                       elem;
-
-               var id = elem[ expando ], cache = jQuery.cache, thisCache;
-
-               if ( !id && typeof name === "string" && data === undefined ) {
-                       return null;
-               }
-
-               // Compute a unique ID for the element
-               if ( !id ) { 
-                       id = ++uuid;
-               }
-
-               // Avoid generating a new cache unless none exists and we
-               // want to manipulate it.
-               if ( typeof name === "object" ) {
-                       elem[ expando ] = id;
-                       thisCache = cache[ id ] = jQuery.extend(true, {}, name);
-
-               } else if ( !cache[ id ] ) {
-                       elem[ expando ] = id;
-                       cache[ id ] = {};
-               }
-
-               thisCache = cache[ id ];
-
-               // Prevent overriding the named cache with undefined values
-               if ( data !== undefined ) {
-                       thisCache[ name ] = data;
-               }
-
-               return typeof name === "string" ? thisCache[ name ] : thisCache;
-       },
-
-       removeData: function( elem, name ) {
-               if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-                       return;
-               }
-
-               elem = elem == window ?
-                       windowData :
-                       elem;
-
-               var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
-
-               // If we want to remove a specific section of the element's data
-               if ( name ) {
-                       if ( thisCache ) {
-                               // Remove the section of cache data
-                               delete thisCache[ name ];
-
-                               // If we've removed all the data, remove the element's cache
-                               if ( jQuery.isEmptyObject(thisCache) ) {
-                                       jQuery.removeData( elem );
-                               }
-                       }
-
-               // Otherwise, we want to remove all of the element's data
-               } else {
-                       if ( jQuery.support.deleteExpando ) {
-                               delete elem[ jQuery.expando ];
-
-                       } else if ( elem.removeAttribute ) {
-                               elem.removeAttribute( jQuery.expando );
-                       }
-
-                       // Completely remove the data cache
-                       delete cache[ id ];
-               }
-       }
-});
-
-jQuery.fn.extend({
-       data: function( key, value ) {
-               if ( typeof key === "undefined" && this.length ) {
-                       return jQuery.data( this[0] );
-
-               } else if ( typeof key === "object" ) {
-                       return this.each(function() {
-                               jQuery.data( this, key );
-                       });
-               }
-
-               var parts = key.split(".");
-               parts[1] = parts[1] ? "." + parts[1] : "";
-
-               if ( value === undefined ) {
-                       var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
-                       if ( data === undefined && this.length ) {
-                               data = jQuery.data( this[0], key );
-                       }
-                       return data === undefined && parts[1] ?
-                               this.data( parts[0] ) :
-                               data;
-               } else {
-                       return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {
-                               jQuery.data( this, key, value );
-                       });
-               }
-       },
-
-       removeData: function( key ) {
-               return this.each(function() {
-                       jQuery.removeData( this, key );
-               });
-       }
-});
-jQuery.extend({
-       queue: function( elem, type, data ) {
-               if ( !elem ) {
-                       return;
-               }
-
-               type = (type || "fx") + "queue";
-               var q = jQuery.data( elem, type );
-
-               // Speed up dequeue by getting out quickly if this is just a lookup
-               if ( !data ) {
-                       return q || [];
-               }
-
-               if ( !q || jQuery.isArray(data) ) {
-                       q = jQuery.data( elem, type, jQuery.makeArray(data) );
-
-               } else {
-                       q.push( data );
-               }
-
-               return q;
-       },
-
-       dequeue: function( elem, type ) {
-               type = type || "fx";
-
-               var queue = jQuery.queue( elem, type ), fn = queue.shift();
-
-               // If the fx queue is dequeued, always remove the progress sentinel
-               if ( fn === "inprogress" ) {
-                       fn = queue.shift();
-               }
-
-               if ( fn ) {
-                       // Add a progress sentinel to prevent the fx queue from being
-                       // automatically dequeued
-                       if ( type === "fx" ) {
-                               queue.unshift("inprogress");
-                       }
-
-                       fn.call(elem, function() {
-                               jQuery.dequeue(elem, type);
-                       });
-               }
-       }
-});
-
-jQuery.fn.extend({
-       queue: function( type, data ) {
-               if ( typeof type !== "string" ) {
-                       data = type;
-                       type = "fx";
-               }
-
-               if ( data === undefined ) {
-                       return jQuery.queue( this[0], type );
-               }
-               return this.each(function( i, elem ) {
-                       var queue = jQuery.queue( this, type, data );
-
-                       if ( type === "fx" && queue[0] !== "inprogress" ) {
-                               jQuery.dequeue( this, type );
-                       }
-               });
-       },
-       dequeue: function( type ) {
-               return this.each(function() {
-                       jQuery.dequeue( this, type );
-               });
-       },
-
-       // Based off of the plugin by Clint Helfers, with permission.
-       // http://blindsignals.com/index.php/2009/07/jquery-delay/
-       delay: function( time, type ) {
-               time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
-               type = type || "fx";
-
-               return this.queue( type, function() {
-                       var elem = this;
-                       setTimeout(function() {
-                               jQuery.dequeue( elem, type );
-                       }, time );
-               });
-       },
-
-       clearQueue: function( type ) {
-               return this.queue( type || "fx", [] );
-       }
-});
-var rclass = /[\n\t]/g,
-       rspace = /\s+/,
-       rreturn = /\r/g,
-       rspecialurl = /href|src|style/,
-       rtype = /(button|input)/i,
-       rfocusable = /(button|input|object|select|textarea)/i,
-       rclickable = /^(a|area)$/i,
-       rradiocheck = /radio|checkbox/;
-
-jQuery.fn.extend({
-       attr: function( name, value ) {
-               return access( this, name, value, true, jQuery.attr );
-       },
-
-       removeAttr: function( name, fn ) {
-               return this.each(function(){
-                       jQuery.attr( this, name, "" );
-                       if ( this.nodeType === 1 ) {
-                               this.removeAttribute( name );
-                       }
-               });
-       },
-
-       addClass: function( value ) {
-               if ( jQuery.isFunction(value) ) {
-                       return this.each(function(i) {
-                               var self = jQuery(this);
-                               self.addClass( value.call(this, i, self.attr("class")) );
-                       });
-               }
-
-               if ( value && typeof value === "string" ) {
-                       var classNames = (value || "").split( rspace );
-
-                       for ( var i = 0, l = this.length; i < l; i++ ) {
-                               var elem = this[i];
-
-                               if ( elem.nodeType === 1 ) {
-                                       if ( !elem.className ) {
-                                               elem.className = value;
-
-                                       } else {
-                                               var className = " " + elem.className + " ", setClass = elem.className;
-                                               for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                       if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
-                                                               setClass += " " + classNames[c];
-                                                       }
-                                               }
-                                               elem.className = jQuery.trim( setClass );
-                                       }
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       removeClass: function( value ) {
-               if ( jQuery.isFunction(value) ) {
-                       return this.each(function(i) {
-                               var self = jQuery(this);
-                               self.removeClass( value.call(this, i, self.attr("class")) );
-                       });
-               }
-
-               if ( (value && typeof value === "string") || value === undefined ) {
-                       var classNames = (value || "").split(rspace);
-
-                       for ( var i = 0, l = this.length; i < l; i++ ) {
-                               var elem = this[i];
-
-                               if ( elem.nodeType === 1 && elem.className ) {
-                                       if ( value ) {
-                                               var className = (" " + elem.className + " ").replace(rclass, " ");
-                                               for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                       className = className.replace(" " + classNames[c] + " ", " ");
-                                               }
-                                               elem.className = jQuery.trim( className );
-
-                                       } else {
-                                               elem.className = "";
-                                       }
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       toggleClass: function( value, stateVal ) {
-               var type = typeof value, isBool = typeof stateVal === "boolean";
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function(i) {
-                               var self = jQuery(this);
-                               self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
-                       });
-               }
-
-               return this.each(function() {
-                       if ( type === "string" ) {
-                               // toggle individual class names
-                               var className, i = 0, self = jQuery(this),
-                                       state = stateVal,
-                                       classNames = value.split( rspace );
-
-                               while ( (className = classNames[ i++ ]) ) {
-                                       // check each className given, space seperated list
-                                       state = isBool ? state : !self.hasClass( className );
-                                       self[ state ? "addClass" : "removeClass" ]( className );
-                               }
-
-                       } else if ( type === "undefined" || type === "boolean" ) {
-                               if ( this.className ) {
-                                       // store className if set
-                                       jQuery.data( this, "__className__", this.className );
-                               }
-
-                               // toggle whole className
-                               this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
-                       }
-               });
-       },
-
-       hasClass: function( selector ) {
-               var className = " " + selector + " ";
-               for ( var i = 0, l = this.length; i < l; i++ ) {
-                       if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-                               return true;
-                       }
-               }
-
-               return false;
-       },
-
-       val: function( value ) {
-               if ( value === undefined ) {
-                       var elem = this[0];
-
-                       if ( elem ) {
-                               if ( jQuery.nodeName( elem, "option" ) ) {
-                                       return (elem.attributes.value || {}).specified ? elem.value : elem.text;
-                               }
-
-                               // We need to handle select boxes special
-                               if ( jQuery.nodeName( elem, "select" ) ) {
-                                       var index = elem.selectedIndex,
-                                               values = [],
-                                               options = elem.options,
-                                               one = elem.type === "select-one";
-
-                                       // Nothing was selected
-                                       if ( index < 0 ) {
-                                               return null;
-                                       }
-
-                                       // Loop through all the selected options
-                                       for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
-                                               var option = options[ i ];
-
-                                               if ( option.selected ) {
-                                                       // Get the specifc value for the option
-                                                       value = jQuery(option).val();
-
-                                                       // We don't need an array for one selects
-                                                       if ( one ) {
-                                                               return value;
-                                                       }
-
-                                                       // Multi-Selects return an array
-                                                       values.push( value );
-                                               }
-                                       }
-
-                                       return values;
-                               }
-
-                               // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-                               if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
-                                       return elem.getAttribute("value") === null ? "on" : elem.value;
-                               }
-                               
-
-                               // Everything else, we just grab the value
-                               return (elem.value || "").replace(rreturn, "");
-
-                       }
-
-                       return undefined;
-               }
-
-               var isFunction = jQuery.isFunction(value);
-
-               return this.each(function(i) {
-                       var self = jQuery(this), val = value;
-
-                       if ( this.nodeType !== 1 ) {
-                               return;
-                       }
-
-                       if ( isFunction ) {
-                               val = value.call(this, i, self.val());
-                       }
-
-                       // Typecast each time if the value is a Function and the appended
-                       // value is therefore different each time.
-                       if ( typeof val === "number" ) {
-                               val += "";
-                       }
-
-                       if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
-                               this.checked = jQuery.inArray( self.val(), val ) >= 0;
-
-                       } else if ( jQuery.nodeName( this, "select" ) ) {
-                               var values = jQuery.makeArray(val);
-
-                               jQuery( "option", this ).each(function() {
-                                       this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-                               });
-
-                               if ( !values.length ) {
-                                       this.selectedIndex = -1;
-                               }
-
-                       } else {
-                               this.value = val;
-                       }
-               });
-       }
-});
-
-jQuery.extend({
-       attrFn: {
-               val: true,
-               css: true,
-               html: true,
-               text: true,
-               data: true,
-               width: true,
-               height: true,
-               offset: true
-       },
-               
-       attr: function( elem, name, value, pass ) {
-               // don't set attributes on text and comment nodes
-               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
-                       return undefined;
-               }
-
-               if ( pass && name in jQuery.attrFn ) {
-                       return jQuery(elem)[name](value);
-               }
-
-               var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
-                       // Whether we are setting (or getting)
-                       set = value !== undefined;
-
-               // Try to normalize/fix the name
-               name = notxml && jQuery.props[ name ] || name;
-
-               // Only do all the following if this is a node (faster for style)
-               if ( elem.nodeType === 1 ) {
-                       // These attributes require special treatment
-                       var special = rspecialurl.test( name );
-
-                       // Safari mis-reports the default selected property of an option
-                       // Accessing the parent's selectedIndex property fixes it
-                       if ( name === "selected" && !jQuery.support.optSelected ) {
-                               var parent = elem.parentNode;
-                               if ( parent ) {
-                                       parent.selectedIndex;
-       
-                                       // Make sure that it also works with optgroups, see #5701
-                                       if ( parent.parentNode ) {
-                                               parent.parentNode.selectedIndex;
-                                       }
-                               }
-                       }
-
-                       // If applicable, access the attribute via the DOM 0 way
-                       if ( name in elem && notxml && !special ) {
-                               if ( set ) {
-                                       // We can't allow the type property to be changed (since it causes problems in IE)
-                                       if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
-                                               jQuery.error( "type property can't be changed" );
-                                       }
-
-                                       elem[ name ] = value;
-                               }
-
-                               // browsers index elements by id/name on forms, give priority to attributes.
-                               if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
-                                       return elem.getAttributeNode( name ).nodeValue;
-                               }
-
-                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-                               if ( name === "tabIndex" ) {
-                                       var attributeNode = elem.getAttributeNode( "tabIndex" );
-
-                                       return attributeNode && attributeNode.specified ?
-                                               attributeNode.value :
-                                               rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-                                                       0 :
-                                                       undefined;
-                               }
-
-                               return elem[ name ];
-                       }
-
-                       if ( !jQuery.support.style && notxml && name === "style" ) {
-                               if ( set ) {
-                                       elem.style.cssText = "" + value;
-                               }
-
-                               return elem.style.cssText;
-                       }
-
-                       if ( set ) {
-                               // convert the value to a string (all browsers do this but IE) see #1070
-                               elem.setAttribute( name, "" + value );
-                       }
-
-                       var attr = !jQuery.support.hrefNormalized && notxml && special ?
-                                       // Some attributes require a special call on IE
-                                       elem.getAttribute( name, 2 ) :
-                                       elem.getAttribute( name );
-
-                       // Non-existent attributes return null, we normalize to undefined
-                       return attr === null ? undefined : attr;
-               }
-
-               // elem is actually elem.style ... set the style
-               // Using attr for specific style information is now deprecated. Use style instead.
-               return jQuery.style( elem, name, value );
-       }
-});
-var rnamespaces = /\.(.*)$/,
-       fcleanup = function( nm ) {
-               return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
-                       return "\\" + ch;
-               });
-       };
-
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
-       // Bind an event to an element
-       // Original by Dean Edwards
-       add: function( elem, types, handler, data ) {
-               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-                       return;
-               }
-
-               // For whatever reason, IE has trouble passing the window object
-               // around, causing it to be cloned in the process
-               if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
-                       elem = window;
-               }
-
-               var handleObjIn, handleObj;
-
-               if ( handler.handler ) {
-                       handleObjIn = handler;
-                       handler = handleObjIn.handler;
-               }
-
-               // Make sure that the function being executed has a unique ID
-               if ( !handler.guid ) {
-                       handler.guid = jQuery.guid++;
-               }
-
-               // Init the element's event structure
-               var elemData = jQuery.data( elem );
-
-               // If no elemData is found then we must be trying to bind to one of the
-               // banned noData elements
-               if ( !elemData ) {
-                       return;
-               }
-
-               var events = elemData.events = elemData.events || {},
-                       eventHandle = elemData.handle, eventHandle;
-
-               if ( !eventHandle ) {
-                       elemData.handle = eventHandle = function() {
-                               // Handle the second event of a trigger and when
-                               // an event is called after a page has unloaded
-                               return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
-                                       jQuery.event.handle.apply( eventHandle.elem, arguments ) :
-                                       undefined;
-                       };
-               }
-
-               // Add elem as a property of the handle function
-               // This is to prevent a memory leak with non-native events in IE.
-               eventHandle.elem = elem;
-
-               // Handle multiple events separated by a space
-               // jQuery(...).bind("mouseover mouseout", fn);
-               types = types.split(" ");
-
-               var type, i = 0, namespaces;
-
-               while ( (type = types[ i++ ]) ) {
-                       handleObj = handleObjIn ?
-                               jQuery.extend({}, handleObjIn) :
-                               { handler: handler, data: data };
-
-                       // Namespaced event handlers
-                       if ( type.indexOf(".") > -1 ) {
-                               namespaces = type.split(".");
-                               type = namespaces.shift();
-                               handleObj.namespace = namespaces.slice(0).sort().join(".");
-
-                       } else {
-                               namespaces = [];
-                               handleObj.namespace = "";
-                       }
-
-                       handleObj.type = type;
-                       handleObj.guid = handler.guid;
-
-                       // Get the current list of functions bound to this event
-                       var handlers = events[ type ],
-                               special = jQuery.event.special[ type ] || {};
-
-                       // Init the event handler queue
-                       if ( !handlers ) {
-                               handlers = events[ type ] = [];
-
-                               // Check for a special event handler
-                               // Only use addEventListener/attachEvent if the special
-                               // events handler returns false
-                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-                                       // Bind the global event handler to the element
-                                       if ( elem.addEventListener ) {
-                                               elem.addEventListener( type, eventHandle, false );
-
-                                       } else if ( elem.attachEvent ) {
-                                               elem.attachEvent( "on" + type, eventHandle );
-                                       }
-                               }
-                       }
-                       
-                       if ( special.add ) { 
-                               special.add.call( elem, handleObj ); 
-
-                               if ( !handleObj.handler.guid ) {
-                                       handleObj.handler.guid = handler.guid;
-                               }
-                       }
-
-                       // Add the function to the element's handler list
-                       handlers.push( handleObj );
-
-                       // Keep track of which events have been used, for global triggering
-                       jQuery.event.global[ type ] = true;
-               }
-
-               // Nullify elem to prevent memory leaks in IE
-               elem = null;
-       },
-
-       global: {},
-
-       // Detach an event or set of events from an element
-       remove: function( elem, types, handler, pos ) {
-               // don't do events on text and comment nodes
-               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-                       return;
-               }
-
-               var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
-                       elemData = jQuery.data( elem ),
-                       events = elemData && elemData.events;
-
-               if ( !elemData || !events ) {
-                       return;
-               }
-
-               // types is actually an event object here
-               if ( types && types.type ) {
-                       handler = types.handler;
-                       types = types.type;
-               }
-
-               // Unbind all events for the element
-               if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
-                       types = types || "";
-
-                       for ( type in events ) {
-                               jQuery.event.remove( elem, type + types );
-                       }
-
-                       return;
-               }
-
-               // Handle multiple events separated by a space
-               // jQuery(...).unbind("mouseover mouseout", fn);
-               types = types.split(" ");
-
-               while ( (type = types[ i++ ]) ) {
-                       origType = type;
-                       handleObj = null;
-                       all = type.indexOf(".") < 0;
-                       namespaces = [];
-
-                       if ( !all ) {
-                               // Namespaced event handlers
-                               namespaces = type.split(".");
-                               type = namespaces.shift();
-
-                               namespace = new RegExp("(^|\\.)" + 
-                                       jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)")
-                       }
-
-                       eventType = events[ type ];
-
-                       if ( !eventType ) {
-                               continue;
-                       }
-
-                       if ( !handler ) {
-                               for ( var j = 0; j < eventType.length; j++ ) {
-                                       handleObj = eventType[ j ];
-
-                                       if ( all || namespace.test( handleObj.namespace ) ) {
-                                               jQuery.event.remove( elem, origType, handleObj.handler, j );
-                                               eventType.splice( j--, 1 );
-                                       }
-                               }
-
-                               continue;
-                       }
-
-                       special = jQuery.event.special[ type ] || {};
-
-                       for ( var j = pos || 0; j < eventType.length; j++ ) {
-                               handleObj = eventType[ j ];
-
-                               if ( handler.guid === handleObj.guid ) {
-                                       // remove the given handler for the given type
-                                       if ( all || namespace.test( handleObj.namespace ) ) {
-                                               if ( pos == null ) {
-                                                       eventType.splice( j--, 1 );
-                                               }
-
-                                               if ( special.remove ) {
-                                                       special.remove.call( elem, handleObj );
-                                               }
-                                       }
-
-                                       if ( pos != null ) {
-                                               break;
-                                       }
-                               }
-                       }
-
-                       // remove generic event handler if no more handlers exist
-                       if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
-                               if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-                                       removeEvent( elem, type, elemData.handle );
-                               }
-
-                               ret = null;
-                               delete events[ type ];
-                       }
-               }
-
-               // Remove the expando if it's no longer used
-               if ( jQuery.isEmptyObject( events ) ) {
-                       var handle = elemData.handle;
-                       if ( handle ) {
-                               handle.elem = null;
-                       }
-
-                       delete elemData.events;
-                       delete elemData.handle;
-
-                       if ( jQuery.isEmptyObject( elemData ) ) {
-                               jQuery.removeData( elem );
-                       }
-               }
-       },
-
-       // bubbling is internal
-       trigger: function( event, data, elem /*, bubbling */ ) {
-               // Event object or event type
-               var type = event.type || event,
-                       bubbling = arguments[3];
-
-               if ( !bubbling ) {
-                       event = typeof event === "object" ?
-                               // jQuery.Event object
-                               event[expando] ? event :
-                               // Object literal
-                               jQuery.extend( jQuery.Event(type), event ) :
-                               // Just the event type (string)
-                               jQuery.Event(type);
-
-                       if ( type.indexOf("!") >= 0 ) {
-                               event.type = type = type.slice(0, -1);
-                               event.exclusive = true;
-                       }
-
-                       // Handle a global trigger
-                       if ( !elem ) {
-                               // Don't bubble custom events when global (to avoid too much overhead)
-                               event.stopPropagation();
-
-                               // Only trigger if we've ever bound an event for it
-                               if ( jQuery.event.global[ type ] ) {
-                                       jQuery.each( jQuery.cache, function() {
-                                               if ( this.events && this.events[type] ) {
-                                                       jQuery.event.trigger( event, data, this.handle.elem );
-                                               }
-                                       });
-                               }
-                       }
-
-                       // Handle triggering a single element
-
-                       // don't do events on text and comment nodes
-                       if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
-                               return undefined;
-                       }
-
-                       // Clean up in case it is reused
-                       event.result = undefined;
-                       event.target = elem;
-
-                       // Clone the incoming data, if any
-                       data = jQuery.makeArray( data );
-                       data.unshift( event );
-               }
-
-               event.currentTarget = elem;
-
-               // Trigger the event, it is assumed that "handle" is a function
-               var handle = jQuery.data( elem, "handle" );
-               if ( handle ) {
-                       handle.apply( elem, data );
-               }
-
-               var parent = elem.parentNode || elem.ownerDocument;
-
-               // Trigger an inline bound script
-               try {
-                       if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
-                               if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
-                                       event.result = false;
-                               }
-                       }
-
-               // prevent IE from throwing an error for some elements with some event types, see #3533
-               } catch (e) {}
-
-               if ( !event.isPropagationStopped() && parent ) {
-                       jQuery.event.trigger( event, data, parent, true );
-
-               } else if ( !event.isDefaultPrevented() ) {
-                       var target = event.target, old,
-                               isClick = jQuery.nodeName(target, "a") && type === "click",
-                               special = jQuery.event.special[ type ] || {};
-
-                       if ( (!special._default || special._default.call( elem, event ) === false) && 
-                               !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
-
-                               try {
-                                       if ( target[ type ] ) {
-                                               // Make sure that we don't accidentally re-trigger the onFOO events
-                                               old = target[ "on" + type ];
-
-                                               if ( old ) {
-                                                       target[ "on" + type ] = null;
-                                               }
-
-                                               jQuery.event.triggered = true;
-                                               target[ type ]();
-                                       }
-
-                               // prevent IE from throwing an error for some elements with some event types, see #3533
-                               } catch (e) {}
-
-                               if ( old ) {
-                                       target[ "on" + type ] = old;
-                               }
-
-                               jQuery.event.triggered = false;
-                       }
-               }
-       },
-
-       handle: function( event ) {
-               var all, handlers, namespaces, namespace, events;
-
-               event = arguments[0] = jQuery.event.fix( event || window.event );
-               event.currentTarget = this;
-
-               // Namespaced event handlers
-               all = event.type.indexOf(".") < 0 && !event.exclusive;
-
-               if ( !all ) {
-                       namespaces = event.type.split(".");
-                       event.type = namespaces.shift();
-                       namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
-               }
-
-               var events = jQuery.data(this, "events"), handlers = events[ event.type ];
-
-               if ( events && handlers ) {
-                       // Clone the handlers to prevent manipulation
-                       handlers = handlers.slice(0);
-
-                       for ( var j = 0, l = handlers.length; j < l; j++ ) {
-                               var handleObj = handlers[ j ];
-
-                               // Filter the functions by class
-                               if ( all || namespace.test( handleObj.namespace ) ) {
-                                       // Pass in a reference to the handler function itself
-                                       // So that we can later remove it
-                                       event.handler = handleObj.handler;
-                                       event.data = handleObj.data;
-                                       event.handleObj = handleObj;
-       
-                                       var ret = handleObj.handler.apply( this, arguments );
-
-                                       if ( ret !== undefined ) {
-                                               event.result = ret;
-                                               if ( ret === false ) {
-                                                       event.preventDefault();
-                                                       event.stopPropagation();
-                                               }
-                                       }
-
-                                       if ( event.isImmediatePropagationStopped() ) {
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               return event.result;
-       },
-
-       props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
-       fix: function( event ) {
-               if ( event[ expando ] ) {
-                       return event;
-               }
-
-               // store a copy of the original event object
-               // and "clone" to set read-only properties
-               var originalEvent = event;
-               event = jQuery.Event( originalEvent );
-
-               for ( var i = this.props.length, prop; i; ) {
-                       prop = this.props[ --i ];
-                       event[ prop ] = originalEvent[ prop ];
-               }
-
-               // Fix target property, if necessary
-               if ( !event.target ) {
-                       event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
-               }
-
-               // check if target is a textnode (safari)
-               if ( event.target.nodeType === 3 ) {
-                       event.target = event.target.parentNode;
-               }
-
-               // Add relatedTarget, if necessary
-               if ( !event.relatedTarget && event.fromElement ) {
-                       event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
-               }
-
-               // Calculate pageX/Y if missing and clientX/Y available
-               if ( event.pageX == null && event.clientX != null ) {
-                       var doc = document.documentElement, body = document.body;
-                       event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
-                       event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
-               }
-
-               // Add which for key events
-               if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
-                       event.which = event.charCode || event.keyCode;
-               }
-
-               // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
-               if ( !event.metaKey && event.ctrlKey ) {
-                       event.metaKey = event.ctrlKey;
-               }
-
-               // Add which for click: 1 === left; 2 === middle; 3 === right
-               // Note: button is not normalized, so don't use it
-               if ( !event.which && event.button !== undefined ) {
-                       event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
-               }
-
-               return event;
-       },
-
-       // Deprecated, use jQuery.guid instead
-       guid: 1E8,
-
-       // Deprecated, use jQuery.proxy instead
-       proxy: jQuery.proxy,
-
-       special: {
-               ready: {
-                       // Make sure the ready event is setup
-                       setup: jQuery.bindReady,
-                       teardown: jQuery.noop
-               },
-
-               live: {
-                       add: function( handleObj ) {
-                               jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); 
-                       },
-
-                       remove: function( handleObj ) {
-                               var remove = true,
-                                       type = handleObj.origType.replace(rnamespaces, "");
-                               
-                               jQuery.each( jQuery.data(this, "events").live || [], function() {
-                                       if ( type === this.origType.replace(rnamespaces, "") ) {
-                                               remove = false;
-                                               return false;
-                                       }
-                               });
-
-                               if ( remove ) {
-                                       jQuery.event.remove( this, handleObj.origType, liveHandler );
-                               }
-                       }
-
-               },
-
-               beforeunload: {
-                       setup: function( data, namespaces, eventHandle ) {
-                               // We only want to do this special case on windows
-                               if ( this.setInterval ) {
-                                       this.onbeforeunload = eventHandle;
-                               }
-
-                               return false;
-                       },
-                       teardown: function( namespaces, eventHandle ) {
-                               if ( this.onbeforeunload === eventHandle ) {
-                                       this.onbeforeunload = null;
-                               }
-                       }
-               }
-       }
-};
-
-var removeEvent = document.removeEventListener ?
-       function( elem, type, handle ) {
-               elem.removeEventListener( type, handle, false );
-       } : 
-       function( elem, type, handle ) {
-               elem.detachEvent( "on" + type, handle );
-       };
-
-jQuery.Event = function( src ) {
-       // Allow instantiation without the 'new' keyword
-       if ( !this.preventDefault ) {
-               return new jQuery.Event( src );
-       }
-
-       // Event object
-       if ( src && src.type ) {
-               this.originalEvent = src;
-               this.type = src.type;
-       // Event type
-       } else {
-               this.type = src;
-       }
-
-       // timeStamp is buggy for some events on Firefox(#3843)
-       // So we won't rely on the native value
-       this.timeStamp = now();
-
-       // Mark it as fixed
-       this[ expando ] = true;
-};
-
-function returnFalse() {
-       return false;
-}
-function returnTrue() {
-       return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-       preventDefault: function() {
-               this.isDefaultPrevented = returnTrue;
-
-               var e = this.originalEvent;
-               if ( !e ) {
-                       return;
-               }
-               
-               // if preventDefault exists run it on the original event
-               if ( e.preventDefault ) {
-                       e.preventDefault();
-               }
-               // otherwise set the returnValue property of the original event to false (IE)
-               e.returnValue = false;
-       },
-       stopPropagation: function() {
-               this.isPropagationStopped = returnTrue;
-
-               var e = this.originalEvent;
-               if ( !e ) {
-                       return;
-               }
-               // if stopPropagation exists run it on the original event
-               if ( e.stopPropagation ) {
-                       e.stopPropagation();
-               }
-               // otherwise set the cancelBubble property of the original event to true (IE)
-               e.cancelBubble = true;
-       },
-       stopImmediatePropagation: function() {
-               this.isImmediatePropagationStopped = returnTrue;
-               this.stopPropagation();
-       },
-       isDefaultPrevented: returnFalse,
-       isPropagationStopped: returnFalse,
-       isImmediatePropagationStopped: returnFalse
-};
-
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-var withinElement = function( event ) {
-       // Check if mouse(over|out) are still within the same parent element
-       var parent = event.relatedTarget;
-
-       // Firefox sometimes assigns relatedTarget a XUL element
-       // which we cannot access the parentNode property of
-       try {
-               // Traverse up the tree
-               while ( parent && parent !== this ) {
-                       parent = parent.parentNode;
-               }
-
-               if ( parent !== this ) {
-                       // set the correct event type
-                       event.type = event.data;
-
-                       // handle event if we actually just moused on to a non sub-element
-                       jQuery.event.handle.apply( this, arguments );
-               }
-
-       // assuming we've left the element since we most likely mousedover a xul element
-       } catch(e) { }
-},
-
-// In case of event delegation, we only need to rename the event.type,
-// liveHandler will take care of the rest.
-delegate = function( event ) {
-       event.type = event.data;
-       jQuery.event.handle.apply( this, arguments );
-};
-
-// Create mouseenter and mouseleave events
-jQuery.each({
-       mouseenter: "mouseover",
-       mouseleave: "mouseout"
-}, function( orig, fix ) {
-       jQuery.event.special[ orig ] = {
-               setup: function( data ) {
-                       jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
-               },
-               teardown: function( data ) {
-                       jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
-               }
-       };
-});
-
-// submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-       jQuery.event.special.submit = {
-               setup: function( data, namespaces ) {
-                       if ( this.nodeName.toLowerCase() !== "form" ) {
-                               jQuery.event.add(this, "click.specialSubmit", function( e ) {
-                                       var elem = e.target, type = elem.type;
-
-                                       if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
-                                               return trigger( "submit", this, arguments );
-                                       }
-                               });
-        
-                               jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
-                                       var elem = e.target, type = elem.type;
-
-                                       if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
-                                               return trigger( "submit", this, arguments );
-                                       }
-                               });
-
-                       } else {
-                               return false;
-                       }
-               },
-
-               teardown: function( namespaces ) {
-                       jQuery.event.remove( this, ".specialSubmit" );
-               }
-       };
-
-}
-
-// change delegation, happens here so we have bind.
-if ( !jQuery.support.changeBubbles ) {
-
-       var formElems = /textarea|input|select/i,
-
-       changeFilters,
-
-       getVal = function( elem ) {
-               var type = elem.type, val = elem.value;
-
-               if ( type === "radio" || type === "checkbox" ) {
-                       val = elem.checked;
-
-               } else if ( type === "select-multiple" ) {
-                       val = elem.selectedIndex > -1 ?
-                               jQuery.map( elem.options, function( elem ) {
-                                       return elem.selected;
-                               }).join("-") :
-                               "";
-
-               } else if ( elem.nodeName.toLowerCase() === "select" ) {
-                       val = elem.selectedIndex;
-               }
-
-               return val;
-       },
-
-       testChange = function testChange( e ) {
-               var elem = e.target, data, val;
-
-               if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
-                       return;
-               }
-
-               data = jQuery.data( elem, "_change_data" );
-               val = getVal(elem);
-
-               // the current data will be also retrieved by beforeactivate
-               if ( e.type !== "focusout" || elem.type !== "radio" ) {
-                       jQuery.data( elem, "_change_data", val );
-               }
-               
-               if ( data === undefined || val === data ) {
-                       return;
-               }
-
-               if ( data != null || val ) {
-                       e.type = "change";
-                       return jQuery.event.trigger( e, arguments[1], elem );
-               }
-       };
-
-       jQuery.event.special.change = {
-               filters: {
-                       focusout: testChange, 
-
-                       click: function( e ) {
-                               var elem = e.target, type = elem.type;
-
-                               if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
-                                       return testChange.call( this, e );
-                               }
-                       },
-
-                       // Change has to be called before submit
-                       // Keydown will be called before keypress, which is used in submit-event delegation
-                       keydown: function( e ) {
-                               var elem = e.target, type = elem.type;
-
-                               if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
-                                       (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
-                                       type === "select-multiple" ) {
-                                       return testChange.call( this, e );
-                               }
-                       },
-
-                       // Beforeactivate happens also before the previous element is blurred
-                       // with this event you can't trigger a change event, but you can store
-                       // information/focus[in] is not needed anymore
-                       beforeactivate: function( e ) {
-                               var elem = e.target;
-                               jQuery.data( elem, "_change_data", getVal(elem) );
-                       }
-               },
-
-               setup: function( data, namespaces ) {
-                       if ( this.type === "file" ) {
-                               return false;
-                       }
-
-                       for ( var type in changeFilters ) {
-                               jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
-                       }
-
-                       return formElems.test( this.nodeName );
-               },
-
-               teardown: function( namespaces ) {
-                       jQuery.event.remove( this, ".specialChange" );
-
-                       return formElems.test( this.nodeName );
-               }
-       };
-
-       changeFilters = jQuery.event.special.change.filters;
-}
-
-function trigger( type, elem, args ) {
-       args[0].type = type;
-       return jQuery.event.handle.apply( elem, args );
-}
-
-// Create "bubbling" focus and blur events
-if ( document.addEventListener ) {
-       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-               jQuery.event.special[ fix ] = {
-                       setup: function() {
-                               this.addEventListener( orig, handler, true );
-                       }, 
-                       teardown: function() { 
-                               this.removeEventListener( orig, handler, true );
-                       }
-               };
-
-               function handler( e ) { 
-                       e = jQuery.event.fix( e );
-                       e.type = fix;
-                       return jQuery.event.handle.call( this, e );
-               }
-       });
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
-       jQuery.fn[ name ] = function( type, data, fn ) {
-               // Handle object literals
-               if ( typeof type === "object" ) {
-                       for ( var key in type ) {
-                               this[ name ](key, data, type[key], fn);
-                       }
-                       return this;
-               }
-               
-               if ( jQuery.isFunction( data ) ) {
-                       fn = data;
-                       data = undefined;
-               }
-
-               var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
-                       jQuery( this ).unbind( event, handler );
-                       return fn.apply( this, arguments );
-               }) : fn;
-
-               if ( type === "unload" && name !== "one" ) {
-                       this.one( type, data, fn );
-
-               } else {
-                       for ( var i = 0, l = this.length; i < l; i++ ) {
-                               jQuery.event.add( this[i], type, handler, data );
-                       }
-               }
-
-               return this;
-       };
-});
-
-jQuery.fn.extend({
-       unbind: function( type, fn ) {
-               // Handle object literals
-               if ( typeof type === "object" && !type.preventDefault ) {
-                       for ( var key in type ) {
-                               this.unbind(key, type[key]);
-                       }
-
-               } else {
-                       for ( var i = 0, l = this.length; i < l; i++ ) {
-                               jQuery.event.remove( this[i], type, fn );
-                       }
-               }
-
-               return this;
-       },
-       
-       delegate: function( selector, types, data, fn ) {
-               return this.live( types, data, fn, selector );
-       },
-       
-       undelegate: function( selector, types, fn ) {
-               if ( arguments.length === 0 ) {
-                               return this.unbind( "live" );
-               
-               } else {
-                       return this.die( types, null, fn, selector );
-               }
-       },
-       
-       trigger: function( type, data ) {
-               return this.each(function() {
-                       jQuery.event.trigger( type, data, this );
-               });
-       },
-
-       triggerHandler: function( type, data ) {
-               if ( this[0] ) {
-                       var event = jQuery.Event( type );
-                       event.preventDefault();
-                       event.stopPropagation();
-                       jQuery.event.trigger( event, data, this[0] );
-                       return event.result;
-               }
-       },
-
-       toggle: function( fn ) {
-               // Save reference to arguments for access in closure
-               var args = arguments, i = 1;
-
-               // link all the functions, so any of them can unbind this click handler
-               while ( i < args.length ) {
-                       jQuery.proxy( fn, args[ i++ ] );
-               }
-
-               return this.click( jQuery.proxy( fn, function( event ) {
-                       // Figure out which function to execute
-                       var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-                       jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-                       // Make sure that clicks stop
-                       event.preventDefault();
-
-                       // and execute the function
-                       return args[ lastToggle ].apply( this, arguments ) || false;
-               }));
-       },
-
-       hover: function( fnOver, fnOut ) {
-               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-       }
-});
-
-var liveMap = {
-       focus: "focusin",
-       blur: "focusout",
-       mouseenter: "mouseover",
-       mouseleave: "mouseout"
-};
-
-jQuery.each(["live", "die"], function( i, name ) {
-       jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
-               var type, i = 0, match, namespaces, preType,
-                       selector = origSelector || this.selector,
-                       context = origSelector ? this : jQuery( this.context );
-
-               if ( jQuery.isFunction( data ) ) {
-                       fn = data;
-                       data = undefined;
-               }
-
-               types = (types || "").split(" ");
-
-               while ( (type = types[ i++ ]) != null ) {
-                       match = rnamespaces.exec( type );
-                       namespaces = "";
-
-                       if ( match )  {
-                               namespaces = match[0];
-                               type = type.replace( rnamespaces, "" );
-                       }
-
-                       if ( type === "hover" ) {
-                               types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
-                               continue;
-                       }
-
-                       preType = type;
-
-                       if ( type === "focus" || type === "blur" ) {
-                               types.push( liveMap[ type ] + namespaces );
-                               type = type + namespaces;
-
-                       } else {
-                               type = (liveMap[ type ] || type) + namespaces;
-                       }
-
-                       if ( name === "live" ) {
-                               // bind live handler
-                               context.each(function(){
-                                       jQuery.event.add( this, liveConvert( type, selector ),
-                                               { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
-                               });
-
-                       } else {
-                               // unbind live handler
-                               context.unbind( liveConvert( type, selector ), fn );
-                       }
-               }
-               
-               return this;
-       }
-});
-
-function liveHandler( event ) {
-       var stop, elems = [], selectors = [], args = arguments,
-               related, match, handleObj, elem, j, i, l, data,
-               events = jQuery.data( this, "events" );
-
-       // Make sure we avoid non-left-click bubbling in Firefox (#3861)
-       if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
-               return;
-       }
-
-       event.liveFired = this;
-
-       var live = events.live.slice(0);
-
-       for ( j = 0; j < live.length; j++ ) {
-               handleObj = live[j];
-
-               if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
-                       selectors.push( handleObj.selector );
-
-               } else {
-                       live.splice( j--, 1 );
-               }
-       }
-
-       match = jQuery( event.target ).closest( selectors, event.currentTarget );
-
-       for ( i = 0, l = match.length; i < l; i++ ) {
-               for ( j = 0; j < live.length; j++ ) {
-                       handleObj = live[j];
-
-                       if ( match[i].selector === handleObj.selector ) {
-                               elem = match[i].elem;
-                               related = null;
-
-                               // Those two events require additional checking
-                               if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
-                                       related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
-                               }
-
-                               if ( !related || related !== elem ) {
-                                       elems.push({ elem: elem, handleObj: handleObj });
-                               }
-                       }
-               }
-       }
-
-       for ( i = 0, l = elems.length; i < l; i++ ) {
-               match = elems[i];
-               event.currentTarget = match.elem;
-               event.data = match.handleObj.data;
-               event.handleObj = match.handleObj;
-
-               if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
-                       stop = false;
-                       break;
-               }
-       }
-
-       return stop;
-}
-
-function liveConvert( type, selector ) {
-       return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
-}
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-       "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
-
-       // Handle event binding
-       jQuery.fn[ name ] = function( fn ) {
-               return fn ? this.bind( name, fn ) : this.trigger( name );
-       };
-
-       if ( jQuery.attrFn ) {
-               jQuery.attrFn[ name ] = true;
-       }
-});
-
-// Prevent memory leaks in IE
-// Window isn't included so as not to unbind existing unload events
-// More info:
-//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/
-if ( window.attachEvent && !window.addEventListener ) {
-       window.attachEvent("onunload", function() {
-               for ( var id in jQuery.cache ) {
-                       if ( jQuery.cache[ id ].handle ) {
-                               // Try/Catch is to handle iframes being unloaded, see #4280
-                               try {
-                                       jQuery.event.remove( jQuery.cache[ id ].handle.elem );
-                               } catch(e) {}
-                       }
-               }
-       });
-}
-/*!
- * Sizzle CSS Selector Engine - v1.0
- *  Copyright 2009, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-       done = 0,
-       toString = Object.prototype.toString,
-       hasDuplicate = false,
-       baseHasDuplicate = true;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function(){
-       baseHasDuplicate = false;
-       return 0;
-});
-
-var Sizzle = function(selector, context, results, seed) {
-       results = results || [];
-       var origContext = context = context || document;
-
-       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-               return [];
-       }
-       
-       if ( !selector || typeof selector !== "string" ) {
-               return results;
-       }
-
-       var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
-               soFar = selector;
-       
-       // Reset the position of the chunker regexp (start from head)
-       while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
-               soFar = m[3];
-               
-               parts.push( m[1] );
-               
-               if ( m[2] ) {
-                       extra = m[3];
-                       break;
-               }
-       }
-
-       if ( parts.length > 1 && origPOS.exec( selector ) ) {
-               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-                       set = posProcess( parts[0] + parts[1], context );
-               } else {
-                       set = Expr.relative[ parts[0] ] ?
-                               [ context ] :
-                               Sizzle( parts.shift(), context );
-
-                       while ( parts.length ) {
-                               selector = parts.shift();
-
-                               if ( Expr.relative[ selector ] ) {
-                                       selector += parts.shift();
-                               }
-                               
-                               set = posProcess( selector, set );
-                       }
-               }
-       } else {
-               // Take a shortcut and set the context if the root selector is an ID
-               // (but not if it'll be faster if the inner selector is an ID)
-               if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-                               Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-                       var ret = Sizzle.find( parts.shift(), context, contextXML );
-                       context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
-               }
-
-               if ( context ) {
-                       var ret = seed ?
-                               { expr: parts.pop(), set: makeArray(seed) } :
-                               Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-                       set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
-
-                       if ( parts.length > 0 ) {
-                               checkSet = makeArray(set);
-                       } else {
-                               prune = false;
-                       }
-
-                       while ( parts.length ) {
-                               var cur = parts.pop(), pop = cur;
-
-                               if ( !Expr.relative[ cur ] ) {
-                                       cur = "";
-                               } else {
-                                       pop = parts.pop();
-                               }
-
-                               if ( pop == null ) {
-                                       pop = context;
-                               }
-
-                               Expr.relative[ cur ]( checkSet, pop, contextXML );
-                       }
-               } else {
-                       checkSet = parts = [];
-               }
-       }
-
-       if ( !checkSet ) {
-               checkSet = set;
-       }
-
-       if ( !checkSet ) {
-               Sizzle.error( cur || selector );
-       }
-
-       if ( toString.call(checkSet) === "[object Array]" ) {
-               if ( !prune ) {
-                       results.push.apply( results, checkSet );
-               } else if ( context && context.nodeType === 1 ) {
-                       for ( var i = 0; checkSet[i] != null; i++ ) {
-                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
-                                       results.push( set[i] );
-                               }
-                       }
-               } else {
-                       for ( var i = 0; checkSet[i] != null; i++ ) {
-                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-                                       results.push( set[i] );
-                               }
-                       }
-               }
-       } else {
-               makeArray( checkSet, results );
-       }
-
-       if ( extra ) {
-               Sizzle( extra, origContext, results, seed );
-               Sizzle.uniqueSort( results );
-       }
-
-       return results;
-};
-
-Sizzle.uniqueSort = function(results){
-       if ( sortOrder ) {
-               hasDuplicate = baseHasDuplicate;
-               results.sort(sortOrder);
-
-               if ( hasDuplicate ) {
-                       for ( var i = 1; i < results.length; i++ ) {
-                               if ( results[i] === results[i-1] ) {
-                                       results.splice(i--, 1);
-                               }
-                       }
-               }
-       }
-
-       return results;
-};
-
-Sizzle.matches = function(expr, set){
-       return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context, isXML){
-       var set, match;
-
-       if ( !expr ) {
-               return [];
-       }
-
-       for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
-               var type = Expr.order[i], match;
-               
-               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-                       var left = match[1];
-                       match.splice(1,1);
-
-                       if ( left.substr( left.length - 1 ) !== "\\" ) {
-                               match[1] = (match[1] || "").replace(/\\/g, "");
-                               set = Expr.find[ type ]( match, context, isXML );
-                               if ( set != null ) {
-                                       expr = expr.replace( Expr.match[ type ], "" );
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       if ( !set ) {
-               set = context.getElementsByTagName("*");
-       }
-
-       return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
-       var old = expr, result = [], curLoop = set, match, anyFound,
-               isXMLFilter = set && set[0] && isXML(set[0]);
-
-       while ( expr && set.length ) {
-               for ( var type in Expr.filter ) {
-                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-                               var filter = Expr.filter[ type ], found, item, left = match[1];
-                               anyFound = false;
-
-                               match.splice(1,1);
-
-                               if ( left.substr( left.length - 1 ) === "\\" ) {
-                                       continue;
-                               }
-
-                               if ( curLoop === result ) {
-                                       result = [];
-                               }
-
-                               if ( Expr.preFilter[ type ] ) {
-                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-                                       if ( !match ) {
-                                               anyFound = found = true;
-                                       } else if ( match === true ) {
-                                               continue;
-                                       }
-                               }
-
-                               if ( match ) {
-                                       for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
-                                               if ( item ) {
-                                                       found = filter( item, match, i, curLoop );
-                                                       var pass = not ^ !!found;
-
-                                                       if ( inplace && found != null ) {
-                                                               if ( pass ) {
-                                                                       anyFound = true;
-                                                               } else {
-                                                                       curLoop[i] = false;
-                                                               }
-                                                       } else if ( pass ) {
-                                                               result.push( item );
-                                                               anyFound = true;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               if ( found !== undefined ) {
-                                       if ( !inplace ) {
-                                               curLoop = result;
-                                       }
-
-                                       expr = expr.replace( Expr.match[ type ], "" );
-
-                                       if ( !anyFound ) {
-                                               return [];
-                                       }
-
-                                       break;
-                               }
-                       }
-               }
-
-               // Improper expression
-               if ( expr === old ) {
-                       if ( anyFound == null ) {
-                               Sizzle.error( expr );
-                       } else {
-                               break;
-                       }
-               }
-
-               old = expr;
-       }
-
-       return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-       throw "Syntax error, unrecognized expression: " + msg;
-};
-
-var Expr = Sizzle.selectors = {
-       order: [ "ID", "NAME", "TAG" ],
-       match: {
-               ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-               CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-               NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
-               ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
-               TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
-               CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
-               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
-               PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-       },
-       leftMatch: {},
-       attrMap: {
-               "class": "className",
-               "for": "htmlFor"
-       },
-       attrHandle: {
-               href: function(elem){
-                       return elem.getAttribute("href");
-               }
-       },
-       relative: {
-               "+": function(checkSet, part){
-                       var isPartStr = typeof part === "string",
-                               isTag = isPartStr && !/\W/.test(part),
-                               isPartStrNotTag = isPartStr && !isTag;
-
-                       if ( isTag ) {
-                               part = part.toLowerCase();
-                       }
-
-                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-                               if ( (elem = checkSet[i]) ) {
-                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-                                               elem || false :
-                                               elem === part;
-                               }
-                       }
-
-                       if ( isPartStrNotTag ) {
-                               Sizzle.filter( part, checkSet, true );
-                       }
-               },
-               ">": function(checkSet, part){
-                       var isPartStr = typeof part === "string";
-
-                       if ( isPartStr && !/\W/.test(part) ) {
-                               part = part.toLowerCase();
-
-                               for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-                                       var elem = checkSet[i];
-                                       if ( elem ) {
-                                               var parent = elem.parentNode;
-                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-                                       }
-                               }
-                       } else {
-                               for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-                                       var elem = checkSet[i];
-                                       if ( elem ) {
-                                               checkSet[i] = isPartStr ?
-                                                       elem.parentNode :
-                                                       elem.parentNode === part;
-                                       }
-                               }
-
-                               if ( isPartStr ) {
-                                       Sizzle.filter( part, checkSet, true );
-                               }
-                       }
-               },
-               "": function(checkSet, part, isXML){
-                       var doneName = done++, checkFn = dirCheck;
-
-                       if ( typeof part === "string" && !/\W/.test(part) ) {
-                               var nodeCheck = part = part.toLowerCase();
-                               checkFn = dirNodeCheck;
-                       }
-
-                       checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
-               },
-               "~": function(checkSet, part, isXML){
-                       var doneName = done++, checkFn = dirCheck;
-
-                       if ( typeof part === "string" && !/\W/.test(part) ) {
-                               var nodeCheck = part = part.toLowerCase();
-                               checkFn = dirNodeCheck;
-                       }
-
-                       checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
-               }
-       },
-       find: {
-               ID: function(match, context, isXML){
-                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
-                               var m = context.getElementById(match[1]);
-                               return m ? [m] : [];
-                       }
-               },
-               NAME: function(match, context){
-                       if ( typeof context.getElementsByName !== "undefined" ) {
-                               var ret = [], results = context.getElementsByName(match[1]);
-
-                               for ( var i = 0, l = results.length; i < l; i++ ) {
-                                       if ( results[i].getAttribute("name") === match[1] ) {
-                                               ret.push( results[i] );
-                                       }
-                               }
-
-                               return ret.length === 0 ? null : ret;
-                       }
-               },
-               TAG: function(match, context){
-                       return context.getElementsByTagName(match[1]);
-               }
-       },
-       preFilter: {
-               CLASS: function(match, curLoop, inplace, result, not, isXML){
-                       match = " " + match[1].replace(/\\/g, "") + " ";
-
-                       if ( isXML ) {
-                               return match;
-                       }
-
-                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-                               if ( elem ) {
-                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
-                                               if ( !inplace ) {
-                                                       result.push( elem );
-                                               }
-                                       } else if ( inplace ) {
-                                               curLoop[i] = false;
-                                       }
-                               }
-                       }
-
-                       return false;
-               },
-               ID: function(match){
-                       return match[1].replace(/\\/g, "");
-               },
-               TAG: function(match, curLoop){
-                       return match[1].toLowerCase();
-               },
-               CHILD: function(match){
-                       if ( match[1] === "nth" ) {
-                               // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-                               var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
-                                       match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-                                       !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-                               // calculate the numbers (first)n+(last) including if they are negative
-                               match[2] = (test[1] + (test[2] || 1)) - 0;
-                               match[3] = test[3] - 0;
-                       }
-
-                       // TODO: Move to normal caching system
-                       match[0] = done++;
-
-                       return match;
-               },
-               ATTR: function(match, curLoop, inplace, result, not, isXML){
-                       var name = match[1].replace(/\\/g, "");
-                       
-                       if ( !isXML && Expr.attrMap[name] ) {
-                               match[1] = Expr.attrMap[name];
-                       }
-
-                       if ( match[2] === "~=" ) {
-                               match[4] = " " + match[4] + " ";
-                       }
-
-                       return match;
-               },
-               PSEUDO: function(match, curLoop, inplace, result, not){
-                       if ( match[1] === "not" ) {
-                               // If we're dealing with a complex expression, or a simple one
-                               if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-                                       match[3] = Sizzle(match[3], null, null, curLoop);
-                               } else {
-                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-                                       if ( !inplace ) {
-                                               result.push.apply( result, ret );
-                                       }
-                                       return false;
-                               }
-                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-                               return true;
-                       }
-                       
-                       return match;
-               },
-               POS: function(match){
-                       match.unshift( true );
-                       return match;
-               }
-       },
-       filters: {
-               enabled: function(elem){
-                       return elem.disabled === false && elem.type !== "hidden";
-               },
-               disabled: function(elem){
-                       return elem.disabled === true;
-               },
-               checked: function(elem){
-                       return elem.checked === true;
-               },
-               selected: function(elem){
-                       // Accessing this property makes selected-by-default
-                       // options in Safari work properly
-                       elem.parentNode.selectedIndex;
-                       return elem.selected === true;
-               },
-               parent: function(elem){
-                       return !!elem.firstChild;
-               },
-               empty: function(elem){
-                       return !elem.firstChild;
-               },
-               has: function(elem, i, match){
-                       return !!Sizzle( match[3], elem ).length;
-               },
-               header: function(elem){
-                       return /h\d/i.test( elem.nodeName );
-               },
-               text: function(elem){
-                       return "text" === elem.type;
-               },
-               radio: function(elem){
-                       return "radio" === elem.type;
-               },
-               checkbox: function(elem){
-                       return "checkbox" === elem.type;
-               },
-               file: function(elem){
-                       return "file" === elem.type;
-               },
-               password: function(elem){
-                       return "password" === elem.type;
-               },
-               submit: function(elem){
-                       return "submit" === elem.type;
-               },
-               image: function(elem){
-                       return "image" === elem.type;
-               },
-               reset: function(elem){
-                       return "reset" === elem.type;
-               },
-               button: function(elem){
-                       return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
-               },
-               input: function(elem){
-                       return /input|select|textarea|button/i.test(elem.nodeName);
-               }
-       },
-       setFilters: {
-               first: function(elem, i){
-                       return i === 0;
-               },
-               last: function(elem, i, match, array){
-                       return i === array.length - 1;
-               },
-               even: function(elem, i){
-                       return i % 2 === 0;
-               },
-               odd: function(elem, i){
-                       return i % 2 === 1;
-               },
-               lt: function(elem, i, match){
-                       return i < match[3] - 0;
-               },
-               gt: function(elem, i, match){
-                       return i > match[3] - 0;
-               },
-               nth: function(elem, i, match){
-                       return match[3] - 0 === i;
-               },
-               eq: function(elem, i, match){
-                       return match[3] - 0 === i;
-               }
-       },
-       filter: {
-               PSEUDO: function(elem, match, i, array){
-                       var name = match[1], filter = Expr.filters[ name ];
-
-                       if ( filter ) {
-                               return filter( elem, i, match, array );
-                       } else if ( name === "contains" ) {
-                               return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-                       } else if ( name === "not" ) {
-                               var not = match[3];
-
-                               for ( var i = 0, l = not.length; i < l; i++ ) {
-                                       if ( not[i] === elem ) {
-                                               return false;
-                                       }
-                               }
-
-                               return true;
-                       } else {
-                               Sizzle.error( "Syntax error, unrecognized expression: " + name );
-                       }
-               },
-               CHILD: function(elem, match){
-                       var type = match[1], node = elem;
-                       switch (type) {
-                               case 'only':
-                               case 'first':
-                                       while ( (node = node.previousSibling) )  {
-                                               if ( node.nodeType === 1 ) { 
-                                                       return false; 
-                                               }
-                                       }
-                                       if ( type === "first" ) { 
-                                               return true; 
-                                       }
-                                       node = elem;
-                               case 'last':
-                                       while ( (node = node.nextSibling) )      {
-                                               if ( node.nodeType === 1 ) { 
-                                                       return false; 
-                                               }
-                                       }
-                                       return true;
-                               case 'nth':
-                                       var first = match[2], last = match[3];
-
-                                       if ( first === 1 && last === 0 ) {
-                                               return true;
-                                       }
-                                       
-                                       var doneName = match[0],
-                                               parent = elem.parentNode;
-       
-                                       if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
-                                               var count = 0;
-                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {
-                                                       if ( node.nodeType === 1 ) {
-                                                               node.nodeIndex = ++count;
-                                                       }
-                                               } 
-                                               parent.sizcache = doneName;
-                                       }
-                                       
-                                       var diff = elem.nodeIndex - last;
-                                       if ( first === 0 ) {
-                                               return diff === 0;
-                                       } else {
-                                               return ( diff % first === 0 && diff / first >= 0 );
-                                       }
-                       }
-               },
-               ID: function(elem, match){
-                       return elem.nodeType === 1 && elem.getAttribute("id") === match;
-               },
-               TAG: function(elem, match){
-                       return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
-               },
-               CLASS: function(elem, match){
-                       return (" " + (elem.className || elem.getAttribute("class")) + " ")
-                               .indexOf( match ) > -1;
-               },
-               ATTR: function(elem, match){
-                       var name = match[1],
-                               result = Expr.attrHandle[ name ] ?
-                                       Expr.attrHandle[ name ]( elem ) :
-                                       elem[ name ] != null ?
-                                               elem[ name ] :
-                                               elem.getAttribute( name ),
-                               value = result + "",
-                               type = match[2],
-                               check = match[4];
-
-                       return result == null ?
-                               type === "!=" :
-                               type === "=" ?
-                               value === check :
-                               type === "*=" ?
-                               value.indexOf(check) >= 0 :
-                               type === "~=" ?
-                               (" " + value + " ").indexOf(check) >= 0 :
-                               !check ?
-                               value && result !== false :
-                               type === "!=" ?
-                               value !== check :
-                               type === "^=" ?
-                               value.indexOf(check) === 0 :
-                               type === "$=" ?
-                               value.substr(value.length - check.length) === check :
-                               type === "|=" ?
-                               value === check || value.substr(0, check.length + 1) === check + "-" :
-                               false;
-               },
-               POS: function(elem, match, i, array){
-                       var name = match[2], filter = Expr.setFilters[ name ];
-
-                       if ( filter ) {
-                               return filter( elem, i, match, array );
-                       }
-               }
-       }
-};
-
-var origPOS = Expr.match.POS;
-
-for ( var type in Expr.match ) {
-       Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
-       Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){
-               return "\\" + (num - 0 + 1);
-       }));
-}
-
-var makeArray = function(array, results) {
-       array = Array.prototype.slice.call( array, 0 );
-
-       if ( results ) {
-               results.push.apply( results, array );
-               return results;
-       }
-       
-       return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-       Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch(e){
-       makeArray = function(array, results) {
-               var ret = results || [];
-
-               if ( toString.call(array) === "[object Array]" ) {
-                       Array.prototype.push.apply( ret, array );
-               } else {
-                       if ( typeof array.length === "number" ) {
-                               for ( var i = 0, l = array.length; i < l; i++ ) {
-                                       ret.push( array[i] );
-                               }
-                       } else {
-                               for ( var i = 0; array[i]; i++ ) {
-                                       ret.push( array[i] );
-                               }
-                       }
-               }
-
-               return ret;
-       };
-}
-
-var sortOrder;
-
-if ( document.documentElement.compareDocumentPosition ) {
-       sortOrder = function( a, b ) {
-               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-                       if ( a == b ) {
-                               hasDuplicate = true;
-                       }
-                       return a.compareDocumentPosition ? -1 : 1;
-               }
-
-               var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
-               if ( ret === 0 ) {
-                       hasDuplicate = true;
-               }
-               return ret;
-       };
-} else if ( "sourceIndex" in document.documentElement ) {
-       sortOrder = function( a, b ) {
-               if ( !a.sourceIndex || !b.sourceIndex ) {
-                       if ( a == b ) {
-                               hasDuplicate = true;
-                       }
-                       return a.sourceIndex ? -1 : 1;
-               }
-
-               var ret = a.sourceIndex - b.sourceIndex;
-               if ( ret === 0 ) {
-                       hasDuplicate = true;
-               }
-               return ret;
-       };
-} else if ( document.createRange ) {
-       sortOrder = function( a, b ) {
-               if ( !a.ownerDocument || !b.ownerDocument ) {
-                       if ( a == b ) {
-                               hasDuplicate = true;
-                       }
-                       return a.ownerDocument ? -1 : 1;
-               }
-
-               var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
-               aRange.setStart(a, 0);
-               aRange.setEnd(a, 0);
-               bRange.setStart(b, 0);
-               bRange.setEnd(b, 0);
-               var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
-               if ( ret === 0 ) {
-                       hasDuplicate = true;
-               }
-               return ret;
-       };
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-function getText( elems ) {
-       var ret = "", elem;
-
-       for ( var i = 0; elems[i]; i++ ) {
-               elem = elems[i];
-
-               // Get the text from text nodes and CDATA nodes
-               if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
-                       ret += elem.nodeValue;
-
-               // Traverse everything else, except comment nodes
-               } else if ( elem.nodeType !== 8 ) {
-                       ret += getText( elem.childNodes );
-               }
-       }
-
-       return ret;
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-       // We're going to inject a fake input element with a specified name
-       var form = document.createElement("div"),
-               id = "script" + (new Date).getTime();
-       form.innerHTML = "<a name='" + id + "'/>";
-
-       // Inject it into the root element, check its status, and remove it quickly
-       var root = document.documentElement;
-       root.insertBefore( form, root.firstChild );
-
-       // The workaround has to do additional checks after a getElementById
-       // Which slows things down for other browsers (hence the branching)
-       if ( document.getElementById( id ) ) {
-               Expr.find.ID = function(match, context, isXML){
-                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
-                               var m = context.getElementById(match[1]);
-                               return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
-                       }
-               };
-
-               Expr.filter.ID = function(elem, match){
-                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-                       return elem.nodeType === 1 && node && node.nodeValue === match;
-               };
-       }
-
-       root.removeChild( form );
-       root = form = null; // release memory in IE
-})();
-
-(function(){
-       // Check to see if the browser returns only elements
-       // when doing getElementsByTagName("*")
-
-       // Create a fake element
-       var div = document.createElement("div");
-       div.appendChild( document.createComment("") );
-
-       // Make sure no comments are found
-       if ( div.getElementsByTagName("*").length > 0 ) {
-               Expr.find.TAG = function(match, context){
-                       var results = context.getElementsByTagName(match[1]);
-
-                       // Filter out possible comments
-                       if ( match[1] === "*" ) {
-                               var tmp = [];
-
-                               for ( var i = 0; results[i]; i++ ) {
-                                       if ( results[i].nodeType === 1 ) {
-                                               tmp.push( results[i] );
-                                       }
-                               }
-
-                               results = tmp;
-                       }
-
-                       return results;
-               };
-       }
-
-       // Check to see if an attribute returns normalized href attributes
-       div.innerHTML = "<a href='#'></a>";
-       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-                       div.firstChild.getAttribute("href") !== "#" ) {
-               Expr.attrHandle.href = function(elem){
-                       return elem.getAttribute("href", 2);
-               };
-       }
-
-       div = null; // release memory in IE
-})();
-
-if ( document.querySelectorAll ) {
-       (function(){
-               var oldSizzle = Sizzle, div = document.createElement("div");
-               div.innerHTML = "<p class='TEST'></p>";
-
-               // Safari can't handle uppercase or unicode characters when
-               // in quirks mode.
-               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-                       return;
-               }
-       
-               Sizzle = function(query, context, extra, seed){
-                       context = context || document;
-
-                       // Only use querySelectorAll on non-XML documents
-                       // (ID selectors don't work in non-HTML documents)
-                       if ( !seed && context.nodeType === 9 && !isXML(context) ) {
-                               try {
-                                       return makeArray( context.querySelectorAll(query), extra );
-                               } catch(e){}
-                       }
-               
-                       return oldSizzle(query, context, extra, seed);
-               };
-
-               for ( var prop in oldSizzle ) {
-                       Sizzle[ prop ] = oldSizzle[ prop ];
-               }
-
-               div = null; // release memory in IE
-       })();
-}
-
-(function(){
-       var div = document.createElement("div");
-
-       div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-       // Opera can't find a second classname (in 9.6)
-       // Also, make sure that getElementsByClassName actually exists
-       if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-               return;
-       }
-
-       // Safari caches class attributes, doesn't catch changes (in 3.2)
-       div.lastChild.className = "e";
-
-       if ( div.getElementsByClassName("e").length === 1 ) {
-               return;
-       }
-       
-       Expr.order.splice(1, 0, "CLASS");
-       Expr.find.CLASS = function(match, context, isXML) {
-               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-                       return context.getElementsByClassName(match[1]);
-               }
-       };
-
-       div = null; // release memory in IE
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-               var elem = checkSet[i];
-               if ( elem ) {
-                       elem = elem[dir];
-                       var match = false;
-
-                       while ( elem ) {
-                               if ( elem.sizcache === doneName ) {
-                                       match = checkSet[elem.sizset];
-                                       break;
-                               }
-
-                               if ( elem.nodeType === 1 && !isXML ){
-                                       elem.sizcache = doneName;
-                                       elem.sizset = i;
-                               }
-
-                               if ( elem.nodeName.toLowerCase() === cur ) {
-                                       match = elem;
-                                       break;
-                               }
-
-                               elem = elem[dir];
-                       }
-
-                       checkSet[i] = match;
-               }
-       }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-               var elem = checkSet[i];
-               if ( elem ) {
-                       elem = elem[dir];
-                       var match = false;
-
-                       while ( elem ) {
-                               if ( elem.sizcache === doneName ) {
-                                       match = checkSet[elem.sizset];
-                                       break;
-                               }
-
-                               if ( elem.nodeType === 1 ) {
-                                       if ( !isXML ) {
-                                               elem.sizcache = doneName;
-                                               elem.sizset = i;
-                                       }
-                                       if ( typeof cur !== "string" ) {
-                                               if ( elem === cur ) {
-                                                       match = true;
-                                                       break;
-                                               }
-
-                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-                                               match = elem;
-                                               break;
-                                       }
-                               }
-
-                               elem = elem[dir];
-                       }
-
-                       checkSet[i] = match;
-               }
-       }
-}
-
-var contains = document.compareDocumentPosition ? function(a, b){
-       return !!(a.compareDocumentPosition(b) & 16);
-} : function(a, b){
-       return a !== b && (a.contains ? a.contains(b) : true);
-};
-
-var isXML = function(elem){
-       // documentElement is verified for cases where it doesn't yet exist
-       // (such as loading iframes in IE - #4833) 
-       var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-       return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function(selector, context){
-       var tmpSet = [], later = "", match,
-               root = context.nodeType ? [context] : context;
-
-       // Position selectors must be done after the filter
-       // And so must :not(positional) so we move all PSEUDOs to the end
-       while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-               later += match[0];
-               selector = selector.replace( Expr.match.PSEUDO, "" );
-       }
-
-       selector = Expr.relative[selector] ? selector + "*" : selector;
-
-       for ( var i = 0, l = root.length; i < l; i++ ) {
-               Sizzle( selector, root[i], tmpSet );
-       }
-
-       return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = getText;
-jQuery.isXMLDoc = isXML;
-jQuery.contains = contains;
-
-return;
-
-window.Sizzle = Sizzle;
-
-})();
-var runtil = /Until$/,
-       rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-       // Note: This RegExp should be improved, or likely pulled from Sizzle
-       rmultiselector = /,/,
-       slice = Array.prototype.slice;
-
-// Implement the identical functionality for filter and not
-var winnow = function( elements, qualifier, keep ) {
-       if ( jQuery.isFunction( qualifier ) ) {
-               return jQuery.grep(elements, function( elem, i ) {
-                       return !!qualifier.call( elem, i, elem ) === keep;
-               });
-
-       } else if ( qualifier.nodeType ) {
-               return jQuery.grep(elements, function( elem, i ) {
-                       return (elem === qualifier) === keep;
-               });
-
-       } else if ( typeof qualifier === "string" ) {
-               var filtered = jQuery.grep(elements, function( elem ) {
-                       return elem.nodeType === 1;
-               });
-
-               if ( isSimple.test( qualifier ) ) {
-                       return jQuery.filter(qualifier, filtered, !keep);
-               } else {
-                       qualifier = jQuery.filter( qualifier, filtered );
-               }
-       }
-
-       return jQuery.grep(elements, function( elem, i ) {
-               return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
-       });
-};
-
-jQuery.fn.extend({
-       find: function( selector ) {
-               var ret = this.pushStack( "", "find", selector ), length = 0;
-
-               for ( var i = 0, l = this.length; i < l; i++ ) {
-                       length = ret.length;
-                       jQuery.find( selector, this[i], ret );
-
-                       if ( i > 0 ) {
-                               // Make sure that the results are unique
-                               for ( var n = length; n < ret.length; n++ ) {
-                                       for ( var r = 0; r < length; r++ ) {
-                                               if ( ret[r] === ret[n] ) {
-                                                       ret.splice(n--, 1);
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               return ret;
-       },
-
-       has: function( target ) {
-               var targets = jQuery( target );
-               return this.filter(function() {
-                       for ( var i = 0, l = targets.length; i < l; i++ ) {
-                               if ( jQuery.contains( this, targets[i] ) ) {
-                                       return true;
-                               }
-                       }
-               });
-       },
-
-       not: function( selector ) {
-               return this.pushStack( winnow(this, selector, false), "not", selector);
-       },
-
-       filter: function( selector ) {
-               return this.pushStack( winnow(this, selector, true), "filter", selector );
-       },
-       
-       is: function( selector ) {
-               return !!selector && jQuery.filter( selector, this ).length > 0;
-       },
-
-       closest: function( selectors, context ) {
-               if ( jQuery.isArray( selectors ) ) {
-                       var ret = [], cur = this[0], match, matches = {}, selector;
-
-                       if ( cur && selectors.length ) {
-                               for ( var i = 0, l = selectors.length; i < l; i++ ) {
-                                       selector = selectors[i];
-
-                                       if ( !matches[selector] ) {
-                                               matches[selector] = jQuery.expr.match.POS.test( selector ) ? 
-                                                       jQuery( selector, context || this.context ) :
-                                                       selector;
-                                       }
-                               }
-
-                               while ( cur && cur.ownerDocument && cur !== context ) {
-                                       for ( selector in matches ) {
-                                               match = matches[selector];
-
-                                               if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
-                                                       ret.push({ selector: selector, elem: cur });
-                                                       delete matches[selector];
-                                               }
-                                       }
-                                       cur = cur.parentNode;
-                               }
-                       }
-
-                       return ret;
-               }
-
-               var pos = jQuery.expr.match.POS.test( selectors ) ? 
-                       jQuery( selectors, context || this.context ) : null;
-
-               return this.map(function( i, cur ) {
-                       while ( cur && cur.ownerDocument && cur !== context ) {
-                               if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
-                                       return cur;
-                               }
-                               cur = cur.parentNode;
-                       }
-                       return null;
-               });
-       },
-       
-       // Determine the position of an element within
-       // the matched set of elements
-       index: function( elem ) {
-               if ( !elem || typeof elem === "string" ) {
-                       return jQuery.inArray( this[0],
-                               // If it receives a string, the selector is used
-                               // If it receives nothing, the siblings are used
-                               elem ? jQuery( elem ) : this.parent().children() );
-               }
-               // Locate the position of the desired element
-               return jQuery.inArray(
-                       // If it receives a jQuery object, the first element is used
-                       elem.jquery ? elem[0] : elem, this );
-       },
-
-       add: function( selector, context ) {
-               var set = typeof selector === "string" ?
-                               jQuery( selector, context || this.context ) :
-                               jQuery.makeArray( selector ),
-                       all = jQuery.merge( this.get(), set );
-
-               return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-                       all :
-                       jQuery.unique( all ) );
-       },
-
-       andSelf: function() {
-               return this.add( this.prevObject );
-       }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
-       return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
-       parent: function( elem ) {
-               var parent = elem.parentNode;
-               return parent && parent.nodeType !== 11 ? parent : null;
-       },
-       parents: function( elem ) {
-               return jQuery.dir( elem, "parentNode" );
-       },
-       parentsUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "parentNode", until );
-       },
-       next: function( elem ) {
-               return jQuery.nth( elem, 2, "nextSibling" );
-       },
-       prev: function( elem ) {
-               return jQuery.nth( elem, 2, "previousSibling" );
-       },
-       nextAll: function( elem ) {
-               return jQuery.dir( elem, "nextSibling" );
-       },
-       prevAll: function( elem ) {
-               return jQuery.dir( elem, "previousSibling" );
-       },
-       nextUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "nextSibling", until );
-       },
-       prevUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "previousSibling", until );
-       },
-       siblings: function( elem ) {
-               return jQuery.sibling( elem.parentNode.firstChild, elem );
-       },
-       children: function( elem ) {
-               return jQuery.sibling( elem.firstChild );
-       },
-       contents: function( elem ) {
-               return jQuery.nodeName( elem, "iframe" ) ?
-                       elem.contentDocument || elem.contentWindow.document :
-                       jQuery.makeArray( elem.childNodes );
-       }
-}, function( name, fn ) {
-       jQuery.fn[ name ] = function( until, selector ) {
-               var ret = jQuery.map( this, fn, until );
-               
-               if ( !runtil.test( name ) ) {
-                       selector = until;
-               }
-
-               if ( selector && typeof selector === "string" ) {
-                       ret = jQuery.filter( selector, ret );
-               }
-
-               ret = this.length > 1 ? jQuery.unique( ret ) : ret;
-
-               if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-                       ret = ret.reverse();
-               }
-
-               return this.pushStack( ret, name, slice.call(arguments).join(",") );
-       };
-});
-
-jQuery.extend({
-       filter: function( expr, elems, not ) {
-               if ( not ) {
-                       expr = ":not(" + expr + ")";
-               }
-
-               return jQuery.find.matches(expr, elems);
-       },
-       
-       dir: function( elem, dir, until ) {
-               var matched = [], cur = elem[dir];
-               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-                       if ( cur.nodeType === 1 ) {
-                               matched.push( cur );
-                       }
-                       cur = cur[dir];
-               }
-               return matched;
-       },
-
-       nth: function( cur, result, dir, elem ) {
-               result = result || 1;
-               var num = 0;
-
-               for ( ; cur; cur = cur[dir] ) {
-                       if ( cur.nodeType === 1 && ++num === result ) {
-                               break;
-                       }
-               }
-
-               return cur;
-       },
-
-       sibling: function( n, elem ) {
-               var r = [];
-
-               for ( ; n; n = n.nextSibling ) {
-                       if ( n.nodeType === 1 && n !== elem ) {
-                               r.push( n );
-                       }
-               }
-
-               return r;
-       }
-});
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-       rleadingWhitespace = /^\s+/,
-       rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,
-       rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
-       rtagName = /<([\w:]+)/,
-       rtbody = /<tbody/i,
-       rhtml = /<|&#?\w+;/,
-       rnocache = /<script|<object|<embed|<option|<style/i,
-       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,  // checked="checked" or checked (html5)
-       fcloseTag = function( all, front, tag ) {
-               return rselfClosing.test( tag ) ?
-                       all :
-                       front + "></" + tag + ">";
-       },
-       wrapMap = {
-               option: [ 1, "<select multiple='multiple'>", "</select>" ],
-               legend: [ 1, "<fieldset>", "</fieldset>" ],
-               thead: [ 1, "<table>", "</table>" ],
-               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-               area: [ 1, "<map>", "</map>" ],
-               _default: [ 0, "", "" ]
-       };
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
-       wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-       text: function( text ) {
-               if ( jQuery.isFunction(text) ) {
-                       return this.each(function(i) {
-                               var self = jQuery(this);
-                               self.text( text.call(this, i, self.text()) );
-                       });
-               }
-
-               if ( typeof text !== "object" && text !== undefined ) {
-                       return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
-               }
-
-               return jQuery.text( this );
-       },
-
-       wrapAll: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapAll( html.call(this, i) );
-                       });
-               }
-
-               if ( this[0] ) {
-                       // The elements to wrap the target around
-                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-                       if ( this[0].parentNode ) {
-                               wrap.insertBefore( this[0] );
-                       }
-
-                       wrap.map(function() {
-                               var elem = this;
-
-                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-                                       elem = elem.firstChild;
-                               }
-
-                               return elem;
-                       }).append(this);
-               }
-
-               return this;
-       },
-
-       wrapInner: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapInner( html.call(this, i) );
-                       });
-               }
-
-               return this.each(function() {
-                       var self = jQuery( this ), contents = self.contents();
-
-                       if ( contents.length ) {
-                               contents.wrapAll( html );
-
-                       } else {
-                               self.append( html );
-                       }
-               });
-       },
-
-       wrap: function( html ) {
-               return this.each(function() {
-                       jQuery( this ).wrapAll( html );
-               });
-       },
-
-       unwrap: function() {
-               return this.parent().each(function() {
-                       if ( !jQuery.nodeName( this, "body" ) ) {
-                               jQuery( this ).replaceWith( this.childNodes );
-                       }
-               }).end();
-       },
-
-       append: function() {
-               return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 ) {
-                               this.appendChild( elem );
-                       }
-               });
-       },
-
-       prepend: function() {
-               return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 ) {
-                               this.insertBefore( elem, this.firstChild );
-                       }
-               });
-       },
-
-       before: function() {
-               if ( this[0] && this[0].parentNode ) {
-                       return this.domManip(arguments, false, function( elem ) {
-                               this.parentNode.insertBefore( elem, this );
-                       });
-               } else if ( arguments.length ) {
-                       var set = jQuery(arguments[0]);
-                       set.push.apply( set, this.toArray() );
-                       return this.pushStack( set, "before", arguments );
-               }
-       },
-
-       after: function() {
-               if ( this[0] && this[0].parentNode ) {
-                       return this.domManip(arguments, false, function( elem ) {
-                               this.parentNode.insertBefore( elem, this.nextSibling );
-                       });
-               } else if ( arguments.length ) {
-                       var set = this.pushStack( this, "after", arguments );
-                       set.push.apply( set, jQuery(arguments[0]).toArray() );
-                       return set;
-               }
-       },
-       
-       // keepData is for internal use only--do not document
-       remove: function( selector, keepData ) {
-               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-                       if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-                               if ( !keepData && elem.nodeType === 1 ) {
-                                       jQuery.cleanData( elem.getElementsByTagName("*") );
-                                       jQuery.cleanData( [ elem ] );
-                               }
-
-                               if ( elem.parentNode ) {
-                                        elem.parentNode.removeChild( elem );
-                               }
-                       }
-               }
-               
-               return this;
-       },
-
-       empty: function() {
-               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-                       // Remove element nodes and prevent memory leaks
-                       if ( elem.nodeType === 1 ) {
-                               jQuery.cleanData( elem.getElementsByTagName("*") );
-                       }
-
-                       // Remove any remaining nodes
-                       while ( elem.firstChild ) {
-                               elem.removeChild( elem.firstChild );
-                       }
-               }
-               
-               return this;
-       },
-
-       clone: function( events ) {
-               // Do the clone
-               var ret = this.map(function() {
-                       if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
-                               // IE copies events bound via attachEvent when
-                               // using cloneNode. Calling detachEvent on the
-                               // clone will also remove the events from the orignal
-                               // In order to get around this, we use innerHTML.
-                               // Unfortunately, this means some modifications to
-                               // attributes in IE that are actually only stored
-                               // as properties will not be copied (such as the
-                               // the name attribute on an input).
-                               var html = this.outerHTML, ownerDocument = this.ownerDocument;
-                               if ( !html ) {
-                                       var div = ownerDocument.createElement("div");
-                                       div.appendChild( this.cloneNode(true) );
-                                       html = div.innerHTML;
-                               }
-
-                               return jQuery.clean([html.replace(rinlinejQuery, "")
-                                       // Handle the case in IE 8 where action=/test/> self-closes a tag
-                                       .replace(/=([^="'>\s]+\/)>/g, '="$1">')
-                                       .replace(rleadingWhitespace, "")], ownerDocument)[0];
-                       } else {
-                               return this.cloneNode(true);
-                       }
-               });
-
-               // Copy the events from the original to the clone
-               if ( events === true ) {
-                       cloneCopyEvent( this, ret );
-                       cloneCopyEvent( this.find("*"), ret.find("*") );
-               }
-
-               // Return the cloned set
-               return ret;
-       },
-
-       html: function( value ) {
-               if ( value === undefined ) {
-                       return this[0] && this[0].nodeType === 1 ?
-                               this[0].innerHTML.replace(rinlinejQuery, "") :
-                               null;
-
-               // See if we can take a shortcut and just use innerHTML
-               } else if ( typeof value === "string" && !rnocache.test( value ) &&
-                       (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
-                       !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
-                       value = value.replace(rxhtmlTag, fcloseTag);
-
-                       try {
-                               for ( var i = 0, l = this.length; i < l; i++ ) {
-                                       // Remove element nodes and prevent memory leaks
-                                       if ( this[i].nodeType === 1 ) {
-                                               jQuery.cleanData( this[i].getElementsByTagName("*") );
-                                               this[i].innerHTML = value;
-                                       }
-                               }
-
-                       // If using innerHTML throws an exception, use the fallback method
-                       } catch(e) {
-                               this.empty().append( value );
-                       }
-
-               } else if ( jQuery.isFunction( value ) ) {
-                       this.each(function(i){
-                               var self = jQuery(this), old = self.html();
-                               self.empty().append(function(){
-                                       return value.call( this, i, old );
-                               });
-                       });
-
-               } else {
-                       this.empty().append( value );
-               }
-
-               return this;
-       },
-
-       replaceWith: function( value ) {
-               if ( this[0] && this[0].parentNode ) {
-                       // Make sure that the elements are removed from the DOM before they are inserted
-                       // this can help fix replacing a parent with child elements
-                       if ( jQuery.isFunction( value ) ) {
-                               return this.each(function(i) {
-                                       var self = jQuery(this), old = self.html();
-                                       self.replaceWith( value.call( this, i, old ) );
-                               });
-                       }
-
-                       if ( typeof value !== "string" ) {
-                               value = jQuery(value).detach();
-                       }
-
-                       return this.each(function() {
-                               var next = this.nextSibling, parent = this.parentNode;
-
-                               jQuery(this).remove();
-
-                               if ( next ) {
-                                       jQuery(next).before( value );
-                               } else {
-                                       jQuery(parent).append( value );
-                               }
-                       });
-               } else {
-                       return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
-               }
-       },
-
-       detach: function( selector ) {
-               return this.remove( selector, true );
-       },
-
-       domManip: function( args, table, callback ) {
-               var results, first, value = args[0], scripts = [], fragment, parent;
-
-               // We can't cloneNode fragments that contain checked, in WebKit
-               if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-                       return this.each(function() {
-                               jQuery(this).domManip( args, table, callback, true );
-                       });
-               }
-
-               if ( jQuery.isFunction(value) ) {
-                       return this.each(function(i) {
-                               var self = jQuery(this);
-                               args[0] = value.call(this, i, table ? self.html() : undefined);
-                               self.domManip( args, table, callback );
-                       });
-               }
-
-               if ( this[0] ) {
-                       parent = value && value.parentNode;
-
-                       // If we're in a fragment, just use that instead of building a new one
-                       if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-                               results = { fragment: parent };
-
-                       } else {
-                               results = buildFragment( args, this, scripts );
-                       }
-                       
-                       fragment = results.fragment;
-                       
-                       if ( fragment.childNodes.length === 1 ) {
-                               first = fragment = fragment.firstChild;
-                       } else {
-                               first = fragment.firstChild;
-                       }
-
-                       if ( first ) {
-                               table = table && jQuery.nodeName( first, "tr" );
-
-                               for ( var i = 0, l = this.length; i < l; i++ ) {
-                                       callback.call(
-                                               table ?
-                                                       root(this[i], first) :
-                                                       this[i],
-                                               i > 0 || results.cacheable || this.length > 1  ?
-                                                       fragment.cloneNode(true) :
-                                                       fragment
-                                       );
-                               }
-                       }
-
-                       if ( scripts.length ) {
-                               jQuery.each( scripts, evalScript );
-                       }
-               }
-
-               return this;
-
-               function root( elem, cur ) {
-                       return jQuery.nodeName(elem, "table") ?
-                               (elem.getElementsByTagName("tbody")[0] ||
-                               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-                               elem;
-               }
-       }
-});
-
-function cloneCopyEvent(orig, ret) {
-       var i = 0;
-
-       ret.each(function() {
-               if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
-                       return;
-               }
-
-               var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
-
-               if ( events ) {
-                       delete curData.handle;
-                       curData.events = {};
-
-                       for ( var type in events ) {
-                               for ( var handler in events[ type ] ) {
-                                       jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
-                               }
-                       }
-               }
-       });
-}
-
-function buildFragment( args, nodes, scripts ) {
-       var fragment, cacheable, cacheresults,
-               doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
-
-       // Only cache "small" (1/2 KB) strings that are associated with the main document
-       // Cloning options loses the selected state, so don't cache them
-       // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-       // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-       if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
-               !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
-
-               cacheable = true;
-               cacheresults = jQuery.fragments[ args[0] ];
-               if ( cacheresults ) {
-                       if ( cacheresults !== 1 ) {
-                               fragment = cacheresults;
-                       }
-               }
-       }
-
-       if ( !fragment ) {
-               fragment = doc.createDocumentFragment();
-               jQuery.clean( args, doc, fragment, scripts );
-       }
-
-       if ( cacheable ) {
-               jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
-       }
-
-       return { fragment: fragment, cacheable: cacheable };
-}
-
-jQuery.fragments = {};
-
-jQuery.each({
-       appendTo: "append",
-       prependTo: "prepend",
-       insertBefore: "before",
-       insertAfter: "after",
-       replaceAll: "replaceWith"
-}, function( name, original ) {
-       jQuery.fn[ name ] = function( selector ) {
-               var ret = [], insert = jQuery( selector ),
-                       parent = this.length === 1 && this[0].parentNode;
-               
-               if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-                       insert[ original ]( this[0] );
-                       return this;
-                       
-               } else {
-                       for ( var i = 0, l = insert.length; i < l; i++ ) {
-                               var elems = (i > 0 ? this.clone(true) : this).get();
-                               jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
-                               ret = ret.concat( elems );
-                       }
-               
-                       return this.pushStack( ret, name, insert.selector );
-               }
-       };
-});
-
-jQuery.extend({
-       clean: function( elems, context, fragment, scripts ) {
-               context = context || document;
-
-               // !context.createElement fails in IE with an error but returns typeof 'object'
-               if ( typeof context.createElement === "undefined" ) {
-                       context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-               }
-
-               var ret = [];
-
-               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-                       if ( typeof elem === "number" ) {
-                               elem += "";
-                       }
-
-                       if ( !elem ) {
-                               continue;
-                       }
-
-                       // Convert html string into DOM nodes
-                       if ( typeof elem === "string" && !rhtml.test( elem ) ) {
-                               elem = context.createTextNode( elem );
-
-                       } else if ( typeof elem === "string" ) {
-                               // Fix "XHTML"-style tags in all browsers
-                               elem = elem.replace(rxhtmlTag, fcloseTag);
-
-                               // Trim whitespace, otherwise indexOf won't work as expected
-                               var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
-                                       wrap = wrapMap[ tag ] || wrapMap._default,
-                                       depth = wrap[0],
-                                       div = context.createElement("div");
-
-                               // Go to html and back, then peel off extra wrappers
-                               div.innerHTML = wrap[1] + elem + wrap[2];
-
-                               // Move to the right depth
-                               while ( depth-- ) {
-                                       div = div.lastChild;
-                               }
-
-                               // Remove IE's autoinserted <tbody> from table fragments
-                               if ( !jQuery.support.tbody ) {
-
-                                       // String was a <table>, *may* have spurious <tbody>
-                                       var hasBody = rtbody.test(elem),
-                                               tbody = tag === "table" && !hasBody ?
-                                                       div.firstChild && div.firstChild.childNodes :
-
-                                                       // String was a bare <thead> or <tfoot>
-                                                       wrap[1] === "<table>" && !hasBody ?
-                                                               div.childNodes :
-                                                               [];
-
-                                       for ( var j = tbody.length - 1; j >= 0 ; --j ) {
-                                               if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-                                                       tbody[ j ].parentNode.removeChild( tbody[ j ] );
-                                               }
-                                       }
-
-                               }
-
-                               // IE completely kills leading whitespace when innerHTML is used
-                               if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-                                       div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-                               }
-
-                               elem = div.childNodes;
-                       }
-
-                       if ( elem.nodeType ) {
-                               ret.push( elem );
-                       } else {
-                               ret = jQuery.merge( ret, elem );
-                       }
-               }
-
-               if ( fragment ) {
-                       for ( var i = 0; ret[i]; i++ ) {
-                               if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
-                                       scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-                               
-                               } else {
-                                       if ( ret[i].nodeType === 1 ) {
-                                               ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
-                                       }
-                                       fragment.appendChild( ret[i] );
-                               }
-                       }
-               }
-
-               return ret;
-       },
-       
-       cleanData: function( elems ) {
-               var data, id, cache = jQuery.cache,
-                       special = jQuery.event.special,
-                       deleteExpando = jQuery.support.deleteExpando;
-               
-               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-                       id = elem[ jQuery.expando ];
-                       
-                       if ( id ) {
-                               data = cache[ id ];
-                               
-                               if ( data.events ) {
-                                       for ( var type in data.events ) {
-                                               if ( special[ type ] ) {
-                                                       jQuery.event.remove( elem, type );
-
-                                               } else {
-                                                       removeEvent( elem, type, data.handle );
-                                               }
-                                       }
-                               }
-                               
-                               if ( deleteExpando ) {
-                                       delete elem[ jQuery.expando ];
-
-                               } else if ( elem.removeAttribute ) {
-                                       elem.removeAttribute( jQuery.expando );
-                               }
-                               
-                               delete cache[ id ];
-                       }
-               }
-       }
-});
-// exclude the following css properties to add px
-var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
-       ralpha = /alpha\([^)]*\)/,
-       ropacity = /opacity=([^)]*)/,
-       rfloat = /float/i,
-       rdashAlpha = /-([a-z])/ig,
-       rupper = /([A-Z])/g,
-       rnumpx = /^-?\d+(?:px)?$/i,
-       rnum = /^-?\d/,
-
-       cssShow = { position: "absolute", visibility: "hidden", display:"block" },
-       cssWidth = [ "Left", "Right" ],
-       cssHeight = [ "Top", "Bottom" ],
-
-       // cache check for defaultView.getComputedStyle
-       getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,
-       // normalize float css property
-       styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",
-       fcamelCase = function( all, letter ) {
-               return letter.toUpperCase();
-       };
-
-jQuery.fn.css = function( name, value ) {
-       return access( this, name, value, true, function( elem, name, value ) {
-               if ( value === undefined ) {
-                       return jQuery.curCSS( elem, name );
-               }
-               
-               if ( typeof value === "number" && !rexclude.test(name) ) {
-                       value += "px";
-               }
-
-               jQuery.style( elem, name, value );
-       });
-};
-
-jQuery.extend({
-       style: function( elem, name, value ) {
-               // don't set styles on text and comment nodes
-               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
-                       return undefined;
-               }
-
-               // ignore negative width and height values #1599
-               if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {
-                       value = undefined;
-               }
-
-               var style = elem.style || elem, set = value !== undefined;
-
-               // IE uses filters for opacity
-               if ( !jQuery.support.opacity && name === "opacity" ) {
-                       if ( set ) {
-                               // IE has trouble with opacity if it does not have layout
-                               // Force it by setting the zoom level
-                               style.zoom = 1;
-
-                               // Set the alpha filter to set the opacity
-                               var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";
-                               var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";
-                               style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;
-                       }
-
-                       return style.filter && style.filter.indexOf("opacity=") >= 0 ?
-                               (parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":
-                               "";
-               }
-
-               // Make sure we're using the right name for getting the float value
-               if ( rfloat.test( name ) ) {
-                       name = styleFloat;
-               }
-
-               name = name.replace(rdashAlpha, fcamelCase);
-
-               if ( set ) {
-                       style[ name ] = value;
-               }
-
-               return style[ name ];
-       },
-
-       css: function( elem, name, force, extra ) {
-               if ( name === "width" || name === "height" ) {
-                       var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;
-
-                       function getWH() {
-                               val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
-
-                               if ( extra === "border" ) {
-                                       return;
-                               }
-
-                               jQuery.each( which, function() {
-                                       if ( !extra ) {
-                                               val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
-                                       }
-
-                                       if ( extra === "margin" ) {
-                                               val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
-                                       } else {
-                                               val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
-                                       }
-                               });
-                       }
-
-                       if ( elem.offsetWidth !== 0 ) {
-                               getWH();
-                       } else {
-                               jQuery.swap( elem, props, getWH );
-                       }
-
-                       return Math.max(0, Math.round(val));
-               }
-
-               return jQuery.curCSS( elem, name, force );
-       },
-
-       curCSS: function( elem, name, force ) {
-               var ret, style = elem.style, filter;
-
-               // IE uses filters for opacity
-               if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {
-                       ret = ropacity.test(elem.currentStyle.filter || "") ?
-                               (parseFloat(RegExp.$1) / 100) + "" :
-                               "";
-
-                       return ret === "" ?
-                               "1" :
-                               ret;
-               }
-
-               // Make sure we're using the right name for getting the float value
-               if ( rfloat.test( name ) ) {
-                       name = styleFloat;
-               }
-
-               if ( !force && style && style[ name ] ) {
-                       ret = style[ name ];
-
-               } else if ( getComputedStyle ) {
-
-                       // Only "float" is needed here
-                       if ( rfloat.test( name ) ) {
-                               name = "float";
-                       }
-
-                       name = name.replace( rupper, "-$1" ).toLowerCase();
-
-                       var defaultView = elem.ownerDocument.defaultView;
-
-                       if ( !defaultView ) {
-                               return null;
-                       }
-
-                       var computedStyle = defaultView.getComputedStyle( elem, null );
-
-                       if ( computedStyle ) {
-                               ret = computedStyle.getPropertyValue( name );
-                       }
-
-                       // We should always get a number back from opacity
-                       if ( name === "opacity" && ret === "" ) {
-                               ret = "1";
-                       }
-
-               } else if ( elem.currentStyle ) {
-                       var camelCase = name.replace(rdashAlpha, fcamelCase);
-
-                       ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
-
-                       // From the awesome hack by Dean Edwards
-                       // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-                       // If we're not dealing with a regular pixel number
-                       // but a number that has a weird ending, we need to convert it to pixels
-                       if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
-                               // Remember the original values
-                               var left = style.left, rsLeft = elem.runtimeStyle.left;
-
-                               // Put in the new values to get a computed value out
-                               elem.runtimeStyle.left = elem.currentStyle.left;
-                               style.left = camelCase === "fontSize" ? "1em" : (ret || 0);
-                               ret = style.pixelLeft + "px";
-
-                               // Revert the changed values
-                               style.left = left;
-                               elem.runtimeStyle.left = rsLeft;
-                       }
-               }
-
-               return ret;
-       },
-
-       // A method for quickly swapping in/out CSS properties to get correct calculations
-       swap: function( elem, options, callback ) {
-               var old = {};
-
-               // Remember the old values, and insert the new ones
-               for ( var name in options ) {
-                       old[ name ] = elem.style[ name ];
-                       elem.style[ name ] = options[ name ];
-               }
-
-               callback.call( elem );
-
-               // Revert the old values
-               for ( var name in options ) {
-                       elem.style[ name ] = old[ name ];
-               }
-       }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.hidden = function( elem ) {
-               var width = elem.offsetWidth, height = elem.offsetHeight,
-                       skip = elem.nodeName.toLowerCase() === "tr";
-
-               return width === 0 && height === 0 && !skip ?
-                       true :
-                       width > 0 && height > 0 && !skip ?
-                               false :
-                               jQuery.curCSS(elem, "display") === "none";
-       };
-
-       jQuery.expr.filters.visible = function( elem ) {
-               return !jQuery.expr.filters.hidden( elem );
-       };
-}
-var jsc = now(),
-       rscript = /<script(.|\s)*?\/script>/gi,
-       rselectTextarea = /select|textarea/i,
-       rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,
-       jsre = /=\?(&|$)/,
-       rquery = /\?/,
-       rts = /(\?|&)_=.*?(&|$)/,
-       rurl = /^(\w+:)?\/\/([^\/?#]+)/,
-       r20 = /%20/g,
-
-       // Keep a copy of the old load method
-       _load = jQuery.fn.load;
-
-jQuery.fn.extend({
-       load: function( url, params, callback ) {
-               if ( typeof url !== "string" ) {
-                       return _load.call( this, url );
-
-               // Don't do a request if no elements are being requested
-               } else if ( !this.length ) {
-                       return this;
-               }
-
-               var off = url.indexOf(" ");
-               if ( off >= 0 ) {
-                       var selector = url.slice(off, url.length);
-                       url = url.slice(0, off);
-               }
-
-               // Default to a GET request
-               var type = "GET";
-
-               // If the second parameter was provided
-               if ( params ) {
-                       // If it's a function
-                       if ( jQuery.isFunction( params ) ) {
-                               // We assume that it's the callback
-                               callback = params;
-                               params = null;
-
-                       // Otherwise, build a param string
-                       } else if ( typeof params === "object" ) {
-                               params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-                               type = "POST";
-                       }
-               }
-
-               var self = this;
-
-               // Request the remote document
-               jQuery.ajax({
-                       url: url,
-                       type: type,
-                       dataType: "html",
-                       data: params,
-                       complete: function( res, status ) {
-                               // If successful, inject the HTML into all the matched elements
-                               if ( status === "success" || status === "notmodified" ) {
-                                       // See if a selector was specified
-                                       self.html( selector ?
-                                               // Create a dummy div to hold the results
-                                               jQuery("<div />")
-                                                       // inject the contents of the document in, removing the scripts
-                                                       // to avoid any 'Permission Denied' errors in IE
-                                                       .append(res.responseText.replace(rscript, ""))
-
-                                                       // Locate the specified elements
-                                                       .find(selector) :
-
-                                               // If not, just inject the full result
-                                               res.responseText );
-                               }
-
-                               if ( callback ) {
-                                       self.each( callback, [res.responseText, status, res] );
-                               }
-                       }
-               });
-
-               return this;
-       },
-
-       serialize: function() {
-               return jQuery.param(this.serializeArray());
-       },
-       serializeArray: function() {
-               return this.map(function() {
-                       return this.elements ? jQuery.makeArray(this.elements) : this;
-               })
-               .filter(function() {
-                       return this.name && !this.disabled &&
-                               (this.checked || rselectTextarea.test(this.nodeName) ||
-                                       rinput.test(this.type));
-               })
-               .map(function( i, elem ) {
-                       var val = jQuery(this).val();
-
-                       return val == null ?
-                               null :
-                               jQuery.isArray(val) ?
-                                       jQuery.map( val, function( val, i ) {
-                                               return { name: elem.name, value: val };
-                                       }) :
-                                       { name: elem.name, value: val };
-               }).get();
-       }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
-       jQuery.fn[o] = function( f ) {
-               return this.bind(o, f);
-       };
-});
-
-jQuery.extend({
-
-       get: function( url, data, callback, type ) {
-               // shift arguments if data argument was omited
-               if ( jQuery.isFunction( data ) ) {
-                       type = type || callback;
-                       callback = data;
-                       data = null;
-               }
-
-               return jQuery.ajax({
-                       type: "GET",
-                       url: url,
-                       data: data,
-                       success: callback,
-                       dataType: type
-               });
-       },
-
-       getScript: function( url, callback ) {
-               return jQuery.get(url, null, callback, "script");
-       },
-
-       getJSON: function( url, data, callback ) {
-               return jQuery.get(url, data, callback, "json");
-       },
-
-       post: function( url, data, callback, type ) {
-               // shift arguments if data argument was omited
-               if ( jQuery.isFunction( data ) ) {
-                       type = type || callback;
-                       callback = data;
-                       data = {};
-               }
-
-               return jQuery.ajax({
-                       type: "POST",
-                       url: url,
-                       data: data,
-                       success: callback,
-                       dataType: type
-               });
-       },
-
-       ajaxSetup: function( settings ) {
-               jQuery.extend( jQuery.ajaxSettings, settings );
-       },
-
-       ajaxSettings: {
-               url: location.href,
-               global: true,
-               type: "GET",
-               contentType: "application/x-www-form-urlencoded",
-               processData: true,
-               async: true,
-               /*
-               timeout: 0,
-               data: null,
-               username: null,
-               password: null,
-               traditional: false,
-               */
-               // Create the request object; Microsoft failed to properly
-               // implement the XMLHttpRequest in IE7 (can't request local files),
-               // so we use the ActiveXObject when it is available
-               // This function can be overriden by calling jQuery.ajaxSetup
-               xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
-                       function() {
-                               return new window.XMLHttpRequest();
-                       } :
-                       function() {
-                               try {
-                                       return new window.ActiveXObject("Microsoft.XMLHTTP");
-                               } catch(e) {}
-                       },
-               accepts: {
-                       xml: "application/xml, text/xml",
-                       html: "text/html",
-                       script: "text/javascript, application/javascript",
-                       json: "application/json, text/javascript",
-                       text: "text/plain",
-                       _default: "*/*"
-               }
-       },
-
-       // Last-Modified header cache for next request
-       lastModified: {},
-       etag: {},
-
-       ajax: function( origSettings ) {
-               var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
-               
-               var jsonp, status, data,
-                       callbackContext = origSettings && origSettings.context || s,
-                       type = s.type.toUpperCase();
-
-               // convert data if not already a string
-               if ( s.data && s.processData && typeof s.data !== "string" ) {
-                       s.data = jQuery.param( s.data, s.traditional );
-               }
-
-               // Handle JSONP Parameter Callbacks
-               if ( s.dataType === "jsonp" ) {
-                       if ( type === "GET" ) {
-                               if ( !jsre.test( s.url ) ) {
-                                       s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
-                               }
-                       } else if ( !s.data || !jsre.test(s.data) ) {
-                               s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
-                       }
-                       s.dataType = "json";
-               }
-
-               // Build temporary JSONP function
-               if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
-                       jsonp = s.jsonpCallback || ("jsonp" + jsc++);
-
-                       // Replace the =? sequence both in the query string and the data
-                       if ( s.data ) {
-                               s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
-                       }
-
-                       s.url = s.url.replace(jsre, "=" + jsonp + "$1");
-
-                       // We need to make sure
-                       // that a JSONP style response is executed properly
-                       s.dataType = "script";
-
-                       // Handle JSONP-style loading
-                       window[ jsonp ] = window[ jsonp ] || function( tmp ) {
-                               data = tmp;
-                               success();
-                               complete();
-                               // Garbage collect
-                               window[ jsonp ] = undefined;
-
-                               try {
-                                       delete window[ jsonp ];
-                               } catch(e) {}
-
-                               if ( head ) {
-                                       head.removeChild( script );
-                               }
-                       };
-               }
-
-               if ( s.dataType === "script" && s.cache === null ) {
-                       s.cache = false;
-               }
-
-               if ( s.cache === false && type === "GET" ) {
-                       var ts = now();
-
-                       // try replacing _= if it is there
-                       var ret = s.url.replace(rts, "$1_=" + ts + "$2");
-
-                       // if nothing was replaced, add timestamp to the end
-                       s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
-               }
-
-               // If data is available, append data to url for get requests
-               if ( s.data && type === "GET" ) {
-                       s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
-               }
-
-               // Watch for a new set of requests
-               if ( s.global && ! jQuery.active++ ) {
-                       jQuery.event.trigger( "ajaxStart" );
-               }
-
-               // Matches an absolute URL, and saves the domain
-               var parts = rurl.exec( s.url ),
-                       remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
-
-               // If we're requesting a remote document
-               // and trying to load JSON or Script with a GET
-               if ( s.dataType === "script" && type === "GET" && remote ) {
-                       var head = document.getElementsByTagName("head")[0] || document.documentElement;
-                       var script = document.createElement("script");
-                       script.src = s.url;
-                       if ( s.scriptCharset ) {
-                               script.charset = s.scriptCharset;
-                       }
-
-                       // Handle Script loading
-                       if ( !jsonp ) {
-                               var done = false;
-
-                               // Attach handlers for all browsers
-                               script.onload = script.onreadystatechange = function() {
-                                       if ( !done && (!this.readyState ||
-                                                       this.readyState === "loaded" || this.readyState === "complete") ) {
-                                               done = true;
-                                               success();
-                                               complete();
-
-                                               // Handle memory leak in IE
-                                               script.onload = script.onreadystatechange = null;
-                                               if ( head && script.parentNode ) {
-                                                       head.removeChild( script );
-                                               }
-                                       }
-                               };
-                       }
-
-                       // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-                       // This arises when a base node is used (#2709 and #4378).
-                       head.insertBefore( script, head.firstChild );
-
-                       // We handle everything using the script element injection
-                       return undefined;
-               }
-
-               var requestDone = false;
-
-               // Create the request object
-               var xhr = s.xhr();
-
-               if ( !xhr ) {
-                       return;
-               }
-
-               // Open the socket
-               // Passing null username, generates a login popup on Opera (#2865)
-               if ( s.username ) {
-                       xhr.open(type, s.url, s.async, s.username, s.password);
-               } else {
-                       xhr.open(type, s.url, s.async);
-               }
-
-               // Need an extra try/catch for cross domain requests in Firefox 3
-               try {
-                       // Set the correct header, if data is being sent
-                       if ( s.data || origSettings && origSettings.contentType ) {
-                               xhr.setRequestHeader("Content-Type", s.contentType);
-                       }
-
-                       // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-                       if ( s.ifModified ) {
-                               if ( jQuery.lastModified[s.url] ) {
-                                       xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
-                               }
-
-                               if ( jQuery.etag[s.url] ) {
-                                       xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
-                               }
-                       }
-
-                       // Set header so the called script knows that it's an XMLHttpRequest
-                       // Only send the header if it's not a remote XHR
-                       if ( !remote ) {
-                               xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
-                       }
-
-                       // Set the Accepts header for the server, depending on the dataType
-                       xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
-                               s.accepts[ s.dataType ] + ", */*" :
-                               s.accepts._default );
-               } catch(e) {}
-
-               // Allow custom headers/mimetypes and early abort
-               if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {
-                       // Handle the global AJAX counter
-                       if ( s.global && ! --jQuery.active ) {
-                               jQuery.event.trigger( "ajaxStop" );
-                       }
-
-                       // close opended socket
-                       xhr.abort();
-                       return false;
-               }
-
-               if ( s.global ) {
-                       trigger("ajaxSend", [xhr, s]);
-               }
-
-               // Wait for a response to come back
-               var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
-                       // The request was aborted
-                       if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
-                               // Opera doesn't call onreadystatechange before this point
-                               // so we simulate the call
-                               if ( !requestDone ) {
-                                       complete();
-                               }
-
-                               requestDone = true;
-                               if ( xhr ) {
-                                       xhr.onreadystatechange = jQuery.noop;
-                               }
-
-                       // The transfer is complete and the data is available, or the request timed out
-                       } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
-                               requestDone = true;
-                               xhr.onreadystatechange = jQuery.noop;
-
-                               status = isTimeout === "timeout" ?
-                                       "timeout" :
-                                       !jQuery.httpSuccess( xhr ) ?
-                                               "error" :
-                                               s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
-                                                       "notmodified" :
-                                                       "success";
-
-                               var errMsg;
-
-                               if ( status === "success" ) {
-                                       // Watch for, and catch, XML document parse errors
-                                       try {
-                                               // process the data (runs the xml through httpData regardless of callback)
-                                               data = jQuery.httpData( xhr, s.dataType, s );
-                                       } catch(err) {
-                                               status = "parsererror";
-                                               errMsg = err;
-                                       }
-                               }
-
-                               // Make sure that the request was successful or notmodified
-                               if ( status === "success" || status === "notmodified" ) {
-                                       // JSONP handles its own success callback
-                                       if ( !jsonp ) {
-                                               success();
-                                       }
-                               } else {
-                                       jQuery.handleError(s, xhr, status, errMsg);
-                               }
-
-                               // Fire the complete handlers
-                               complete();
-
-                               if ( isTimeout === "timeout" ) {
-                                       xhr.abort();
-                               }
-
-                               // Stop memory leaks
-                               if ( s.async ) {
-                                       xhr = null;
-                               }
-                       }
-               };
-
-               // Override the abort handler, if we can (IE doesn't allow it, but that's OK)
-               // Opera doesn't fire onreadystatechange at all on abort
-               try {
-                       var oldAbort = xhr.abort;
-                       xhr.abort = function() {
-                               if ( xhr ) {
-                                       oldAbort.call( xhr );
-                               }
-
-                               onreadystatechange( "abort" );
-                       };
-               } catch(e) { }
-
-               // Timeout checker
-               if ( s.async && s.timeout > 0 ) {
-                       setTimeout(function() {
-                               // Check to see if the request is still happening
-                               if ( xhr && !requestDone ) {
-                                       onreadystatechange( "timeout" );
-                               }
-                       }, s.timeout);
-               }
-
-               // Send the data
-               try {
-                       xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );
-               } catch(e) {
-                       jQuery.handleError(s, xhr, null, e);
-                       // Fire the complete handlers
-                       complete();
-               }
-
-               // firefox 1.5 doesn't fire statechange for sync requests
-               if ( !s.async ) {
-                       onreadystatechange();
-               }
-
-               function success() {
-                       // If a local callback was specified, fire it and pass it the data
-                       if ( s.success ) {
-                               s.success.call( callbackContext, data, status, xhr );
-                       }
-
-                       // Fire the global callback
-                       if ( s.global ) {
-                               trigger( "ajaxSuccess", [xhr, s] );
-                       }
-               }
-
-               function complete() {
-                       // Process result
-                       if ( s.complete ) {
-                               s.complete.call( callbackContext, xhr, status);
-                       }
-
-                       // The request was completed
-                       if ( s.global ) {
-                               trigger( "ajaxComplete", [xhr, s] );
-                       }
-
-                       // Handle the global AJAX counter
-                       if ( s.global && ! --jQuery.active ) {
-                               jQuery.event.trigger( "ajaxStop" );
-                       }
-               }
-               
-               function trigger(type, args) {
-                       (s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);
-               }
-
-               // return XMLHttpRequest to allow aborting the request etc.
-               return xhr;
-       },
-
-       handleError: function( s, xhr, status, e ) {
-               // If a local callback was specified, fire it
-               if ( s.error ) {
-                       s.error.call( s.context || s, xhr, status, e );
-               }
-
-               // Fire the global callback
-               if ( s.global ) {
-                       (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
-               }
-       },
-
-       // Counter for holding the number of active queries
-       active: 0,
-
-       // Determines if an XMLHttpRequest was successful or not
-       httpSuccess: function( xhr ) {
-               try {
-                       // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
-                       return !xhr.status && location.protocol === "file:" ||
-                               // Opera returns 0 when status is 304
-                               ( xhr.status >= 200 && xhr.status < 300 ) ||
-                               xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;
-               } catch(e) {}
-
-               return false;
-       },
-
-       // Determines if an XMLHttpRequest returns NotModified
-       httpNotModified: function( xhr, url ) {
-               var lastModified = xhr.getResponseHeader("Last-Modified"),
-                       etag = xhr.getResponseHeader("Etag");
-
-               if ( lastModified ) {
-                       jQuery.lastModified[url] = lastModified;
-               }
-
-               if ( etag ) {
-                       jQuery.etag[url] = etag;
-               }
-
-               // Opera returns 0 when status is 304
-               return xhr.status === 304 || xhr.status === 0;
-       },
-
-       httpData: function( xhr, type, s ) {
-               var ct = xhr.getResponseHeader("content-type") || "",
-                       xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
-                       data = xml ? xhr.responseXML : xhr.responseText;
-
-               if ( xml && data.documentElement.nodeName === "parsererror" ) {
-                       jQuery.error( "parsererror" );
-               }
-
-               // Allow a pre-filtering function to sanitize the response
-               // s is checked to keep backwards compatibility
-               if ( s && s.dataFilter ) {
-                       data = s.dataFilter( data, type );
-               }
-
-               // The filter can actually parse the response
-               if ( typeof data === "string" ) {
-                       // Get the JavaScript object, if JSON is used.
-                       if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
-                               data = jQuery.parseJSON( data );
-
-                       // If the type is "script", eval it in global context
-                       } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
-                               jQuery.globalEval( data );
-                       }
-               }
-
-               return data;
-       },
-
-       // Serialize an array of form elements or a set of
-       // key/values into a query string
-       param: function( a, traditional ) {
-               var s = [];
-               
-               // Set traditional to true for jQuery <= 1.3.2 behavior.
-               if ( traditional === undefined ) {
-                       traditional = jQuery.ajaxSettings.traditional;
-               }
-               
-               // If an array was passed in, assume that it is an array of form elements.
-               if ( jQuery.isArray(a) || a.jquery ) {
-                       // Serialize the form elements
-                       jQuery.each( a, function() {
-                               add( this.name, this.value );
-                       });
-                       
-               } else {
-                       // If traditional, encode the "old" way (the way 1.3.2 or older
-                       // did it), otherwise encode params recursively.
-                       for ( var prefix in a ) {
-                               buildParams( prefix, a[prefix] );
-                       }
-               }
-
-               // Return the resulting serialization
-               return s.join("&").replace(r20, "+");
-
-               function buildParams( prefix, obj ) {
-                       if ( jQuery.isArray(obj) ) {
-                               // Serialize array item.
-                               jQuery.each( obj, function( i, v ) {
-                                       if ( traditional || /\[\]$/.test( prefix ) ) {
-                                               // Treat each array item as a scalar.
-                                               add( prefix, v );
-                                       } else {
-                                               // If array item is non-scalar (array or object), encode its
-                                               // numeric index to resolve deserialization ambiguity issues.
-                                               // Note that rack (as of 1.0.0) can't currently deserialize
-                                               // nested arrays properly, and attempting to do so may cause
-                                               // a server error. Possible fixes are to modify rack's
-                                               // deserialization algorithm or to provide an option or flag
-                                               // to force array serialization to be shallow.
-                                               buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );
-                                       }
-                               });
-                                       
-                       } else if ( !traditional && obj != null && typeof obj === "object" ) {
-                               // Serialize object item.
-                               jQuery.each( obj, function( k, v ) {
-                                       buildParams( prefix + "[" + k + "]", v );
-                               });
-                                       
-                       } else {
-                               // Serialize scalar item.
-                               add( prefix, obj );
-                       }
-               }
-
-               function add( key, value ) {
-                       // If value is a function, invoke it and return its value
-                       value = jQuery.isFunction(value) ? value() : value;
-                       s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
-               }
-       }
-});
-var elemdisplay = {},
-       rfxtypes = /toggle|show|hide/,
-       rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,
-       timerId,
-       fxAttrs = [
-               // height animations
-               [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-               // width animations
-               [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-               // opacity animations
-               [ "opacity" ]
-       ];
-
-jQuery.fn.extend({
-       show: function( speed, callback ) {
-               if ( speed || speed === 0) {
-                       return this.animate( genFx("show", 3), speed, callback);
-
-               } else {
-                       for ( var i = 0, l = this.length; i < l; i++ ) {
-                               var old = jQuery.data(this[i], "olddisplay");
-
-                               this[i].style.display = old || "";
-
-                               if ( jQuery.css(this[i], "display") === "none" ) {
-                                       var nodeName = this[i].nodeName, display;
-
-                                       if ( elemdisplay[ nodeName ] ) {
-                                               display = elemdisplay[ nodeName ];
-
-                                       } else {
-                                               var elem = jQuery("<" + nodeName + " />").appendTo("body");
-
-                                               display = elem.css("display");
-
-                                               if ( display === "none" ) {
-                                                       display = "block";
-                                               }
-
-                                               elem.remove();
-
-                                               elemdisplay[ nodeName ] = display;
-                                       }
-
-                                       jQuery.data(this[i], "olddisplay", display);
-                               }
-                       }
-
-                       // Set the display of the elements in a second loop
-                       // to avoid the constant reflow
-                       for ( var j = 0, k = this.length; j < k; j++ ) {
-                               this[j].style.display = jQuery.data(this[j], "olddisplay") || "";
-                       }
-
-                       return this;
-               }
-       },
-
-       hide: function( speed, callback ) {
-               if ( speed || speed === 0 ) {
-                       return this.animate( genFx("hide", 3), speed, callback);
-
-               } else {
-                       for ( var i = 0, l = this.length; i < l; i++ ) {
-                               var old = jQuery.data(this[i], "olddisplay");
-                               if ( !old && old !== "none" ) {
-                                       jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
-                               }
-                       }
-
-                       // Set the display of the elements in a second loop
-                       // to avoid the constant reflow
-                       for ( var j = 0, k = this.length; j < k; j++ ) {
-                               this[j].style.display = "none";
-                       }
-
-                       return this;
-               }
-       },
-
-       // Save the old toggle function
-       _toggle: jQuery.fn.toggle,
-
-       toggle: function( fn, fn2 ) {
-               var bool = typeof fn === "boolean";
-
-               if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-                       this._toggle.apply( this, arguments );
-
-               } else if ( fn == null || bool ) {
-                       this.each(function() {
-                               var state = bool ? fn : jQuery(this).is(":hidden");
-                               jQuery(this)[ state ? "show" : "hide" ]();
-                       });
-
-               } else {
-                       this.animate(genFx("toggle", 3), fn, fn2);
-               }
-
-               return this;
-       },
-
-       fadeTo: function( speed, to, callback ) {
-               return this.filter(":hidden").css("opacity", 0).show().end()
-                                       .animate({opacity: to}, speed, callback);
-       },
-
-       animate: function( prop, speed, easing, callback ) {
-               var optall = jQuery.speed(speed, easing, callback);
-
-               if ( jQuery.isEmptyObject( prop ) ) {
-                       return this.each( optall.complete );
-               }
-
-               return this[ optall.queue === false ? "each" : "queue" ](function() {
-                       var opt = jQuery.extend({}, optall), p,
-                               hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),
-                               self = this;
-
-                       for ( p in prop ) {
-                               var name = p.replace(rdashAlpha, fcamelCase);
-
-                               if ( p !== name ) {
-                                       prop[ name ] = prop[ p ];
-                                       delete prop[ p ];
-                                       p = name;
-                               }
-
-                               if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
-                                       return opt.complete.call(this);
-                               }
-
-                               if ( ( p === "height" || p === "width" ) && this.style ) {
-                                       // Store display property
-                                       opt.display = jQuery.css(this, "display");
-
-                                       // Make sure that nothing sneaks out
-                                       opt.overflow = this.style.overflow;
-                               }
-
-                               if ( jQuery.isArray( prop[p] ) ) {
-                                       // Create (if needed) and add to specialEasing
-                                       (opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
-                                       prop[p] = prop[p][0];
-                               }
-                       }
-
-                       if ( opt.overflow != null ) {
-                               this.style.overflow = "hidden";
-                       }
-
-                       opt.curAnim = jQuery.extend({}, prop);
-
-                       jQuery.each( prop, function( name, val ) {
-                               var e = new jQuery.fx( self, opt, name );
-
-                               if ( rfxtypes.test(val) ) {
-                                       e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
-
-                               } else {
-                                       var parts = rfxnum.exec(val),
-                                               start = e.cur(true) || 0;
-
-                                       if ( parts ) {
-                                               var end = parseFloat( parts[2] ),
-                                                       unit = parts[3] || "px";
-
-                                               // We need to compute starting value
-                                               if ( unit !== "px" ) {
-                                                       self.style[ name ] = (end || 1) + unit;
-                                                       start = ((end || 1) / e.cur(true)) * start;
-                                                       self.style[ name ] = start + unit;
-                                               }
-
-                                               // If a +=/-= token was provided, we're doing a relative animation
-                                               if ( parts[1] ) {
-                                                       end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
-                                               }
-
-                                               e.custom( start, end, unit );
-
-                                       } else {
-                                               e.custom( start, val, "" );
-                                       }
-                               }
-                       });
-
-                       // For JS strict compliance
-                       return true;
-               });
-       },
-
-       stop: function( clearQueue, gotoEnd ) {
-               var timers = jQuery.timers;
-
-               if ( clearQueue ) {
-                       this.queue([]);
-               }
-
-               this.each(function() {
-                       // go in reverse order so anything added to the queue during the loop is ignored
-                       for ( var i = timers.length - 1; i >= 0; i-- ) {
-                               if ( timers[i].elem === this ) {
-                                       if (gotoEnd) {
-                                               // force the next step to be the last
-                                               timers[i](true);
-                                       }
-
-                                       timers.splice(i, 1);
-                               }
-                       }
-               });
-
-               // start the next in the queue if the last step wasn't forced
-               if ( !gotoEnd ) {
-                       this.dequeue();
-               }
-
-               return this;
-       }
-
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
-       slideDown: genFx("show", 1),
-       slideUp: genFx("hide", 1),
-       slideToggle: genFx("toggle", 1),
-       fadeIn: { opacity: "show" },
-       fadeOut: { opacity: "hide" }
-}, function( name, props ) {
-       jQuery.fn[ name ] = function( speed, callback ) {
-               return this.animate( props, speed, callback );
-       };
-});
-
-jQuery.extend({
-       speed: function( speed, easing, fn ) {
-               var opt = speed && typeof speed === "object" ? speed : {
-                       complete: fn || !fn && easing ||
-                               jQuery.isFunction( speed ) && speed,
-                       duration: speed,
-                       easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
-               };
-
-               opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-                       jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
-
-               // Queueing
-               opt.old = opt.complete;
-               opt.complete = function() {
-                       if ( opt.queue !== false ) {
-                               jQuery(this).dequeue();
-                       }
-                       if ( jQuery.isFunction( opt.old ) ) {
-                               opt.old.call( this );
-                       }
-               };
-
-               return opt;
-       },
-
-       easing: {
-               linear: function( p, n, firstNum, diff ) {
-                       return firstNum + diff * p;
-               },
-               swing: function( p, n, firstNum, diff ) {
-                       return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
-               }
-       },
-
-       timers: [],
-
-       fx: function( elem, options, prop ) {
-               this.options = options;
-               this.elem = elem;
-               this.prop = prop;
-
-               if ( !options.orig ) {
-                       options.orig = {};
-               }
-       }
-
-});
-
-jQuery.fx.prototype = {
-       // Simple function for setting a style value
-       update: function() {
-               if ( this.options.step ) {
-                       this.options.step.call( this.elem, this.now, this );
-               }
-
-               (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
-
-               // Set display property to block for height/width animations
-               if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {
-                       this.elem.style.display = "block";
-               }
-       },
-
-       // Get the current size
-       cur: function( force ) {
-               if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
-                       return this.elem[ this.prop ];
-               }
-
-               var r = parseFloat(jQuery.css(this.elem, this.prop, force));
-               return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
-       },
-
-       // Start an animation from one number to another
-       custom: function( from, to, unit ) {
-               this.startTime = now();
-               this.start = from;
-               this.end = to;
-               this.unit = unit || this.unit || "px";
-               this.now = this.start;
-               this.pos = this.state = 0;
-
-               var self = this;
-               function t( gotoEnd ) {
-                       return self.step(gotoEnd);
-               }
-
-               t.elem = this.elem;
-
-               if ( t() && jQuery.timers.push(t) && !timerId ) {
-                       timerId = setInterval(jQuery.fx.tick, 13);
-               }
-       },
-
-       // Simple 'show' function
-       show: function() {
-               // Remember where we started, so that we can go back to it later
-               this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
-               this.options.show = true;
-
-               // Begin the animation
-               // Make sure that we start at a small width/height to avoid any
-               // flash of content
-               this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
-
-               // Start by showing the element
-               jQuery( this.elem ).show();
-       },
-
-       // Simple 'hide' function
-       hide: function() {
-               // Remember where we started, so that we can go back to it later
-               this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
-               this.options.hide = true;
-
-               // Begin the animation
-               this.custom(this.cur(), 0);
-       },
-
-       // Each step of an animation
-       step: function( gotoEnd ) {
-               var t = now(), done = true;
-
-               if ( gotoEnd || t >= this.options.duration + this.startTime ) {
-                       this.now = this.end;
-                       this.pos = this.state = 1;
-                       this.update();
-
-                       this.options.curAnim[ this.prop ] = true;
-
-                       for ( var i in this.options.curAnim ) {
-                               if ( this.options.curAnim[i] !== true ) {
-                                       done = false;
-                               }
-                       }
-
-                       if ( done ) {
-                               if ( this.options.display != null ) {
-                                       // Reset the overflow
-                                       this.elem.style.overflow = this.options.overflow;
-
-                                       // Reset the display
-                                       var old = jQuery.data(this.elem, "olddisplay");
-                                       this.elem.style.display = old ? old : this.options.display;
-
-                                       if ( jQuery.css(this.elem, "display") === "none" ) {
-                                               this.elem.style.display = "block";
-                                       }
-                               }
-
-                               // Hide the element if the "hide" operation was done
-                               if ( this.options.hide ) {
-                                       jQuery(this.elem).hide();
-                               }
-
-                               // Reset the properties, if the item has been hidden or shown
-                               if ( this.options.hide || this.options.show ) {
-                                       for ( var p in this.options.curAnim ) {
-                                               jQuery.style(this.elem, p, this.options.orig[p]);
-                                       }
-                               }
-
-                               // Execute the complete function
-                               this.options.complete.call( this.elem );
-                       }
-
-                       return false;
-
-               } else {
-                       var n = t - this.startTime;
-                       this.state = n / this.options.duration;
-
-                       // Perform the easing function, defaults to swing
-                       var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
-                       var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
-                       this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
-                       this.now = this.start + ((this.end - this.start) * this.pos);
-
-                       // Perform the next step of the animation
-                       this.update();
-               }
-
-               return true;
-       }
-};
-
-jQuery.extend( jQuery.fx, {
-       tick: function() {
-               var timers = jQuery.timers;
-
-               for ( var i = 0; i < timers.length; i++ ) {
-                       if ( !timers[i]() ) {
-                               timers.splice(i--, 1);
-                       }
-               }
-
-               if ( !timers.length ) {
-                       jQuery.fx.stop();
-               }
-       },
-               
-       stop: function() {
-               clearInterval( timerId );
-               timerId = null;
-       },
-       
-       speeds: {
-               slow: 600,
-               fast: 200,
-               // Default speed
-               _default: 400
-       },
-
-       step: {
-               opacity: function( fx ) {
-                       jQuery.style(fx.elem, "opacity", fx.now);
-               },
-
-               _default: function( fx ) {
-                       if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-                               fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
-                       } else {
-                               fx.elem[ fx.prop ] = fx.now;
-                       }
-               }
-       }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.animated = function( elem ) {
-               return jQuery.grep(jQuery.timers, function( fn ) {
-                       return elem === fn.elem;
-               }).length;
-       };
-}
-
-function genFx( type, num ) {
-       var obj = {};
-
-       jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
-               obj[ this ] = type;
-       });
-
-       return obj;
-}
-if ( "getBoundingClientRect" in document.documentElement ) {
-       jQuery.fn.offset = function( options ) {
-               var elem = this[0];
-
-               if ( options ) { 
-                       return this.each(function( i ) {
-                               jQuery.offset.setOffset( this, options, i );
-                       });
-               }
-
-               if ( !elem || !elem.ownerDocument ) {
-                       return null;
-               }
-
-               if ( elem === elem.ownerDocument.body ) {
-                       return jQuery.offset.bodyOffset( elem );
-               }
-
-               var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,
-                       clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
-                       top  = box.top  + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,
-                       left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
-
-               return { top: top, left: left };
-       };
-
-} else {
-       jQuery.fn.offset = function( options ) {
-               var elem = this[0];
-
-               if ( options ) { 
-                       return this.each(function( i ) {
-                               jQuery.offset.setOffset( this, options, i );
-                       });
-               }
-
-               if ( !elem || !elem.ownerDocument ) {
-                       return null;
-               }
-
-               if ( elem === elem.ownerDocument.body ) {
-                       return jQuery.offset.bodyOffset( elem );
-               }
-
-               jQuery.offset.initialize();
-
-               var offsetParent = elem.offsetParent, prevOffsetParent = elem,
-                       doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
-                       body = doc.body, defaultView = doc.defaultView,
-                       prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-                       top = elem.offsetTop, left = elem.offsetLeft;
-
-               while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-                       if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
-                               break;
-                       }
-
-                       computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-                       top  -= elem.scrollTop;
-                       left -= elem.scrollLeft;
-
-                       if ( elem === offsetParent ) {
-                               top  += elem.offsetTop;
-                               left += elem.offsetLeft;
-
-                               if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {
-                                       top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-                                       left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-                               }
-
-                               prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
-                       }
-
-                       if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-                               top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-                               left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-                       }
-
-                       prevComputedStyle = computedStyle;
-               }
-
-               if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-                       top  += body.offsetTop;
-                       left += body.offsetLeft;
-               }
-
-               if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
-                       top  += Math.max( docElem.scrollTop, body.scrollTop );
-                       left += Math.max( docElem.scrollLeft, body.scrollLeft );
-               }
-
-               return { top: top, left: left };
-       };
-}
-
-jQuery.offset = {
-       initialize: function() {
-               var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,
-                       html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-
-               jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
-
-               container.innerHTML = html;
-               body.insertBefore( container, body.firstChild );
-               innerDiv = container.firstChild;
-               checkDiv = innerDiv.firstChild;
-               td = innerDiv.nextSibling.firstChild.firstChild;
-
-               this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
-               this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
-
-               checkDiv.style.position = "fixed", checkDiv.style.top = "20px";
-               // safari subtracts parent border width here which is 5px
-               this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
-               checkDiv.style.position = checkDiv.style.top = "";
-
-               innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";
-               this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
-
-               this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
-
-               body.removeChild( container );
-               body = container = innerDiv = checkDiv = table = td = null;
-               jQuery.offset.initialize = jQuery.noop;
-       },
-
-       bodyOffset: function( body ) {
-               var top = body.offsetTop, left = body.offsetLeft;
-
-               jQuery.offset.initialize();
-
-               if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
-                       top  += parseFloat( jQuery.curCSS(body, "marginTop",  true) ) || 0;
-                       left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;
-               }
-
-               return { top: top, left: left };
-       },
-       
-       setOffset: function( elem, options, i ) {
-               // set position first, in-case top/left are set even on static elem
-               if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {
-                       elem.style.position = "relative";
-               }
-               var curElem   = jQuery( elem ),
-                       curOffset = curElem.offset(),
-                       curTop    = parseInt( jQuery.curCSS( elem, "top",  true ), 10 ) || 0,
-                       curLeft   = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;
-
-               if ( jQuery.isFunction( options ) ) {
-                       options = options.call( elem, i, curOffset );
-               }
-
-               var props = {
-                       top:  (options.top  - curOffset.top)  + curTop,
-                       left: (options.left - curOffset.left) + curLeft
-               };
-               
-               if ( "using" in options ) {
-                       options.using.call( elem, props );
-               } else {
-                       curElem.css( props );
-               }
-       }
-};
-
-
-jQuery.fn.extend({
-       position: function() {
-               if ( !this[0] ) {
-                       return null;
-               }
-
-               var elem = this[0],
-
-               // Get *real* offsetParent
-               offsetParent = this.offsetParent(),
-
-               // Get correct offsets
-               offset       = this.offset(),
-               parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-               // Subtract element margins
-               // note: when an element has margin: auto the offsetLeft and marginLeft
-               // are the same in Safari causing offset.left to incorrectly be 0
-               offset.top  -= parseFloat( jQuery.curCSS(elem, "marginTop",  true) ) || 0;
-               offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;
-
-               // Add offsetParent borders
-               parentOffset.top  += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth",  true) ) || 0;
-               parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;
-
-               // Subtract the two offsets
-               return {
-                       top:  offset.top  - parentOffset.top,
-                       left: offset.left - parentOffset.left
-               };
-       },
-
-       offsetParent: function() {
-               return this.map(function() {
-                       var offsetParent = this.offsetParent || document.body;
-                       while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-                               offsetParent = offsetParent.offsetParent;
-                       }
-                       return offsetParent;
-               });
-       }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
-       var method = "scroll" + name;
-
-       jQuery.fn[ method ] = function(val) {
-               var elem = this[0], win;
-               
-               if ( !elem ) {
-                       return null;
-               }
-
-               if ( val !== undefined ) {
-                       // Set the scroll offset
-                       return this.each(function() {
-                               win = getWindow( this );
-
-                               if ( win ) {
-                                       win.scrollTo(
-                                               !i ? val : jQuery(win).scrollLeft(),
-                                                i ? val : jQuery(win).scrollTop()
-                                       );
-
-                               } else {
-                                       this[ method ] = val;
-                               }
-                       });
-               } else {
-                       win = getWindow( elem );
-
-                       // Return the scroll offset
-                       return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
-                               jQuery.support.boxModel && win.document.documentElement[ method ] ||
-                                       win.document.body[ method ] :
-                               elem[ method ];
-               }
-       };
-});
-
-function getWindow( elem ) {
-       return ("scrollTo" in elem && elem.document) ?
-               elem :
-               elem.nodeType === 9 ?
-                       elem.defaultView || elem.parentWindow :
-                       false;
-}
-// Create innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
-       var type = name.toLowerCase();
-
-       // innerHeight and innerWidth
-       jQuery.fn["inner" + name] = function() {
-               return this[0] ?
-                       jQuery.css( this[0], type, false, "padding" ) :
-                       null;
-       };
-
-       // outerHeight and outerWidth
-       jQuery.fn["outer" + name] = function( margin ) {
-               return this[0] ?
-                       jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :
-                       null;
-       };
-
-       jQuery.fn[ type ] = function( size ) {
-               // Get window width or height
-               var elem = this[0];
-               if ( !elem ) {
-                       return size == null ? null : this;
-               }
-               
-               if ( jQuery.isFunction( size ) ) {
-                       return this.each(function( i ) {
-                               var self = jQuery( this );
-                               self[ type ]( size.call( this, i, self[ type ]() ) );
-                       });
-               }
-
-               return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?
-                       // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
-                       elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
-                       elem.document.body[ "client" + name ] :
-
-                       // Get document width or height
-                       (elem.nodeType === 9) ? // is it a document
-                               // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-                               Math.max(
-                                       elem.documentElement["client" + name],
-                                       elem.body["scroll" + name], elem.documentElement["scroll" + name],
-                                       elem.body["offset" + name], elem.documentElement["offset" + name]
-                               ) :
-
-                               // Get or set width or height on the element
-                               size === undefined ?
-                                       // Get width or height on the element
-                                       jQuery.css( elem, type ) :
-
-                                       // Set the width or height on the element (default to pixels if value is unitless)
-                                       this.css( type, typeof size === "string" ? size : size + "px" );
-       };
-
-});
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-})(window);
diff --git a/addons/webinterface.debug/js/testinvoker.js b/addons/webinterface.debug/js/testinvoker.js
deleted file mode 100644 (file)
index 64d4882..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-var GET_GENRES = '{"jsonrpc\": \"2.0\", "method": "AudioLibrary.GetGenres", "id": 1}';
-
-function call(method, resultContainer) {
-       jQuery.post('/jsonrpc?TestInvokerCall', method, function(data) {
-               if (data) {
-                       $('#' + resultContainer).html(data);
-               }
-       }, 'html');
-}
\ No newline at end of file
index f9ae573..9076851 100644 (file)
@@ -6,27 +6,31 @@
   provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.gui" version="3.00"/>
-    <import addon="xbmc.json" version="2.00"/>
+    <import addon="xbmc.json" version="4.00"/>
   </requires>
   <extension
     point="xbmc.gui.webinterface"/>
   <extension point="xbmc.addon.metadata">
     <summary lang="de">Team XBMC Webinterface. (XBMC's standard Webinterface)</summary>
+    <summary lang="bg">Уебинтерфейс на Team XBMC. (стандартният уебинтерфейс на XBMC)</summary>
     <summary lang="en">Team XBMC Web Interface. (XBMC's default web interface)</summary>
     <summary lang="es">Interface web de XBMC. (Interface web por defecto de XBMC)</summary>
+    <summary lang="fi">Team XBMC:n WWW-käyttöliittymä. (XBMC:n oletus WWW-käyttöliittymä)</summary>
     <summary lang="nl">Team XBMC Webinterface. (XBMC's standaard webinterface)</summary>
     <summary lang="pl">Standardowy interfejs WWW XBMC.</summary>
     <summary lang="pt">Interface Web da Team XBMC. (Interface Web padrão do XBMC)</summary>
-    <summary lang="ro">Interfață web XBMC. (Interfață web implicită pentru XBMC)</summary>
+    <summary lang="ro">Interfață web XBMC. (interfață web implicită pentru XBMC)</summary>
     <summary lang="se">Team XBMC webbgränssnitt. (XBMC's standardwebbgränssnitt)</summary>
     <summary lang="zh">Team XBMC Web 界面。(XBMC 的默认 web 界面)</summary>
     <description lang="de">Standard XBMC Webinterface; Für alle Geräte und Auflösungen geeignet</description>
+    <description lang="bg">Стандартния уебинтерфейс на XBMC; Направен е за устройства с най-различни резолюции</description>
     <description lang="en">Default web interface for XBMC; Designed for devices of all resolutions</description>
     <description lang="es">Interface web por defecto de XBMC. Diseñada para dispositivos de cualquier resolución</description>
+    <description lang="fi">Oletus WWW-käyttöliittymä XBMC:lle. Suunniteltu käytettäväksi kaiken kokoisilla laitteilla.</description>
     <description lang="nl">Standaard XBMC-webinterface; geschikt voor alle resoluties</description>
     <description lang="pl">Domyślny interfejs WWW dla XBMC; Zaprojektowany dla urządzeń z dowolną rozdzielczością</description>
     <description lang="pt">Interface Web padrão do XBMC. Desenhada para dispositivos com qualquer resolução</description>
-    <description lang="ro">Interfață web implicită pentru XBMC, realizată de echipa XBMC pentru dispozitive cu orice rezoluție</description>
+    <description lang="ro">Interfață web implicită pentru XBMC, realizată de echipa XBMC pentru dispozitive cu orice rezoluție.</description>
     <description lang="se">XBMC's standardwebbgränsnitt; Designat för alla upplösningar</description>
     <description lang="zh">XBMC 的默认 web 界面;适应所有分辨率模式</description>
     <platform>all</platform>
index a06a3fa..9a29eb0 100755 (executable)
@@ -1,80 +1,80 @@
 <!DOCTYPE html>
 <html>
-       <head>
-               <title>XBMC</title>
-               <meta http-equiv="Content-Language" content="EN" />
-               <meta http-equiv="Content-Type" content="UTF-8" />
-               <!-- <link rel="search" href="/provider.xml" type="application/opensearchdescription+xml" title="XBMC Library" /> -->
-               <link rel="icon" href="/favicon.ico" type="image/x-icon">
-               <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> 
-               <!-- <link href="/images/logo.png" rel="image_src" /> -->
-               <meta name="robots" content="NOINDEX, NOFOLLOW">
-               <link href="/css/core.css?1.3.57" rel="stylesheet" type="text/css">
-               <link href="/css/ipad.css?1.0.5" rel="stylesheet" media="only screen and (max-device-width: 1024px)" type="text/css">
-               <script type="text/javascript" src="/js/jquery-1.5.2.js"></script>
-               <script type="text/javascript" src="/js/Launcher.js?1.0.0"></script>
-       </head>
-       <body>
-               <div id="header">
-                       <div id="commsErrorPanel" style="display: none;"></div>
-                       <div id="navigation">
-                               <ul>
-                                       <li id="remoteControl">Remote</li>
-                                       <li id="movieLibrary">Movies</li>
-                                       <li id="tvshowLibrary">TV Shows</li>
-                                       <li id="musicLibrary">Music</li>
-                                       <!-- <li id="pictureLibrary">Pictures</li> TODO: needs pagination -->
-                                       <!-- <li id="settingsPanel">Settings</li> -->
-                               </ul>
-                       </div>
-                       <img src="/images/ajax-loader.gif" alt="Loading please wait" id="spinner" style="display: none">
-               </div>
-               <div id="body">
-                       <div id="topScrollFade" style="display: none;"></div>
-                       <div id="content"></div>
-                       <div id="overlay" style="display: none;"></div>
-               </div>
-               <div id="footerPopover">
-                       <div id="nowPlayingPanel" style="display: none;">
-                               <div id="nowPlayingContent">
-                                       <div id="audioDescription">
-                                               <div id="audioCoverArt"></div>
-                                               <div id="audioTrackWrap">
-                                                       <div id="audioArtistTitle"></div>
-                                                       <div id="audioAlbumTitle"></div>
-                                               </div>
-                                               <div id="audioTrackTitle"></div>
-                                               <div id="audioDuration"></div>
-                                       </div>
-                                       <div id="videoDescription">
-                                               <div id="videoCoverArt"></div>
-                                               <div id="videoTrackWrap">
-                                                       <div id="videoShowTitle"></div>
-                                               </div>
-                                               <div id="videoTitle"></div>
-                                               <div id="videoDuration"></div>
-                                       </div>
-                               </div>
-                               <div id="playbackControls">
-                                       <span id="pbPrev" title="Previous"></span>
-                                       <span id="pbPause" title="Pause"></span>
-                                       <span id="pbPlay" title="Play"></span>
-                                       <span id="pbStop" title="Stop"></span>
-                                       <span id="pbNext" title="Next"></span>
-                                       <div id="progressBar">
-                                               <div class="elapsedTime" style="width: 0%"></div>
-                                               <span class="progressIndicator"></span>
-                                       </div>
-                               </div>
-                               <span id="nextText">Next:</span>
-                               <div id="nextTrack" style="display: none;"></div>
-                               <div id="nowPlayingPlaylist" style="display: none;"></div>
-                       </div>
-               </div>
-               <script type="text/javascript">
-                       var mediaLibrary = new MediaLibrary();
-                       var nowPlayingManager = new NowPlayingManager();
-                       applyDeviceFixes();
-               </script>
-       </body>
+  <head>
+    <title>XBMC</title>
+    <meta http-equiv="Content-Language" content="EN" />
+    <meta http-equiv="Content-Type" content="UTF-8" />
+    <!-- <link rel="search" href="/provider.xml" type="application/opensearchdescription+xml" title="XBMC Library" /> -->
+    <link rel="icon" href="/favicon.ico" type="image/x-icon">
+    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+    <!-- <link href="/images/logo.png" rel="image_src" /> -->
+    <meta name="robots" content="NOINDEX, NOFOLLOW">
+    <link href="/css/core.css?1.3.57" rel="stylesheet" type="text/css">
+    <link href="/css/ipad.css?1.0.5" rel="stylesheet" media="only screen and (max-device-width: 1024px)" type="text/css">
+    <script type="text/javascript" src="/js/jquery-1.5.2.js"></script>
+    <script type="text/javascript" src="/js/Launcher.js?1.0.0"></script>
+  </head>
+  <body>
+    <div id="header">
+      <div id="commsErrorPanel" style="display: none;"></div>
+      <div id="navigation">
+        <ul>
+          <li id="remoteControl">Remote</li>
+          <li id="movieLibrary">Movies</li>
+          <li id="tvshowLibrary">TV Shows</li>
+          <li id="musicLibrary">Music</li>
+          <!-- <li id="pictureLibrary">Pictures</li> TODO: needs pagination -->
+          <!-- <li id="settingsPanel">Settings</li> -->
+        </ul>
+      </div>
+      <img src="/images/ajax-loader.gif" alt="Loading please wait" id="spinner" style="display: none">
+    </div>
+    <div id="body">
+      <div id="topScrollFade" style="display: none;"></div>
+      <div id="content"></div>
+      <div id="overlay" style="display: none;"></div>
+    </div>
+    <div id="footerPopover">
+      <div id="nowPlayingPanel" style="display: none;">
+        <div id="nowPlayingContent">
+          <div id="audioDescription">
+            <div id="audioCoverArt"></div>
+            <div id="audioTrackWrap">
+              <div id="audioArtistTitle"></div>
+              <div id="audioAlbumTitle"></div>
+            </div>
+            <div id="audioTrackTitle"></div>
+            <div id="audioDuration"></div>
+          </div>
+          <div id="videoDescription">
+            <div id="videoCoverArt"></div>
+            <div id="videoTrackWrap">
+              <div id="videoShowTitle"></div>
+            </div>
+            <div id="videoTitle"></div>
+            <div id="videoDuration"></div>
+          </div>
+        </div>
+        <div id="playbackControls">
+          <span id="pbPrev" title="Previous"></span>
+          <span id="pbPause" title="Pause"></span>
+          <span id="pbPlay" title="Play"></span>
+          <span id="pbStop" title="Stop"></span>
+          <span id="pbNext" title="Next"></span>
+          <div id="progressBar">
+            <div class="elapsedTime" style="width: 0%"></div>
+            <span class="progressIndicator"></span>
+          </div>
+        </div>
+        <span id="nextText">Next:</span>
+        <div id="nextTrack" style="display: none;"></div>
+        <div id="nowPlayingPlaylist" style="display: none;"></div>
+      </div>
+    </div>
+    <script type="text/javascript">
+      var mediaLibrary = new MediaLibrary();
+      var nowPlayingManager = new NowPlayingManager();
+      applyDeviceFixes();
+    </script>
+  </body>
 </html>
index 5142752..a01e3ba 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2011 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
@@ -28,96 +28,96 @@ var DEFAULT_VIDEO_COVER = 'images/DefaultVideo.png';
 /* Prototypes */
 
 String.prototype.startsWith = function(prefix) {
-       return this.indexOf(prefix) === 0;
+  return this.indexOf(prefix) === 0;
 }
 
 String.prototype.endsWith = function(suffix) {
-       return this.match(suffix + "$") == suffix;
+  return this.match(suffix + "$") == suffix;
 }
 
 function durationToString(duration) {
-       if (!duration) {
-               return '00:00';
-       }
-       minutes = Math.floor(duration / 60);
-       hours = Math.floor(minutes / 60);
-       minutes = minutes % 60;
-       seconds = duration % 60;
-       var result = '';
-       if (hours) {
-               result += (hours < 10 ? '0' + hours : hours) + ':';
-       }
-       result += (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);
-       return result;
+  if (!duration) {
+    return '00:00';
+  }
+  minutes = Math.floor(duration / 60);
+  hours = Math.floor(minutes / 60);
+  minutes = minutes % 60;
+  seconds = duration % 60;
+  var result = '';
+  if (hours) {
+    result += (hours < 10 ? '0' + hours : hours) + ':';
+  }
+  result += (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);
+  return result;
 }
 
 function timeToString(duration, showMilliseconds) {
-       if (!duration) {
-               return '00:00';
-       }
-       milliseconds = duration.milliseconds
-       var result = '';
-       if (duration.hours) {
-               result += (duration.hours < 10 ? '0' + duration.hours : duration.hours) + ':';
-       }
-       result += (duration.minutes < 10 ? '0' + duration.minutes : duration.minutes) + ':' + (duration.seconds < 10 ? '0' + duration.seconds : duration.seconds);
-       if (showMilliseconds) {
-               result += '.';
-               if (duration.milliseconds < 1000) {
-                       result += '.';
-                       if (duration.milliseconds < 100) {
-                               result += '0';
-                               if (duration.milliseconds < 10) {
-                                       result += '0';
-                               }
-                       }
-               }
-               result += duration.milliseconds;
-       }
-       return result;
+  if (!duration) {
+    return '00:00';
+  }
+  milliseconds = duration.milliseconds
+  var result = '';
+  if (duration.hours) {
+    result += (duration.hours < 10 ? '0' + duration.hours : duration.hours) + ':';
+  }
+  result += (duration.minutes < 10 ? '0' + duration.minutes : duration.minutes) + ':' + (duration.seconds < 10 ? '0' + duration.seconds : duration.seconds);
+  if (showMilliseconds) {
+    result += '.';
+    if (duration.milliseconds < 1000) {
+      result += '.';
+      if (duration.milliseconds < 100) {
+        result += '0';
+        if (duration.milliseconds < 10) {
+          result += '0';
+        }
+      }
+    }
+    result += duration.milliseconds;
+  }
+  return result;
 }
 
 function timeToDuration(time) {
-       return time.hours * 3600 + time.minutes * 60 + time.seconds;
+  return time.hours * 3600 + time.minutes * 60 + time.seconds;
 }
 
 function applyDeviceFixes() {
-       document.addEventListener('touchmove', function(e){ e.preventDefault(); });
+  document.addEventListener('touchmove', function(e){ e.preventDefault(); });
 }
 
 var commsErrorTimeout;
 
 function displayCommunicationError(m) {
-       clearTimeout(commsErrorTimeout);
-       var message = m || 'Connection to server lost';
-       $('#commsErrorPanel').html(message).show();
-       commsErrorTimeout = setTimeout('hideCommunicationError()', 5000);
+  clearTimeout(commsErrorTimeout);
+  var message = m || 'Connection to server lost';
+  $('#commsErrorPanel').html(message).show();
+  commsErrorTimeout = setTimeout('hideCommunicationError()', 5000);
 }
 
 function hideCommunicationError() {
-       $('#commsErrorPanel').hide();
+  $('#commsErrorPanel').hide();
 }
 function setCookie(name,value,days) {
-    if (days) {
-        var date = new Date();
-        date.setTime(date.getTime()+(days*24*60*60*1000));
-        var expires = "; expires="+date.toGMTString();
-    }
-    else var expires = "";
-    document.cookie = name+"="+value+expires+"; path=/";
+  if (days) {
+    var date = new Date();
+    date.setTime(date.getTime()+(days*24*60*60*1000));
+    var expires = "; expires="+date.toGMTString();
+  }
+  else var expires = "";
+  document.cookie = name+"="+value+expires+"; path=/";
 }
 
 function getCookie(name) {
-    var nameEQ = name + "=";
-    var ca = document.cookie.split(';');
-    for(var i=0;i < ca.length;i++) {
-        var c = ca[i];
-        while (c.charAt(0)==' ') c = c.substring(1,c.length);
-        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
-    }
-    return null;
+  var nameEQ = name + "=";
+  var ca = document.cookie.split(';');
+  for(var i=0;i < ca.length;i++) {
+    var c = ca[i];
+    while (c.charAt(0)==' ') c = c.substring(1,c.length);
+    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+  }
+  return null;
 }
 
 function deleteCookie(name) {
-    setCookie(name,"",-1);
+  setCookie(name,"",-1);
 }
\ No newline at end of file
index 3944533..4f23fcf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2011 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
@@ -22,7 +22,7 @@
 /* This launcher is based on the scriptaculous.js launch script */
 
 // Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // "Software"), to deal in the Software without restriction, including
@@ -30,7 +30,7 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
 //
 var DEBUG_MODE = true; /* Set to false to enable cached javascript */
 
 var Launcher = {
-       VERSION: '1.0.0',
-       REQUIRED_JQUERY: '1.5.2',
-       load: function(libraryName) {
-               document.write('<script type="text/javascript" src="' + libraryName + '?' + (DEBUG_MODE ? this.randomValue() : this.VERSION) + '"><\/script>');
-       },
-       init: function() {
-               function convertVersionString(versionString) {
-                       var v = versionString.replace(/_.*|\./g, '');
-                       v = parseInt(v + (v.length == 4 ? '' : '0'));
-                       return versionString.indexOf('_') > -1 ? v-1 : v;
-               }
+  VERSION: '1.0.0',
+  REQUIRED_JQUERY: '1.5.2',
+  load: function(libraryName) {
+    document.write('<script type="text/javascript" src="' + libraryName + '?' + (DEBUG_MODE ? this.randomValue() : this.VERSION) + '"><\/script>');
+  },
+  init: function() {
+    function convertVersionString(versionString) {
+      var v = versionString.replace(/_.*|\./g, '');
+      v = parseInt(v + (v.length == 4 ? '' : '0'));
+      return versionString.indexOf('_') > -1 ? v-1 : v;
+    }
 
-               if(!jQuery || (convertVersionString(jQuery.fn.jquery) < convertVersionString(Launcher.REQUIRED_JQUERY)))
-                       throw("XBMC Web Interface requires the jQuery JavaScript framework >= " + Launcher.REQUIRED_JQUERY);
+    if(!jQuery || (convertVersionString(jQuery.fn.jquery) < convertVersionString(Launcher.REQUIRED_JQUERY)))
+      throw("XBMC Web Interface requires the jQuery JavaScript framework >= " + Launcher.REQUIRED_JQUERY);
 
-               var js = /Launcher\.js(\?.*)?$/;
-               $('html').find('script[src]').each(
-                       function(i, s) { 
-                               if (s.src.match(js)) {
-                                       var path = s.src.replace(js, ''),
-                                       includes = s.src.match(/\?.*load=([a-z,]*)/);
-                                       $.each((includes ? includes[1] : 'jquery.lazyload,iscroll-min,Core,MediaLibrary,NowPlayingManager').split(','), function(i, include) { 
-                                               Launcher.load(path + include + '.js') 
-                                       });
-                               }
-                       });
-       },
-       randomValue: function() {
-               return Math.random();
-       }
+    var js = /Launcher\.js(\?.*)?$/;
+    $('html').find('script[src]').each(
+      function(i, s) {
+        if (s.src.match(js)) {
+          var path = s.src.replace(js, ''),
+          includes = s.src.match(/\?.*load=([a-z,]*)/);
+          $.each((includes ? includes[1] : 'jquery.lazyload,iscroll-min,Core,MediaLibrary,NowPlayingManager').split(','), function(i, include) {
+            Launcher.load(path + include + '.js')
+          });
+        }
+      });
+  },
+  randomValue: function() {
+    return Math.random();
+  }
 }
 
 Launcher.init();
\ No newline at end of file
index 18befec..18a48e6 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2011 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
  */
 
 var MediaLibrary = function() {
-               this.init();
-               return true;
-       }
+  this.init();
+  return true;
+}
 
 MediaLibrary.prototype = {
-    playlists: { },  
-  
-               init: function() {
-                       this.bindControls();
-      this.getPlaylists();
-               },
-               
-               bindControls: function() {
-                       $('#musicLibrary').click(jQuery.proxy(this.musicLibraryOpen, this));
-                       $('#movieLibrary').click(jQuery.proxy(this.movieLibraryOpen, this));
-                       $('#tvshowLibrary').click(jQuery.proxy(this.tvshowLibraryOpen, this));
-                       $('#pictureLibrary').click(jQuery.proxy(this.pictureLibraryOpen, this));
-                       $('#remoteControl').click(jQuery.proxy(this.remoteControlOpen, this));
-                       $('#overlay').click(jQuery.proxy(this.hideOverlay, this));
-                       $(window).resize(jQuery.proxy(this.updatePlayButtonLocation, this));
-               },
-               resetPage: function() {
-                       $('#musicLibrary').removeClass('selected');
-                       $('#movieLibrary').removeClass('selected');
-                       $('#tvshowLibrary').removeClass('selected');
-                       $('#remoteControl').removeClass('selected');
-                       $('#pictureLibrary').removeClass('selected');
-                       this.hideOverlay();
-               },
-               replaceAll: function(haystack, find, replace) {
-                       var parts = haystack.split(find);
-                       var result = "";
-                       var first = true;
-                       for (index in parts)
-                       {
-                               if (!first)
-                                       result += replace;                              
-                               else
-                                       first = false;
-                               
-                               result += parts[index];
-                       }
-                       
-                       return result;
-               },
+  playlists: { },
 
-    getPlaylists: function() {
-      jQuery.ajax({
-                               type: 'POST', 
-                               url: JSON_RPC + '?GetPlaylists', 
-                               data: '{"jsonrpc": "2.0", "method": "Playlist.GetPlaylists", "id": 1}', 
-                               timeout: 3000,
-                               success: jQuery.proxy(function(data) {
-                                       if (data && data.result && data.result.length > 0) {
-            $.each($(data.result), jQuery.proxy(function(i, item) {
-              this.playlists[item.type] = item.playlistid;
-            }, this));
-          }
-                               }, this),
-                               error: jQuery.proxy(function(data, error) {
-                                       displayCommunicationError();
-                                       setTimeout(jQuery.proxy(this.updateState, this), 2000);
-                               }, this), 
-                               dataType: 'json'});
-    },
-               remoteControlOpen: function(event) {
-                       this.resetPage();
-                       $('#remoteControl').addClass('selected');
-                       $('.contentContainer').hide();
-                       var libraryContainer = $('#remoteContainer');
-                       if (!libraryContainer || libraryContainer.length == 0) {
-                               $('#spinner').show();
-                               libraryContainer = $('<div>');
-                               libraryContainer.attr('id', 'remoteContainer')
-                                                               .addClass('contentContainer');
-                               $('#content').append(libraryContainer);
-                               var keys=[
-                                               {name:'up',width:'40px',height:'30px',top:'28px',left:'58px'}
-                                               ,{name:'down',width:'40px',height:'30px',top:'122px',left:'58px'}
-                                               ,{name:'left',width:'40px',height:'30px',top:'74px',left:'15px'}
-                                               ,{name:'right',width:'40px',height:'30px',top:'74px',left:'104px'}
-                                               ,{name:'ok',width:'40px',height:'30px',top:'74px',left:'58px'}
-                                               ,{name:'back',width:'40px',height:'30px',top:'13px',left:'161px'}
-                                               ,{name:'home',width:'40px',height:'30px',top:'154px',left:'8px'}
-                                               ,{name:'mute',width:'40px',height:'30px',top:'107px',left:'391px'}
-                                               ,{name:'power',width:'30px',height:'30px',top:'-3px',left:'13px'}
-                                               ,{name:'volumeup',width:'30px',height:'30px',top:'49px',left:'422px'}
-                                               ,{name:'volumedown',width:'30px',height:'30px',top:'49px',left:'367px'}
-                                               ,{name:'playpause',width:'32px',height:'23px',top:'62px',left:'260px'}
-                                               ,{name:'stop',width:'32px',height:'23px',top:'62px',left:'211px'}
-                                               ,{name:'next',width:'38px',height:'25px',top:'102px',left:'304px'}
-                                               ,{name:'previous',width:'38px',height:'25px',top:'101px',left:'160px'}
-                                               ,{name:'forward',width:'32px',height:'23px',top:'102px',left:'259px'}
-                                               ,{name:'rewind',width:'32px',height:'23px',top:'101px',left:'211px'}
-                                               ,{name:'cleanlib_a',width:'46px',height:'26px',top:'47px',left:'553px'}
-                                               ,{name:'updatelib_a',width:'46px',height:'26px',top:'47px',left:'492px'}
-                                               ,{name:'cleanlib_v',width:'46px',height:'26px',top:'111px',left:'553px'}
-                                               ,{name:'updatelib_v',width:'46px',height:'26px',top:'111px',left:'492px'}
-                                        ];
-                               for (var akey in keys) {
-                                       var aremotekey=$('<p>').attr('id',keys[akey]['name']);
-                                       aremotekey.addClass('remote_key')
-                                               .css('height',keys[akey]['height'])
-                                               .css('width',keys[akey]['width'])
-                                               .css('top',keys[akey]['top'])
-                                               .css('left',keys[akey]['left'])
-                                               //.css('border','1px solid black')
-                                               .bind('click',{key: keys[akey]['name']},jQuery.proxy(this.pressRemoteKey,this));
-                                               libraryContainer.append(aremotekey);
-                               }
-                               
-       
-                       } else {
-                               libraryContainer.show();
-                               libraryContainer.trigger('scroll');
-                       }
+  init: function() {
+    this.bindControls();
+    this.getPlaylists();
+  },
+
+  bindControls: function() {
+    $('#musicLibrary').click(jQuery.proxy(this.musicLibraryOpen, this));
+    $('#movieLibrary').click(jQuery.proxy(this.movieLibraryOpen, this));
+    $('#tvshowLibrary').click(jQuery.proxy(this.tvshowLibraryOpen, this));
+    $('#pictureLibrary').click(jQuery.proxy(this.pictureLibraryOpen, this));
+    $('#remoteControl').click(jQuery.proxy(this.remoteControlOpen, this));
+    $('#overlay').click(jQuery.proxy(this.hideOverlay, this));
+    $(window).resize(jQuery.proxy(this.updatePlayButtonLocation, this));
+  },
+  resetPage: function() {
+    $('#musicLibrary').removeClass('selected');
+    $('#movieLibrary').removeClass('selected');
+    $('#tvshowLibrary').removeClass('selected');
+    $('#remoteControl').removeClass('selected');
+    $('#pictureLibrary').removeClass('selected');
+    this.hideOverlay();
+  },
+  replaceAll: function(haystack, find, replace) {
+    var parts = haystack.split(find);
+    var result = "";
+    var first = true;
+    for (index in parts)
+    {
+      if (!first)
+        result += replace;
+      else
+        first = false;
+
+      result += parts[index];
+    }
+
+    return result;
+  },
+
+  getPlaylists: function() {
+    jQuery.ajax({
+      type: 'POST',
+      url: JSON_RPC + '?GetPlaylists',
+      data: '{"jsonrpc": "2.0", "method": "Playlist.GetPlaylists", "id": 1}',
+      timeout: 3000,
+      success: jQuery.proxy(function(data) {
+        if (data && data.result && data.result.length > 0) {
+          $.each($(data.result), jQuery.proxy(function(i, item) {
+            this.playlists[item.type] = item.playlistid;
+          }, this));
+        }
+      }, this),
+      error: jQuery.proxy(function(data, error) {
+        displayCommunicationError();
+        setTimeout(jQuery.proxy(this.updateState, this), 2000);
+      }, this),
+      dataType: 'json'});
+  },
+  remoteControlOpen: function(event) {
+    this.resetPage();
+    $('#remoteControl').addClass('selected');
+    $('.contentContainer').hide();
+    var libraryContainer = $('#remoteContainer');
+    if (!libraryContainer || libraryContainer.length == 0) {
+      $('#spinner').show();
+      libraryContainer = $('<div>');
+      libraryContainer.attr('id', 'remoteContainer')
+              .addClass('contentContainer');
+      $('#content').append(libraryContainer);
+      var keys=[
+          {name:'up',width:'40px',height:'30px',top:'28px',left:'58px'}
+          ,{name:'down',width:'40px',height:'30px',top:'122px',left:'58px'}
+          ,{name:'left',width:'40px',height:'30px',top:'74px',left:'15px'}
+          ,{name:'right',width:'40px',height:'30px',top:'74px',left:'104px'}
+          ,{name:'ok',width:'40px',height:'30px',top:'74px',left:'58px'}
+          ,{name:'back',width:'40px',height:'30px',top:'13px',left:'161px'}
+          ,{name:'home',width:'40px',height:'30px',top:'154px',left:'8px'}
+          ,{name:'mute',width:'40px',height:'30px',top:'107px',left:'391px'}
+          ,{name:'power',width:'30px',height:'30px',top:'-3px',left:'13px'}
+          ,{name:'volumeup',width:'30px',height:'30px',top:'49px',left:'422px'}
+          ,{name:'volumedown',width:'30px',height:'30px',top:'49px',left:'367px'}
+          ,{name:'playpause',width:'32px',height:'23px',top:'62px',left:'260px'}
+          ,{name:'stop',width:'32px',height:'23px',top:'62px',left:'211px'}
+          ,{name:'next',width:'38px',height:'25px',top:'102px',left:'304px'}
+          ,{name:'previous',width:'38px',height:'25px',top:'101px',left:'160px'}
+          ,{name:'forward',width:'32px',height:'23px',top:'102px',left:'259px'}
+          ,{name:'rewind',width:'32px',height:'23px',top:'101px',left:'211px'}
+          ,{name:'cleanlib_a',width:'46px',height:'26px',top:'47px',left:'553px'}
+          ,{name:'updatelib_a',width:'46px',height:'26px',top:'47px',left:'492px'}
+          ,{name:'cleanlib_v',width:'46px',height:'26px',top:'111px',left:'553px'}
+          ,{name:'updatelib_v',width:'46px',height:'26px',top:'111px',left:'492px'}
+         ];
+      for (var akey in keys) {
+        var aremotekey=$('<p>').attr('id',keys[akey]['name']);
+        aremotekey.addClass('remote_key')
+          .css('height',keys[akey]['height'])
+          .css('width',keys[akey]['width'])
+          .css('top',keys[akey]['top'])
+          .css('left',keys[akey]['left'])
+          //.css('border','1px solid black')
+          .bind('click',{key: keys[akey]['name']},jQuery.proxy(this.pressRemoteKey,this));
+          libraryContainer.append(aremotekey);
+      }
+
+
+    } else {
+      libraryContainer.show();
+      libraryContainer.trigger('scroll');
+    }
+
+    $('#spinner').hide();
+  },
 
-                       $('#spinner').hide();
-               },
+  pressRemoteKey: function(event) {
+    var keyPressed=event.data.key;
+    $('#spinner').show();
+    var player = -1;
+    // TODO: Get active player
+    if($('#videoDescription').is(':visible'))
+      player = this.playlists["video"];
+    else if($('#audioDescription').is(':visible'))
+      player = this.playlists["audio"];
 
-               pressRemoteKey: function(event) {
-                       var keyPressed=event.data.key;
-                       $('#spinner').show();
-                       var player = -1;
-      // TODO: Get active player
-                       if($('#videoDescription').is(':visible'))
-                         player = this.playlists["video"];
-                       else if($('#audioDescription').is(':visible'))
-        player = this.playlists["audio"];
-        
-                       //common part
-                       switch(keyPressed) {
-                               case 'cleanlib_a':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "AudioLibrary.Clean", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                       return; 
-                               case 'updatelib_a':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "AudioLibrary.Scan", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                       return; 
-                               case 'cleanlib_v':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "VideoLibrary.Clean", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                       return; 
-                               case 'updatelib_v':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                       return; 
-                               case 'back':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Back", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                       return; 
-                               case 'home':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Home", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                       return;
-                               case 'mute':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.ToggleMute", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                       return;
-                               case 'power':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "System.Shutdown", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                       return;
-                               case 'volumeup':
+    //common part
+    switch(keyPressed) {
+      case 'cleanlib_a':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "AudioLibrary.Clean", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'updatelib_a':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "AudioLibrary.Scan", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'cleanlib_v':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "VideoLibrary.Clean", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'updatelib_v':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'back':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Back", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'home':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Home", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'mute':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.SetMute", "params": { "mute": "toggle" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'power':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "System.Shutdown", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'volumeup':
+      jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.GetProperties", "params": { "properties": [ "volume" ] }, "id": 1}', function(data){
+        var volume = data.result.volume + 1;
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.SetVolume", "params": { "volume": '+volume+' }, "id": 1}', function(data){
+          $('#spinner').hide();
+        }, 'json');
+       }, 'json');
+        return;
+      case 'volumedown':
         jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.GetProperties", "params": { "properties": [ "volume" ] }, "id": 1}', function(data){
-                                               var volume = data.result.volume + 1;
-                                               jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.SetVolume", "params": { "value": '+volume+' }, "id": 1}', function(data){
-                                       
-                                               $('#spinner').hide();
-                                                }, 'json');
-                          }, 'json');
-                                       return;
-                               case 'volumedown':
-                                       jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.GetProperties", "params": { "properties": [ "volume" ] }, "id": 1}', function(data){
-                                               var volume = data.result.volume - 1;
-                                               jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.SetVolume", "params": { "value": '+volume+' }, "id": 1}', function(data){
-                                       
-                                               $('#spinner').hide();
-                                                }, 'json');
-                          }, 'json');
-                                       return;
-                       }
-                       //menus or other sections
-                       if (player == -1)
-                       {       
-                               switch(keyPressed) {
-                                       case 'up':
-                                               jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Up", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                               return;
-                                       case 'down':
-                                               jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Down", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                               return;
-                                       case 'left':
-                                               jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Left", "id": 1}', function(data){$('#spinner').hide();}, 'json'); 
-                                               return;
-                                       case 'right':
-                                               jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Right", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                               return;
-                                       case 'ok':
-                                               jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Select", "id": 1}', function(data){$('#spinner').hide();}, 'json');
-                                               return;                         
-                               }
-                       }
-      
-      if (player >= 0)
-      {
-        switch(keyPressed) {
-          case 'up':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.Seek", "params": { "playerid": ' + player + ', "value": "bigforward" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
-          case 'down':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.Seek", "params": { "playerid": ' + player + ', "value": "bigbackward" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
-          case 'left':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.Seek", "params": { "playerid": ' + player + ', "value": "smallbackward" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');       
-            return;
-          case 'right':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.Seek", "params": { "playerid": ' + player + ', "value": "smallforward" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
-          case 'playpause':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.PlayPause", "params": { "playerid": ' + player + ' }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
-          case 'stop':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.Stop", "params": { "playerid": ' + player + ' }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
-          case 'next':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.GoNext", "params": { "playerid": ' + player + ' }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
-          case 'previous':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.GoPrevious", "params": { "playerid": ' + player + ' }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
-          case 'forward':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.SetSpeed", "params": { "playerid": ' + player + ', "speed": "increment" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
-          case 'rewind':
-            jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.SetSpeed", "params": { "playerid": ' + player + ', "speed": "decrement" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
-            return;
+          var volume = data.result.volume - 1;
+          jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Application.SetVolume", "params": { "volume": '+volume+' }, "id": 1}', function(data){
+            $('#spinner').hide();
+          }, 'json');
+       }, 'json');
+        return;
+    }
+
+    switch(keyPressed) {
+      case 'up':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Up", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'down':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Down", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'left':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Left", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'right':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Right", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+      case 'ok':
+        jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Input.Select", "id": 1}', function(data){$('#spinner').hide();}, 'json');
+        return;
+    }
+
+    if (player >= 0)
+    {
+      switch(keyPressed) {
+        case 'playpause':
+          jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.PlayPause", "params": { "playerid": ' + player + ' }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
+          return;
+        case 'stop':
+          jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.Stop", "params": { "playerid": ' + player + ' }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
+          return;
+        case 'next':
+          jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.GoNext", "params": { "playerid": ' + player + ' }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
+          return;
+        case 'previous':
+          jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.GoPrevious", "params": { "playerid": ' + player + ' }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
+          return;
+        case 'forward':
+          jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.SetSpeed", "params": { "playerid": ' + player + ', "speed": "increment" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
+          return;
+        case 'rewind':
+          jQuery.post(JSON_RPC + '?SendRemoteKey', '{"jsonrpc": "2.0", "method": "Player.SetSpeed", "params": { "playerid": ' + player + ', "speed": "decrement" }, "id": 1}', function(data){$('#spinner').hide();}, 'json');
+          return;
+      }
+    }
+  },
+
+  musicLibraryOpen: function(event) {
+    this.resetPage();
+    $('#musicLibrary').addClass('selected');
+    $('.contentContainer').hide();
+    var libraryContainer = $('#libraryContainer');
+    if (!libraryContainer || libraryContainer.length == 0) {
+      $('#spinner').show();
+      libraryContainer = $('<div>');
+      libraryContainer.attr('id', 'libraryContainer')
+                      .addClass('contentContainer');
+      $('#content').append(libraryContainer);
+      jQuery.post(JSON_RPC + '?GetAlbums', '{"jsonrpc": "2.0", "method": "AudioLibrary.GetAlbums", "params": { "limits": { "start": 0 }, "properties": ["description", "theme", "mood", "style", "type", "albumlabel", "artist", "genre", "rating", "title", "year", "thumbnail"], "sort": { "method": "artist" } }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result && data.result.albums) {
+          this.albumList = data.result.albums;
+          $.each($(this.albumList), jQuery.proxy(function(i, item) {
+            var floatableAlbum = this.generateThumb('album', item.thumbnail, item.title, item.artist);
+            floatableAlbum.bind('click', { album: item }, jQuery.proxy(this.displayAlbumDetails, this));
+            libraryContainer.append(floatableAlbum);
+          }, this));
+          libraryContainer.append($('<div>').addClass('footerPadding'));
+          $('#spinner').hide();
+          libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
+          libraryContainer.trigger('scroll');
+          myScroll = new iScroll('libraryContainer');
+        } else {
+          libraryContainer.html('');
+        }
+      }, this), 'json');
+    } else {
+      libraryContainer.show();
+      libraryContainer.trigger('scroll');
+    }
+  },
+  getThumbnailPath: function(thumbnail) {
+    return thumbnail ? ('/vfs/' + thumbnail) : DEFAULT_ALBUM_COVER;
+  },
+  generateThumb: function(type, thumbnail, title, artist) {
+    var floatableAlbum = $('<div>');
+    var path = this.getThumbnailPath(thumbnail);
+    title = title || '';
+    artist = artist ||'';
+    if (title.length > 18 && !(title.length <= 21)) {
+      title = title.substring(0, 18) + '...';
+    }
+    if (artist.length > 20 && !(artist.length <= 22)) {
+      artist = artist.substring(0, 20) + '...';
+    }
+    var className = '';
+    var code = '';
+    switch(type) {
+      case 'album':
+        className = 'floatableAlbum';
+        code = '<p class="album" title="' + title + '">' + title + '</p><p class="artist" title="' + artist + '">' + artist + '</p>';
+        break;
+      case 'movie':
+        className = 'floatableMovieCover';
+        code = '<p class="album" title="' + title + '">' + title + '</p>';
+        break;
+      case 'tvshow':
+        className = 'floatableTVShowCover';
+        break;
+      case 'tvshowseason':
+        className = 'floatableTVShowCoverSeason';
+        break;
+      case 'image':
+      case 'directory':
+        className = 'floatableAlbum';
+        code = '<p class="album" title="' + title + '">' + title + '</p>';
+        break;
+    }
+    return floatableAlbum.addClass(className).html('<div class="imgWrapper"><div class="inner"><img src="' + path + '" alt="' + title + '" /></div></div>' + code);
+  },
+  showAlbumSelectorBlock: function(album) {
+    if (album) {
+      //Find album in stored array
+      var prevAlbum = null,
+        nextAlbum = null;
+      $.each($(this.albumList), jQuery.proxy(function(i, item) {
+        if (item.albumid == album.albumid) {
+          if (this.albumList.length > 1) {
+            prevAlbum = this.albumList[i <= 0 ? this.albumList.length-1 : i-1];
+            nextAlbum = this.albumList[i >= this.albumList.length ? 0 : i+1];
+          }
+          return false; /* .each break */
         }
+      }, this));
+      var albumSelectorBlock = $('#albumSelector');
+      if (!albumSelectorBlock || albumSelectorBlock.length == 0) {
+        albumSelectorBlock = $('<div>');
+        albumSelectorBlock.attr('id', 'albumSelector')
+                  .html('<table><tr><td class="allAlbums">All Albums</td><td class="activeAlbumTitle"></td><td class="prevAlbum">&nbsp;</td><td class="nextAlbum">&nbsp;</td></tr></table>');
+        $('#content').prepend(albumSelectorBlock);
+        $('#albumSelector .allAlbums').bind('click', jQuery.proxy(this.hideAlbumDetails, this));
       }
-               },
+      $('#albumSelector .prevAlbum').unbind();
+      $('#albumSelector .nextAlbum').unbind();
+      if (prevAlbum) {
+        $('#albumSelector .prevAlbum').bind('click', {album: prevAlbum}, jQuery.proxy(this.displayAlbumDetails, this));
+      }
+      if (nextAlbum) {
+        $('#albumSelector .nextAlbum').bind('click', {album: nextAlbum}, jQuery.proxy(this.displayAlbumDetails, this));
+      }
+      $('#albumSelector .activeAlbumTitle').html(album.title||'Unknown Album');
+      albumSelectorBlock.show();
+    }
+  },
+  hideAlbumDetails: function() {
+    $('.contentContainer').hide();
+    this.musicLibraryOpen();
+  },
+  displayAlbumDetails: function(event) {
+    this.showAlbumSelectorBlock(event.data.album);
+    var albumDetailsContainer = $('#albumDetails' + event.data.album.albumid);
+    $('#topScrollFade').hide();
+    if (!albumDetailsContainer || albumDetailsContainer.length == 0) {
+      $('#spinner').show();
+      jQuery.post(JSON_RPC + '?GetSongs', '{"jsonrpc": "2.0", "method": "AudioLibrary.GetSongs", "params": { "properties": ["title", "artist", "genre", "track", "duration", "year", "rating", "playcount"], "albumid" : ' + event.data.album.albumid + ' }, "id": 1}', jQuery.proxy(function(data) {
+        albumDetailsContainer = $('<div>');
+        albumDetailsContainer.attr('id', 'albumDetails' + event.data.album.albumid)
+                   .addClass('contentContainer')
+                   .addClass('albumContainer')
+                   .html('<table class="albumView"><thead><tr class="headerRow"><th>Artwork</th><th>&nbsp;</th><th>Name</th><th class="time">Time</th><th>Artist</th><th>Genre</th></tr></thead><tbody class="resultSet"></tbody></table>');
+        $('.contentContainer').hide();
+        $('#content').append(albumDetailsContainer);
+        var albumThumbnail = event.data.album.thumbnail;
+        var albumTitle = event.data.album.title||'Unknown Album';
+        var albumArtist = event.data.album.artist||'Unknown Artist';
+        var trackCount = data.result.limits.total;
+        $.each($(data.result.songs), jQuery.proxy(function(i, item) {
+          if (i == 0) {
+            var trackRow = $('<tr>').addClass('trackRow').addClass('tr' + i % 2);
+            trackRow.append($('<td>').attr('rowspan', ++trackCount + 1).addClass('albumThumb'));
+            for (var a = 0; a < 5; a++) {
+              trackRow.append($('<td>').html('&nbsp').attr('style', 'display: none'));
+            }
+            $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(trackRow);
+          }
+          var trackRow = $('<tr>').addClass('trackRow').addClass('tr' + i % 2).bind('click', { album: event.data.album, itmnbr: i }, jQuery.proxy(this.playTrack,this));
+          var trackNumberTD = $('<td>')
+            .html(item.track)
+
+          trackRow.append(trackNumberTD);
+          var trackTitleTD = $('<td>')
+            .html(item.title);
+
+          trackRow.append(trackTitleTD);
+          var trackDurationTD = $('<td>')
+            .addClass('time')
+            .html(durationToString(item.duration));
+
+          trackRow.append(trackDurationTD);
+          var trackArtistTD = $('<td>')
+            .html(item.artist);
+
+          trackRow.append(trackArtistTD);
+          var trackGenreTD = $('<td>')
+            .html(item.genre);
+
+          trackRow.append(trackGenreTD);
+          $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(trackRow);
+        }, this));
+        if (trackCount > 0) {
+          var trackRow = $('<tr>').addClass('fillerTrackRow');
+          for (var i = 0; i < 5; i++) {
+            trackRow.append($('<td>').html('&nbsp'));
+          }
+          $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(trackRow);
 
-               musicLibraryOpen: function(event) {
-                       this.resetPage();
-                       $('#musicLibrary').addClass('selected');
-                       $('.contentContainer').hide();
-                       var libraryContainer = $('#libraryContainer');
-                       if (!libraryContainer || libraryContainer.length == 0) {
-                               $('#spinner').show();
-                               libraryContainer = $('<div>');
-                               libraryContainer.attr('id', 'libraryContainer')
-                                                               .addClass('contentContainer');
-                               $('#content').append(libraryContainer);
-                               jQuery.post(JSON_RPC + '?GetAlbums', '{"jsonrpc": "2.0", "method": "AudioLibrary.GetAlbums", "params": { "limits": { "start": 0 }, "properties": ["description", "theme", "mood", "style", "type", "label", "artist", "genre", "rating", "title", "year", "thumbnail"], "sort": { "method": "artist" } }, "id": 1}', jQuery.proxy(function(data) {
-                                       if (data && data.result && data.result.albums) {
-                                               this.albumList = data.result.albums;
-                                               $.each($(this.albumList), jQuery.proxy(function(i, item) {
-                                                       var floatableAlbum = this.generateThumb('album', item.thumbnail, item.title, item.artist);
-                                                       floatableAlbum.bind('click', { album: item }, jQuery.proxy(this.displayAlbumDetails, this));
-                                                       libraryContainer.append(floatableAlbum);
-                                               }, this));
-                                               libraryContainer.append($('<div>').addClass('footerPadding'));
-                                               $('#spinner').hide();
-                                               libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
-                                               libraryContainer.trigger('scroll');
-                                               myScroll = new iScroll('libraryContainer');
-                                       } else {
-                                               libraryContainer.html('');
-                                       }
-                               }, this), 'json');
-                       } else {
-                               libraryContainer.show();
-                               libraryContainer.trigger('scroll');
-                       }
-               },
-               getThumbnailPath: function(thumbnail) {
-                       return thumbnail ? ('/vfs/' + thumbnail) : DEFAULT_ALBUM_COVER;
-               },
-               generateThumb: function(type, thumbnail, title, artist) {
-                       var floatableAlbum = $('<div>');
-                       var path = this.getThumbnailPath(thumbnail);
-                       title = title || '';
-                       artist = artist ||'';
-                       if (title.length > 18 && !(title.length <= 21)) {
-                               title = title.substring(0, 18) + '...';
-                       }
-                       if (artist.length > 20 && !(artist.length <= 22)) {
-                               artist = artist.substring(0, 20) + '...';
-                       }
-                       var className = '';
-                       var code = '';
-                       switch(type) {
-                               case 'album':
-                                       className = 'floatableAlbum';
-                                       code = '<p class="album" title="' + title + '">' + title + '</p><p class="artist" title="' + artist + '">' + artist + '</p>';
-                                       break;
-                               case 'movie':
-                                       className = 'floatableMovieCover';
-                                       code = '<p class="album" title="' + title + '">' + title + '</p>';
-                                       break;
-                               case 'tvshow':
-                                       className = 'floatableTVShowCover';
-                                       break;
-                               case 'tvshowseason':
-                                       className = 'floatableTVShowCoverSeason';
-                                       break;
-                               case 'image':
-                               case 'directory':
-                                       className = 'floatableAlbum';
-                                       code = '<p class="album" title="' + title + '">' + title + '</p>';
-                                       break;
-                       }
-                       return floatableAlbum.addClass(className).html('<div class="imgWrapper"><div class="inner"><img src="' + path + '" alt="' + title + '" /></div></div>' + code);
-               },
-               showAlbumSelectorBlock: function(album) {
-                       if (album) {
-                               //Find album in stored array
-                               var prevAlbum = null,
-                                       nextAlbum = null;
-                               $.each($(this.albumList), jQuery.proxy(function(i, item) {
-                                       if (item.albumid == album.albumid) {
-                                               if (this.albumList.length > 1) {
-                                                       prevAlbum = this.albumList[i <= 0 ? this.albumList.length-1 : i-1];
-                                                       nextAlbum = this.albumList[i >= this.albumList.length ? 0 : i+1];
-                                               }
-                                               return false; /* .each break */
-                                       }
-                               }, this));
-                               var albumSelectorBlock = $('#albumSelector');
-                               if (!albumSelectorBlock || albumSelectorBlock.length == 0) {
-                                       albumSelectorBlock = $('<div>');
-                                       albumSelectorBlock.attr('id', 'albumSelector')
-                                                                         .html('<table><tr><td class="allAlbums">All Albums</td><td class="activeAlbumTitle"></td><td class="prevAlbum">&nbsp;</td><td class="nextAlbum">&nbsp;</td></tr></table>');
-                                       $('#content').prepend(albumSelectorBlock);
-                                       $('#albumSelector .allAlbums').bind('click', jQuery.proxy(this.hideAlbumDetails, this));
-                               }
-                               $('#albumSelector .prevAlbum').unbind();
-                               $('#albumSelector .nextAlbum').unbind();
-                               if (prevAlbum) {
-                                       $('#albumSelector .prevAlbum').bind('click', {album: prevAlbum}, jQuery.proxy(this.displayAlbumDetails, this));
-                               }
-                               if (nextAlbum) {
-                                       $('#albumSelector .nextAlbum').bind('click', {album: nextAlbum}, jQuery.proxy(this.displayAlbumDetails, this));
-                               }
-                               $('#albumSelector .activeAlbumTitle').html(album.title||'Unknown Album');
-                               albumSelectorBlock.show();
-                       }
-               },
-               hideAlbumDetails: function() {
-                       $('.contentContainer').hide();
-                       this.musicLibraryOpen();
-               },
-               displayAlbumDetails: function(event) {
-                       this.showAlbumSelectorBlock(event.data.album);
-                       var albumDetailsContainer = $('#albumDetails' + event.data.album.albumid);
-                       $('#topScrollFade').hide();
-                       if (!albumDetailsContainer || albumDetailsContainer.length == 0) {
-                               $('#spinner').show();
-                               jQuery.post(JSON_RPC + '?GetSongs', '{"jsonrpc": "2.0", "method": "AudioLibrary.GetSongs", "params": { "properties": ["title", "artist", "genre", "track", "duration", "year", "rating", "playcount"], "albumid" : ' + event.data.album.albumid + ' }, "id": 1}', jQuery.proxy(function(data) {
-                                       albumDetailsContainer = $('<div>');
-                                       albumDetailsContainer.attr('id', 'albumDetails' + event.data.album.albumid)
-                                                                                .addClass('contentContainer')
-                                                                                .addClass('albumContainer')
-                                                                                .html('<table class="albumView"><thead><tr class="headerRow"><th>Artwork</th><th>&nbsp;</th><th>Name</th><th class="time">Time</th><th>Artist</th><th>Genre</th></tr></thead><tbody class="resultSet"></tbody></table>');
-                                       $('.contentContainer').hide();
-                                       $('#content').append(albumDetailsContainer);
-                                       var albumThumbnail = event.data.album.thumbnail;
-                                       var albumTitle = event.data.album.title||'Unknown Album';
-                                       var albumArtist = event.data.album.artist||'Unknown Artist';
-                                       var trackCount = data.result.limits.total;
-                                       $.each($(data.result.songs), jQuery.proxy(function(i, item) {
-                                               if (i == 0) {
-                                                       var trackRow = $('<tr>').addClass('trackRow').addClass('tr' + i % 2);
-                                                       trackRow.append($('<td>').attr('rowspan', ++trackCount + 1).addClass('albumThumb'));
-                                                       for (var a = 0; a < 5; a++) {
-                                                               trackRow.append($('<td>').html('&nbsp').attr('style', 'display: none'));
-                                                       }
-                                                       $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(trackRow);
-                                               }
-                                               var trackRow = $('<tr>').addClass('trackRow').addClass('tr' + i % 2).bind('click', { album: event.data.album, itmnbr: i }, jQuery.proxy(this.playTrack,this));
-                                               var trackNumberTD = $('<td>')
-                                                       .html(item.track)
-                                                       
-                                               trackRow.append(trackNumberTD);
-                                               var trackTitleTD = $('<td>')
-                                                       .html(item.title);
-                                                       
-                                               trackRow.append(trackTitleTD);
-                                               var trackDurationTD = $('<td>')
-                                                       .addClass('time')
-                                                       .html(durationToString(item.duration));
-                                                       
-                                               trackRow.append(trackDurationTD);
-                                               var trackArtistTD = $('<td>')
-                                                       .html(item.artist);
-                                                       
-                                               trackRow.append(trackArtistTD);
-                                               var trackGenreTD = $('<td>')
-                                                       .html(item.genre);
-                                                       
-                                               trackRow.append(trackGenreTD);
-                                               $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(trackRow);
-                                       }, this));
-                                       if (trackCount > 0) {
-                                               var trackRow = $('<tr>').addClass('fillerTrackRow');
-                                               for (var i = 0; i < 5; i++) {
-                                                       trackRow.append($('<td>').html('&nbsp'));
-                                               }
-                                               $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(trackRow);
+          var trackRow2 = $('<tr>').addClass('fillerTrackRow2');
+          trackRow2.append($('<td>').addClass('albumBG').html('&nbsp'));
+          for (var i = 0; i < 5; i++) {
+            trackRow2.append($('<td>').html('&nbsp'));
+          }
+          $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(trackRow2);
+        }
+        $('#albumDetails' + event.data.album.albumid + ' .albumThumb')
+          .append(this.generateThumb('album', albumThumbnail, albumTitle, albumArtist))
+          .append($('<div>').addClass('footerPadding'));
+        $('#spinner').hide();
+        myScroll = new iScroll('albumDetails' + event.data.album.albumid);
+      }, this), 'json');
+    } else {
+      $('.contentContainer').hide();
+      $('#albumDetails' + event.data.album.albumid).show();
+    }
+  },
+
+  togglePosterView: function(event){
+    var view=event.data.mode;
+    var wthumblist,hthumblist,hthumbdetails;
+    $("#toggleBanner").removeClass('activeMode');
+    $("#togglePoster").removeClass('activeMode');
+    $("#toggleLandscape").removeClass('activeMode');
+    switch(view) {
+      case 'poster':
+        setCookie('TVView','poster');
+        wthumblist='135px';
+        hthumblist='199px';
+        hthumbdetails='559px';
+        $("#togglePoster").addClass('activeMode');
+        break;
+      case 'landscape':
+        setCookie('TVView','landscape');
+        wthumblist='210px';
+        hthumblist='118px';
+        hthumbdetails='213px';
+        $("#toggleLandscape").addClass('activeMode');
+        break;
+      default: //set banner view as default
+        setCookie('TVView','banner');
+        wthumblist='379px';
+        hthumblist='70px';
+        hthumbdetails='70px';
+        $("#toggleBanner").addClass('activeMode');
+        break;
+    }
+    $(".floatableTVShowCover, .floatableTVShowCover div.imgWrapper, .floatableTVShowCover img, .floatableTVShowCover div.imgWrapper div.inner").css('width',wthumblist).css('height',hthumblist);
+    $(".floatableTVShowCoverSeason div.imgWrapper, .floatableTVShowCoverSeason div.imgWrapper div.inner,.floatableTVShowCoverSeason img, .floatableTVShowCoverSeason").css('height',hthumbdetails);
+  },
+
+  displayTVShowDetails: function(event) {
+    var tvshowDetailsContainer = $('#tvShowDetails' + event.data.tvshow.tvshowid);
+    $('#topScrollFade').hide();
+    toggle=this.toggle.detach();
+    if (!tvshowDetailsContainer || tvshowDetailsContainer.length == 0) {
+      $('#spinner').show();
+      jQuery.post(JSON_RPC + '?GetTVShowSeasons', '{"jsonrpc": "2.0", "method": "VideoLibrary.GetSeasons", "params": { "properties": [ "season", "showtitle", "playcount", "episode", "thumbnail","fanart" ], "tvshowid" : ' + event.data.tvshow.tvshowid + ' }, "id": 1}', jQuery.proxy(function(data) {
+        tvshowDetailsContainer = $('<div>');
+        tvshowDetailsContainer.attr('id', 'tvShowDetails' + event.data.tvshow.tvshowid)
+                              .css('display', 'none')
+                              .addClass('contentContainer')
+                              .addClass('tvshowContainer');
+        var showThumb = this.generateThumb('tvshowseason', event.data.tvshow.thumbnail, event.data.tvshow.title);
+        if (data && data.result && data.result.seasons && data.result.seasons.length > 0) {
+          var showDetails = $('<div>').addClass('showDetails');
+          showDetails.append(toggle);
+          showDetails.append($('<p>').html(data.result.seasons[0].showtitle).addClass('showTitle'));
+          var seasonSelectionSelect = $('<select>').addClass('seasonPicker');
+          //var episodeCount = 0;
+          this.tvActiveShowContainer = tvshowDetailsContainer;
+          //var fanart;
+          $.each($(data.result.seasons), jQuery.proxy(function(i, item) {
+//              if(fanart==null && item.fanart!=null){
+//                fanart=item.fanart;
+//              }
+//              //episodeCount += item.episode;
+            var season = $('<option>').attr('value',i);
+            season.text(item.label);
+            seasonSelectionSelect.append(season);
+
+          }, this));
+//            if(fanart!=null)
+//            {
+//              $('.contentContainer').css('background','url("'+this.getThumbnailPath(fanart)+'")').css('background-size','cover');
+//            }
+          seasonSelectionSelect.bind('change', {tvshow: event.data.tvshow.tvshowid, seasons: data.result.seasons, element: seasonSelectionSelect}, jQuery.proxy(this.displaySeasonListings, this));
+          //showDetails.append($('<p>').html('<span class="heading">Episodes:</span> ' + episodeCount));
+          showDetails.append(seasonSelectionSelect);
+          tvshowDetailsContainer.append(showDetails);
+          tvshowDetailsContainer.append(showThumb);
+          seasonSelectionSelect.trigger('change');
+          $('#content').append(tvshowDetailsContainer);
+          if(getCookie('TVView')!=null && getCookie('TVView')!='banner'){
+          var view=getCookie('TVView');
+          switch(view) {
+            case 'poster':
+              togglePoster.trigger('click');
+              break;
+            case 'landscape':
+              toggleLandscape.trigger('click')
+              break;
+          }
+        }
+          tvshowDetailsContainer.fadeIn();
+        }
+        $('#spinner').hide();
+      }, this), 'json');
+    } else {
+      $('.contentContainer').hide();
+      $('#tvShowDetails' + event.data.tvshow.tvshowid).show();
+      $('#tvShowDetails' + event.data.tvshow.tvshowid +' select').trigger('change');
+    }
+  },
+  displaySeasonListings: function(event) {
+    //retrieve selected season
+    var selectedVal=event.data.element.val();
+    var seasons=event.data.seasons;
+    $('#topScrollFade').hide();
+    //Hide old listings
+    var oldListings = $('.episodeListingsContainer', this.tvActiveShowContainer).fadeOut();
+    //Update ActiveSeason
+    this.tvActiveSeason = selectedVal;
+    //Populate new listings
+    jQuery.post(JSON_RPC + '?GetTVSeasonEpisodes', '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": { "properties": [ "title", "thumbnail","episode","plot","season"], "season" : ' + seasons[selectedVal].season + ', "tvshowid" : ' + event.data.tvshow + ' }, "id": 1}', jQuery.proxy(function(data) {
+      var episodeListingsContainer = $('<div>').addClass('episodeListingsContainer');
+      var episodeTable= $('<table>').addClass('seasonView').html('<thead><tr class="headerRow"><th class="thumbHeader">N&deg;</th><th>Title</th><th class="thumbHeader">Thumb</th><th class="thumbHeader">Details</th></tr></thead><tbody class="resultSet"></tbody>');
+      $.each($(data.result.episodes), jQuery.proxy(function(i, item) {
+        var episodeRow = $('<tr>').addClass('episodeRow').addClass('tr' + i % 2);
+        var episodePictureImg = $('<img>').bind('click', { episode: item }, jQuery.proxy(this.playTVShow, this)).css('cursor','pointer');
+        episodePictureImg.attr('src', this.getThumbnailPath(item.thumbnail));
+        var episodePicture=$('<td>').addClass('episodeThumb').append(episodePictureImg).bind('click', { episode: item }, jQuery.proxy(this.playTVShow, this));
+        var episodeNumber = $('<td>').addClass('episodeNumber').html(item.episode).bind('click', { episode: item }, jQuery.proxy(this.playTVShow, this));
+        var episodeTitle = $('<td>').html(item.title).bind('click', { episode: item }, jQuery.proxy(this.playTVShow, this));
+        var episodeDetails = $('<td class="info">').html('').bind('click',{episode:item}, jQuery.proxy(this.displayEpisodeDetails, this)).css('cursor','pointer');
+        episodeRow.append(episodeNumber).append(episodeTitle).append(episodePicture).append(episodeDetails);
+        episodeTable.append(episodeRow);
+      }, this));
+      episodeListingsContainer.append(episodeTable);
+      $(this.tvActiveShowContainer).append(episodeListingsContainer);
+    }, this), 'json');
+
+  },
 
-                                               var trackRow2 = $('<tr>').addClass('fillerTrackRow2');
-                                               trackRow2.append($('<td>').addClass('albumBG').html('&nbsp'));
-                                               for (var i = 0; i < 5; i++) {
-                                                       trackRow2.append($('<td>').html('&nbsp'));
-                                               }
-                                               $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(trackRow2);
-                                       }
-                                       $('#albumDetails' + event.data.album.albumid + ' .albumThumb')
-                                               .append(this.generateThumb('album', albumThumbnail, albumTitle, albumArtist))
-                                               .append($('<div>').addClass('footerPadding'));
-                                       $('#spinner').hide();
-                                       myScroll = new iScroll('albumDetails' + event.data.album.albumid);
-                               }, this), 'json');
-                       } else {
-                               $('.contentContainer').hide();
-                               $('#albumDetails' + event.data.album.albumid).show();
-                       }
-               },
-               
-               togglePosterView: function(event){
-                       var view=event.data.mode;
-                       var wthumblist,hthumblist,hthumbdetails;
-                       $("#toggleBanner").removeClass('activeMode');
-                       $("#togglePoster").removeClass('activeMode');
-                       $("#toggleLandscape").removeClass('activeMode');
-                       switch(view) {
-                               case 'poster':
-                                       setCookie('TVView','poster');
-                                       wthumblist='135px';
-                                       hthumblist='199px';
-                                       hthumbdetails='559px';
-                                       $("#togglePoster").addClass('activeMode');
-                                       break;
-                               case 'landscape':
-                                       setCookie('TVView','landscape');
-                                       wthumblist='210px';
-                                       hthumblist='118px';
-                                       hthumbdetails='213px';
-                                       $("#toggleLandscape").addClass('activeMode');
-                                       break;
-                               default: //set banner view as default
-                                       setCookie('TVView','banner');
-                                       wthumblist='379px';
-                                       hthumblist='70px';
-                                       hthumbdetails='70px';
-                                       $("#toggleBanner").addClass('activeMode');
-                                       break;
-                       }
-                       $(".floatableTVShowCover, .floatableTVShowCover div.imgWrapper, .floatableTVShowCover img, .floatableTVShowCover div.imgWrapper div.inner").css('width',wthumblist).css('height',hthumblist);
-                       $(".floatableTVShowCoverSeason div.imgWrapper, .floatableTVShowCoverSeason div.imgWrapper div.inner,.floatableTVShowCoverSeason img, .floatableTVShowCoverSeason").css('height',hthumbdetails);                 
-               },
-               
-               displayTVShowDetails: function(event) {
-                       var tvshowDetailsContainer = $('#tvShowDetails' + event.data.tvshow.tvshowid);
-                       $('#topScrollFade').hide();
-                       toggle=this.toggle.detach();    
-                       if (!tvshowDetailsContainer || tvshowDetailsContainer.length == 0) {
-                               $('#spinner').show();
-                               jQuery.post(JSON_RPC + '?GetTVShowSeasons', '{"jsonrpc": "2.0", "method": "VideoLibrary.GetSeasons", "params": { "properties": [ "season", "showtitle", "playcount", "episode", "thumbnail","fanart" ], "tvshowid" : ' + event.data.tvshow.tvshowid + ' }, "id": 1}', jQuery.proxy(function(data) {
-                                       tvshowDetailsContainer = $('<div>');
-                                       tvshowDetailsContainer.attr('id', 'tvShowDetails' + event.data.tvshow.tvshowid)
-                                                                                 .css('display', 'none')
-                                                                                 .addClass('contentContainer')
-                                                                                 .addClass('tvshowContainer');
-                                       var showThumb = this.generateThumb('tvshowseason', event.data.tvshow.thumbnail, event.data.tvshow.title);
-                                       if (data && data.result && data.result.seasons && data.result.seasons.length > 0) {
-                                               var showDetails = $('<div>').addClass('showDetails');
-                                               showDetails.append(toggle);
-                                               showDetails.append($('<p>').html(data.result.seasons[0].showtitle).addClass('showTitle'));
-                                               var seasonSelectionSelect = $('<select>').addClass('seasonPicker');
-                                               //var episodeCount = 0;
-                                               this.tvActiveShowContainer = tvshowDetailsContainer;
-                                               //var fanart;
-                                               $.each($(data.result.seasons), jQuery.proxy(function(i, item) {
-//                                                     if(fanart==null && item.fanart!=null){
-//                                                             fanart=item.fanart;
-//                                                     }
-//                                                     //episodeCount += item.episode;
-                                                       var season = $('<option>').attr('value',i);
-                                                       season.text(item.label);
-                                                       seasonSelectionSelect.append(season);
-                                                       
-                                               }, this));
-//                                             if(fanart!=null)
-//                                             {
-//                                                     $('.contentContainer').css('background','url("'+this.getThumbnailPath(fanart)+'")').css('background-size','cover');     
-//                                             }
-                                               seasonSelectionSelect.bind('change', {tvshow: event.data.tvshow.tvshowid, seasons: data.result.seasons, element: seasonSelectionSelect}, jQuery.proxy(this.displaySeasonListings, this));
-                                               //showDetails.append($('<p>').html('<span class="heading">Episodes:</span> ' + episodeCount));
-                                               showDetails.append(seasonSelectionSelect);
-                                               tvshowDetailsContainer.append(showDetails);
-                                               tvshowDetailsContainer.append(showThumb);
-                                               seasonSelectionSelect.trigger('change');
-                                               $('#content').append(tvshowDetailsContainer);
-                                               if(getCookie('TVView')!=null && getCookie('TVView')!='banner'){
-                                               var view=getCookie('TVView');
-                                               switch(view) {
-                                                       case 'poster':
-                                                               togglePoster.trigger('click');
-                                                               break;
-                                                       case 'landscape':
-                                                               toggleLandscape.trigger('click')
-                                                               break;                                          
-                                               }
-                                       }
-                                               tvshowDetailsContainer.fadeIn();
-                                       }
-                                       $('#spinner').hide();
-                               }, this), 'json');
-                       } else {
-                               $('.contentContainer').hide();
-                               $('#tvShowDetails' + event.data.tvshow.tvshowid).show();
-                               $('#tvShowDetails' + event.data.tvshow.tvshowid +' select').trigger('change');
-                       }
-               },
-               displaySeasonListings: function(event) {
-                       //retrieve selected season
-                       var selectedVal=event.data.element.val();
-                       var seasons=event.data.seasons;
-                       $('#topScrollFade').hide();
-                       //Hide old listings
-                       var oldListings = $('.episodeListingsContainer', this.tvActiveShowContainer).fadeOut();
-                       //Update ActiveSeason
-                       this.tvActiveSeason = selectedVal;                      
-                       //Populate new listings
-                       jQuery.post(JSON_RPC + '?GetTVSeasonEpisodes', '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": { "properties": [ "title", "thumbnail","episode","plot","season"], "season" : ' + seasons[selectedVal].season + ', "tvshowid" : ' + event.data.tvshow + ' }, "id": 1}', jQuery.proxy(function(data) {
-                               var episodeListingsContainer = $('<div>').addClass('episodeListingsContainer');
-                               var episodeTable= $('<table>').addClass('seasonView').html('<thead><tr class="headerRow"><th class="thumbHeader">N&deg;</th><th>Title</th><th class="thumbHeader">Thumb</th><th class="thumbHeader">Details</th></tr></thead><tbody class="resultSet"></tbody>');       
-                               $.each($(data.result.episodes), jQuery.proxy(function(i, item) {
-                                       var episodeRow = $('<tr>').addClass('episodeRow').addClass('tr' + i % 2);
-                                       var episodePictureImg = $('<img>').bind('click', { episode: item }, jQuery.proxy(this.playTVShow, this)).css('cursor','pointer');
-                                       episodePictureImg.attr('src', this.getThumbnailPath(item.thumbnail));
-                                       var episodePicture=$('<td>').addClass('episodeThumb').append(episodePictureImg).bind('click', { episode: item }, jQuery.proxy(this.playTVShow, this));
-                                       var episodeNumber = $('<td>').addClass('episodeNumber').html(item.episode).bind('click', { episode: item }, jQuery.proxy(this.playTVShow, this));
-                                       var episodeTitle = $('<td>').html(item.title).bind('click', { episode: item }, jQuery.proxy(this.playTVShow, this));
-                                       var episodeDetails = $('<td class="info">').html('').bind('click',{episode:item}, jQuery.proxy(this.displayEpisodeDetails, this)).css('cursor','pointer');
-                                       episodeRow.append(episodeNumber).append(episodeTitle).append(episodePicture).append(episodeDetails);
-                                       episodeTable.append(episodeRow);
-                               }, this));
-                               episodeListingsContainer.append(episodeTable);
-                               $(this.tvActiveShowContainer).append(episodeListingsContainer);
-                       }, this), 'json');
-                       
-               },
-               
-               displayEpisodeDetails: function(event) {
-                       var episodeDetails = $('<div>').attr('id', 'episode-' + event.data.episode.episodeid).addClass('episodePopoverContainer');
-                       episodeDetails.append($('<img>').attr('src', '/images/close-button.png').addClass('closeButton').bind('click', jQuery.proxy(this.hideOverlay, this)));
-                       episodeDetails.append($('<img>').attr('src', this.getThumbnailPath(event.data.episode.thumbnail)).addClass('episodeCover'));
-                       episodeDetails.append($('<div>').addClass('playIcon').bind('click', {episode: event.data.episode}, jQuery.proxy(this.playTVShow, this)));
-                       var episodeTitle = $('<p>').addClass('episodeTitle');
-                       var yearText = event.data.episode.year ? ' <span class="year">(' + event.data.episode.year + ')</span>' : '';
-                       episodeTitle.html(event.data.episode.title + yearText);
-                       episodeDetails.append(episodeTitle);
-                       if (event.data.episode.runtime) {
-                               episodeDetails.append($('<p>').addClass('runtime').html('<strong>Runtime:</strong> ' + event.data.epispde.runtime + ' minutes'));
-                       }
-                       if (event.data.episode.season) {
-                               episodeDetails.append($('<p>').addClass('season').html('<strong>Season:</strong> ' + event.data.episode.season));
-                       }
-                       if (event.data.episode.episode) {
-                               episodeDetails.append($('<p>').addClass('episode').html('<strong>Episode:</strong> ' + event.data.episode.episode));
-                       }
-                       if (event.data.episode.plot) {
-                               episodeDetails.append($('<p>').addClass('plot').html('<strong>Plot:</strong> <br/><br/>' +event.data.episode.plot));
-                       }
-                       if (event.data.episode.genre) {
-                               episodeDetails.append($('<p>').addClass('genre').html('<strong>Genre:</strong> ' + event.data.episode.genre));
-                       }
-                       if (event.data.episode.rating) {
-                               //Todo
-                       }
-                       if (event.data.episode.director) {
-                               episodeDetails.append($('<p>').addClass('director').html('<strong>Directed By:</strong> ' + event.data.episode.director));
-                       }
-                       this.activeCover = episodeDetails;
-                       $('body').append(episodeDetails);
-                       $('#overlay').show();
-                       this.updatePlayButtonLocation();
-               },
-               
-               playTVShow: function(event) {
-      jQuery.post(JSON_RPC + '?AddTvShowToPlaylist', '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "episodeid": ' + event.data.episode.episodeid + ' } }, "id": 1}', jQuery.proxy(function(data) {
-        this.hideOverlay();
+  displayEpisodeDetails: function(event) {
+    var episodeDetails = $('<div>').attr('id', 'episode-' + event.data.episode.episodeid).addClass('episodePopoverContainer');
+    episodeDetails.append($('<img>').attr('src', '/images/close-button.png').addClass('closeButton').bind('click', jQuery.proxy(this.hideOverlay, this)));
+    episodeDetails.append($('<img>').attr('src', this.getThumbnailPath(event.data.episode.thumbnail)).addClass('episodeCover'));
+    episodeDetails.append($('<div>').addClass('playIcon').bind('click', {episode: event.data.episode}, jQuery.proxy(this.playTVShow, this)));
+    var episodeTitle = $('<p>').addClass('episodeTitle');
+    var yearText = event.data.episode.year ? ' <span class="year">(' + event.data.episode.year + ')</span>' : '';
+    episodeTitle.html(event.data.episode.title + yearText);
+    episodeDetails.append(episodeTitle);
+    if (event.data.episode.runtime) {
+      episodeDetails.append($('<p>').addClass('runtime').html('<strong>Runtime:</strong> ' + event.data.epispde.runtime + ' minutes'));
+    }
+    if (event.data.episode.season) {
+      episodeDetails.append($('<p>').addClass('season').html('<strong>Season:</strong> ' + event.data.episode.season));
+    }
+    if (event.data.episode.episode) {
+      episodeDetails.append($('<p>').addClass('episode').html('<strong>Episode:</strong> ' + event.data.episode.episode));
+    }
+    if (event.data.episode.plot) {
+      episodeDetails.append($('<p>').addClass('plot').html('<strong>Plot:</strong> <br/><br/>' +event.data.episode.plot));
+    }
+    if (event.data.episode.genre) {
+      episodeDetails.append($('<p>').addClass('genre').html('<strong>Genre:</strong> ' + event.data.episode.genre));
+    }
+    if (event.data.episode.rating) {
+      //Todo
+    }
+    if (event.data.episode.director) {
+      episodeDetails.append($('<p>').addClass('director').html('<strong>Directed By:</strong> ' + event.data.episode.director));
+    }
+    this.activeCover = episodeDetails;
+    $('body').append(episodeDetails);
+    $('#overlay').show();
+    this.updatePlayButtonLocation();
+  },
+
+  playTVShow: function(event) {
+    jQuery.post(JSON_RPC + '?AddTvShowToPlaylist', '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "episodeid": ' + event.data.episode.episodeid + ' } }, "id": 1}', jQuery.proxy(function(data) {
+      this.hideOverlay();
+    }, this), 'json');
+  },
+  hideOverlay: function(event) {
+    if (this.activeCover) {
+      $(this.activeCover).remove();
+      this.activeCover = null;
+    }
+    $('#overlay').hide();
+  },
+  updatePlayButtonLocation: function(event) {
+    var movieContainer = $('.movieCover');
+    if (movieContainer.length > 0) {
+      var playIcon = $('.playIcon');
+      if (playIcon.length > 0) {
+        var heightpi=$(movieContainer[0]).height();
+        playIcon.width(Math.floor(0.65*heightpi));
+        playIcon.height(heightpi);
+      }
+    }
+    var episodeContainer = $('.episodeCover');
+    if (episodeContainer.length > 0) {
+      var playIcon = $('.playIcon');
+      if (playIcon.length > 0) {
+        var widthpi=$(episodeContainer[0]).width();
+        playIcon.width(widthpi);
+        //assume 16/9 thumb
+        playIcon.height(Math.floor(widthpi*9/16));
+      }
+    }
+  },
+  playMovie: function(event) {
+    jQuery.post(JSON_RPC + '?PlayMovie', '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "movieid": ' + event.data.movie.movieid + ' } }, "id": 1}', jQuery.proxy(function(data) {
+      this.hideOverlay();
+    }, this), 'json');
+  },
+  displayMovieDetails: function(event) {
+    var movieDetails = $('<div>').attr('id', 'movie-' + event.data.movie.movieid).addClass('moviePopoverContainer');
+    movieDetails.append($('<img>').attr('src', '/images/close-button.png').addClass('closeButton').bind('click', jQuery.proxy(this.hideOverlay, this)));
+    movieDetails.append($('<img>').attr('src', this.getThumbnailPath(event.data.movie.thumbnail)).addClass('movieCover'));
+    movieDetails.append($('<div>').addClass('playIcon').bind('click', {movie: event.data.movie}, jQuery.proxy(this.playMovie, this)));
+    var movieTitle = $('<p>').addClass('movieTitle');
+    var yearText = event.data.movie.year ? ' <span class="year">(' + event.data.movie.year + ')</span>' : '';
+    movieTitle.html(event.data.movie.title + yearText);
+    movieDetails.append(movieTitle);
+    if (event.data.movie.runtime) {
+      movieDetails.append($('<p>').addClass('runtime').html('<strong>Runtime:</strong> ' + event.data.movie.runtime + ' minutes'));
+    }
+    if (event.data.movie.plot) {
+      movieDetails.append($('<p>').addClass('plot').html(event.data.movie.plot));
+    }
+    if (event.data.movie.genre) {
+      movieDetails.append($('<p>').addClass('genre').html('<strong>Genre:</strong> ' + event.data.movie.genre));
+    }
+    if (event.data.movie.rating) {
+      //Todo
+    }
+    if (event.data.movie.director) {
+      movieDetails.append($('<p>').addClass('director').html('<strong>Directed By:</strong> ' + event.data.movie.director));
+    }
+    this.activeCover = movieDetails;
+    $('body').append(movieDetails);
+    $('#overlay').show();
+    this.updatePlayButtonLocation();
+  },
+  playTrack: function(event) {
+    jQuery.post(JSON_RPC + '?ClearPlaylist', '{"jsonrpc": "2.0", "method": "Playlist.Clear", "params": { "playlistid": ' + this.playlists["audio"] + ' }, "id": 1}', jQuery.proxy(function(data) {
+      //check that clear worked.
+      jQuery.post(JSON_RPC + '?AddAlbumToPlaylist', '{"jsonrpc": "2.0", "method": "Playlist.Add", "params": { "playlistid": ' + this.playlists["audio"] + ', "item": { "albumid": ' + event.data.album.albumid + ' } }, "id": 1}', jQuery.proxy(function(data) {
+        //play specific song in playlist
+        jQuery.post(JSON_RPC + '?PlaylistItemPlay', '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "playlistid": ' + this.playlists["audio"] + ', "position": '+ event.data.itmnbr + ' } }, "id": 1}', function() {}, 'json');
+      }, this), 'json');
+    }, this), 'json');
+  },
+  movieLibraryOpen: function() {
+    this.resetPage();
+    $('#movieLibrary').addClass('selected');
+    $('.contentContainer').hide();
+    var libraryContainer = $('#movieLibraryContainer');
+    if (!libraryContainer || libraryContainer.length == 0) {
+      $('#spinner').show();
+      jQuery.post(JSON_RPC + '?GetMovies', '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": { "limits": { "start": 0 }, "properties": [ "genre", "director", "trailer", "tagline", "plot", "plotoutline", "title", "originaltitle", "lastplayed", "runtime", "year", "playcount", "rating", "thumbnail", "file" ], "sort": { "method": "sorttitle", "ignorearticle": true } }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result && data.result.movies) {
+            libraryContainer = $('<div>');
+            libraryContainer.attr('id', 'movieLibraryContainer')
+                    .addClass('contentContainer');
+            $('#content').append(libraryContainer);
+        } else {
+          libraryContainer.html('');
+        }
+        //data.result.movies.sort(jQuery.proxy(this.movieTitleSorter, this));
+        $.each($(data.result.movies), jQuery.proxy(function(i, item) {
+          var floatableMovieCover = this.generateThumb('movie', item.thumbnail, item.title);
+          floatableMovieCover.bind('click', { movie: item }, jQuery.proxy(this.displayMovieDetails, this));
+          libraryContainer.append(floatableMovieCover);
+        }, this));
+        libraryContainer.append($('<div>').addClass('footerPadding'));
+        $('#spinner').hide();
+        libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
+        libraryContainer.trigger('scroll');
+        //$('#libraryContainer img').lazyload();
+        myScroll = new iScroll('movieLibraryContainer');
+      }, this), 'json');
+    } else {
+      libraryContainer.show();
+      libraryContainer.trigger('scroll');
+    }
+  },
+  tvshowLibraryOpen: function() {
+    this.resetPage();
+    $('#tvshowLibrary').addClass('selected');
+    $('.contentContainer').hide();
+    var libraryContainer = $('#tvshowLibraryContainer');
+    if (!libraryContainer || libraryContainer.length == 0) {
+      $('#spinner').show();
+      toggle=$('<p>').addClass('toggle');
+      togglePoster= $('<span>Poster</span>');
+      togglePoster.attr('id', 'togglePoster')
+            .css('cursor','pointer')
+            .bind('click',{mode: 'poster'},jQuery.proxy(this.togglePosterView,this));
+      toggleBanner= $('<span>Banner</span>');
+      toggleBanner.attr('id', 'toggleBanner')
+            .css('cursor','pointer')
+            .addClass('activeMode')
+            .bind('click',{mode: 'banner'},jQuery.proxy(this.togglePosterView,this));
+      toggleLandscape= $('<span>Landscape</span>');
+      toggleLandscape.attr('id', 'toggleLandscape')
+            .css('cursor','pointer')
+            .bind('click',{mode: 'landscape'},jQuery.proxy(this.togglePosterView,this));
+      toggle.append(toggleBanner).append(' | ').append(togglePoster).append(' | ').append(toggleLandscape);
+      this.toggle=toggle;
+      jQuery.post(JSON_RPC + '?GetTVShows', '{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": { "properties": ["genre", "plot", "title", "lastplayed", "episode", "year", "playcount", "rating", "thumbnail", "studio", "mpaa", "premiered"] }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result && data.result.tvshows) {
+            libraryContainer = $('<div>');
+            libraryContainer.append(toggle);
+            libraryContainer.attr('id', 'tvshowLibraryContainer')
+                    .addClass('contentContainer');
+            $('#content').append(libraryContainer);
+        } else {
+          libraryContainer.html('');
+        }
+        $.each($(data.result.tvshows), jQuery.proxy(function(i, item) {
+          var floatableTVShowCover = this.generateThumb('tvshow', item.thumbnail, item.title);
+          floatableTVShowCover.bind('click', { tvshow: item }, jQuery.proxy(this.displayTVShowDetails, this));
+          libraryContainer.append(floatableTVShowCover);
+        }, this));
+        libraryContainer.append($('<div>').addClass('footerPadding'));
+        $('#spinner').hide();
+        libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
+        libraryContainer.trigger('scroll');
+        myScroll = new iScroll('tvshowLibraryContainer');
+        if(getCookie('TVView')!=null && getCookie('TVView')!='banner'){
+          var view=getCookie('TVView');
+          switch(view) {
+            case 'poster':
+              togglePoster.trigger('click');
+              break;
+            case 'landscape':
+              toggleLandscape.trigger('click')
+              break;
+          }
+        }
+      }, this), 'json');
+    } else {
+      libraryContainer.prepend($(".toggle").detach()).show();
+      libraryContainer.trigger('scroll');
+    }
+
+  },
+  updateScrollEffects: function(event) {
+    if (event.data.activeLibrary && $(event.data.activeLibrary).scrollTop() > 0) {
+      $('#topScrollFade').fadeIn();
+    } else {
+      $('#topScrollFade').fadeOut();
+    }
+  },
+  startSlideshow: function(event) {
+    jQuery.post(JSON_RPC + '?StartSlideshow', '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "recursive" : "true", "random":"true", "path" : "' + this.replaceAll(event.data.directory.file, "\\", "\\\\") + '" } }, "id": 1}', null, 'json');
+  },
+  showDirectory: function(event) {
+    var directory = event.data.directory.file;
+    var jsonDirectory = this.replaceAll(directory, "\\", "\\\\");
+    this.resetPage();
+    $('#pictureLibrary').addClass('selected');
+    $('.contentContainer').hide();
+    var libraryContainer = $('#pictureLibraryDirContainer' + directory);
+    if (!libraryContainer || libraryContainer.length == 0) {
+      $('#spinner').show();
+      jQuery.post(JSON_RPC + '?GetDirectory', '{"jsonrpc": "2.0", "method": "Files.GetDirectory", "params": { "media" : "pictures", "directory": "' + jsonDirectory + '" }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result && ( data.result.directories || data.result.files )) {
+          libraryContainer = $('<div>');
+          libraryContainer.attr('id', 'pictureLibraryDirContainer' + directory)
+                  .addClass('contentContainer');
+          $('#content').append(libraryContainer);
+          var breadcrumb = $('<div>');
+          var seperator = '/';
+          var item = '';
+          var directoryArray = directory.split(seperator);
+          jQuery.each(directoryArray, function(i,v) {
+            if(v != '') {
+              item += v + seperator;
+              //tmp.bind('click', { directory: item }, jQuery.proxy(this.showDirectory, this));
+              breadcrumb.append($('<div>').text(' > ' + v).css('float','left').addClass('breadcrumb'));
+            }
+          });
+          libraryContainer.append(breadcrumb);
+          libraryContainer.append($('<div>').css('clear','both'));
+          if (data.result.files) {
+            $.each($(data.result.files), jQuery.proxy(function(i, item) {
+              if (item.filetype == "file")
+              {
+                var floatableImage = this.generateThumb('image', item.file, item.label);
+                libraryContainer.append(floatableImage);
+              }
+              else if (item.filetype == "directory")
+              {
+                var floatableShare = this.generateThumb('directory', item.thumbnail, item.label);
+                floatableShare.bind('click', { directory: item }, jQuery.proxy(this.showDirectory, this));
+                //var slideshow = $('<div">');
+                //slideshow.html('<div>Slideshow</div>');
+                //slideshow.bind('click', { directory: item }, jQuery.proxy(this.startSlideshow, this));
+                //floatableShare.append(slideshow);
+                libraryContainer.append(floatableShare);
+              }
+            }, this));
+          }
+          libraryContainer.append($('<div>').addClass('footerPadding'));
+        } else {
+          libraryContainer.html('');
+        }
+        $('#spinner').hide();
+        libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
+        libraryContainer.trigger('scroll');
+        myScroll = new iScroll('#pictureLibraryDirContainer' + directory);
+      }, this), 'json');
+    } else {
+      libraryContainer.show();
+      libraryContainer.trigger('scroll');
+    }
+  },
+  pictureLibraryOpen: function() {
+    this.resetPage();
+    $('#pictureLibrary').addClass('selected');
+    $('.contentContainer').hide();
+    var libraryContainer = $('#pictureLibraryContainer');
+    if (!libraryContainer || libraryContainer.length == 0) {
+      $('#spinner').show();
+      jQuery.post(JSON_RPC + '?GetSources', '{"jsonrpc": "2.0", "method": "Files.GetSources", "params": { "media" : "pictures" }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result && data.result.shares) {
+          libraryContainer = $('<div>');
+          libraryContainer.attr('id', 'pictureLibraryContainer')
+                          .addClass('contentContainer');
+          $('#content').append(libraryContainer);
+        } else {
+          libraryContainer.html('');
+        }
+        $.each($(data.result.shares), jQuery.proxy(function(i, item) {
+          var floatableShare = this.generateThumb('directory', item.thumbnail, item.label);
+          floatableShare.bind('click', { directory: item }, jQuery.proxy(this.showDirectory, this));
+          libraryContainer.append(floatableShare);
+        }, this));
+        libraryContainer.append($('<div>').addClass('footerPadding'));
+        $('#spinner').hide();
+        libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
+        libraryContainer.trigger('scroll');
+        myScroll = new iScroll('#pictureLibraryContainer');
       }, this), 'json');
-               },
-               hideOverlay: function(event) {
-                       if (this.activeCover) {
-                               $(this.activeCover).remove();
-                               this.activeCover = null;
-                       }
-                       $('#overlay').hide();
-               },
-               updatePlayButtonLocation: function(event) {
-                       var movieContainer = $('.movieCover');
-                       if (movieContainer.length > 0) {
-                               var playIcon = $('.playIcon');
-                               if (playIcon.length > 0) {
-                                       var heightpi=$(movieContainer[0]).height();
-                                       playIcon.width(Math.floor(0.65*heightpi));
-                                       playIcon.height(heightpi);
-                               }
-                       }
-                       var episodeContainer = $('.episodeCover');
-                       if (episodeContainer.length > 0) {
-                               var playIcon = $('.playIcon');
-                               if (playIcon.length > 0) {
-                                       var widthpi=$(episodeContainer[0]).width();
-                                       playIcon.width(widthpi);
-                                       //assume 16/9 thumb
-                                       playIcon.height(Math.floor(widthpi*9/16));
-                               }
-                       }
-               },
-               playMovie: function(event) {
-                       jQuery.post(JSON_RPC + '?PlayMovie', '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "movieid": ' + event.data.movie.movieid + ' } }, "id": 1}', jQuery.proxy(function(data) {
-                               this.hideOverlay();
-                       }, this), 'json');
-               },
-               displayMovieDetails: function(event) {
-                       var movieDetails = $('<div>').attr('id', 'movie-' + event.data.movie.movieid).addClass('moviePopoverContainer');
-                       movieDetails.append($('<img>').attr('src', '/images/close-button.png').addClass('closeButton').bind('click', jQuery.proxy(this.hideOverlay, this)));
-                       movieDetails.append($('<img>').attr('src', this.getThumbnailPath(event.data.movie.thumbnail)).addClass('movieCover'));
-                       movieDetails.append($('<div>').addClass('playIcon').bind('click', {movie: event.data.movie}, jQuery.proxy(this.playMovie, this)));
-                       var movieTitle = $('<p>').addClass('movieTitle');
-                       var yearText = event.data.movie.year ? ' <span class="year">(' + event.data.movie.year + ')</span>' : '';
-                       movieTitle.html(event.data.movie.title + yearText);
-                       movieDetails.append(movieTitle);
-                       if (event.data.movie.runtime) {
-                               movieDetails.append($('<p>').addClass('runtime').html('<strong>Runtime:</strong> ' + event.data.movie.runtime + ' minutes'));
-                       }
-                       if (event.data.movie.plot) {
-                               movieDetails.append($('<p>').addClass('plot').html(event.data.movie.plot));
-                       }
-                       if (event.data.movie.genre) {
-                               movieDetails.append($('<p>').addClass('genre').html('<strong>Genre:</strong> ' + event.data.movie.genre));
-                       }
-                       if (event.data.movie.rating) {
-                               //Todo
-                       }
-                       if (event.data.movie.director) {
-                               movieDetails.append($('<p>').addClass('director').html('<strong>Directed By:</strong> ' + event.data.movie.director));
-                       }
-                       this.activeCover = movieDetails;
-                       $('body').append(movieDetails);
-                       $('#overlay').show();
-                       this.updatePlayButtonLocation();
-               },
-               playTrack: function(event) {
-                       jQuery.post(JSON_RPC + '?ClearPlaylist', '{"jsonrpc": "2.0", "method": "Playlist.Clear", "params": { "playlistid": ' + this.playlists["audio"] + ' }, "id": 1}', jQuery.proxy(function(data) {
-                               //check that clear worked.
-                               jQuery.post(JSON_RPC + '?AddAlbumToPlaylist', '{"jsonrpc": "2.0", "method": "Playlist.Add", "params": { "playlistid": ' + this.playlists["audio"] + ', "item": { "albumid": ' + event.data.album.albumid + ' } }, "id": 1}', jQuery.proxy(function(data) {
-                                       //play specific song in playlist
-                                       jQuery.post(JSON_RPC + '?PlaylistItemPlay', '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "playlist": { "playlistid": ' + this.playlists["audio"] + ', "position": '+ event.data.itmnbr + ' } }, "id": 1}', function() {}, 'json');
-                               }, this), 'json');
-                       }, this), 'json');
-               },
-               movieLibraryOpen: function() {
-                       this.resetPage();
-                       $('#movieLibrary').addClass('selected');
-                       $('.contentContainer').hide();
-                       var libraryContainer = $('#movieLibraryContainer');
-                       if (!libraryContainer || libraryContainer.length == 0) {
-                               $('#spinner').show();
-                               jQuery.post(JSON_RPC + '?GetMovies', '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": { "limits": { "start": 0 }, "properties": [ "genre", "director", "trailer", "tagline", "plot", "plotoutline", "title", "originaltitle", "lastplayed", "runtime", "year", "playcount", "rating", "thumbnail", "file" ], "sort": { "method": "sorttitle", "ignorearticle": true } }, "id": 1}', jQuery.proxy(function(data) {
-                                       if (data && data.result && data.result.movies) {
-                                                       libraryContainer = $('<div>');
-                                                       libraryContainer.attr('id', 'movieLibraryContainer')
-                                                                                       .addClass('contentContainer');
-                                                       $('#content').append(libraryContainer);
-                                       } else {
-                                               libraryContainer.html('');
-                                       }
-                                       //data.result.movies.sort(jQuery.proxy(this.movieTitleSorter, this));
-                                       $.each($(data.result.movies), jQuery.proxy(function(i, item) {
-                                               var floatableMovieCover = this.generateThumb('movie', item.thumbnail, item.title);
-                                               floatableMovieCover.bind('click', { movie: item }, jQuery.proxy(this.displayMovieDetails, this));
-                                               libraryContainer.append(floatableMovieCover);
-                                       }, this));
-                                       libraryContainer.append($('<div>').addClass('footerPadding'));
-                                       $('#spinner').hide();
-                                       libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
-                                       libraryContainer.trigger('scroll');
-                                       //$('#libraryContainer img').lazyload();
-                                       myScroll = new iScroll('movieLibraryContainer');
-                               }, this), 'json');
-                       } else {
-                               libraryContainer.show();
-                               libraryContainer.trigger('scroll');
-                       }
-               },
-               tvshowLibraryOpen: function() {
-                       this.resetPage();
-                       $('#tvshowLibrary').addClass('selected');
-                       $('.contentContainer').hide();
-                       var libraryContainer = $('#tvshowLibraryContainer');
-                       if (!libraryContainer || libraryContainer.length == 0) {
-                               $('#spinner').show();
-                               toggle=$('<p>').addClass('toggle');
-                               togglePoster= $('<span>Poster</span>');
-                               togglePoster.attr('id', 'togglePoster')
-                                                       .css('cursor','pointer')
-                                                       .bind('click',{mode: 'poster'},jQuery.proxy(this.togglePosterView,this));
-                               toggleBanner= $('<span>Banner</span>');
-                               toggleBanner.attr('id', 'toggleBanner')
-                                                       .css('cursor','pointer')
-                                                       .addClass('activeMode')
-                                                       .bind('click',{mode: 'banner'},jQuery.proxy(this.togglePosterView,this));
-                               toggleLandscape= $('<span>Landscape</span>');
-                               toggleLandscape.attr('id', 'toggleLandscape')
-                                                       .css('cursor','pointer')
-                                                       .bind('click',{mode: 'landscape'},jQuery.proxy(this.togglePosterView,this));
-                               toggle.append(toggleBanner).append(' | ').append(togglePoster).append(' | ').append(toggleLandscape);
-                               this.toggle=toggle;                             
-                               jQuery.post(JSON_RPC + '?GetTVShows', '{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": { "properties": ["genre", "plot", "title", "lastplayed", "episode", "year", "playcount", "rating", "thumbnail", "studio", "mpaa", "premiered"] }, "id": 1}', jQuery.proxy(function(data) {
-                                       if (data && data.result && data.result.tvshows) {
-                                                       libraryContainer = $('<div>');                                                                  
-                                                       libraryContainer.append(toggle);
-                                                       libraryContainer.attr('id', 'tvshowLibraryContainer')
-                                                                                       .addClass('contentContainer');
-                                                       $('#content').append(libraryContainer);
-                                       } else {
-                                               libraryContainer.html('');
-                                       }
-                                       $.each($(data.result.tvshows), jQuery.proxy(function(i, item) {
-                                               var floatableTVShowCover = this.generateThumb('tvshow', item.thumbnail, item.title);
-                                               floatableTVShowCover.bind('click', { tvshow: item }, jQuery.proxy(this.displayTVShowDetails, this));
-                                               libraryContainer.append(floatableTVShowCover);
-                                       }, this));
-                                       libraryContainer.append($('<div>').addClass('footerPadding'));
-                                       $('#spinner').hide();
-                                       libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
-                                       libraryContainer.trigger('scroll');
-                                       myScroll = new iScroll('tvshowLibraryContainer');
-                                       if(getCookie('TVView')!=null && getCookie('TVView')!='banner'){
-                                               var view=getCookie('TVView');
-                                               switch(view) {
-                                                       case 'poster':
-                                                               togglePoster.trigger('click');
-                                                               break;
-                                                       case 'landscape':
-                                                               toggleLandscape.trigger('click')
-                                                               break;                                          
-                                               }
-                                       }
-                               }, this), 'json');                                      
-                       } else {
-                               libraryContainer.prepend($(".toggle").detach()).show();
-                               libraryContainer.trigger('scroll');
-                       }
-                       
-               },
-               updateScrollEffects: function(event) {
-                       if (event.data.activeLibrary && $(event.data.activeLibrary).scrollTop() > 0) {
-                               $('#topScrollFade').fadeIn();
-                       } else {
-                               $('#topScrollFade').fadeOut();
-                       }
-               },
-               startSlideshow: function(event) {
-                       jQuery.post(JSON_RPC + '?StartSlideshow', '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "slideshow": { "recursive" : "true", "random":"true", "directory" : "' + this.replaceAll(event.data.directory.file, "\\", "\\\\") + '" } }, "id": 1}', null, 'json');
-               },
-               showDirectory: function(event) {
-                       var directory = event.data.directory.file;
-                       var jsonDirectory = this.replaceAll(directory, "\\", "\\\\");                   
-                       this.resetPage();
-                       $('#pictureLibrary').addClass('selected');
-                       $('.contentContainer').hide();
-                       var libraryContainer = $('#pictureLibraryDirContainer' + directory);
-                       if (!libraryContainer || libraryContainer.length == 0) {
-                               $('#spinner').show();                           
-                               jQuery.post(JSON_RPC + '?GetDirectory', '{"jsonrpc": "2.0", "method": "Files.GetDirectory", "params": { "media" : "pictures", "directory": "' + jsonDirectory + '" }, "id": 1}', jQuery.proxy(function(data) {
-                                       if (data && data.result && ( data.result.directories || data.result.files )) {
-                                               libraryContainer = $('<div>');
-                                               libraryContainer.attr('id', 'pictureLibraryDirContainer' + directory)
-                                                                               .addClass('contentContainer');
-                                               $('#content').append(libraryContainer);
-                                               var breadcrumb = $('<div>');
-                                               var seperator = '/';
-                                               var item = '';
-                                               var directoryArray = directory.split(seperator);
-                                               jQuery.each(directoryArray, function(i,v) {
-                                                       if(v != '') {
-                                                               item += v + seperator;
-                                                               //tmp.bind('click', { directory: item }, jQuery.proxy(this.showDirectory, this));               
-                                                               breadcrumb.append($('<div>').text(' > ' + v).css('float','left').addClass('breadcrumb'));                                                 
-                                                       }
-                                               });
-                                               libraryContainer.append(breadcrumb);
-                                               libraryContainer.append($('<div>').css('clear','both'));
-                                               if (data.result.files) {
-                                                       $.each($(data.result.files), jQuery.proxy(function(i, item) {
-                                                               if (item.filetype == "file")
-                                                               {
-                                                                       var floatableImage = this.generateThumb('image', item.file, item.label);
-                                                                       libraryContainer.append(floatableImage);
-                                                               }
-                                                               else if (item.filetype == "directory")
-                                                               {
-                                                                       var floatableShare = this.generateThumb('directory', item.thumbnail, item.label);
-                                                                       floatableShare.bind('click', { directory: item }, jQuery.proxy(this.showDirectory, this));              
-                                                                       //var slideshow = $('<div">');
-                                                                       //slideshow.html('<div>Slideshow</div>');
-                                                                       //slideshow.bind('click', { directory: item }, jQuery.proxy(this.startSlideshow, this));        
-                                                                       //floatableShare.append(slideshow);
-                                                                       libraryContainer.append(floatableShare);
-                                                               }
-                                                       }, this));
-                                               }
-                                               libraryContainer.append($('<div>').addClass('footerPadding'));
-                                       } else {
-                                               libraryContainer.html('');
-                                       }
-                                       $('#spinner').hide();
-                                       libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
-                                       libraryContainer.trigger('scroll');
-                                       myScroll = new iScroll('#pictureLibraryDirContainer' + directory);
-                               }, this), 'json');
-                       } else {
-                               libraryContainer.show();
-                               libraryContainer.trigger('scroll');
-                       }
-               },
-               pictureLibraryOpen: function() {
-                       this.resetPage();
-                       $('#pictureLibrary').addClass('selected');
-                       $('.contentContainer').hide();
-                       var libraryContainer = $('#pictureLibraryContainer');
-                       if (!libraryContainer || libraryContainer.length == 0) {
-                               $('#spinner').show();
-                               jQuery.post(JSON_RPC + '?GetSources', '{"jsonrpc": "2.0", "method": "Files.GetSources", "params": { "media" : "pictures" }, "id": 1}',                                  jQuery.proxy(function(data) {
-                                       if (data && data.result && data.result.shares) {
-                                               libraryContainer = $('<div>');
-                                               libraryContainer.attr('id', 'pictureLibraryContainer')
-                                                                               .addClass('contentContainer');
-                                               $('#content').append(libraryContainer);
-                                       } else {
-                                               libraryContainer.html('');
-                                       }
-                                       $.each($(data.result.shares), jQuery.proxy(function(i, item) {
-                                               var floatableShare = this.generateThumb('directory', item.thumbnail, item.label);
-                                               floatableShare.bind('click', { directory: item }, jQuery.proxy(this.showDirectory, this));                                      
-                                               libraryContainer.append(floatableShare);
-                                       }, this));
-                                       libraryContainer.append($('<div>').addClass('footerPadding'));
-                                       $('#spinner').hide();
-                                       libraryContainer.bind('scroll', { activeLibrary: libraryContainer }, jQuery.proxy(this.updateScrollEffects, this));
-                                       libraryContainer.trigger('scroll');
-                                       myScroll = new iScroll('#pictureLibraryContainer');
-                               }, this), 'json');
-                       } else {
-                               libraryContainer.show();
-                               libraryContainer.trigger('scroll');
-                       }
-               }
-       }
\ No newline at end of file
+    } else {
+      libraryContainer.show();
+      libraryContainer.trigger('scroll');
+    }
+  }
+}
\ No newline at end of file
index 6ebc178..a9add9e 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2011 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
  */
 
 var NowPlayingManager = function() {
-               this.init();
-               return true;
-       }
+  this.init();
+  return true;
+}
 
 NowPlayingManager.prototype = {
-               updateCounter: 0,
-    activePlayer: "",
-    activePlayerId: -1,
-    currentItem: -1,
-    playing: false,
-    paused: false,
-    playlistid: -1,
-    
-               init: function() {
-                       $('#pbPause').hide(); /* Assume we are not playing something */
-                       this.bindPlaybackControls();
-                       this.updateState();
-                       $('#nextTrack').bind('click', jQuery.proxy(this.showPlaylist, this));
-                       $('#nowPlayingPlaylist').bind('click', function() {return false;});
-                       $(window).bind('click', jQuery.proxy(this.hidePlaylist, this));
-               },
-               updateState: function() {
-                       jQuery.ajax({
-                               type: 'POST', 
-                               url: JSON_RPC + '?UpdateState', 
-                               data: '{"jsonrpc": "2.0", "method": "Player.GetActivePlayers", "id": 1}', 
-                               timeout: 3000,
-                               success: jQuery.proxy(function(data) {
-                                       if (data && data.result && data.result.length > 0) {
-                                               if (data.result[0].playerid != this.activePlayerId) {
-              this.activePlayerId = data.result[0].playerid;
-                                                       this.activePlayer = data.result[0].type;
-              if (this.activePlayer == "audio")
-              {
-                this.stopVideoPlaylistUpdate();
-                this.displayAudioNowPlaying();
+  updateCounter: 0,
+  activePlayer: "",
+  activePlayerId: -1,
+  currentItem: -1,
+  playing: false,
+  paused: false,
+  playlistid: -1,
+
+  init: function() {
+    $('#pbPause').hide(); /* Assume we are not playing something */
+    this.bindPlaybackControls();
+    this.updateState();
+    $('#nextTrack').bind('click', jQuery.proxy(this.showPlaylist, this));
+    $('#nowPlayingPlaylist').bind('click', function() {return false;});
+    $(window).bind('click', jQuery.proxy(this.hidePlaylist, this));
+  },
+  updateState: function() {
+    jQuery.ajax({
+      type: 'POST',
+      url: JSON_RPC + '?UpdateState',
+      data: '{"jsonrpc": "2.0", "method": "Player.GetActivePlayers", "id": 1}',
+      timeout: 3000,
+      success: jQuery.proxy(function(data) {
+        if (data && data.result && data.result.length > 0) {
+          if (data.result[0].playerid != this.activePlayerId) {
+            this.activePlayerId = data.result[0].playerid;
+            this.activePlayer = data.result[0].type;
+            if (this.activePlayer == "audio")
+            {
+              this.stopVideoPlaylistUpdate();
+              this.displayAudioNowPlaying();
+            }
+            else if (this.activePlayer == "video")
+            {
+              this.stopAudioPlaylistUpdate();
+              this.displayVideoNowPlaying();
+            }
+            else
+            {
+              this.stopVideoPlaylistUpdate();
+              this.stopAudioPlaylistUpdate();
+              this.activePlayer = "";
+              this.activePlayerId = -1;
+            }
+
+            this.stopRefreshTime();
+
+            this.updatePlayer();
+          }
+        }
+        else if (data.result.length <= 0)
+        {
+          this.stopVideoPlaylistUpdate();
+          this.stopAudioPlaylistUpdate();
+          this.activePlayer = "";
+          this.activePlayerId = -1;
+        }
+
+        if (this.activePlayerId >= 0)
+          this.showFooter();
+        else {
+          this.stopRefreshTime();
+          this.hideFooter();
+        }
+
+        setTimeout(jQuery.proxy(this.updateState, this), 1000);
+      }, this),
+      error: jQuery.proxy(function(data, error) {
+        displayCommunicationError();
+        setTimeout(jQuery.proxy(this.updateState, this), 2000);
+      }, this),
+      dataType: 'json'});
+  },
+  updatePlayer: function() {
+    jQuery.post(JSON_RPC + '?UpdatePlayer',
+      '{"jsonrpc": "2.0", "method": "Player.GetProperties", "params": { "playerid": ' + this.activePlayerId + ', "properties": [ "playlistid", "speed", "position", "totaltime", "time" ] }, "id": 1}',
+      jQuery.proxy(function(data) {
+        if (data && data.result)
+        {
+          this.playlistid = data.result.playlistid;
+          this.playing = data.result.speed != 0;
+          this.paused = data.result.speed == 0;
+          this.currentItem = data.result.position;
+          this.trackBaseTime = timeToDuration(data.result.time);
+          this.trackDurationTime = timeToDuration(data.result.totaltime);
+          if (!this.autoRefreshAudioData && !this.autoRefreshVideoData && this.playing) {
+            if (this.activePlayer == 'audio') {
+              this.autoRefreshAudioData = true;
+              this.refreshAudioData();
+            } else if (this.activePlayer == 'video') {
+              this.autoRefreshVideoData = true;
+              this.refreshVideoData();
+            }
+          }
+        }
+        if ((this.autoRefreshAudioData || this.autoRefreshVideoData) && !this.activeItemTimer) {
+          this.activeItemTimer = 1;
+          setTimeout(jQuery.proxy(this.updateActiveItemDurationLoop, this), 1000);
+        }
+      }, this), 'json');
+  },
+  bindPlaybackControls: function() {
+    $('#pbNext').bind('click', jQuery.proxy(this.nextTrack, this));
+    $('#pbPrev').bind('click', jQuery.proxy(this.prevTrack, this));
+    $('#pbStop').bind('click', jQuery.proxy(this.stopTrack, this));
+    $('#pbPlay').bind('click', jQuery.proxy(this.playPauseTrack, this));
+    $('#pbPause').bind('click', jQuery.proxy(this.playPauseTrack, this));
+  },
+  showPlaylist: function() {
+    $('#nextText').html('Playlist: ');
+    $('#nowPlayingPlaylist').show();
+    return false;
+  },
+  hidePlaylist: function() {
+    $('#nextText').html('Next: ');
+    $('#nowPlayingPlaylist').hide();
+    return false;
+  },
+  hideFooter: function() {
+    $('#footerPopover').hide();
+    $('#overlay').css('bottom','0px');
+  },
+  showFooter: function() {
+    $('#footerPopover').show();
+    $('#overlay').css('bottom','150px');
+  },
+  nextTrack: function() {
+    if (this.activePlayer) {
+      jQuery.post(JSON_RPC + '?SkipNext', '{"jsonrpc": "2.0", "method": "Player.GoNext", "params": { "playerid": ' + this.activePlayerId + ' }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result == 'OK') {
+          //this.updateAudioPlaylist(true);
+        }
+      }, this), 'json');
+    }
+  },
+  prevTrack: function() {
+    if (this.activePlayer) {
+      jQuery.post(JSON_RPC + '?SkipPrevious', '{"jsonrpc": "2.0", "method": "Player.GoPrevious", "params": { "playerid": ' + this.activePlayerId + ' }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result == 'OK') {
+          //this.updateAudioPlaylist(true);
+        }
+      }, this), 'json');
+    }
+  },
+  stopTrack: function() {
+    if (this.activePlayer) {
+      jQuery.post(JSON_RPC + '?Stop', '{"jsonrpc": "2.0", "method": "Player.Stop", "params": { "playerid": ' + this.activePlayerId + ' }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result == 'OK') {
+          this.playing = false;
+          this.paused = false;
+          this.trackBaseTime = 0;
+          this.trackDurationTime = 0;
+          this.showPlayButton();
+        }
+      }, this), 'json');
+    }
+  },
+  playPauseTrack: function() {
+    if (this.activePlayer) {
+      var method = ((this.playing || this.paused) ? 'Player.PlayPause' : 'Playlist.Play');
+      jQuery.post(JSON_RPC + '?PlayPause', '{"jsonrpc": "2.0", "method": "' + method + '", "params": { "playerid": ' + this.activePlayerId + ' }, "id": 1}', jQuery.proxy(function(data) {
+        if (data && data.result) {
+          this.playing = data.result.speed != 0;
+          this.paused = data.result.speed == 0;
+          if (this.playing) {
+            this.showPauseButton();
+          } else {
+            this.showPlayButton();
+          }
+        }
+      }, this), 'json');
+    }
+  },
+  showPauseButton: function() {
+    $('#pbPause').show();
+    $('#pbPlay').hide();
+  },
+  showPlayButton: function() {
+    $('#pbPause').hide();
+    $('#pbPlay').show();
+  },
+  displayAudioNowPlaying: function() {
+    if (!this.autoRefreshAudioPlaylist) {
+      this.autoRefreshAudioPlaylist = true;
+      this.updateAudioPlaylist();
+    }
+  },
+  displayVideoNowPlaying: function() {
+    if (!this.autoRefreshVideoPlaylist) {
+      this.autoRefreshVideoPlaylist = true;
+      this.updateVideoPlaylist();
+    }
+  },
+  playPlaylistItem: function(sender) {
+    var sequenceId = $(sender.currentTarget).attr('seq');
+    if (!this.activePlaylistItem || (this.activePlaylistItem !== undefined && sequenceId != this.activePlaylistItem.seq)) {
+      jQuery.post(JSON_RPC + '?PlaylistItemPlay', '{"jsonrpc": "2.0", "method": "Player.GoTo", "params": { "playerid": ' + this.activePlayerId + ', "item": ' + sequenceId + '}, "id": 1}', function() {}, 'json');
+    }
+    this.hidePlaylist();
+  },
+  playlistChanged: function(newPlaylist) {
+    if (this.activePlaylist && !newPlaylist || !this.activePlaylist && newPlaylist) {
+      return true;
+    }
+    if (!this.activePlaylist && !newPlaylist) {
+      return false;
+    }
+    if (this.activePlaylist.length != newPlaylist.length) {
+      return true;
+    }
+    for (var i = 0; i < newPlaylist.length; i++) {
+      if (!this.comparePlaylistItems(this.activePlaylist[i], newPlaylist[i])) {
+        return true;
+      }
+    }
+    return false;
+  },
+  updateAudioPlaylist: function() {
+    jQuery.ajax({
+      type: 'POST',
+      url: JSON_RPC + '?updateAudioPlaylist',
+      data: '{"jsonrpc": "2.0", "method": "Playlist.GetItems", "params": { "playlistid": ' + this.playlistid + ', "properties": [ "title", "album", "artist", "duration", "thumbnail" ] }, "id": 1}',
+      success: jQuery.proxy(function(data) {
+        if (data && data.result && data.result.items && data.result.items.length > 0 && data.result.limits.total > 0) {
+          //Compare new playlist to active playlist, only redraw if a change is noticed
+          if (!this.activePlaylistItem || this.playlistChanged(data.result.items) || (this.activePlaylistItem && (this.activePlaylistItem.seq != this.currentItem))) {
+            var ul = $('<ul>');
+            var activeItem;
+            $.each($(data.result.items), jQuery.proxy(function(i, item) {
+              var li = $('<li>');
+              var code = '<span class="duration">' + durationToString(item.duration) + '</span><div class="trackInfo" title="' + item.title + ' - ' + item.artist + '"><span class="trackTitle">' + item.title + '</span> - <span class="trackArtist">' + item.artist + '</span></div>';
+              if (i == this.currentItem) {
+                activeItem = item;
+                activeItem.seq = i;
+                li.addClass('activeItem');
               }
-              else if (this.activePlayer == "video")
-              {
-                this.stopAudioPlaylistUpdate();
-                this.displayVideoNowPlaying();
+              if (i == (this.currentItem + 1)) {
+                $('#nextTrack').html(code).show();
               }
-              else
-              {
-                this.stopVideoPlaylistUpdate();
-                this.stopAudioPlaylistUpdate();
-                this.activePlayer = "";
-                this.activePlayerId = -1;
+              li.bind('click', jQuery.proxy(this.playPlaylistItem, this));
+              ul.append(li.attr('seq', i).html(code));
+            }, this));
+            if (data.result.limits.total > 1) {
+              if (activeItem && data.result.limits.total-1 == activeItem.seq) {
+                $('#nextTrack').html('<div class="trackInfo">Last track in playlist</div>').show();
               }
-              
-                                                       this.stopRefreshTime();
-              
-              this.updatePlayer();
+              $('#nextText').show();
+              $('#nowPlayingPlaylist').html('').append(ul);
+            } else {
+              $('#nextText').hide();
+              $('#nowPlayingPlaylist').hide();
+              $('#nextTrack').hide();
             }
-                                       }
-          else if (data.result.length <= 0)
-          {
-            this.stopVideoPlaylistUpdate();
-            this.stopAudioPlaylistUpdate();
-            this.activePlayer = "";
-            this.activePlayerId = -1;
-          }
-            
-          if (this.activePlayerId >= 0)
-            this.showFooter();
-          else {
-            this.stopRefreshTime();
-            this.hideFooter();
-          }
-              
-                                       setTimeout(jQuery.proxy(this.updateState, this), 1000);
-                               }, this),
-                               error: jQuery.proxy(function(data, error) {
-                                       displayCommunicationError();
-                                       setTimeout(jQuery.proxy(this.updateState, this), 2000);
-                               }, this), 
-                               dataType: 'json'});
-               },
-    updatePlayer: function() {
-      jQuery.post(JSON_RPC + '?UpdatePlayer',
-        '{"jsonrpc": "2.0", "method": "Player.GetProperties", "params": { "playerid": ' + this.activePlayerId + ', "properties": [ "playlistid", "speed", "position", "totaltime", "time" ] }, "id": 1}',
-        jQuery.proxy(function(data) {
-          if (data && data.result)
-          {
-            this.playlistid = data.result.playlistid;
-            this.playing = data.result.speed != 0;
-            this.paused = data.result.speed == 0;
-            this.currentItem = data.result.position;
-            this.trackBaseTime = timeToDuration(data.result.time);
-            this.trackDurationTime = timeToDuration(data.result.totaltime);
-            if (!this.autoRefreshAudioData && !this.autoRefreshVideoData && this.playing) {    
-              if (this.activePlayer == 'audio') {
-                this.autoRefreshAudioData = true;
-                this.refreshAudioData();
-              } else if (this.activePlayer == 'video') {
-                this.autoRefreshVideoData = true;
-                this.refreshVideoData();
+            if (!this.comparePlaylistItems(activeItem, this.activePlaylistItem)) {
+              this.activePlaylistItem = activeItem;
+              if (!this.updateActiveItemDurationRunOnce) {
+                this.updateActiveItemDurationRunOnce = true;
+                this.updatePlayer();
               }
+            } else if (!activeItem) {
+              this.stopRefreshTime();
             }
+            this.activePlaylist = data.result.items;
+            $('#videoDescription').hide();
+            $('#audioDescription').show();
+            $('#nowPlayingPanel').show();
           }
-          if ((this.autoRefreshAudioData || this.autoRefreshVideoData) && !this.activeItemTimer) {
-            this.activeItemTimer = 1;
-            setTimeout(jQuery.proxy(this.updateActiveItemDurationLoop, this), 1000);
+        } else {
+          this.activePlaylist = null;
+          $('#audioDescription').hide();
+          $('#nowPlayingPanel').hide();
+        }
+        if (this.autoRefreshAudioPlaylist) {
+          setTimeout(jQuery.proxy(this.updateAudioPlaylist, this), 1000);
+        }
+      }, this),
+      error: jQuery.proxy(function(data) {
+        displayCommunicationError();
+        if (this.autoRefreshAudioPlaylist) {
+          setTimeout(jQuery.proxy(this.updateAudioPlaylist, this), 2000); /* Slow down request period */
+        }
+      }, this),
+      dataType: 'json'
+    });
+  },
+  stopAudioPlaylistUpdate: function() {
+    this.autoRefreshAudioPlaylist = false;
+    this.updateActiveItemDurationRunOnce = false;
+  },
+  stopVideoPlaylistUpdate: function() {
+    this.autoRefreshVideoPlaylist = false;
+    this.updateActiveItemDurationRunOnce = false;
+  },
+  updateActiveItemDurationLoop: function() {
+    this.activeItemTimer = 0;
+    this.updatePlayer();
+  },
+  refreshAudioDataLoop: function() {
+    this.audioRefreshTimer = 0;
+    this.refreshAudioData();
+  },
+  refreshAudioData: function() {
+    if (this.autoRefreshAudioData && !this.audioRefreshTimer) {
+      this.audioRefreshTimer = 1;
+      setTimeout(jQuery.proxy(this.refreshAudioDataLoop, this), 1000);
+    }
+    if (this.playing && !this.paused) {
+      this.trackBaseTime++;
+    }
+    if (this.paused) {
+      this.showPlayButton();
+    } else if (this.playing) {
+      this.showPauseButton();
+    }
+    if (this.activePlaylistItem) {
+      if (this.activePlaylistItem != this.lastPlaylistItem) {
+        this.lastPlaylistItem = this.activePlaylistItem;
+        var imgPath = DEFAULT_ALBUM_COVER;
+        if (this.activePlaylistItem.thumbnail) {
+          imgPath = (this.activePlaylistItem.thumbnail.startsWith('special://') ? '/vfs/' : 'images/') + this.activePlaylistItem.thumbnail;
+        }
+        $('#audioCoverArt').html('<img src="' + imgPath + '" alt="' + this.activePlaylistItem.album + ' cover art">');
+        $('#audioTrackTitle').html('<span title="' + this.activePlaylistItem.title + '">' + this.activePlaylistItem.title + '</span>');
+        if (this.activePlaylistItem.album) {
+          $('#audioAlbumTitle').html('<span title="' + this.activePlaylistItem.album + '">' + this.activePlaylistItem.album + '</span>')
+                     .show();
+        } else {
+          $('#audioAlbumTitle').hide();
+        }
+        $('#audioArtistTitle').html(this.activePlaylistItem.artist);
+        $('#progressBar').attr('style', '');
+      }
+      $('#audioDuration').html(durationToString(this.trackBaseTime) + ' / ' + durationToString(this.trackDurationTime));
+      var buttonWidth = $('#progressBar .progressIndicator').width();
+      var progressBarWidth = (this.trackBaseTime / this.trackDurationTime) * 100;
+      var progressSliderPosition = Math.ceil(($('#progressBar').width() / 100) * progressBarWidth) - buttonWidth;
+      if (progressSliderPosition < 0) {
+        progressSliderPosition = 0;
+      }
+      if (progressBarWidth <= 100) {
+        $('#progressBar .elapsedTime').width(progressBarWidth + '%');
+        $('#progressBar .progressIndicator').css('left', progressSliderPosition);
+      }
+    }
+  },
+  refreshVideoDataLoop: function() {
+    this.videoRefreshTimer = 0;
+    this.refreshVideoData();
+  },
+  refreshVideoData: function() {
+    if (this.autoRefreshVideoData && !this.videoRefreshTimer) {
+      this.videoRefreshTimer = 1;
+      setTimeout(jQuery.proxy(this.refreshVideoDataLoop, this), 1500);
+    }
+    if (this.playing && !this.paused) {
+      this.trackBaseTime++;
+    }
+    if (this.paused) {
+      this.showPlayButton();
+    } else if (this.playing) {
+      this.showPauseButton();
+    }
+    if (this.activePlaylistItem) {
+      if (this.activePlaylistItem != this.lastPlaylistItem) {
+        this.lastPlaylistItem = this.activePlaylistItem;
+        var imgPath = DEFAULT_VIDEO_COVER;
+        if (this.activePlaylistItem.thumbnail) {
+          imgPath = (this.activePlaylistItem.thumbnail.startsWith('special://') ? '/vfs/' : 'images/') + this.activePlaylistItem.thumbnail;
+        }
+        $('#videoCoverArt').html('<img src="' + imgPath + '" alt="' + this.activePlaylistItem.title + ' cover art">');
+        $('#videoShowTitle').html(this.activePlaylistItem.showtitle||'&nbsp;');
+        var extra = '';
+        if (this.activePlaylistItem.season >= 0 && this.activePlaylistItem.episode >= 0) {
+          extra = this.activePlaylistItem.season + 'x' + this.activePlaylistItem.episode + ' ';
+        }
+        $('#videoTitle').html(extra + this.activePlaylistItem.title);
+      }
+      $('#videoDuration').html(durationToString(this.trackBaseTime) + ' / ' + durationToString(this.trackDurationTime));
+      var buttonWidth = $('#progressBar .progressIndicator').width();
+      var progressBarWidth = (this.trackBaseTime / this.trackDurationTime) * 100;
+      var progressSliderPosition = Math.ceil(($('#progressBar').width() / 100) * progressBarWidth) - buttonWidth;
+      if (progressSliderPosition < 0) {
+        progressSliderPosition = 0;
+      }
+      if (progressBarWidth <= 100) {
+        $('#progressBar .elapsedTime').width(progressBarWidth + '%');
+        $('#progressBar .progressIndicator').css('left', progressSliderPosition);
+      }
+    }
+  },
+  stopRefreshTime: function() {
+    this.autoRefreshAudioData = false;
+    this.autoRefreshVideoData = false;
+  },
+  comparePlaylistItems: function(item1, item2) {
+    if (!item1 || !item2) {
+      if (!item1 && !item2) {
+        return true;
+      }
+      return false;
+    }
+    if (item1.title != item2.title) {
+      return false;
+    }
+    if (item1.album != item2.album) {
+      return false;
+    }
+    if (item1.artist != item2.artist) {
+      return false;
+    }
+    if (item1.duration != item2.duration) {
+      return false;
+    }
+    if (item1.label != item2.label) {
+      return false;
+    }
+    if (item1.season != item2.season) {
+      return false;
+    }
+    if (item1.episode != item2.episode) {
+      return false;
+    }
+    return true;
+  },
+  updateVideoPlaylist: function() {
+    jQuery.ajax({
+      type: 'POST',
+      url: JSON_RPC + '?updateVideoPlaylist',
+      data: '{"jsonrpc": "2.0", "method": "Playlist.GetItems", "params": { "playlistid": ' + this.playlistid + ', "properties": ["title", "season", "episode", "plot", "runtime", "showtitle","thumbnail"] }, "id": 1}',
+      success: jQuery.proxy(function(data) {
+        if (data && data.result && data.result.items && data.result.items.length > 0 && data.result.limits.total > 0) {
+          //Compare new playlist to active playlist, only redraw if a change is noticed.
+          if (this.playlistChanged(data.result.items)) {
+            var ul = $('<ul>');
+            var activeItem;
+            $.each($(data.result.items), jQuery.proxy(function(i, item) {
+              var li = $('<li>');
+              var extra = '';
+              if (item.season >= 0 && item.episode >= 0) {
+                extra = item.season + 'x' + item.episode + ' ';
+              }
+              var code = '<span class="duration">' + durationToString(item.runtime) + '</span><div class="trackInfo" title="' + extra + item.title + '"><span class="trackTitle">' + extra + item.title + '</span></div>';
+              if (i == this.currentItem) {
+                activeItem = item;
+                activeItem.seq = i;
+                li.addClass('activeItem');
+              }
+              if (i == (this.currentItem + 1)) {
+                $('#nextTrack').html(code).show();
+              }
+              li.bind('click', jQuery.proxy(this.playPlaylistItem, this));
+              ul.append(li.attr('seq', i).html(code));
+            }, this));
+            if (data.result.limits.total > 1) {
+              $('#nextText').show();
+              if (activeItem && data.result.limits.total == activeItem.seq) {
+                $('#nextTrack').html('<div class="trackInfo">Last track in playlist</div>').show();
+              }
+              $('#nowPlayingPlaylist').html('').append(ul);
+            } else {
+              $('#nextText').hide();
+              $('#nowPlayingPlaylist').hide();
+              $('#nextTrack').hide();
+            }
+            if (!this.comparePlaylistItems(activeItem, this.activePlaylistItem)) {
+              this.activePlaylistItem = activeItem;
+              if (!this.updateActiveItemDurationRunOnce) {
+                this.updateActiveItemDurationRunOnce = true;
+                this.updatePlayer();
+              }
+            } else if (!activeItem) {
+              this.stopRefreshTime();
+            }
+            this.activePlaylist = data.result.items;
+            $('#videoDescription').show();
+            $('#audioDescription').hide();
+            $('#nowPlayingPanel').show();
           }
-        }, this), 'json');
-    },
-               bindPlaybackControls: function() {
-                       $('#pbNext').bind('click', jQuery.proxy(this.nextTrack, this));
-                       $('#pbPrev').bind('click', jQuery.proxy(this.prevTrack, this));
-                       $('#pbStop').bind('click', jQuery.proxy(this.stopTrack, this));
-                       $('#pbPlay').bind('click', jQuery.proxy(this.playPauseTrack, this));
-                       $('#pbPause').bind('click', jQuery.proxy(this.playPauseTrack, this));
-               },
-               showPlaylist: function() {
-                       $('#nextText').html('Playlist: ');
-                       $('#nowPlayingPlaylist').show();
-                       return false;
-               },
-               hidePlaylist: function() {
-                       $('#nextText').html('Next: ');
-                       $('#nowPlayingPlaylist').hide();
-                       return false;
-               },
-               hideFooter: function() {
-                       $('#footerPopover').hide();
-                       $('#overlay').css('bottom','0px');                      
-               },
-               showFooter: function() {
-                       $('#footerPopover').show();
-                       $('#overlay').css('bottom','150px');            
-               },
-               nextTrack: function() {
-                       if (this.activePlayer) {
-        jQuery.post(JSON_RPC + '?SkipNext', '{"jsonrpc": "2.0", "method": "Player.GoNext", "params": { "playerid": ' + this.activePlayerId + ' }, "id": 1}', jQuery.proxy(function(data) {
-                                       if (data && data.result == 'OK') {
-                                               //this.updateAudioPlaylist(true);
-                                       }
-                               }, this), 'json');
-                       }
-               },
-               prevTrack: function() {
-                       if (this.activePlayer) {
-                               jQuery.post(JSON_RPC + '?SkipPrevious', '{"jsonrpc": "2.0", "method": "Player.GoPrevious", "params": { "playerid": ' + this.activePlayerId + ' }, "id": 1}', jQuery.proxy(function(data) {
-                                       if (data && data.result == 'OK') {
-                                               //this.updateAudioPlaylist(true);
-                                       }
-                               }, this), 'json');
-                       }
-               },
-               stopTrack: function() {
-                       if (this.activePlayer) {
-                               jQuery.post(JSON_RPC + '?Stop', '{"jsonrpc": "2.0", "method": "Player.Stop", "params": { "playerid": ' + this.activePlayerId + ' }, "id": 1}', jQuery.proxy(function(data) {
-                                       if (data && data.result == 'OK') {
-                                               this.playing = false;
-                                               this.paused = false;
-                                               this.trackBaseTime = 0;
-                                               this.trackDurationTime = 0;
-                                               this.showPlayButton();
-                                       }
-                               }, this), 'json');
-                       }
-               },
-               playPauseTrack: function() {
-                       if (this.activePlayer) {
-                               var method = ((this.playing || this.paused) ? 'Player.PlayPause' : 'Playlist.Play');
-                               jQuery.post(JSON_RPC + '?PlayPause', '{"jsonrpc": "2.0", "method": "' + method + '", "params": { "playerid": ' + this.activePlayerId + ' }, "id": 1}', jQuery.proxy(function(data) {
-                                       if (data && data.result) {
-                                               this.playing = data.result.speed != 0;
-                                               this.paused = data.result.speed == 0;
-                                               if (this.playing) {
-                                                       this.showPauseButton();
-                                               } else {
-                                                       this.showPlayButton();
-                                               }
-                                       }
-                               }, this), 'json');
-                       }
-               },
-               showPauseButton: function() {
-                       $('#pbPause').show();
-                       $('#pbPlay').hide();
-               },
-               showPlayButton: function() {
-                       $('#pbPause').hide();
-                       $('#pbPlay').show();
-               },
-               displayAudioNowPlaying: function() {
-                       if (!this.autoRefreshAudioPlaylist) {
-                               this.autoRefreshAudioPlaylist = true;
-                               this.updateAudioPlaylist();
-                       }
-               },
-               displayVideoNowPlaying: function() {
-                       if (!this.autoRefreshVideoPlaylist) {
-                               this.autoRefreshVideoPlaylist = true;
-                               this.updateVideoPlaylist();
-                       }
-               },
-               playPlaylistItem: function(sender) {
-                       var sequenceId = $(sender.currentTarget).attr('seq');
-                       if (!this.activePlaylistItem || (this.activePlaylistItem !== undefined && sequenceId != this.activePlaylistItem.seq)) {
-                               jQuery.post(JSON_RPC + '?PlaylistItemPlay', '{"jsonrpc": "2.0", "method": "Player.GoTo", "params": { "playerid": ' + this.activePlayerId + ', "item": ' + sequenceId + '}, "id": 1}', function() {}, 'json');
-                       }
-                       this.hidePlaylist();
-               },
-               playlistChanged: function(newPlaylist) {
-                       if (this.activePlaylist && !newPlaylist || !this.activePlaylist && newPlaylist) {
-                               return true;
-                       }
-                       if (!this.activePlaylist && !newPlaylist) {
-                               return false;
-                       }
-                       if (this.activePlaylist.length != newPlaylist.length) {
-                               return true;
-                       }
-                       for (var i = 0; i < newPlaylist.length; i++) {
-                               if (!this.comparePlaylistItems(this.activePlaylist[i], newPlaylist[i])) {
-                                       return true;
-                               }
-                       }
-                       return false;
-               },
-               updateAudioPlaylist: function() {
-                       jQuery.ajax({
-                               type: 'POST', 
-                               url: JSON_RPC + '?updateAudioPlaylist',
-                               data: '{"jsonrpc": "2.0", "method": "Playlist.GetItems", "params": { "playlistid": ' + this.playlistid + ', "properties": [ "title", "album", "artist", "duration", "thumbnail" ] }, "id": 1}', 
-                               success: jQuery.proxy(function(data) {
-                                       if (data && data.result && data.result.items && data.result.items.length > 0 && data.result.limits.total > 0) {
-                                               //Compare new playlist to active playlist, only redraw if a change is noticed
-                                               if (!this.activePlaylistItem || this.playlistChanged(data.result.items) || (this.activePlaylistItem && (this.activePlaylistItem.seq != this.currentItem))) {
-                                                       var ul = $('<ul>');
-                                                       var activeItem;
-                                                       $.each($(data.result.items), jQuery.proxy(function(i, item) {
-                                                               var li = $('<li>');
-                                                               var code = '<span class="duration">' + durationToString(item.duration) + '</span><div class="trackInfo" title="' + item.title + ' - ' + item.artist + '"><span class="trackTitle">' + item.title + '</span> - <span class="trackArtist">' + item.artist + '</span></div>';
-                                                               if (i == this.currentItem) {
-                                                                       activeItem = item;
-                                                                       activeItem.seq = i;
-                                                                       li.addClass('activeItem');
-                                                               }
-                                                               if (i == (this.currentItem + 1)) {
-                                                                       $('#nextTrack').html(code).show();
-                                                               }
-                                                               li.bind('click', jQuery.proxy(this.playPlaylistItem, this));
-                                                               ul.append(li.attr('seq', i).html(code));
-                                                       }, this));
-                                                       if (data.result.limits.total > 1) {
-                                                               if (activeItem && data.result.limits.total-1 == activeItem.seq) {
-                                                                       $('#nextTrack').html('<div class="trackInfo">Last track in playlist</div>').show();
-                                                               }
-                                                               $('#nextText').show();
-                                                               $('#nowPlayingPlaylist').html('').append(ul);
-                                                       } else {
-                                                               $('#nextText').hide();
-                                                               $('#nowPlayingPlaylist').hide();
-                                                               $('#nextTrack').hide();
-                                                       }
-                                                       if (!this.comparePlaylistItems(activeItem, this.activePlaylistItem)) {
-                                                               this.activePlaylistItem = activeItem;
-                                                               if (!this.updateActiveItemDurationRunOnce) {
-                                                                       this.updateActiveItemDurationRunOnce = true;
-                                                                       this.updatePlayer();
-                                                               }
-                                                       } else if (!activeItem) {
-                                                               this.stopRefreshTime();
-                                                       }
-                                                       this.activePlaylist = data.result.items;
-                                                       $('#videoDescription').hide();
-                                                       $('#audioDescription').show();
-                                                       $('#nowPlayingPanel').show();
-                                               }
-                                       } else {
-                                               this.activePlaylist = null;
-                                               $('#audioDescription').hide();
-                                               $('#nowPlayingPanel').hide();
-                                       }
-                                       if (this.autoRefreshAudioPlaylist) {
-                                               setTimeout(jQuery.proxy(this.updateAudioPlaylist, this), 1000);
-                                       }
-                               }, this),
-                               error: jQuery.proxy(function(data) {
-                                       displayCommunicationError();
-                                       if (this.autoRefreshAudioPlaylist) {
-                                               setTimeout(jQuery.proxy(this.updateAudioPlaylist, this), 2000); /* Slow down request period */
-                                       }
-                               }, this),
-                               dataType: 'json'
-                       });
-               },
-               stopAudioPlaylistUpdate: function() {
-                       this.autoRefreshAudioPlaylist = false;
-                       this.updateActiveItemDurationRunOnce = false;
-               },
-               stopVideoPlaylistUpdate: function() {
-                       this.autoRefreshVideoPlaylist = false;
-                       this.updateActiveItemDurationRunOnce = false;
-               },
-               updateActiveItemDurationLoop: function() {
-                       this.activeItemTimer = 0;
-                       this.updatePlayer();
-               },
-               refreshAudioDataLoop: function() {
-                       this.audioRefreshTimer = 0;
-                       this.refreshAudioData();
-               },
-               refreshAudioData: function() {
-                       if (this.autoRefreshAudioData && !this.audioRefreshTimer) {
-                               this.audioRefreshTimer = 1;
-                               setTimeout(jQuery.proxy(this.refreshAudioDataLoop, this), 1000);
-                       }
-                       if (this.playing && !this.paused) {
-                               this.trackBaseTime++;
-                       }
-                       if (this.paused) {
-                               this.showPlayButton();
-                       } else if (this.playing) {
-                               this.showPauseButton();
-                       }
-                       if (this.activePlaylistItem) {
-                               if (this.activePlaylistItem != this.lastPlaylistItem) {
-                                       this.lastPlaylistItem = this.activePlaylistItem;
-                                       var imgPath = DEFAULT_ALBUM_COVER;
-                                       if (this.activePlaylistItem.thumbnail) {
-                                               imgPath = (this.activePlaylistItem.thumbnail.startsWith('special://') ? '/vfs/' : 'images/') + this.activePlaylistItem.thumbnail;
-                                       }
-                                       $('#audioCoverArt').html('<img src="' + imgPath + '" alt="' + this.activePlaylistItem.album + ' cover art">');
-                                       $('#audioTrackTitle').html('<span title="' + this.activePlaylistItem.title + '">' + this.activePlaylistItem.title + '</span>');
-                                       if (this.activePlaylistItem.album) {
-                                               $('#audioAlbumTitle').html('<span title="' + this.activePlaylistItem.album + '">' + this.activePlaylistItem.album + '</span>')
-                                                                                        .show();
-                                       } else {
-                                               $('#audioAlbumTitle').hide();
-                                       }
-                                       $('#audioArtistTitle').html(this.activePlaylistItem.artist);
-                                       $('#progressBar').attr('style', '');
-                               }
-                               $('#audioDuration').html(durationToString(this.trackBaseTime) + ' / ' + durationToString(this.trackDurationTime));
-                               var buttonWidth = $('#progressBar .progressIndicator').width();
-                               var progressBarWidth = (this.trackBaseTime / this.trackDurationTime) * 100;
-                               var progressSliderPosition = Math.ceil(($('#progressBar').width() / 100) * progressBarWidth) - buttonWidth;
-                               if (progressSliderPosition < 0) {
-                                       progressSliderPosition = 0;
-                               }
-                               if (progressBarWidth <= 100) {
-                                       $('#progressBar .elapsedTime').width(progressBarWidth + '%');
-                                       $('#progressBar .progressIndicator').css('left', progressSliderPosition);
-                               }
-                       }
-               },
-               refreshVideoDataLoop: function() {
-                       this.videoRefreshTimer = 0;
-                       this.refreshVideoData();
-               },
-               refreshVideoData: function() {
-                       if (this.autoRefreshVideoData && !this.videoRefreshTimer) {
-                               this.videoRefreshTimer = 1;
-                               setTimeout(jQuery.proxy(this.refreshVideoDataLoop, this), 1500);
-                       }
-                       if (this.playing && !this.paused) {
-                               this.trackBaseTime++;
-                       }
-                       if (this.paused) {
-                               this.showPlayButton();
-                       } else if (this.playing) {
-                               this.showPauseButton();
-                       }
-                       if (this.activePlaylistItem) {
-                               if (this.activePlaylistItem != this.lastPlaylistItem) {
-                                       this.lastPlaylistItem = this.activePlaylistItem;
-                                       var imgPath = DEFAULT_VIDEO_COVER;
-                                       if (this.activePlaylistItem.thumbnail) {
-                                               imgPath = (this.activePlaylistItem.thumbnail.startsWith('special://') ? '/vfs/' : 'images/') + this.activePlaylistItem.thumbnail;
-                                       }
-                                       $('#videoCoverArt').html('<img src="' + imgPath + '" alt="' + this.activePlaylistItem.title + ' cover art">');
-                                       $('#videoShowTitle').html(this.activePlaylistItem.showtitle||'&nbsp;');
-                                       var extra = '';
-                                       if (this.activePlaylistItem.season >= 0 && this.activePlaylistItem.episode >= 0) {
-                                               extra = this.activePlaylistItem.season + 'x' + this.activePlaylistItem.episode + ' ';
-                                       }
-                                       $('#videoTitle').html(extra + this.activePlaylistItem.title);
-                               }
-                               $('#videoDuration').html(durationToString(this.trackBaseTime) + ' / ' + durationToString(this.trackDurationTime));
-                               var buttonWidth = $('#progressBar .progressIndicator').width();
-                               var progressBarWidth = (this.trackBaseTime / this.trackDurationTime) * 100;
-                               var progressSliderPosition = Math.ceil(($('#progressBar').width() / 100) * progressBarWidth) - buttonWidth;
-                               if (progressSliderPosition < 0) {
-                                       progressSliderPosition = 0;
-                               }
-                               if (progressBarWidth <= 100) {
-                                       $('#progressBar .elapsedTime').width(progressBarWidth + '%');
-                                       $('#progressBar .progressIndicator').css('left', progressSliderPosition);
-                               }
-                       }
-               },
-               stopRefreshTime: function() {
-                       this.autoRefreshAudioData = false;
-                       this.autoRefreshVideoData = false;
-               },
-               comparePlaylistItems: function(item1, item2) {
-                       if (!item1 || !item2) {
-                               if (!item1 && !item2) {
-                                       return true;
-                               }
-                               return false;
-                       }
-                       if (item1.title != item2.title) {
-                               return false;
-                       }
-                       if (item1.album != item2.album) {
-                               return false;
-                       }
-                       if (item1.artist != item2.artist) {
-                               return false;
-                       }
-                       if (item1.duration != item2.duration) {
-                               return false;
-                       }
-                       if (item1.label != item2.label) {
-                               return false;
-                       }
-                       if (item1.season != item2.season) {
-                               return false;
-                       }
-                       if (item1.episode != item2.episode) {
-                               return false;
-                       }
-                       return true;
-               },
-               updateVideoPlaylist: function() {
-                       jQuery.ajax({
-                               type: 'POST', 
-                               url: JSON_RPC + '?updateVideoPlaylist',
-                               data: '{"jsonrpc": "2.0", "method": "Playlist.GetItems", "params": { "playlistid": ' + this.playlistid + ', "properties": ["title", "season", "episode", "plot", "runtime", "showtitle","thumbnail"] }, "id": 1}', 
-                               success: jQuery.proxy(function(data) {
-                                       if (data && data.result && data.result.items && data.result.items.length > 0 && data.result.limits.total > 0) {
-                                               //Compare new playlist to active playlist, only redraw if a change is noticed.
-                                               if (this.playlistChanged(data.result.items)) {
-                                                       var ul = $('<ul>');
-                                                       var activeItem;
-                                                       $.each($(data.result.items), jQuery.proxy(function(i, item) {
-                                                               var li = $('<li>');
-                                                               var extra = '';
-                                                               if (item.season >= 0 && item.episode >= 0) {
-                                                                       extra = item.season + 'x' + item.episode + ' ';
-                                                               }
-                                                               var code = '<span class="duration">' + durationToString(item.runtime) + '</span><div class="trackInfo" title="' + extra + item.title + '"><span class="trackTitle">' + extra + item.title + '</span></div>';
-                                                               if (i == this.currentItem) {
-                                                                       activeItem = item;
-                                                                       activeItem.seq = i;
-                                                                       li.addClass('activeItem');
-                                                               }
-                                                               if (i == (this.currentItem + 1)) {
-                                                                       $('#nextTrack').html(code).show();
-                                                               }
-                                                               li.bind('click', jQuery.proxy(this.playPlaylistItem, this));
-                                                               ul.append(li.attr('seq', i).html(code));
-                                                       }, this));
-                                                       if (data.result.limits.total > 1) {
-                                                               $('#nextText').show();
-                                                               if (activeItem && data.result.limits.total == activeItem.seq) {
-                                                                       $('#nextTrack').html('<div class="trackInfo">Last track in playlist</div>').show();
-                                                               }
-                                                               $('#nowPlayingPlaylist').html('').append(ul);
-                                                       } else {
-                                                               $('#nextText').hide();
-                                                               $('#nowPlayingPlaylist').hide();
-                                                               $('#nextTrack').hide();
-                                                       }
-                                                       if (!this.comparePlaylistItems(activeItem, this.activePlaylistItem)) {
-                                                               this.activePlaylistItem = activeItem;
-                                                               if (!this.updateActiveItemDurationRunOnce) {
-                                                                       this.updateActiveItemDurationRunOnce = true;
-                                                                       this.updatePlayer();
-                                                               }
-                                                       } else if (!activeItem) {
-                                                               this.stopRefreshTime();
-                                                       }
-                                                       this.activePlaylist = data.result.items;
-                                                       $('#videoDescription').show();
-                                                       $('#audioDescription').hide();
-                                                       $('#nowPlayingPanel').show();
-                                               }
-                                       } else {
-                                               this.activePlaylist = null;
-                                               $('#videoDescription').hide();
-                                               $('#nowPlayingPanel').hide();
-                                       }                                       
-                                       if (this.autoRefreshVideoPlaylist) {
-                                               setTimeout(jQuery.proxy(this.updateVideoPlaylist, this), 1000);
-                                       }
-                               }, this),
-                               error: jQuery.proxy(function(data) {
-                                       displayCommunicationError();
-                                       if (this.autoRefreshVideoPlaylist) {
-                                               setTimeout(jQuery.proxy(this.updateVideoPlaylist, this), 2000); /* Slow down request period */
-                                       }
-                               }, this),
-                               dataType: 'json'
-                       });
-               }
-       }
+        } else {
+          this.activePlaylist = null;
+          $('#videoDescription').hide();
+          $('#nowPlayingPanel').hide();
+        }
+        if (this.autoRefreshVideoPlaylist) {
+          setTimeout(jQuery.proxy(this.updateVideoPlaylist, this), 1000);
+        }
+      }, this),
+      error: jQuery.proxy(function(data) {
+        displayCommunicationError();
+        if (this.autoRefreshVideoPlaylist) {
+          setTimeout(jQuery.proxy(this.updateVideoPlaylist, this), 2000); /* Slow down request period */
+        }
+      }, this),
+      dataType: 'json'
+    });
+  }
+}
index ac9a69a..ce7f05a 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.addon" version="1.0" provider-name="Team XBMC">
+<addon id="xbmc.addon" version="11.0" provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.core" version="0.1"/>
   </requires>
index 8907583..5fa71cb 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.gui" version="3.00" provider-name="Team XBMC">
-  <backwards-compatibility abi="2.1"/>
+<addon id="xbmc.gui" version="3.0.1" provider-name="Team XBMC">
+  <backwards-compatibility abi="3.00"/>
   <requires>
     <import addon="xbmc.core" version="0.1"/>
   </requires>
index 5632135..fb56119 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.json" version="2.0" provider-name="Team XBMC">
+<addon id="xbmc.json" version="4.0" provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.core" version="0.1"/>
   </requires>
index e983c43..fb16f95 100755 (executable)
--- a/bootstrap
+++ b/bootstrap
@@ -5,6 +5,7 @@ set -e
 autoreconf -vif
 autoreconf -vif lib/libid3tag/libid3tag
 autoreconf -vif xbmc/screensavers/rsxs-0.9
+autoreconf -vif xbmc/visualizations/Goom/goom2k4-0
 autoreconf -vif lib/libapetag
 autoreconf -vif lib/cpluff
 # order matters with libdvd and friends
index 155dfac..e6f04df 100755 (executable)
@@ -107,9 +107,9 @@ openmax_not_found="== Could not find libnvomx. OpenMax support disabled. =="
 ssh_not_found="== Could not find libssh. SSH FTP VFS support disabled. =="
 librtmp_not_found="== Could not find libRTMP. RTMP support disabled. =="
 librtmp_disabled="== RTMP support disabled. =="
-libnfs_not_found="== Could not find libnfs. NFS support disabled. =="
+libnfs_not_found="== Could not find libnfs. NFS client support disabled. =="
 libnfs_disabled="== NFS support disabled. =="
-libafpclient_not_found="== Could not find libafpclient. AFP support disabled. =="
+libafpclient_not_found="== Could not find libafpclient. AFP client support disabled. =="
 libafpclient_disabled="== AFP support disabled. =="
 libshairport_not_found="== Could not find libshairport. AirTunes support disabled. =="
 libshairport_disabled="== AirTunes support disabled. =="
@@ -123,8 +123,10 @@ libudev_not_found="== Could not find libudev. Will use polling to check for devi
 libudev_disabled="== udev support disabled. Will use polling to check for device changes. =="
 libusb_not_found="== Could not find libusb. Plug and play USB device support will not be available. =="
 libusb_disabled="== libusb disabled. Plug and play USB device support will not be available. =="
-libcec_not_found="== Could not find libcec. CEC device support will not be available. =="
-libcec_disabled="== libcec disabled. CEC device support will not be available. =="
+libusb_disabled_udev_found="== libusb disabled. =="
+libcec_enabled="== libcec enabled. =="
+libcec_disabled="== libcec disabled. CEC adapter support will not be available. =="
+libcec_disabled_missing_libs="== libcec disabled because both libudev and libusb are not available. CEC adapter support will not be available. =="
 
 # External library message strings
 external_libraries_enabled="== Use of all supported external libraries enabled. =="
@@ -155,6 +157,12 @@ AC_ARG_WITH([cpu],
   [use_cpu=$withval],
   [use_cpu=no])
 
+AC_ARG_ENABLE([neon],
+  [AS_HELP_STRING([--enable-neon],
+  [enable neon passing to ffmpeg (default is no)])],
+  [use_neon=$enableval],
+  [use_neon=no])
+
 AC_ARG_ENABLE([optimizations],
   [AS_HELP_STRING([--enable-optimizations],
   [enable optimization (default is yes)])],
@@ -447,6 +455,8 @@ case $host in
      ;;
   arm-apple-darwin*)
      use_joystick=no
+     use_neon=yes
+     use_libcec=no
      use_crystalhd=no
      use_vdadecoder=no
      use_vtbdecoder=yes
@@ -573,16 +583,20 @@ elif test "$use_arch" = "arm"; then
       [AC_LANG_SOURCE([int foo;])],
       [ CFLAGS="$SAVE_CFLAGS -Wno-psabi -Wa,-march=armv7a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mthumb-interwork"
         CXXFLAGS="$CXXFLAGS -Wno-psabi -Wa,-march=armv7a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mthumb-interwork"
-        FFMPEG_EXTRACFLAGS+=" -mtune=cortex-a9 -mfpu=vfpv3-d16"
+        FFMPEG_EXTRACFLAGS="$FFMPEG_EXTRACFLAGS -mtune=cortex-a9 -mfpu=vfpv3-d16"
         use_cpu=cortex-a9],
       [ CFLAGS="$SAVE_CFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork"
         CXXFLAGS="$CXXFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork"    
         use_cpu=cortex-a8])
   else
-    # Compile for ARMv7a architecture, CortexA8 cpu and NEON coprocessor
-    CFLAGS+=" -Wa,-march=armv7a -mcpu=cortex-a8 -mfpu=neon -mvectorize-with-neon-quad"
-    CXXFLAGS+=" -Wa,-march=armv7a -mcpu=cortex-a8 -mfpu=neon -mvectorize-with-neon-quad"
-    FFMPEG_EXTRACFLAGS+=" -mfpu=neon"
+    # Compile for ARMv7a architecture, CortexA8 cpu and check for enabled NEON coprocessor
+    CFLAGS="$CFLAGS -Wa,-march=armv7a -mcpu=cortex-a8"
+    CXXFLAGS="$CXXFLAGS -Wa,-march=armv7a -mcpu=cortex-a8"
+    if test "$use_neon" = "yes"; then 
+      CFLAGS="$CFLAGS -mfpu=neon -mvectorize-with-neon-quad"
+      CXXFLAGS="$CXXFLAGS -mfpu=neon -mvectorize-with-neon-quad"
+      FFMPEG_EXTRACFLAGS="$FFMPEG_EXTRACFLAGS -mfpu=neon"
+    fi
   fi
 fi
 
@@ -684,6 +698,18 @@ AC_CHECK_HEADER([vorbis/vorbisenc.h],, AC_MSG_ERROR($missing_library))
 AC_CHECK_HEADER([libmodplug/modplug.h],, AC_MSG_ERROR($missing_library))
 AC_CHECK_HEADER([curl/curl.h],, AC_MSG_ERROR($missing_library))
 AC_CHECK_HEADER([FLAC/stream_decoder.h],, AC_MSG_ERROR($missing_library))
+
+# we need to check for the header because if it exists we set the openssl
+# and gcrypt MT callback hooks. This is mostly so that libcurl operates 
+# in MT manner correctly.
+AC_CHECK_HEADER([openssl/crypto.h], AC_DEFINE([HAVE_OPENSSL],[1],[Define if we have openssl]),)
+AC_CHECK_HEADER([gcrypt.h], gcrypt_headers_available=yes,gcrypt_headers_available=no)
+if test "$gcrypt_headers_available" = "yes"; then
+   # if we have the headers then we must have the lib
+   AC_CHECK_LIB([gcrypt],[gcry_control],, AC_MSG_ERROR($missing_library))
+   AC_DEFINE([HAVE_GCRYPT],[1],[Define if we have gcrypt])
+fi
+
 AC_CHECK_LIB([bz2],         [main],, AC_MSG_ERROR($missing_library))
 AC_CHECK_LIB([jpeg],        [main],, AC_MSG_ERROR($missing_library)) # check for cximage
 AC_CHECK_LIB([tiff],        [main],, AC_MSG_ERROR($missing_library))
@@ -749,9 +775,9 @@ AS_CASE([x$use_libbluray],
 
       , AC_MSG_CHECKING([libbluray version])
         AC_COMPILE_IFELSE(
-            AC_LANG_PROGRAM(
+            [AC_LANG_PROGRAM(
                 [#include <libbluray/bluray.h>]
-               ,[bd_get_playlist_info(0, 0)])
+               ,[bd_get_playlist_info(0, 0)])]
           ,[AC_MSG_RESULT(version has old angle api)
             AC_DEFINE([HAVE_LIBBLURAY_NOANGLE],[],[System has an old api libbluray without angle support])]
           ,[AC_MSG_RESULT(normal)]
@@ -759,10 +785,10 @@ AS_CASE([x$use_libbluray],
 
         AC_MSG_CHECKING([for libbluray log control])
         AC_LINK_IFELSE(
-            AC_LANG_PROGRAM(
+            [AC_LANG_PROGRAM(
                [#include <libbluray/bluray.h>
                 #include <libbluray/log_control.h>]
-              ,[bd_set_debug_mask(0)])
+              ,[bd_set_debug_mask(0)])]
           , AC_MSG_RESULT(yes)
           ,[AC_MSG_RESULT(no)
             AC_DEFINE([HAVE_LIBBLURAY_NOLOGCONTROL],[],[System has an old api libbluray without log support])]
@@ -959,6 +985,17 @@ else
   DISABLE_PROJECTM=0
 fi
 
+# skin touched
+use_skin_touched=no
+if [[ -f "addons/skin.touched/addon.xml" ]]; then 
+  use_skin_touched=yes
+  USE_SKIN_TOUCHED=1
+  AC_DEFINE([HAS_SKIN_TOUCHED], [1], [Whether to build skin touched.])
+else
+  USE_SKIN_TOUCHED=0
+fi
+
+
 # libRTMP
 if test "$use_librtmp" != "no"; then
   AC_CHECK_HEADERS([librtmp/log.h librtmp/amf.h librtmp/rtmp.h],,
@@ -1074,73 +1111,87 @@ if test "x$use_airtunes" != "xno"; then
   fi
 fi
 
-# libusb
-USE_LIBUSB=0
+# libudev
+USE_LIBUDEV=0
 if test "$host_vendor" = "apple" ; then
-  use_libusb="no"
-  AC_MSG_NOTICE($libusb_disabled)
-else
-  if test "$use_libusb" = "auto"; then
-    PKG_CHECK_MODULES([USB], [libusb],
-      use_libusb="yes"; USE_LIBUSB=1; [INCLUDES="$INCLUDES $USB_CFLAGS"; LIBS="$LIBS $USB_LIBS"; USE_LIBUSB=1]; \
-      AC_DEFINE([HAVE_LIBUSB],[1],["Define to 1 if libusb is installed"]),
-      use_libusb="no"; AC_MSG_RESULT($libusb_not_found))
-  elif test "$use_libusb" = "yes"; then
-    PKG_CHECK_MODULES([USB], [libusb],
-      use_libusb="yes"; USE_LIBUSB=1; [INCLUDES="$INCLUDES $USB_CFLAGS"; LIBS="$LIBS $USB_LIBS"; USE_LIBUSB=1]; \
-      AC_DEFINE([HAVE_LIBUSB],[1],["Define to 1 if libusb is installed"]),
-      use_libusb="no"; AC_MSG_ERROR($libusb_not_found))
+  use_libudev="no"
+  AC_MSG_NOTICE($libudev_disabled)
+else
+  if test "$use_libudev" = "auto"; then
+    PKG_CHECK_MODULES([UDEV],[libudev],,[use_libudev="no";AC_MSG_RESULT($libudev_not_found)])
+  elif test "$use_libudev" = "yes" ; then
+    PKG_CHECK_MODULES([UDEV],[libudev],,[use_libudev="no";AC_MSG_ERROR($libudev_not_found)])
   else
-    use_libusb="no"
-    AC_MSG_NOTICE($libusb_disabled)
+    AC_MSG_NOTICE($libudev_disabled)
+  fi
+
+  if test "x$use_libudev" != "xno"; then
+    USE_LIBUDEV=1;INCLUDES="$INCLUDES $UDEV_CFLAGS";LIBS="$LIBS $UDEV_LIBS"
+    AC_DEFINE([HAVE_LIBUDEV],[1],["Define to 1 if libudev is installed"])
   fi
 fi
 
-# udev
-USE_LIBUDEV=0
-if test "$use_libusb" = "yes"; then
+# libusb
+USE_LIBUSB=0
+
+# if libudev is available, we don't need libusb
+if test "x$use_libudev" != "xno"; then
+  use_libusb="no"
+  AC_MSG_NOTICE($libusb_disabled_udev_found)
+else
   if test "$host_vendor" = "apple" ; then
-    use_libudev="no"
-    AC_MSG_NOTICE($libudev_disabled)
+    use_libusb="no"
+    AC_MSG_NOTICE($libusb_disabled)
   else
-    if test "$use_libudev" = "auto"; then
-      PKG_CHECK_MODULES([UDEV], [libudev],
-        use_libudev="yes"; use_libusb="no"; USE_LIBUDEV=1; [INCLUDES="$INCLUDES $UDEV_CFLAGS"; LIBS="$LIBS $UDEV_LIBS"]; \
-        AC_DEFINE([HAVE_LIBUDEV],[1],["Define to 1 if libudev is installed"]),
-           AC_MSG_RESULT($libudev_not_found))
-    elif test "$use_libudev" = "yes" ; then
-      PKG_CHECK_MODULES([UDEV], [libudev],
-        use_libudev="yes"; use_libusb="no"; USE_LIBUDEV=1; [INCLUDES="$INCLUDES $UDEV_CFLAGS"; LIBS="$LIBS $UDEV_LIBS"]; \
-        AC_DEFINE([HAVE_LIBUDEV],[1],["Define to 1 if libudev is installed"]),
-           AC_MSG_ERROR($libudev_not_found))
+    if test "$use_libusb" = "auto"; then
+      PKG_CHECK_MODULES([USB],[libusb],,[use_libusb="no";AC_MSG_RESULT($libusb_not_found)])
+    elif test "$use_libusb" = "yes"; then
+      PKG_CHECK_MODULES([USB],[libusb],,[use_libusb="no";AC_MSG_ERROR($libusb_not_found)])
     else
-      use_libudev="no"
-      AC_MSG_NOTICE($libudev_disabled)
+      AC_MSG_NOTICE($libusb_disabled)
+    fi
+  
+    if test "x$use_libusb" != "xno"; then
+      USE_LIBUSB=1;INCLUDES="$INCLUDES $USB_CFLAGS";LIBS="$LIBS $USB_LIBS"
+      AC_DEFINE([HAVE_LIBUSB],[1],["Define to 1 if libusb is installed"])
     fi
   fi
-else
-  use_libudev="no"
-  AC_MSG_NOTICE($libudev_disabled)
 fi
 
 # libcec
 USE_LIBCEC=0
-if test "$use_libcec" = "auto"; then
-  PKG_CHECK_MODULES([CEC], [libcec],
-    use_libcec="yes"; USE_LIBCEC=1; [INCLUDES="$INCLUDES $CEC_CFLAGS"; LIBS="$LIBS $CEC_LIBS";] \
-    AC_DEFINE([HAVE_LIBCEC],[1],["Define to 1 if libcec is installed"]),
-       use_libcec="no"; AC_MSG_RESULT($libcec_not_found))
-elif test "$use_libcec" = "yes"; then
-  PKG_CHECK_MODULES([CEC], [libcec],
-    use_libcec="yes"; USE_LIBCEC=1; [INCLUDES="$INCLUDES $CEC_CFLAGS"; LIBS="$LIBS $CEC_LIBS";] \
-    AC_DEFINE([HAVE_LIBCEC],[1],["Define to 1 if libcec is installed"]),
-       use_libcec="no"; AC_MSG_ERROR($libcec_not_found))
+if test "x$use_libcec" != "xno"; then
+  # libcec needs libudev or libusb under linux, or the device will never be detected.
+  if test "$host_vendor" != "apple" && test "$use_libusb" = "no" && test "$use_libudev" = "no"; then
+    if test "x$use_libcec" != "xauto"; then
+      AC_MSG_ERROR($libcec_disabled_missing_libs)
+    else
+      use_libcec="no"
+      AC_MSG_NOTICE($libcec_disabled_missing_libs)
+    fi
+  fi
+
+  # libcec is dyloaded, so we need to check for its headers and link any depends.
+  if test "x$use_libcec" != "xno"; then
+    PKG_CHECK_MODULES([CEC],[libcec >= 1.5.0],,[use_libcec="no";AC_MSG_RESULT($libcec_disabled)])
+
+    if test "x$use_libcec" != "xno"; then
+      INCLUDES="$INCLUDES $CEC_CFLAGS"
+      USE_LIBCEC=1;AC_DEFINE([HAVE_LIBCEC],[1],["Define to 1 if libcec is installed"])
+      XB_FIND_SONAME([LIBCEC],[cec],[use_libcec])
+      AC_MSG_NOTICE($libcec_enabled)
+    else
+      use_libcec="no"
+      AC_MSG_NOTICE($libcec_disabled)
+    fi
+  fi
 else
   use_libcec="no"
   AC_MSG_NOTICE($libcec_disabled)
 fi
 
 ### External libraries checks
+
 # External FFmpeg
 if test "$use_external_ffmpeg" = "yes"; then
   FFMPEG_LIBNAMES="libavcodec libavfilter libavformat libavutil libpostproc libswscale"
@@ -1578,6 +1629,12 @@ else
   final_message="$final_message\n  ProjectM:\tNo"
 fi
 
+if test "$use_skin_touched" = "yes"; then
+  final_message="$final_message\n  Skin Touched:\tYes"
+else
+  final_message="$final_message\n  Skin Touched:\tNo"
+fi
+
 if test "$use_x11" = "yes"; then
   final_message="$final_message\n  X11:\t\tYes"
 else
@@ -1612,6 +1669,8 @@ else
   final_message="$final_message\n  MID Support:\tNo"
 fi
 
+ORIGCC=$CC
+ORIGCXX=$CXX
 if test "x$use_ccache" != "xno"; then
   AC_PATH_PROG(CCACHE,ccache,none)
   if test "$ac_cv_path_CCACHE" = "none"; then
@@ -1622,8 +1681,6 @@ if test "x$use_ccache" != "xno"; then
       final_message="$final_message\n  ccache:\tNo"
     fi
   else
-    ORIGCC=$CC
-    ORIGCXX=$CXX
     CC="$ac_cv_path_CCACHE $CC"
     CXX="$ac_cv_path_CCACHE $CXX"
     AC_MSG_NOTICE(enabling ccache)
@@ -1728,9 +1785,9 @@ else
 fi
 
 if test "$use_libnfs" != "no"; then
-  final_message="$final_message\n  libnfs support:\tYes"
+  final_message="$final_message\n  libnfs client support:Yes"
 else
-  final_message="$final_message\n  libnfs support:\tNo"
+  final_message="$final_message\n  libnfs client support:No"
 fi
 
 if test "x$use_libafpclient" != "xno"; then
@@ -1757,7 +1814,26 @@ else
   final_message="$final_message\n  Optical drive:\tNo"
 fi
 
+if test "x$use_libudev" != "xno"; then
+  final_message="$final_message\n  libudev support:\tYes"
+else
+  final_message="$final_message\n  libudev support:\tNo"
+fi
+
+if test "x$use_libusb" != "xno"; then
+  final_message="$final_message\n  libusb support:\tYes"
+else
+  final_message="$final_message\n  libusb support:\tNo"
+fi
+
+if test "x$use_libcec" != "xno"; then
+  final_message="$final_message\n  libcec support:\tYes"
+else
+  final_message="$final_message\n  libcec support:\tNo"
+fi
+
 ### External libraries messages
+
 if test "$use_external_ffmpeg" = "yes"; then
   final_message="$final_message\n  External FFmpeg:\tYes"
 else
@@ -1825,6 +1901,10 @@ OUTPUT_FILES="Makefile \
     xbmc/peripherals/bus/Makefile \
     xbmc/peripherals/devices/Makefile"
 
+if test "$use_skin_touched" = "yes"; then
+OUTPUT_FILES="$OUTPUT_FILES addons/skin.touched/media/Makefile"
+fi
+
 # Line below is used so we can use AM_INIT_AUTOMAKE. The corresponding
 # .dummy.am does nothing.
 AC_CONFIG_FILES([.dummy])
@@ -1841,6 +1921,7 @@ AC_SUBST(BUILD_DVDCSS)
 AC_SUBST(DISABLE_GOOM)
 AC_SUBST(DISABLE_RSXS)
 AC_SUBST(DISABLE_PROJECTM)
+AC_SUBST(USE_SKIN_TOUCHED)
 AC_SUBST(USE_EXTERNAL_FFMPEG)
 AC_SUBST(PYTHON_VERSION)
 AC_SUBST(OUTPUT_FILES)
@@ -1879,6 +1960,7 @@ AC_SUBST(USE_LIBUDEV)
 AC_SUBST(USE_LIBUSB)
 AC_SUBST(USE_LIBCEC)
 
+
 # pushd and popd are not available in other shells besides bash, so implement
 # our own pushd/popd functions
 XB_DIRSTACK="$PWD"
@@ -1936,11 +2018,12 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
       `if test "$use_arch" != "no"; then echo --enable-cross-compile; fi` \
       `if test "$use_arch" != "no"; then echo --arch=$use_arch; fi`\
       `if test "$use_cpu" != "no"; then echo --cpu=$use_cpu; fi`\
+      `if test "$use_arch" = "arm"; then echo --enable-pic; fi`\
+      `if test "$use_neon" = "yes"; then echo --enable-neon; else echo --disable-neon; fi`\
       --target-os=$(tolower $(uname -s)) \
       --disable-amd3dnow \
       --disable-armv5te \
       --disable-armv6t2 \
-      `if test "$use_arch" != "yes"; then echo --enable-neon; fi`\
       --disable-static \
       `if test "$use_debug" = "no"; then echo --disable-debug; fi` \
       --disable-muxers \
@@ -1964,12 +2047,12 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
       --enable-pthreads \
       --enable-runtime-cpudetect \
       --cc="$CC" &&
-    sed -i "" -e "s#YASM=yasm#YASM=${prefix}/bin/yasm#" config.mak &&
-    sed -i "" -e "s#YASMDEP=yasm#YASMDEP=${prefix}/bin/yasm#" config.mak &&
-    sed -i "" -e "s# -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 # #" config.mak
+    sed -ie "s#YASM=yasm#YASM=${prefix}/bin/yasm#" config.mak &&
+    sed -ie "s#YASMDEP=yasm#YASMDEP=${prefix}/bin/yasm#" config.mak &&
+    sed -ie "s# -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 # #" config.mak
     if test "$use_arch" = "ppc"; then
-      sed -i "" -e "s/HAVE_GNU_AS 1/HAVE_GNU_AS 0/" config.h
-      sed -i "" -e "s/^HAVE_GNU_AS=yes/!HAVE_GNU_AS=yes/" config.mak
+      sed -ie "s/HAVE_GNU_AS 1/HAVE_GNU_AS 0/" config.h
+      sed -ie "s/^HAVE_GNU_AS=yes/!HAVE_GNU_AS=yes/" config.mak
     fi
   else
     CFLAGS="" \
@@ -1981,6 +2064,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
       `if test "$cross_compiling" = "yes"; then echo --enable-cross-compile; fi` \
       `if test "$use_arch" != "no"; then echo --arch=$use_arch; fi`\
       `if test "$use_cpu" != "no"; then echo --cpu=$use_cpu; fi`\
+      `if test "$use_neon" = "yes"; then echo --enable-neon; else echo --disable-neon; fi`\
       --target-os=$(tolower $(uname -s)) \
       --disable-muxers \
       --enable-muxer=spdif \
@@ -2085,9 +2169,9 @@ XB_CONFIG_MODULE([xbmc/visualizations/XBMCProjectM/libprojectM],[
     -DSHARE_INSTALL_PREFIX:PATH="${datadir}" . &&
   if test "$host_vendor" = "apple" ; then
     # cmake has hardcoded paths to macports which bork our darwin depends cross/ppc, remove them
-    sed -i "" -e "s|-L/opt/local/lib| |" CMakeFiles/projectM.dir/link.txt
-    sed -i "" -e "s|-L/opt/local/lib| |" CMakeFiles/projectM.dir/flags.make
-    sed -i "" -e "s|-I/opt/local/include| |" CMakeFiles/projectM.dir/flags.make
+    sed -ie "s|-L/opt/local/lib| |" CMakeFiles/projectM.dir/link.txt
+    sed -ie "s|-L/opt/local/lib| |" CMakeFiles/projectM.dir/flags.make
+    sed -ie "s|-I/opt/local/include| |" CMakeFiles/projectM.dir/flags.make
   fi
   set +x
 ], [$DISABLE_PROJECTM])
diff --git a/language/Arabic/langinfo.xml b/language/Arabic/langinfo.xml
new file mode 100644 (file)
index 0000000..ae496f2
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<language locale="ar">
+  <charsets>
+    <gui unicodefont="true">CP1256</gui>
+    <subtitle>CP1256</subtitle>
+  </charsets>
+  <dvd>
+    <menu>ar</menu>
+    <audio>ar</audio>
+    <subtitle>ar</subtitle>
+  </dvd>
+  <regions>
+    <region name="Middle East" locale="ME">
+      <dateshort>DD/MM/YYYY</dateshort>
+      <datelong>DDDD DD MMMM YYYY</datelong>
+      <time symbolAM="" symbolPM="">HH:mm:ss</time>
+      <tempunit>C</tempunit>
+      <speedunit>kmh</speedunit>
+    </region>
+  </regions>
+</language>
+
diff --git a/language/Arabic/strings.xml b/language/Arabic/strings.xml
new file mode 100644 (file)
index 0000000..3333758
--- /dev/null
@@ -0,0 +1,2071 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--Translator: Medo Alyami-->
+<!--Email: alyami1@live.com-->
+<!--Based on English 4c45436d4c19274fca2d478373326688c5682e55 (11.12.2011)-->
+<strings>
+  <string id="0">البرامج</string>
+  <string id="1">الصور</string>
+  <string id="2">الموسيقى</string>
+  <string id="3">الفيديو</string>
+  <string id="4">دليل التلفزيون</string>
+  <string id="5">الإعدادات</string>
+  <string id="7">إدارة الملفات</string>
+  <string id="8">الطقس</string>
+  <string id="9">xbmc مركز وسائط</string>
+  <string id="11">الاثنين</string>
+  <string id="12">الثلاثاء</string>
+  <string id="13">الاربعاء</string>
+  <string id="14">الخميس</string>
+  <string id="15">الجمعة</string>
+  <string id="16">السبت</string>
+  <string id="17">الاحد</string>
+  <string id="21">يناير</string>
+  <string id="22">فبراير</string>
+  <string id="23">مارس</string>
+  <string id="24">أبريل</string>
+  <string id="25">مايو</string>
+  <string id="26">يونيو</string>
+  <string id="27">يوليو</string>
+  <string id="28">أغسطس</string>
+  <string id="29">سبتمبر</string>
+  <string id="30">أكتوبر</string>
+  <string id="31">نوفمبر</string>
+  <string id="32">ديسمبر</string>
+  <string id="41">اثنين</string>
+  <string id="42">ثلاثاء</string>
+  <string id="43">اربعاء</string>
+  <string id="44">خميس</string>
+  <string id="45">جمعة</string>
+  <string id="46">سبت</string>
+  <string id="47">أحد</string>
+  <string id="51">يناير</string>
+  <string id="52">فبراير</string>
+  <string id="53">مارس</string>
+  <string id="54">أبريل</string>
+  <string id="55">مايو</string>
+  <string id="56">يونيو</string>
+  <string id="57">يوليو</string>
+  <string id="58">أغسطس</string>
+  <string id="59">سبتمبر</string>
+  <string id="60">أكتوبر</string>
+  <string id="61">نوفمبر</string>
+  <string id="62">ديسمبر</string>
+  <string id="71">N</string>
+  <string id="72">NNE</string>
+  <string id="73">NE</string>
+  <string id="74">ENE</string>
+  <string id="75">E</string>
+  <string id="76">ESE</string>
+  <string id="77">SE</string>
+  <string id="78">SSE</string>
+  <string id="79">S</string>
+  <string id="80">SSW</string>
+  <string id="81">SW</string>
+  <string id="82">WSW</string>
+  <string id="83">W</string>
+  <string id="84">WNW</string>
+  <string id="85">NW</string>
+  <string id="86">NNW</string>
+  <string id="87">VAR</string>
+  <string id="98">عرض: تلقائية</string>
+  <string id="99">عرض: تلقائية كبيرة</string>
+  <string id="100">عرض: رموز</string>
+  <string id="101">عرض: قائمة</string>
+  <string id="102">فحص</string>
+  <string id="103">ترتيب حسب: الإسم</string>
+  <string id="104">ترتيب حسب: التاريخ</string>
+  <string id="105">ترتيب حسب: الحجم</string>
+  <string id="106">لا</string>
+  <string id="107">نعم</string>
+  <string id="108">عرض الشرائح</string>
+  <string id="109">إنشاء مصغرات</string>
+  <string id="110">إنشاء مصغرات</string>
+  <string id="111">اختصارات</string>
+  <string id="112">متوقف</string>
+  <string id="113">فشل التحديث</string>
+  <string id="114">فشل التثبيت</string>
+  <string id="115">نسخ</string>
+  <string id="116">تحريك</string>
+  <string id="117">حذف</string>
+  <string id="118">إعادة تسمية</string>
+  <string id="119">مجلد جديد</string>
+  <string id="120">تأكيد نسخ ملف</string>
+  <string id="121">تأكيد نقل ملف</string>
+  <string id="122">تأكيد حذف ملف؟</string>
+  <string id="123">نسخ هذه الملفات؟</string>
+  <string id="124">تحريك هذه الملفات؟</string>
+  <string id="125">حذف هذه الملفات؟ - لايمكن التراجع بعد حذف هذه الملفات!</string>
+  <string id="126">الحالة</string>
+  <string id="127">كائنات</string>
+  <string id="128">عام</string>
+  <string id="129">عرض الشرائح</string>
+  <string id="130">معلومات النظام</string>
+  <string id="131">عرض</string>
+  <string id="132">البومات</string>
+  <string id="133">الفنانين</string>
+  <string id="134">الأغاني</string>
+  <string id="135">الأنواع</string>
+  <string id="136">قوائم التشغيل</string>
+  <string id="137">بحث</string>
+  <string id="138">معلومات النظام</string>
+  <string id="139">درجات الحرارة:</string>
+  <string id="140">وحدة المعالجة:</string>
+  <string id="141">معالج الرسومات:</string>
+  <string id="142">الوقت:</string>
+  <string id="143">الحالي:</string>
+  <string id="144">النسخة:</string>
+  <string id="145">الشبكة:</string>
+  <string id="146">النوع:</string>
+  <string id="147">ثابت</string>
+  <string id="148">DHCP</string>
+  <string id="149">عنوان التحكم بالوصول إلى الوسائط MAC</string>
+  <string id="150">عنوان الآي بي IP</string>
+  <string id="151">الربط:</string>
+  <string id="152">Half duplex</string>
+  <string id="153">Full duplex</string>
+  <string id="154">سعة التخزين</string>
+  <string id="155">السواقة</string>
+  <string id="156">الخالية</string>
+  <string id="157">الفيديو</string>
+  <string id="158">الذاكرة</string>
+  <string id="159">لايوجد رابط</string>
+  <string id="160">الخالية</string>
+  <string id="161">تعطيل</string>
+  <string id="162">فتح علبة</string>
+  <string id="163">قراءة</string>
+  <string id="164">لايوجد قرص</string>
+  <string id="165">القرص الحالي</string>
+  <string id="166">الخلفيات</string>
+  <string id="169">دقة</string>
+  <string id="170">ضبط معدل تحديث الشاشة لتتناسب مع الفيديو</string>
+  <string id="172">تاريخ الإصدار</string>
+  <string id="173">عرض 4:3 فيديو مثل</string>
+  <string id="175">الأمزجة</string>
+  <string id="176">الأنماط</string>
+  <string id="179">الأغنية</string>
+  <string id="180">المدة</string>
+  <string id="181">اختر الألبوم</string>
+  <string id="182">المسارات</string>
+  <string id="183">مراجعة</string>
+  <string id="184">تحديث</string>
+  <string id="185">بحث ألبوم</string>
+  <string id="186">موافق</string>
+  <string id="187">لا توجد ألبومات</string>
+  <string id="188">حدد الكل</string>
+  <string id="189">فحص معلومات الوسائط</string>
+  <string id="190">حفظ</string>
+  <string id="191">خلط</string>
+  <string id="192">مسح</string>
+  <string id="193">فحص</string>
+  <string id="194">بحث...</string>
+  <string id="195">لا توجد معلومات</string>
+  <string id="196">اختر الفلم:</string>
+  <string id="197">%s معلومات الإستعلام</string>
+  <string id="198">تحميل تفاصيل الفيلم</string>
+  <string id="199">واجهة ويب</string>
+  <string id="202">إشعار</string>
+  <string id="203">موجز الرواية</string>
+  <string id="205">اصوات</string>
+  <string id="206">طرح</string>
+  <string id="207">الرواية</string>
+  <string id="208">تشغيل</string>
+  <string id="209">التالي</string>
+  <string id="210">السابق</string>
+  <string id="213">معايرة واجهة المستخدم...</string>
+  <string id="214">معايرة الفيديو...</string>
+  <string id="215">تنعيم</string>
+  <string id="216">مقدار التكبير</string>
+  <string id="217">نسبة عنصر الصورة</string>
+  <string id="218">DVD محرك أقراص </string>
+  <string id="219">الرجاء إدراج القرص</string>
+  <string id="220">مشاركة عن بعد</string>
+  <string id="221">لم يتم توصيل الشبكة</string>
+  <string id="222">إلغاء</string>
+  <string id="224">سرعة</string>
+  <string id="225">تحول عمودي</string>
+  <string id="226">اختبار النماذج...</string>
+  <string id="227">بحث أسماء مسارات الاسطوانة الصوتية من freedb.org</string>
+  <string id="228">خلط قائمة التشغيل على التحميل</string>
+  <string id="229">HDD وقت نسج</string>
+  <string id="230">تصفية الفيديو</string>
+  <string id="231">بلا</string>
+  <string id="232">نقطة</string>
+  <string id="233">طولي</string>
+  <string id="234">تباين</string>
+  <string id="235">تخميس</string>
+  <string id="236">غاوسي مكعب</string>
+  <string id="237">تقليل</string>
+  <string id="238">تكبير</string>
+  <string id="239">مسح التشغيل على الانتهاء</string>
+  <string id="240">طريقة العرض</string>
+  <string id="241">#%d شاشة كاملة</string>
+  <string id="242">إطارات</string>
+  <string id="243">معدل التحديث</string>
+  <string id="244">شاشة كاملة</string>
+  <string id="245">تحجيم: (%i,%i)-&gt;(%i,%i) (تقريب x%2.2f) AR:%2.2f:1 (%بكسل: 2.2f:1) (VShift: %2.2f)</string>
+  <string id="247">النصية</string>
+  <string id="248">اللغة</string>
+  <string id="249">موسيقى</string>
+  <string id="250">التصور</string>
+  <string id="251">حدد دليل الوجهة</string>
+  <string id="252">إخراج النظام الصوتي لجميع المكبرات</string>
+  <string id="253">عدد القنوات</string>
+  <string id="254">- DTS قدرة استقبال</string>
+  <string id="255">CDDB</string>
+  <string id="256">إحضار المعلومات الإسطوانة</string>
+  <string id="257">خطأ</string>
+  <string id="258">تمكين علامة القراءة</string>
+  <string id="259">جاري الفتح</string>
+  <string id="260">شوتكاست</string>
+  <string id="261">انتظار للبدء...</string>
+  <string id="262">مخرجات النصية</string>
+  <string id="263">سماح تحكم XBMC عبر HTTP</string>
+  <string id="264">تسجيل</string>
+  <string id="265">إيقاف التسجيل</string>
+  <string id="266">ترتيب حسب: المسار</string>
+  <string id="267">ترتيب حسب: الوقت</string>
+  <string id="268">ترتيب حسب: العنوان</string>
+  <string id="269">ترتيب حسب: الفنان</string>
+  <string id="270">ترتيب حسب: ألبوم</string>
+  <string id="271">أعلى 100</string>
+  <string id="272">تعويض زيادة الفحص أعلى اليسار</string>
+  <string id="273">تعويض زيادة الفحص أسفل اليمين</string>
+  <string id="274">توضيع الترجمة</string>
+  <string id="275">تكييف نسبة البكسل</string>
+  <string id="276">ضبط السهم لتغيير مقدار زيادة الفحص</string>
+  <string id="277">ضبط الشريط لتغيير موضع الترجمات</string>
+  <string id="278">ضبط المستطيل بحيث يكون مربع تماما</string>
+  <string id="279">غير قادر على تحميل الإعدادات</string>
+  <string id="280">استخدام الإعدادات الافتراضية</string>
+  <string id="281">يرجى التحقق من ملفات XML</string>
+  <string id="282">العثور %i عل بنود</string>
+  <string id="283">نتائج البحث</string>
+  <string id="284">لا توجد نتائج</string>
+  <string id="287">الترجمات</string>
+  <string id="288">الخط</string>
+  <string id="289">- الحجم</string>
+  <string id="290">ضغط النطاق الديناميكي</string>
+  <string id="291">فيديو</string>
+  <string id="292">صوت</string>
+  <string id="293">تصفح للبحث عن الترجمة</string>
+  <string id="294">إنشاء علامة</string>
+  <string id="296">مسح العلامات</string>
+  <string id="297">توازن الصوت</string>
+  <string id="298">العلامات</string>
+  <string id="299">-- AAC قدرة استقبال </string>
+  <string id="300">-- MP1 قدرة استقبال </string>
+  <string id="301">-- MP2 قدرة استقبال </string>
+  <string id="302">-- MP3 قدرة استقبال </string>
+  <string id="303">تأخير</string>
+  <string id="304">اللغة</string>
+  <string id="305">ممكن</string>
+  <string id="306">غير معشق</string>
+  <string id="312">(0=auto)</string>
+  <string id="313">تنظيف قاعدة بيانات</string>
+  <string id="314">إعداد...</string>
+  <string id="315">خطأ في قاعدة بيانات</string>
+  <string id="316">بحث الأغاني...</string>
+  <string id="317">قاعدة البيانات منظفة بنجاح</string>
+  <string id="318">تنظيف الأغاني...</string>
+  <string id="319">خطأ تنظيف الأغاني</string>
+  <string id="320">تنظيف الفنانين...</string>
+  <string id="321">خطأ تنظيف الفنانين</string>
+  <string id="322">تنظيف الأنواع...</string>
+  <string id="323">خطأ تنظيف الأنواع</string>
+  <string id="324">تنظيف مسارات...</string>
+  <string id="325">خطأ تنظيف المسارات</string>
+  <string id="326">تنظيف ألبومات...</string>
+  <string id="327">خطأ تنظيف ألبومات</string>
+  <string id="328">كتابة تغييرات...</string>
+  <string id="329">خطأ كتابة التغييرات</string>
+  <string id="330">هذا قد يستغرق بعض الوقت...</string>
+  <string id="331">ضغط قاعدة بيانات...</string>
+  <string id="332">خطأ ضغط قاعدة بيانات</string>
+  <string id="333">هل تريد تنظيف المكتبة؟</string>
+  <string id="334">تنطيف المكتبة...</string>
+  <string id="335">ابدأ</string>
+  <string id="336">تحويل فراميرات</string>
+  <string id="337">مخرج الصوت</string>
+  <string id="338">النظير</string>
+  <string id="339">بصري/محوري</string>
+  <string id="340">فنانين مختلفين</string>
+  <string id="341">تشغيل القرص</string>
+  <string id="342">أفلام</string>
+  <string id="343">ضبط فراميرات</string>
+  <string id="344">الممثلين</string>
+  <string id="345">السنة</string>
+  <string id="346">دفع مستوى الصوت على downmix</string>
+  <string id="350">برامج</string>
+  <string id="351">معطلة</string>
+  <string id="352">خافت</string>
+  <string id="353">أسود</string>
+  <string id="354">مسارات ماتركيس</string>
+  <string id="355">وقت شاشة التوقف</string>
+  <string id="356">وضع شاشة التوقف</string>
+  <string id="357">مؤقت عملية الإغلاق</string>
+  <string id="358">جميع الألبومات</string>
+  <string id="359">ألبومات مضافة مؤخرا</string>
+  <string id="360">شاشة التوقف</string>
+  <string id="361">R. عرض شرائح</string>
+  <string id="362">مستوى خفت شاشة التوقف</string>
+  <string id="363">ترتيب حسب: ملف</string>
+  <string id="364">-Dolby Digital (AC3) قدرة استقبال</string>
+  <string id="365">ترتيب حسب : الإسم</string>
+  <string id="366">ترتيب حسب : السنة</string>
+  <string id="367">ترتيب حسب: التصنيف</string>
+  <string id="368">IMDb</string>
+  <string id="369">العنوان </string>
+  <string id="370">:عواصف رعدية</string>
+  <string id="371">:جزئيا</string>
+  <string id="372">:غالبيا</string>
+  <string id="373">:مشمس</string>
+  <string id="374">:غائم</string>
+  <string id="375">:ثلج</string>
+  <string id="376">:ممطر</string>
+  <string id="377">:خفيفة</string>
+  <string id="378">صباحا</string>
+  <string id="379">مساءاً</string>
+  <string id="380">:زخات مطر</string>
+  <string id="381">:قليل</string>
+  <string id="382">:غيوم</string>
+  <string id="383">:رياح</string>
+  <string id="384">:قوي</string>
+  <string id="385">:عادل</string>
+  <string id="386">:صافي</string>
+  <string id="387">:غائم</string>
+  <string id="388">مبكر</string>
+  <string id="389">:ممطر</string>
+  <string id="390">:موجات</string>
+  <string id="391">الصغرى</string>
+  <string id="392">:متوسطة</string>
+  <string id="393">العظمى</string>
+  <string id="394">:ضباب</string>
+  <string id="395">:ضباب رقيق</string>
+  <string id="396">حدد موقع</string>
+  <string id="397">تحديث الوقت</string>
+  <string id="398">وحدات درجة الحرارة</string>
+  <string id="399">وحدات  السرعة</string>
+  <string id="400">الطقس</string>
+  <string id="401">درجة الحرارة</string>
+  <string id="402">:Feels like</string>
+  <string id="403">:UV index</string>
+  <string id="404">:رياح</string>
+  <string id="405">:نقطة ندى</string>
+  <string id="406">:رطوبة</string>
+  <string id="409">الافتراضية</string>
+  <string id="410">خدمة الوصول الى الطقس</string>
+  <string id="411">الحصول على طقس:</string>
+  <string id="412">تعذر الحصول على بيانات الطقس</string>
+  <string id="413">يدوي</string>
+  <string id="414">لاتوجد استعراضات لهذا الألبوم</string>
+  <string id="415">...تحميل المصغرة</string>
+  <string id="416">غير متاح</string>
+  <string id="417">عرض: رموز كبيرة</string>
+  <string id="418">الصغرى</string>
+  <string id="419">العظمى</string>
+  <string id="420">HDMI</string>
+  <string id="422">حذف معلومات الألبوم</string>
+  <string id="423">CD حذف معلومات</string>
+  <string id="424">اختر</string>
+  <string id="425">لا توجد معلومات الألبوم</string>
+  <string id="426">CD لا توجد معلومات</string>
+  <string id="427">القرص</string>
+  <string id="428">الصحيح CD/DVD إدراج</string>
+  <string id="429">:الرجاء إدراج القرص التالي</string>
+  <string id="430">DVD# :ترتيب بواسطة</string>
+  <string id="431">لاتوجد ذاكرة مؤقته</string>
+  <string id="432">إزالة الفيلم من المكتبة</string>
+  <string id="433">؟'%s' حقا إزالة</string>
+  <string id="434">%s في %i %s من</string>
+  <string id="437">القرص قابل للإزالة</string>
+  <string id="438">جاري فتح الملف</string>
+  <string id="439">ذاكرة تخزين مؤقته</string>
+  <string id="440">القرص الصلب</string>
+  <string id="441">UDF</string>
+  <string id="442">الشبكة المحلية</string>
+  <string id="443">الإنترنت</string>
+  <string id="444">فيديو</string>
+  <string id="445">صوت</string>
+  <string id="446">DVD</string>
+  <string id="447">وسائط تشغيل تلقائية</string>
+  <string id="448">LCD</string>
+  <string id="449">ممكن</string>
+  <string id="450">أعمدة </string>
+  <string id="451">عنوان الصف 1</string>
+  <string id="452">عنوان الصف 2</string>
+  <string id="453">عنوان الصف 3</string>
+  <string id="454">عنوان الصف 4</string>
+  <string id="455">الصفوف</string>
+  <string id="456">الوضع</string>
+  <string id="457">تبديل االعرض</string>
+  <string id="459">الترجمات</string>
+  <string id="460">تدفق الصوت</string>
+  <string id="461">[نشط]</string>
+  <string id="462">الترجمة</string>
+  <string id="463">الاضاءة الخلفية</string>
+  <string id="464">السطوع</string>
+  <string id="465">التباين</string>
+  <string id="466">غاما</string>
+  <string id="467">النوع</string>
+  <string id="468">تحريك الشريط لتغيير وضعية OSD</string>
+  <string id="469">وضعية OSD</string>
+  <string id="470">الاعتمادات</string>
+  <string id="471">Modchip</string>
+  <string id="474">معطلة</string>
+  <string id="475">موسيقى فقط</string>
+  <string id="476">الموسيقى والفيديو</string>
+  <string id="477">غير قادر على تحميل قائمة التشغيل</string>
+  <string id="478">OSD</string>
+  <string id="479">الخلفية واللغة</string>
+  <string id="480">المظهر</string>
+  <string id="481">خيارات الصوت</string>
+  <string id="482">XBMC حول</string>
+  <string id="485">حذف الألبوم </string>
+  <string id="486">إعادة</string>
+  <string id="487">إعادة مرة واحدة</string>
+  <string id="488">إعادة المجلد</string>
+  <string id="489">تشغيل الأغنية القادمة تلقائيا </string>
+  <string id="491">-- استخدام الرموز الكبيرة</string>
+  <string id="492">إعادة تحجيم VobSubs</string>
+  <string id="493">(!خيارات متقدمة - (للخبراء فقط</string>
+  <string id="494">Overall Audio Headroom (dB)</string>
+  <string id="495">إعادة تشكيل دقة عرض الفيديو</string>
+  <string id="496">المعايرة</string>
+  <string id="497">عرض ملحقات الملف</string>
+  <string id="498">ترتيب حسب: النوع</string>
+  <string id="499">غير قادر على اتصال خدمة البحث على الانترنت</string>
+  <string id="500">فشل تحميل معلومات الألبوم </string>
+  <string id="501">يبحث عن أسم الألبوم...</string>
+  <string id="502">فتح</string>
+  <string id="503">مشغول</string>
+  <string id="504">خالي</string>
+  <string id="505">تحميل معلومات الوسائط من الملفات...</string>
+  <string id="507">ترتيب حسب: الإستخدام</string>
+  <string id="510">تمكين التصور</string>
+  <string id="511">تمكين تغيير وضع الفيديو</string>
+  <string id="512">نافذة بدء التشغيل</string>
+  <string id="513">النافذة الرئيسية</string>
+  <string id="514">الإعدادات اليدوية</string>
+  <string id="515">النوع</string>
+  <string id="517">ألبومات  أجريت مؤخرا</string>
+  <string id="518">تشغيل</string>
+  <string id="519">تشغيل في..</string>
+  <string id="521">التجميعات</string>
+  <string id="522">إزالة مصدر</string>
+  <string id="523">تغيير الوسائط</string>
+  <string id="524">اختر قائمة التشغيل</string>
+  <string id="525">قائمة تشغيل جديدة...</string>
+  <string id="526">أضف الى قائمة التشغيل</string>
+  <string id="527">يدويا أضف إلى المكتبة </string>
+  <string id="528">أدخل عنوان</string>
+  <string id="529">خطأ: عنوان مكرر</string>
+  <string id="530">اختر النوع</string>
+  <string id="531">نوع جديد</string>
+  <string id="532">إضافة يدويا</string>
+  <string id="533">أدخل النوع</string>
+  <string id="534">عرض: %s</string>
+  <string id="535">قائمة</string>
+  <string id="536">رموز</string>
+  <string id="537">قائمة كبير</string>
+  <string id="538">رموز كبيرة</string>
+  <string id="539">واسع</string>
+  <string id="540">واسع كبيرة </string>
+  <string id="541">رموز الألبوم</string>
+  <string id="542">DVD رموز</string>
+  <string id="543">DVD</string>
+  <string id="544">معلومات الوسائط</string>
+  <string id="545">جهاز إخراج الصوت</string>
+  <string id="546">جهاز عبور الصوت</string>
+  <string id="547">لا سيرة ذاتية لهذا الفنان</string>
+  <string id="548">مزج صوت القنوات المتعددة الى ستيريو</string>
+  <string id="550">ترتيب حسب: %s</string>
+  <string id="551">الإسم</string>
+  <string id="552">التاريخ</string>
+  <string id="553">الحجم</string>
+  <string id="554">المسار</string>
+  <string id="555">الوقت</string>
+  <string id="556">العنوان</string>
+  <string id="557">الفنان</string>
+  <string id="558">الألبوم</string>
+  <string id="559">قائمة التشغيل</string>
+  <string id="560">المعرف</string>
+  <string id="561">ملف</string>
+  <string id="562">السنة</string>
+  <string id="563">التقييم</string>
+  <string id="564">النوع</string>
+  <string id="565">الاستخدام</string>
+  <string id="566">البوم الفنان</string>
+  <string id="567">عدد المرات التي أجريت</string>
+  <string id="568">أجريت مؤخراً</string>
+  <string id="569">تعليق</string>
+  <string id="570">تاريخ الإضافة</string>
+  <string id="571">الافتراضي</string>
+  <string id="572">ستوديو</string>
+  <string id="573">مسار</string>
+  <string id="574">البلد</string>
+  <string id="575">في المعالجة</string>
+  <string id="576">مرات أجريت</string>
+  <string id="580">اتجاه الفرز</string>
+  <string id="581">طريقة الفرز </string>
+  <string id="582">عرض الوضع</string>
+  <string id="583">تذكر العرض لمختلف المجلدات</string>
+  <string id="584">تصاعدي</string>
+  <string id="585">تنازلي</string>
+  <string id="586">تحرير قائمة التشغيل</string>
+  <string id="587">تصفية</string>
+  <string id="588">إلغاء وضع الطرف </string>
+  <string id="589">وضع الطرف</string>
+  <string id="590">عشوائي</string>
+  <string id="591">معطلة</string>
+  <string id="592">واحدة</string>
+  <string id="593">الكل</string>
+  <string id="594">معطلة</string>
+  <string id="595">الإعادة: معطلة</string>
+  <string id="596">إعادة: واحدة</string>
+  <string id="597">إعادة: الكل</string>
+  <string id="600">نسخ اسطوانة صوت</string>
+  <string id="601">متوسطة</string>
+  <string id="602">قياسي</string>
+  <string id="603">أقصى</string>
+  <string id="604">ثبات معدل البت </string>
+  <string id="605">ينسخ...</string>
+  <string id="607">إلى:</string>
+  <string id="608">لايمكن نسخ القرص أو المسار</string>
+  <string id="609">CDDARipPath لم يتم تعريف </string>
+  <string id="610">نسخ مسار الصوت</string>
+  <string id="611">إدخال رقم</string>
+  <string id="612">عينه/فئات</string>
+  <string id="613">عينة التردد</string>
+  <string id="620">قرص الصوت</string>
+  <string id="621">التشفير</string>
+  <string id="622">الجودة</string>
+  <string id="623">معدل بت</string>
+  <string id="624">تضمين رقم المسار</string>
+  <string id="625">كل الأغاني من</string>
+  <string id="629">وضع العرض</string>
+  <string id="630">عادي</string>
+  <string id="631">تكبير</string>
+  <string id="632">4:3 امتداد</string>
+  <string id="633">14:09 امتداد</string>
+  <string id="634">امتداد 16:09</string>
+  <string id="635">الحجم الأصلي</string>
+  <string id="636">فريد</string>
+  <string id="637">إعادة العائدات</string>
+  <string id="638">إعادة العائدات للكمية المتناسبة</string>
+  <string id="639">استخدام مستويات المسار</string>
+  <string id="640">استخدام مستويات الألبوم</string>
+  <string id="641">مستوى ما قبل مكبر للصوت -- زيادة عائدات ملفات اللحن</string>
+  <string id="642">مستوى ما قبل مكبر للصوت -- لا إعادة لملفات العائدات</string>
+  <string id="643">منع سرعة زيادة عوائد ملفات اللحن</string>
+  <string id="644">قص الأشرطة السوداء</string>
+  <string id="645">يحتاج إلى فتح ملف كبير. مواصلة؟</string>
+  <string id="646">إزالة من المكتبة</string>
+  <string id="647">تصدير مكتبة الفيديو...</string>
+  <string id="648">استيراد مكتبة الفيديو...</string>
+  <string id="649">استيراد</string>
+  <string id="650">تصدير</string>
+  <string id="651">تصفح للمكتبة</string>
+  <string id="652">سنوات</string>
+  <string id="653">تحديث المكتبة</string>
+  <string id="654">تصحيح عرض معلومات</string>
+  <string id="655">تصفح لملف تنفيذي</string>
+  <string id="656">تصفح لقائمة التشغيل</string>
+  <string id="657">تصفح للملفات</string>
+  <string id="658">معلومات الأغنية</string>
+  <string id="659">امتداد لاخطي</string>
+  <string id="660">مقدار التكبير</string>
+  <string id="661">اختار ملف التصدير</string>
+  <string id="662">هذا الملف لم يعد متوفرا</string>
+  <string id="663">هل ترغب في إزالته من المكتبة؟</string>
+  <string id="664">التصفح النصي</string>
+  <string id="665">مستوى الضغط</string>
+  <string id="700">تنظيف قاعدة البيانات</string>
+  <string id="701">حذف الأغاني القديمة من المكتبة</string>
+  <string id="702">تم فحص هذا المسار من قبل</string>
+  <string id="705">الشبكة</string>
+  <string id="706">- الخادم</string>
+  <string id="708">استخدام وكيل HTTP للوصول الإنترنت</string>
+  <string id="711">Internet Protocol (IP)</string>
+  <string id="712">منفذ غير صحيح. يجب أن تكون القيمة بين 1 و 65535.</string>
+  <string id="713">وكيل HTTP</string>
+  <string id="715">إحالة</string>
+  <string id="716">التلقائي (DHCP)</string>
+  <string id="717">يدوي (ثابت)</string>
+  <string id="719">عنوان IP</string>
+  <string id="720">قناع الشبكة</string>
+  <string id="721">البوابة الإفتراضية</string>
+  <string id="722">خادم DNS</string>
+  <string id="723">حفظ وإعادة</string>
+  <string id="724">عنوان خاطئ. يجب أن يكون في AAA.BBB.CCC.DDD</string>
+  <string id="725">مع الأرقام من 0 إلى 255.</string>
+  <string id="726">لم يتم حفظ التغييرات. مواصلة بدون حفظ؟</string>
+  <string id="727">خادم ويب</string>
+  <string id="728">FTP خادم</string>
+  <string id="730">- المنفذ</string>
+  <string id="732">حفظ وتطبيق</string>
+  <string id="733">- كلمة المرور</string>
+  <string id="734">لا مرور</string>
+  <string id="735">-وضع الأحرف</string>
+  <string id="736">- النمط</string>
+  <string id="737">- اللون</string>
+  <string id="738">عادي</string>
+  <string id="739">عريض</string>
+  <string id="740">مائلة</string>
+  <string id="741">عريض مائلة</string>
+  <string id="742">أبيض</string>
+  <string id="743">أصفر</string>
+  <string id="744">ملفات</string>
+  <string id="745">لاتوجد معلومات مفحوصة لهذا العرض</string>
+  <string id="746">الرجاء إيقاف وضع المكتبة</string>
+  <string id="747">خطأ في تحميل الصورة</string>
+  <string id="748">تعديل مسار</string>
+  <string id="749">صورة مرآتية</string>
+  <string id="750">هل أنت متأكد؟</string>
+  <string id="751">إزالة مصدر</string>
+  <string id="754">إضافة رابط برنامج</string>
+  <string id="755">تحرير مسار برنامج</string>
+  <string id="756">تحرير اسم برنامج </string>
+  <string id="757">تحرير عمق مسار</string>
+  <string id="759">عرض: قائمة كبيرة</string>
+  <string id="760">أصفر</string>
+  <string id="761">أبيض</string>
+  <string id="762">أزرق</string>
+  <string id="763">أخضر ساطع</string>
+  <string id="764">أصفر أخضر</string>
+  <string id="765">أزرق</string>
+  <string id="766">رمادي فاتح</string>
+  <string id="767">رمادي</string>
+  <string id="770">خطأ %i: لاتوجد مشاركة</string>
+  <string id="772">مخرج الصوت</string>
+  <string id="773">يبحث</string>
+  <string id="774">مجلد عرض الشرائح</string>
+  <string id="775">واجهة شبكة الاتصال</string>
+  <string id="776">- اسم الشبكة اللاسلكية (ESSID)</string>
+  <string id="777">- كلمة مرور الشبكة اللاسلكية</string>
+  <string id="778">- حماية الشبكة اللاسلكية</string>
+  <string id="779">حفظ إعدادات واجهة الشبكة</string>
+  <string id="780">لاتشفير</string>
+  <string id="784">تطبيق إعدادات واجهة الشبكة. يرجى الانتظار.</string>
+  <string id="785">إعادة تشغيل واجهة الشبكة بنجاح</string>
+  <string id="786">لم يتم تشغيل واجهة الشبكة بنجاح</string>
+  <string id="787">الواجهة معطلة</string>
+  <string id="788">واجهة الشبكة معطلة بنجاح</string>
+  <string id="789">اسم الشبكة اللاسلكية (ESSID)</string>
+  <string id="791">سماح البرامج على هذا النظام للتحكم على XBMC</string>
+  <string id="792">المنفذ</string>
+  <string id="793">نطاق المنفذ</string>
+  <string id="794">سماح برامج على أنظمة أخرى للتحكم على XBMC</string>
+  <string id="797">الحد الأقصى لعدد من العملاء</string>
+  <string id="798">الوصول إلى الإنترنت</string>
+  <string id="850">رقم المنفذ  المدخل غير صالح</string>
+  <string id="851">نطاق المنفذ الصالح هو 1-65535</string>
+  <string id="852">نطاق المنفذ السليم هو 1024-65535</string>
+  <string id="998">إضافة موسيقى...</string>
+  <string id="999">إضافة فيديو...</string>
+  <string id="1000">معاينة</string>
+  <string id="1001">غير قادر على الاتصال</string>
+  <string id="1002">XBMC فشل في الاتصال إلى موقع الشبكة.</string>
+  <string id="1003">قد يكون هذا بسبب عدم توصيل الشبكة.</string>
+  <string id="1004">هل تريد إضافته على أي حال؟</string>
+  <string id="1006">IP عنوان</string>
+  <string id="1007">إضافة موقع شبكة</string>
+  <string id="1008">بروتوكول</string>
+  <string id="1009">عنوان الخدمة</string>
+  <string id="1010">اسم الخدمة</string>
+  <string id="1011">مسار بعيد</string>
+  <string id="1012">مجلد مشترك</string>
+  <string id="1013">المنفذ</string>
+  <string id="1014">اسم المستخدم</string>
+  <string id="1015">تصفح لخادم الشبكة</string>
+  <string id="1016">أدخل عنوان الشبكة من الخادم</string>
+  <string id="1017">أدخل المسار على الخادم</string>
+  <string id="1018">أدخل رقم المنفذ</string>
+  <string id="1019">أدخل اسم المستخدم</string>
+  <string id="1020">%s إضافة مصدر</string>
+  <string id="1021">أدخل المسار أو تصفح موقع الوسائط.</string>
+  <string id="1022">أدخل اسم لمصدر الوسائط.</string>
+  <string id="1023">تصفح لمشاركة جديد</string>
+  <string id="1024">تصفح</string>
+  <string id="1025">لايتمكن من استرجاع معلومات الدليل</string>
+  <string id="1026">إضافة مصدر...</string>
+  <string id="1027">تحرير مصدر</string>
+  <string id="1028">%s تحرير مصدر</string>
+  <string id="1029">أدخل علامة جديد</string>
+  <string id="1030">تصفح للصور</string>
+  <string id="1031">تصفح لمجلد الصور</string>
+  <string id="1032">إضافة موقع شبكة...</string>
+  <string id="1033">تصفح لملف</string>
+  <string id="1034">قائمة ثانوية</string>
+  <string id="1035">تمكين أزرار القائمة الثانوية</string>
+  <string id="1036">المفضلات</string>
+  <string id="1037">ملحقات الفيديو</string>
+  <string id="1038">ملحقات الموسيقى</string>
+  <string id="1039">ملحقات الصور</string>
+  <string id="1040">تحميل الدليل</string>
+  <string id="1041">استرجاع %i عناصر</string>
+  <string id="1042">استرجاع %i من %i عناصر</string>
+  <string id="1043">ملحقات البرامج</string>
+  <string id="1044">تعيين صورة مصغرة للملحق</string>
+  <string id="1045">إعدادت الملحق</string>
+  <string id="1046">نقاط الوصول</string>
+  <string id="1047">أخرى...</string>
+  <string id="1048">- اسم المستخدم</string>
+  <string id="1049">إعدادت النصية</string>
+  <string id="1050">الأفراد</string>
+  <string id="1051">أدخل عنوان ويب</string>
+  <string id="1200">SMB عميل</string>
+  <string id="1202">SMB فريق العمل</string>
+  <string id="1203">SMB اسم المستخدم</string>
+  <string id="1204">SMB كلمة السر</string>
+  <string id="1207">SMB WINS خادم</string>
+  <string id="1208">SMB مشاركة</string>
+  <string id="1210">إزالة</string>
+  <string id="1211">موسيقى</string>
+  <string id="1212">فيديو</string>
+  <string id="1213">صور</string>
+  <string id="1214">ملفات</string>
+  <string id="1215">الموسيقى والفيديو</string>
+  <string id="1216">الموسيقى والصور</string>
+  <string id="1217">الموسيقى والملفات</string>
+  <string id="1218">فيديو وصور</string>
+  <string id="1219">ملفات الفيديو</string>
+  <string id="1220">الصور والملفات</string>
+  <string id="1221">الموسيقى والفيديو والصور</string>
+  <string id="1222">الموسيقى والفيديو والصور والملفات</string>
+  <string id="1223">معطلة</string>
+  <string id="1226">الملفات والموسيقى والفيديو</string>
+  <string id="1227">الملفات والصور والموسيقى</string>
+  <string id="1228">الملفات والصور والفيديو</string>
+  <string id="1229">الموسيقى والبرامج</string>
+  <string id="1230">الفيديو والبرامج</string>
+  <string id="1231">الصور والبرامج</string>
+  <string id="1232">الموسيقى والفيديو والصور والبرامج</string>
+  <string id="1233">البرامج والفيديو والموسيقى</string>
+  <string id="1234">البرامج والصور والموسيقى</string>
+  <string id="1235">البرامج والصور والفيديو</string>
+  <string id="1250">تحديد الهوية تلقائي</string>
+  <string id="1251">الكشف التلقائي عن نظام</string>
+  <string id="1252">كنية</string>
+  <string id="1254">طلب للاتصال</string>
+  <string id="1255">FTP إرسال اسم المستخدم وكلمة السر الخاصة للـ</string>
+  <string id="1256">Ping تأخير</string>
+  <string id="1257">هل ترغب في الاتصال إلى نظام الكشف التلقائي؟</string>
+  <string id="1260">أعلن هذه الخدمات لأنظمة أخرى عبر Zeroconf</string>
+  <string id="1271">اسم الجهاز</string>
+  <string id="1272">-- استخدام حماية كلمة المرور</string>
+  <string id="1300">جهاز صوت مخصص</string>
+  <string id="1301">جهاز عبور مخصص</string>
+  <string id="1396">ينجرف</string>
+  <string id="1397">و</string>
+  <string id="1398">يتجمد</string>
+  <string id="1399">متأخر</string>
+  <string id="1400">معزولة</string>
+  <string id="1401">رعد ومطر</string>
+  <string id="1402">رعد</string>
+  <string id="1403">شمس</string>
+  <string id="1404">كثيفة</string>
+  <string id="1405">في</string>
+  <string id="1406">في</string>
+  <string id="1407">كثب</string>
+  <string id="1408">جليد</string>
+  <string id="1409">بلورات</string>
+  <string id="1410">هدوء</string>
+  <string id="1411">مع</string>
+  <string id="1412">عاصفة</string>
+  <string id="1413">رذاذ</string>
+  <string id="1414">عواصف رعدية</string>
+  <string id="1415">رذاذ</string>
+  <string id="1416">ضباب</string>
+  <string id="1421">عالية جدا</string>
+  <string id="1422">عاصفة</string>
+  <string id="1423">ضباب</string>
+  <string id="1450">مراقبة دخول في وضع السكون عند الخمول</string>
+  <string id="2050">وقت التشغيل:</string>
+  <string id="2100">فشل النصية! %s</string>
+  <string id="2101">بحاجة إلى نسخة جديدة - انظر السجل</string>
+  <string id="4501">تشغيل LCD / VFD</string>
+  <string id="10000">الرئيسية</string>
+  <string id="10001">برامج</string>
+  <string id="10002">صور</string>
+  <string id="10003">إدارة الملفات</string>
+  <string id="10004">الإعدادات</string>
+  <string id="10005">موسيقى</string>
+  <string id="10006">فيديو</string>
+  <string id="10007">معلومات النظام</string>
+  <string id="10008">العامة - الإعدادات</string>
+  <string id="10009">الشاشة - إعدادات</string>
+  <string id="10010">معايرة واجهة المستخدم الرسومية - المظهر - إعدادات </string>
+  <string id="10011">معايرة الشاشة - الفيديو - إعدادات </string>
+  <string id="10012">الصور - إعدادات</string>
+  <string id="10013">البرامج - إعدادات</string>
+  <string id="10014">الطقس - إعدادات</string>
+  <string id="10015">الموسيقى - إعدادات</string>
+  <string id="10016">النظام - إعدادات</string>
+  <string id="10017">الفيديو - إعدادات</string>
+  <string id="10018">الشبكة - إعدادات</string>
+  <string id="10019">المظهر - إعدادات</string>
+  <string id="10020">النصية</string>
+  <string id="10021">متصفح ويب</string>
+  <string id="10028">فيديو / قائمة التشغيل</string>
+  <string id="10034">إعدادات ملف المستخدم -</string>
+  <string id="10100">حوار نعم/لا</string>
+  <string id="10101">تقدم الحوار</string>
+  <string id="10210">يبحث عن الترجمات...</string>
+  <string id="10211">يبحث عن أو تخزين مؤقت للترجمة...</string>
+  <string id="10212">يلغي</string>
+  <string id="10213">تخزين المعلومات</string>
+  <string id="10214">يفتح البث </string>
+  <string id="10500">موسيقى / قائمة التشغيل</string>
+  <string id="10501">الموسيقى / ملفات</string>
+  <string id="10502">الموسيقى / الدليل</string>
+  <string id="10503">محرر قائمة التشغيل</string>
+  <string id="10504">أفضل 100 أغنية</string>
+  <string id="10505">أفضل 100 البوم</string>
+  <string id="10506">برامج</string>
+  <string id="10507">إعدادات</string>
+  <string id="10508">حالة الطقس</string>
+  <string id="10509">ألعاب الشبكة</string>
+  <string id="10510">ملحقات</string>
+  <string id="10511">معلومات النظام</string>
+  <string id="10516">موسيقى -- مكتبة</string>
+  <string id="10517">التشغيل الآن -- موسيقى</string>
+  <string id="10522">التشغيل الآن -- فيديو</string>
+  <string id="10523">معلومات الألبوم </string>
+  <string id="10524">معلومات الفيلم</string>
+  <string id="12000">تحديد الحوار</string>
+  <string id="12001">الموسيقى/معلومات</string>
+  <string id="12002">حوار موافق</string>
+  <string id="12003">الفيديو/معلومات</string>
+  <string id="12004">النصية / معلومات</string>
+  <string id="12005"> وضع الفيديو في ملء الشاشة</string>
+  <string id="12006">تصور الصوت</string>
+  <string id="12008">كومة من الملفات</string>
+  <string id="12009">إعادة مؤشر...</string>
+  <string id="12010">عودة إلى الموسيقى</string>
+  <string id="12011">عودة إلى الفيديو</string>
+  <string id="12021">ابدأ من البداية</string>
+  <string id="12022">استئناف من %s</string>
+  <string id="12310">0</string>
+  <string id="12311">1</string>
+  <string id="12312">2</string>
+  <string id="12313">3</string>
+  <string id="12314">4</string>
+  <string id="12315">5</string>
+  <string id="12316">6</string>
+  <string id="12317">7</string>
+  <string id="12318">8</string>
+  <string id="12319">9</string>
+  <string id="12320">c</string>
+  <string id="12321">موافق</string>
+  <string id="12322">*</string>
+  <string id="12325">مقفل! أدخل كلمة الكود...</string>
+  <string id="12326">أدخل كلمة المرور</string>
+  <string id="12327">أدخل الكود الرئيسي</string>
+  <string id="12328">أدخل رمز القفل</string>
+  <string id="12329">أو اضغط C للإلغاء</string>
+  <string id="12330">أدخل أزرار السرد وانقر</string>
+  <string id="12331">اضغط موافق, أو الخلف للإلغاء</string>
+  <string id="12332">ضع قفل</string>
+  <string id="12333">القفل</string>
+  <string id="12334">إعادة تعيين القفل</string>
+  <string id="12335">إزالة القفل</string>
+  <string id="12337">كلمة سر رقمية</string>
+  <string id="12338">تحكم تركيبة الزر</string>
+  <string id="12339">كلمة السر كاملة نصيا</string>
+  <string id="12340">إدخال كلمة السر الجديدة</string>
+  <string id="12341">إدخال كلمة المرور مرة أخرى</string>
+  <string id="12342">كلمة مرور خاطئة ،</string>
+  <string id="12343">غادر المحاولة</string>
+  <string id="12344">كلمة المرور غير متطابقة.</string>
+  <string id="12345">الدخول محظور</string>
+  <string id="12346">فشل العديد من محاولات تسجيل الدخول.</string>
+  <string id="12347">النظام سوف يغلق الان.</string>
+  <string id="12348">العنصر مقفل</string>
+  <string id="12353">تنشيط قفل</string>
+  <string id="12356">تغيير قفل</string>
+  <string id="12357">قفل مصدر</string>
+  <string id="12358">حقل كلمة المرور فارغة. الرجاء المحاولة مرة أخرى.</string>
+  <string id="12360">الإغلاق الرئيسي</string>
+  <string id="12362">إيقاف تشغيل النظام إذا تجاوز القفل الرئيسي المحاولات</string>
+  <string id="12367">الرمز الرئيسي غير متطابق</string>
+  <string id="12368">الرجاء إدخال رمز رئيسي صحيح</string>
+  <string id="12373">إعدادت إدارة الملف</string>
+  <string id="12376">تعيين افتراضيا على جميع الأفلام</string>
+  <string id="12377">هذا سوف تعيين أية قيم تم حفظها سابقا</string>
+  <string id="12378">مقدار الوقت لعرض كل صورة</string>
+  <string id="12379">استخدام بان وتأثيرات التكبير</string>
+  <string id="12383">12 ساعة</string>
+  <string id="12384">24 ساعة على مدار الساعة</string>
+  <string id="12385">اليوم / الشهر</string>
+  <string id="12386">شهر / يوم</string>
+  <string id="12390">وقت النظام النشط</string>
+  <string id="12391">دقائق</string>
+  <string id="12392">ساعات</string>
+  <string id="12393">أيام</string>
+  <string id="12394">النشاط الكلي</string>
+  <string id="12395">مستوى البطارية</string>
+  <string id="12600">الطقس </string>
+  <string id="12900">شاشة</string>
+  <string id="12901">شاشة كاملة OSD</string>
+  <string id="13000">النظام</string>
+  <string id="13001">Hardisk مزج على الفور</string>
+  <string id="13002">فيديو فقط</string>
+  <string id="13003">- تأخير </string>
+  <string id="13004">- مدة الحد الأدنى للملف</string>
+  <string id="13005">إغلاق</string>
+  <string id="13008">عملية الإغلاق</string>
+  <string id="13009">اخرج</string>
+  <string id="13010">إسبات</string>
+  <string id="13011">أجل</string>
+  <string id="13012">إنهاء</string>
+  <string id="13013">إعادة تشغيل</string>
+  <string id="13014">تصغير</string>
+  <string id="13015">زر إيقاف العمل</string>
+  <string id="13016">إيقاف تشغيل النظام ​​</string>
+  <string id="13020">هل جلسة العمل الأخرى نشطة, ربما خلال ssh?</string>
+  <string id="13021"> الأقراص المحمولة متصلة</string>
+  <string id="13022">ليست آمنة لإزالة جهاز محمول</string>
+  <string id="13023">نجحت في إزالة الجهاز </string>
+  <string id="13024">جويستيك متصلة</string>
+  <string id="13025">جويستيك غير متصلة</string>
+  <string id="13050">يعمل على البطارية المنخفضة</string>
+  <string id="13100">تصفية Flicker</string>
+  <string id="13101">اسمح للسواقه الاختيار (يتطلب إعادة تشغيل )</string>
+  <string id="13106">تزامن رأسي فارغ</string>
+  <string id="13107">ممكن خلال تشغيل الفيديو</string>
+  <string id="13108">ممكن دائما</string>
+  <string id="13109">اختبار وتطبيق الدقة</string>
+  <string id="13110">حفظ الدقة؟</string>
+  <string id="13111">هل ترغب في الحفاظ على هذه الدقة؟</string>
+  <string id="13113">معطلة</string>
+  <string id="13114">SD ممكن لمحتوى</string>
+  <string id="13115">دائما ممكن</string>
+  <string id="13116">طريقة التوسيع</string>
+  <string id="13130">أفرغ العروض الاخرى</string>
+  <string id="13131">معطلة </string>
+  <string id="13140">الكشف عن اتصالات نشطة!</string>
+  <string id="13141">إذا استمر ، قد تكون غير قادر على التحكم في XBMC المزيد</string>
+  <string id="13142">؟EventServer هل أنت متأكد تريد إيقاف</string>
+  <string id="13144">تغير نمط أبل البعيد؟</string>
+  <string id="13159">قناع الشبكة</string>
+  <string id="13160">DNS</string>
+  <string id="13161">Primary DNS</string>
+  <string id="13162">فشلت التهيئة</string>
+  <string id="13170">أبداً</string>
+  <string id="13171">فوراٌ</string>
+  <string id="13172">بعد %i ثواني</string>
+  <string id="13173">تاريخ تثبيت القرص القلب:</string>
+  <string id="13200">الملفات الشخصية</string>
+  <string id="13201">حذف ملف شخصي '%s'?</string>
+  <string id="13204">آخر ملف شخصي تم تحميله:</string>
+  <string id="13205">غير معروف</string>
+  <string id="13206">الكتابة فوق</string>
+  <string id="13208">المنبه</string>
+  <string id="13209">فاصل المنبه الزمني (بالدقائق)</string>
+  <string id="13210">بدأ, المنبه في %im</string>
+  <string id="13211">المنبه!</string>
+  <string id="13212">ألغي مع %im&is متبقيه</string>
+  <string id="13213">%2.0fm</string>
+  <string id="13214">%2.0fs</string>
+  <string id="13249">بحث الترجمات في RARs</string>
+  <string id="13250">تصفح الترجمات...</string>
+  <string id="13251">تحريك عنصر</string>
+  <string id="13252">تحريك عنصر هنا</string>
+  <string id="13253">التراجع عن نقل</string>
+  <string id="13270">الأجهزة:</string>
+  <string id="13271">سرعة وحدة المعالجة المركزية:</string>
+  <string id="13274">متصلة بالشبكة بدون إعدادات DNS</string>
+  <string id="13275">القرص الثابت</string>
+  <string id="13276">DVD - ROM</string>
+  <string id="13277">التخزين</string>
+  <string id="13278">الافتراضية</string>
+  <string id="13279">الشبكة</string>
+  <string id="13280">الفيديو</string>
+  <string id="13281">الأجهزة</string>
+  <string id="13283">نظام التشغيل: </string>
+  <string id="13284">:سرعة وحدة المعالجة المركزية</string>
+  <string id="13286">:ترميز الفيديو</string>
+  <string id="13287"> دقة الشاشة:</string>
+  <string id="13292">A/V كيبل</string>
+  <string id="13294">DVD منطقة:</string>
+  <string id="13295">الانترنت:</string>
+  <string id="13296">متصل </string>
+  <string id="13297">غير متصل. تحقق من إعدادات الشبكة. </string>
+  <string id="13299">درجة الحرارة المستهدفة</string>
+  <string id="13300">:سرعة المروحة</string>
+  <string id="13301">التحكم في درجة الحرارة تلقائيا</string>
+  <string id="13302">السيطرة على سرعة المروحة</string>
+  <string id="13303">الخطوط</string>
+  <string id="13304">مكن جعل الأحرف</string>
+  <string id="13305">RSS إظهار أخبار</string>
+  <string id="13306">عرض عناصر المجلد الأصلي</string>
+  <string id="13307">إخفاء أرقام المسار </string>
+  <string id="13308">هل تريد إعادة تشغيل النظام الخاص بك</string>
+  <string id="13309">بدلا من مجرد XBMC?</string>
+  <string id="13310">تأثير التكبير</string>
+  <string id="13311">الأثر المتوقع</string>
+  <string id="13312">تخفيض الخطوط سوداء</string>
+  <string id="13313">إعادة تشغيل</string>
+  <string id="13314">التداخل في الانتقال بين الأغاني</string>
+  <string id="13315">تجديد المصغرات</string>
+  <string id="13316">تكرير المصغرات</string>
+  <string id="13317">مشاهدة صور العرض</string>
+  <string id="13318">تكرير المصغرات</string>
+  <string id="13319">عشوائي</string>
+  <string id="13320">ستيريو</string>
+  <string id="13321">اليسار  فقط</string>
+  <string id="13322">اليمين فقط</string>
+  <string id="13323">تمكين دعم الكاريوكي</string>
+  <string id="13324">شفافية الخلفية</string>
+  <string id="13325">شفافية المقدمة</string>
+  <string id="13326">تأخير A/V</string>
+  <string id="13327">كاريوكي</string>
+  <string id="13328">%s لم يتم العثور على.</string>
+  <string id="13329">خطأ في فتح %s</string>
+  <string id="13330"> غير قادر على تحميل %s</string>
+  <string id="13331">خطأ : الذاكرة ممتلئة</string>
+  <string id="13332">تحريك لأعلى</string>
+  <string id="13333">تحريك لأسفل</string>
+  <string id="13334">تحرير العلامة</string>
+  <string id="13335">تعيين كافتراضي</string>
+  <string id="13336">إزالة زر</string>
+  <string id="13340">دون تغيير</string>
+  <string id="13341">الخضراء</string>
+  <string id="13342">البرتقالي</string>
+  <string id="13343">الحمراء</string>
+  <string id="13344">متغير</string>
+  <string id="13345">تبديل ضوء الصمام على القراءة</string>
+  <string id="13346">معلومات الفيلم</string>
+  <string id="13347">انتظار عنصر</string>
+  <string id="13348">تصفح  نوع الفيلم...</string>
+  <string id="13349">تفحص محتوى جديد</string>
+  <string id="13350">يعرض الان...</string>
+  <string id="13351">معلومات الألبوم</string>
+  <string id="13352">فحص العناصر الى المكتبة</string>
+  <string id="13353">إيقاف التفحص</string>
+  <string id="13354">طريقة التقديم</string>
+  <string id="13355">مضلل بكسل ذات جودة منخفضه </string>
+  <string id="13356">تراكيب الأجهزة</string>
+  <string id="13357">مضلل بكسل  ذات جودة عالية</string>
+  <string id="13358">تشغيل عنصر</string>
+  <string id="13359">تعيين مصغرات للفنان</string>
+  <string id="13360">إنشاء مصغرات الصور تلقائياً</string>
+  <string id="13361">تمكين صوت</string>
+  <string id="13375">تمكين جهاز</string>
+  <string id="13376">مقدار الصوت</string>
+  <string id="13377">وضع العرض الافتراضي</string>
+  <string id="13378">السطوع الافتراضي</string>
+  <string id="13379">التباين الافتراضي</string>
+  <string id="13380">غاما الافتراضي</string>
+  <string id="13381">استئناف الفيديو</string>
+  <string id="13382">قناع الصوت - منفذ 1</string>
+  <string id="13383">قناع الصوت - منفذ 2</string>
+  <string id="13384">قناع الصوت - منفذ 3</string>
+  <string id="13385">قناع الصوت - منفذ 4</string>
+  <string id="13386">استخدام الوقت على أساس البحث</string>
+  <string id="13387">تنسيق أسماء المسار - يمين</string>
+  <string id="13388">مسبق</string>
+  <string id="13389">لا توجد قيم مسبقة متاحة لهذا التصور</string>
+  <string id="13390">لا توجد إعدادات متاحة لهذا التصور</string>
+  <string id="13391">إخراج/تحميل</string>
+  <string id="13392">استخدام التصور في حالة تشغيل الصوت</string>
+  <string id="13393">حساب الحجم</string>
+  <string id="13394">حساب حجم المجلد</string>
+  <string id="13395">إعدادات الفيديو</string>
+  <string id="13396">إعدادات الصوت والترجمة</string>
+  <string id="13397">تمكين الترجمات</string>
+  <string id="13398">الاختصارات</string>
+  <string id="13399">تجاهل المقالات عند الفرز ("The")</string>
+  <string id="13400"> التداخل بين الأغاني في الألبوم نفسه</string>
+  <string id="13401">%s تصفح لـ</string>
+  <string id="13402">إظهار موضع المسار</string>
+  <string id="13403">إزالة الافتراضيات</string>
+  <string id="13404">استئناف</string>
+  <string id="13405">احصل عل مصغرة</string>
+  <string id="13406">معلومات الصورة</string>
+  <string id="13408">(IMDB تصنيف المستخدم)</string>
+  <string id="13409">أفضل 250</string>
+  <string id="13410">السماع إلى LAST.FM</string>
+  <string id="13411">سرعة المروحة الدنيا</string>
+  <string id="13412">شغل من هنا</string>
+  <string id="13413">تحميل</string>
+  <string id="13414">يشمل مجموعات الفنانين فقط</string>
+  <string id="13415">طريقة التقديم</string>
+  <string id="13416">كشف تلقائيا</string>
+  <string id="13419">برنامج</string>
+  <string id="13420">إزالة بأمان</string>
+  <string id="13422">ابدأ عرض شرائح من هنا</string>
+  <string id="13423">تذكر هذا المسار</string>
+  <string id="13425"> تمكين تسارع (VDPAU)</string>
+  <string id="13426">تمكين تسارع (VAAPI)</string>
+  <string id="13427">تمكين تسارع (DXVA2)</string>
+  <string id="13428">تمكين تسارع (CrystalHD)</string>
+  <string id="13429">تمكين تسارع (VDADecoder)</string>
+  <string id="13430">تمكين تسارع (OpenMax)</string>
+  <string id="13432">تمكين تسارع (VideoToolbox)</string>
+  <string id="13500">تزامن أسلوب تشغيل الشاشة</string>
+  <string id="13501">ساعة الصوت</string>
+  <string id="13506">منخفض (سريع)</string>
+  <string id="13507">متوسط</string>
+  <string id="13508">مرتفع</string>
+  <string id="13509">مرتفع جداً (slow!)</string>
+  <string id="13510"> مزامنة التشغيل إلى الشاشة </string>
+  <string id="13550">وقف عند تغيير معدل التحديث</string>
+  <string id="13551">معطلة</string>
+  <string id="13552">%.if ثانية</string>
+  <string id="13553">%.if ثواني</string>
+  <string id="13600">Apple ريموت</string>
+  <string id="13602">تمكين تشغيل XBMC بواسطة الريموت</string>
+  <string id="13610">معطلة</string>
+  <string id="13611">قياسي</string>
+  <string id="13612">ريموت شامل</string>
+  <string id="13613">ريموت متعدد (متوافق)</string>
+  <string id="13620">خطأ ريموت أبل</string>
+  <string id="14000">مكدس</string>
+  <string id="14001">غير مكدس</string>
+  <string id="14003">تحميل ملف قائمة التشغيل...</string>
+  <string id="14004">تحميل قائمة البث...</string>
+  <string id="14005">تحليل قائمة البث...</string>
+  <string id="14006">فشل تحميل قائمة البث</string>
+  <string id="14007">فشل تحميل ملف قائمة التشغيل</string>
+  <string id="14009">دليل الألعاب</string>
+  <string id="14010">تنقل آلي للمصغرات استنادا على</string>
+  <string id="14011">تمكين التنقل الى عرض المصغرات تلقائيا </string>
+  <string id="14012">- استخدام رموز كبيرة</string>
+  <string id="14013">- تغيير استنادا على</string>
+  <string id="14014">- في المئة</string>
+  <string id="14015">لا توجد ملفات وعلى الأقل صورة مصغرة واحدة</string>
+  <string id="14016">​​على الأقل ملف واحد وصورة مصغرة</string>
+  <string id="14017">نسبة المصغرات</string>
+  <string id="14018">عرض الخيارات</string>
+  <string id="14019">تغيير منطقة الرمز 1</string>
+  <string id="14020">تغيير منطقة الرمز 2</string>
+  <string id="14021">تتغيير منطقة الرمز 3</string>
+  <string id="14022">المكتبة</string>
+  <string id="14023">لا يوجد تلفزيون</string>
+  <string id="14024">أدخل أقرب مدينة كبيرة </string>
+  <string id="14025">التخزين المؤقت للفيديو/الصوت/دي في دي - القرص الصلب</string>
+  <string id="14026">التخزين المؤقت للفيديو - DVD-ROM</string>
+  <string id="14027">- الشبكة المحلية</string>
+  <string id="14028">- الإنترنت</string>
+  <string id="14030">التخزين المؤقت للصوت - DVD-ROM </string>
+  <string id="14031">- الشبكة المحلية</string>
+  <string id="14032">- الإنترنت</string>
+  <string id="14034">DVD التخزين المؤقت لـ - DVD-ROM</string>
+  <string id="14035">- الشبكة المحلية</string>
+  <string id="14036">الخدمات</string>
+  <string id="14038">تم ضبط إعدادات الشبكة</string>
+  <string id="14039">XBMC يتطلب إعادة تشغيل لتغيير</string>
+  <string id="14040">ضبط الشبكة. هل ترغب في إعادة التشغيل الآن؟</string>
+  <string id="14041">نطاق الاتصال بالانترنت محدود</string>
+  <string id="14043">- إغلاق أثناء التشغيل</string>
+  <string id="14044">%i دقيقة</string>
+  <string id="14045">%i ثانية</string>
+  <string id="14046">%i ms</string>
+  <string id="14047">%i %%</string>
+  <string id="14048">%i kbps</string>
+  <string id="14049">%i kb</string>
+  <string id="14050">%i.0 dB</string>
+  <string id="14051">تهيئة الوقت</string>
+  <string id="14052">تهيئة التاريخ</string>
+  <string id="14053">فلاتر واجهة المستخدم الرسومية</string>
+  <string id="14055">استخدام فحص الخلفية</string>
+  <string id="14056">إيقاف الفحص</string>
+  <string id="14057">غير ممكن أثناء الفحص على معلومات الوسائط</string>
+  <string id="14058">تأثير طبعة الفلم</string>
+  <string id="14059">البحث عن المصغرات في المشاركات البعيدة</string>
+  <string id="14060">التخزين المؤقت لأنواع غير معروفة - الانترنت</string>
+  <string id="14061">التلقائية</string>
+  <string id="14062">أدخل اسم المستخدم لـ</string>
+  <string id="14063">التاريخ والوقت</string>
+  <string id="14064">تعيين التاريخ</string>
+  <string id="14065">تعيين الوقت</string>
+  <string id="14066">HH : MM تنسيق دخول الوقت 24 ساعة</string>
+  <string id="14067">DD / MM / YYYY تنسيق دخول التاريخ</string>
+  <string id="14068">IP أدخل عنوان</string>
+  <string id="14069">تغيير الإعدادات الآن؟</string>
+  <string id="14070">إجراء التغييرات الآن</string>
+  <string id="14071">سماح تسمية وحذف الملف</string>
+  <string id="14074">تعيين التوقيت</string>
+  <string id="14075">استخدام التوقيت الصيفي</string>
+  <string id="14076">أضف إلى المفضلة</string>
+  <string id="14077">إزالة من المفضلة</string>
+  <string id="14078">الألوان</string>
+  <string id="14079">دولة المنطقة الزمنية</string>
+  <string id="14080"> المنطقة الزمنية</string>
+  <string id="14081">قوائم الملف</string>
+  <string id="14082">عرض معلومات صور EXIF</string>
+  <string id="14083">استخدام نافذة الشاشة الكاملة بدلا من ملء الشاشة الحقيقية</string>
+  <string id="14084">انتظار الأغاني المختارة</string>
+  <string id="14085">تشغيل القرص الصوتي تلقائياً</string>
+  <string id="14086">توليف</string>
+  <string id="14088">تشغيل الدي في دي تلقائياً</string>
+  <string id="14089">استخدام الخط في ترجمات النص</string>
+  <string id="14090">دولي</string>
+  <string id="14091">تعيين الأحرف</string>
+  <string id="14092">التصحيح</string>
+  <string id="14093">الأمن</string>
+  <string id="14094">أجهزة الإدخال</string>
+  <string id="14095">توفير الطاقة</string>
+  <string id="15015">إزالة</string>
+  <string id="15016">​​الألعاب</string>
+  <string id="15019">إضافة</string>
+  <string id="15052">كلمة المرور</string>
+  <string id="15100">المكتبة</string>
+  <string id="15101">قاعدة البيانات</string>
+  <string id="15102">* جميع الألبومات</string>
+  <string id="15103">* جميع الفنانين</string>
+  <string id="15104">* جميع الأغاني</string>
+  <string id="15105">* جميع الأنواع</string>
+  <string id="15107">تخزين ...</string>
+  <string id="15108">أصوات التنقل</string>
+  <string id="15109">الخلفية الافتراضي</string>
+  <string id="15111">السمات</string>
+  <string id="15112">السمة الافتراضية</string>
+  <string id="15200">Last.fm</string>
+  <string id="15201">Last.fm إرسال الأغاني إلى</string>
+  <string id="15202">Last.fm اسم مستخدم</string>
+  <string id="15203">Last.fm كلمة مرور</string>
+  <string id="15204">يستعد :غير قادر للتبادل...</string>
+  <string id="15205">XBMC يرجى تحديث</string>
+  <string id="15206">ترخيص سيئ: تحقق من اسم المستخدم وكلمة السر</string>
+  <string id="15207">متصل</string>
+  <string id="15208">غير متصل</string>
+  <string id="15209">%i إرسال التأخير</string>
+  <string id="15210">الأغاني %i المخزنة مؤقتا</string>
+  <string id="15211">إرسال...</string>
+  <string id="15212">ثواني %i إرسال في</string>
+  <string id="15213">التشغيل باستخدام...</string>
+  <string id="15214">ممهدة A/V استخدام مزامنة</string>
+  <string id="15215">إخفاء أسماء الملف في عرض المصغرات</string>
+  <string id="15216">تشغيل في وضع الطرف</string>
+  <string id="15217">Libre.fm إرسال الأغاني إلى</string>
+  <string id="15218">Libre.fm اسم مستخدم</string>
+  <string id="15219">Libre.fm كلمة مرور</string>
+  <string id="15221">إرسال الأغاني...</string>
+  <string id="15250">...Last.fm إلى إذاعة Last.fm إرسال</string>
+  <string id="15251">Last.fm يتصل...</string>
+  <string id="15252">اختيار المحطة...</string>
+  <string id="15253">البحث عن فنانين مماثلين...</string>
+  <string id="15254">البحث عن شعارات مماثلة...</string>
+  <string id="15255">(%name%) ملفك الشخصي</string>
+  <string id="15256">المراكز الأولى</string>
+  <string id="15257">%name% علامة أفضل المغنين</string>
+  <string id="15258">%name% علامة أفضل الألبومات</string>
+  <string id="15259">%name% علامة أفضل المسارات</string>
+  <string id="15260">Last.fm في اذاعة %name% استمع الى علامة</string>
+  <string id="15261">%name% فنانين ممثالين مثل</string>
+  <string id="15262">البومات %name% أفضل</string>
+  <string id="15263">مسارات %name% أفضل</string>
+  <string id="15264">شعارات %name% أفضل</string>
+  <string id="15265">%name% أكبر المعجبين من</string>
+  <string id="15266">Last.fm المعجبين في اذاعة %name% استمع الى</string>
+  <string id="15267">Last.fm فنانين مماثلين في اذاعة %name% استمع الى</string>
+  <string id="15268">%name% أفضل الفنانين للمستخدم</string>
+  <string id="15269">%name% أفضل الألبومات</string>
+  <string id="15270">%name% أفضل المسارات للمستخدم</string>
+  <string id="15271">%name% أصدقاء للمستخدم</string>
+  <string id="15272">%name% جيران للمستخدم</string>
+  <string id="15273">%name% خريطة الفنان الاسبوعية</string>
+  <string id="15274">%name% خريطة الألبوم الاسبوعية</string>
+  <string id="15275">%name% خريطة المسار الاسبوعية</string>
+  <string id="15276">Last.fm الجيران في اذاعة %name%'s استمع الى</string>
+  <string id="15277">Last.fm الشخصية في اذاعة %name%'s استمع الى</string>
+  <string id="15278">Last.fm ميكس في اذاعة %name%'s استمع الى</string>
+  <string id="15279">Last.fm حصول القائمة من...</string>
+  <string id="15280">Last.fm لا يمكن حصول القائمة من...</string>
+  <string id="15281">إدخال اسم فنان للعثورعلى افنانين مماثلين</string>
+  <string id="15282">إدخال علامة للعثور على أغاني مشابهة</string>
+  <string id="15283">%name% اخر المسارات استمعت بواسطة</string>
+  <string id="15284">Last.fm التوصيات في اذاعة %name%'s استمع الى</string>
+  <string id="15287">هل تريد إضافة القائمة الحالية للمسارات المفضلة؟</string>
+  <string id="15288">هل تريد مقاطعة الأغنية الحالية؟</string>
+  <string id="15289">.'%s' أضيفت الى الأغاني المفضلة</string>
+  <string id="15290">.لمساراتك المفضلة '%s' لا يمكن إضافة</string>
+  <string id="15291">'%s' :حظر</string>
+  <string id="15292">.'%s' لا يمكن حظر</string>
+  <string id="15293">%name% اخر المسارات مفضلة بواسطة</string>
+  <string id="15294">%name% اخر المسارات حظرت بواسطة</string>
+  <string id="15295">ازالة مة المسارات المفضلة</string>
+  <string id="15296">الغاء الحظر</string>
+  <string id="15297">هل تريد إزالة المسار من الأغاني المفضلة لديك؟</string>
+  <string id="15298">هل تريد إلغاء حظر الأغنية؟</string>
+  <string id="15300">لم يتم العثور على المسار أو غير صالح</string>
+  <string id="15301">لم يتم العثور على خادم</string>
+  <string id="15302">لم يتم العثور على الملقم</string>
+  <string id="15303">لم يتم العثورعلى مجموعة العمل </string>
+  <string id="15310">جاري فتح مصدر متعدد المسارات</string>
+  <string id="15311">:المسار</string>
+  <string id="16000">عام</string>
+  <string id="16002">بحث الويب</string>
+  <string id="16003">المشغل</string>
+  <string id="16004">تشغيل الوسائط من القرص</string>
+  <string id="16008">إدخال عنوان جديد</string>
+  <string id="16009">أدخل اسم الفلم</string>
+  <string id="16010">أدخل لسم ملفك الشخصي</string>
+  <string id="16011">أدخل اسم الألبوم</string>
+  <string id="16012">أدخل اسم قائمة التشغيل</string>
+  <string id="16013">أدخل اسم الملف الجديد</string>
+  <string id="16014">أدخل اسم المجلد</string>
+  <string id="16015">أدخل الدليل</string>
+  <string id="16016">%A, %T, %N, %B, %D, %G, %Y, %F, %S الخيارات المتاحة:</string>
+  <string id="16017">أدخل نص البحث</string>
+  <string id="16018">بلا</string>
+  <string id="16019">اختيار تلقائي</string>
+  <string id="16020">تشابك</string>
+  <string id="16021">بوب</string>
+  <string id="16022">بوب مزدوج</string>
+  <string id="16023"></string>
+  <string id="16024">يلغي...</string>
+  <string id="16025">أدخل اسم الفنان</string>
+  <string id="16026">فشل القراءة</string>
+  <string id="16027">فشل قراءة عنصر واحد أو أكثر</string>
+  <string id="16028">إدخال قيمة</string>
+  <string id="16029">سجل التحقق</string>
+  <string id="16030">تم إلغاء وضع الطرف</string>
+  <string id="16031">.لا توجد أغاني مطابقة في المكتبة</string>
+  <string id="16032">لم يتمكن من تهيئة قاعدة بيانات</string>
+  <string id="16033">.لم يتمكن من فتح قاعدة بيانات</string>
+  <string id="16034">لم يتمكن الحصول على الأغاني من قاعدة البيانات</string>
+  <string id="16035">قائمة تشغيل وضع الطرف </string>
+  <string id="16039">معطلة</string>
+  <string id="16040">التلقائية</string>
+  <string id="16041">النشطة</string>
+  <string id="16100">كل الفيديو</string>
+  <string id="16101">غير مشاهدة</string>
+  <string id="16102">شوهدت</string>
+  <string id="16103">أشر إليها على أنها شوهدت</string>
+  <string id="16104">أشر إليها على أنها لم تشاهد</string>
+  <string id="16105">تحرير عنوان</string>
+  <string id="16200">تم إحباط التشغيل</string>
+  <string id="16201">فشل النسخ</string>
+  <string id="16202">فشل في نسخ ملف واحد على الأقل</string>
+  <string id="16203">فشل النقل</string>
+  <string id="16204">فشل في نقل ملف واحد على الأقل</string>
+  <string id="16205">فشل الحذف</string>
+  <string id="16206">فشل في حذف ملف واحد على الأقل</string>
+  <string id="19000">تبديل الى القناة</string>
+  <string id="20000">مجلد موسيقى محفوظ</string>
+  <string id="20001">استخدم مشغل دي في دي خارجي</string>
+  <string id="20002">الخارجية لاعب دي في دي</string>
+  <string id="20003">مجلد المربين</string>
+  <string id="20004">مجلد لقطات الشاشة</string>
+  <string id="20006">مجلد قوائم التشغيل</string>
+  <string id="20007">التسجيلات</string>
+  <string id="20008">اللقطات</string>
+  <string id="20009">XBMC استخدام</string>
+  <string id="20011">قوائم تشغيل الموسيقى</string>
+  <string id="20012">قوائم تشغيل الفيديو</string>
+  <string id="20013">هل تريد تشغيل اللعبة؟</string>
+  <string id="20014">ترتيب حسب: قائمة التشغيل</string>
+  <string id="20015">ريموت المصغرة</string>
+  <string id="20016">​​المصغرة الحالية</string>
+  <string id="20017">المحلية المصغرة</string>
+  <string id="20018">المصغرة الحرة</string>
+  <string id="20019">حدد صورة مصغرة</string>
+  <string id="20023">التناقض</string>
+  <string id="20024"> تفحص الجديد</string>
+  <string id="20025">تفحص كافة</string>
+  <string id="20026">المنطقة</string>
+  <string id="20037">الملخص</string>
+  <string id="20038">قفل نافذة الموسيقى </string>
+  <string id="20039"> قفل نافذة الفيديو</string>
+  <string id="20040"> قفل نافذة الصور </string>
+  <string id="20041">قفل نافذة البرامج والبرامج النصية</string>
+  <string id="20042"> قفل إدارة الملف</string>
+  <string id="20043">إعدادات القفل</string>
+  <string id="20044">البدء من جديد</string>
+  <string id="20045">إدخال إلى الوضع الرئيسي</string>
+  <string id="20046">إنهاء الوضع الرئيسي</string>
+  <string id="20047">؟ '% s' إنشاء ملف </string>
+  <string id="20048">ابدأ  مع الإعدادات الجديدة</string>
+  <string id="20049">أفضل المتوفر</string>
+  <string id="20050">4x3 and 16x3 التبديل تلقائيا بين</string>
+  <string id="20051">تعامل مع الملفات المكدسة كملف واحد</string>
+  <string id="20052">حذر</string>
+  <string id="20053">غادر الوضع الرئيسي</string>
+  <string id="20054">في الوضع الرئيسي</string>
+  <string id="20055">Allmusic.com مصغرة</string>
+  <string id="20057">إزالة الصورة المصغرة</string>
+  <string id="20058">أضف ملف شخصي...</string>
+  <string id="20059">استعلام معلومات جميع الألبومات</string>
+  <string  id="20060">معلومات الوسائط</string>
+  <string id="20061">فصل</string>
+  <string id="20062">مساهمة افتراضية</string>
+  <string id="20063">مساهمة افتراضية (للقراءة فقط)</string>
+  <string id="20064">نسخ الافتراضية</string>
+  <string id="20065">الصورة الشخصية</string>
+  <string id="20066">قفل التفضيلات</string>
+  <string id="20067">تحرير الملف الشخصي</string>
+  <string id="20068">قفل الملف الشخصي</string>
+  <string id="20069">لا يتمكن من إنشاء المجلد</string>
+  <string  id="20070">دليل الملف الملف الشخصي</string>
+  <string id="20071">ابدأ مع مصادر الوسائط الجديدة</string>
+  <string id="20072">تأكد من أن المجلد المحدد قابل للكتابة</string>
+  <string id="20073">وأن اسم المجلد الجديد صالحا</string>
+  <string id="20074">:MPAA تصنيف</string>
+  <string id="20075">إدخال رمز القفل الرئيسي عند بداية التشغيل</string>
+  <string id="20076">اطلب رمز القفل الرئيسي عند بداية التشغيل </string>
+  <string id="20077">إعدادات الخلفية</string>
+  <string id="20078">- لم يتم تعيين الارتباط -</string>
+  <string id="20079">تمكين الصور المتحركة</string>
+  <string id="20080">أثناء الموسيقى RSS إيقاف الموسيقى</string>
+  <string id="20081">تمكين اختصارات الأزرار</string>
+  <string id="20082">عرض البرامج في القائمة الرئيسية</string>
+  <string id="20083">عرض معلومات الموسيقى</string>
+  <string id="20084">عرض معلومات الطقس</string>
+  <string id="20085">عرض نظام عرض المعلومات</string>
+  <string id="20086">C : E : F : عرض المساحة الحرة على الأقراص </string>
+  <string id="20087">E : F : G : عرض المساحة الحرة على الأقراص </string>
+  <string id="20088">معلومات الطقس</string>
+  <string id="20089">مساحة القرص الحرة</string>
+  <string id="20090">أدخل اسم لمشاركة موجودة</string>
+  <string id="20091">رمز القفل</string>
+  <string id="20092">تحميل الملف الشخصي</string>
+  <string id="20093">اسم الملف الشخصي</string>
+  <string id="20094">مصادر الوسائط</string>
+  <string id="20095">إدخال رمز قفل الملف الشخصي</string>
+  <string id="20096">شاشة الدخول</string>
+  <string id="20097">الحصول على معلومات الألبوم</string>
+  <string id="20098">الحصول على معلومات عن الألبوم</string>
+  <string id="20099">لا يمكن نسخ القرص أو المسار أثناء القراءة من القرص</string>
+  <string id="20100">رمز القفل الرئيسي والإعدادت</string>
+  <string id="20101">إدخال رمز القفل الرئيسي يسمح الوضع الرئيسي دائما</string>
+  <string id="20102">أو نسخ افتراضيا؟</string>
+  <string id="20103">حفظ التغييرات إلى ملف الشخصي؟</string>
+  <string id="20104">.الإعدادات القديمة وجدت</string>
+  <string id="20105">هل تريد استخدامها؟</string>
+  <string id="20106"> مصادر وسائط قديمة وجدت</string>
+  <string id="20107">فصل (مقفلة)</string>
+  <string id="20108">الجذر</string>
+  <string id="20109">التكبير</string>
+  <string id="20110">UPnP إعدادات</string>
+  <string id="20111">تلقائي UPnP تشغيل عميل</string>
+  <string id="20112">%s :آخر تسجيل دخول</string>
+  <string id="20113">لم يتم تسجيل دخول</string>
+  <string id="20114">%i / %i الملف الشخصي</string>
+  <string id="20115">تسجيل دخول مستخدم / اختيار ملف شخصي</string>
+  <string id="20116">استخدام القفل على شاشة تسجيل الدخول</string>
+  <string id="20117">رمز القفل غير صحيح</string>
+  <string id="20118">هذا يتطلب رمز القفل الرئيسي لتمكين التعيين</string>
+  <string id="20119">هل تريد تعيينها الآن؟</string>
+  <string id="20120">تحميل معلومات البرنامج</string>
+  <string id="20121">! الطرف</string>
+  <string id="20122">صحيح</string>
+  <string id="20123">خلط المشروبات</string>
+  <string id="20124">ملء الأكواب</string>
+  <string id="20125">تسجيل الدخو بإسم</string>
+  <string id="20126">تسجيل الخروج</string>
+  <string id="20128">اذهب الى الجذر</string>
+  <string id="20129">نسج</string>
+  <string id="20130">نسج (مقلوب)</string>
+  <string id="20131">توليف</string>
+  <string id="20132">إعادة تشغيل الفيديو</string>
+  <string id="20133">تحرير موقع الشبكة</string>
+  <string id="20134">إزالة موقع الشبكة</string>
+  <string id="20135">هل تريد أن تفحص المجلد؟</string>
+  <string id="20136">وحدة ذاكرة</string>
+  <string id="20137">وحدة الذاكرة جاهزة للاستخدام</string>
+  <string id="20138">غير قادر على تحميل وحدة الذاكرة</string>
+  <string id="20139">%i الفتحة ,%i في المنفذ</string>
+  <string id="20140">قفل الشاشة المؤقتة</string>
+  <string id="20141">تعيين</string>
+  <string id="20142">اسم المستخدم</string>
+  <string id="20143">أدخل كلمة المرور لـ</string>
+  <string id="20144">مؤقت الإغلاق</string>
+  <string id="20145">إغلاق (في دقائق)</string>
+  <string id="20146">%im بدأت, أغلقت في</string>
+  <string id="20147">إيقاف في 30 دقيقة</string>
+  <string id="20148">إيقاف في 60 دقيقة</string>
+  <string id="20149">إيقاف في 120 دقيقة</string>
+  <string id="20150">مؤقت إغلاق مخصص</string>
+  <string id="20151">إلغاء مؤقت الإغلاق</string>
+  <string id="20152">%s قفل التفضيلات لـ</string>
+  <string id="20153">استعراض...</string>
+  <string id="20154">معلومات الملخص</string>
+  <string id="20155">معلومات التخزين</string>
+  <string id="20156">معلومات القرص الصلب</string>
+  <string id="20157">DVD-ROM معلومات محرك الأقراص</string>
+  <string id="20158">معلومات الشبكة</string>
+  <string id="20159">معلومات الفيديو</string>
+  <string id="20160">معلومات الجهاز</string>
+  <string id="20161">المجموع</string>
+  <string id="20162">المستخدمة</string>
+  <string id="20163">من</string>
+  <string id="20164">القفل غير معتمد</string>
+  <string id="20165">غير مقفل</string>
+  <string id="20166">مقفل</string>
+  <string id="20167">مجمدة</string>
+  <string id="20168">يتطلب إعادة</string>
+  <string id="20169">الاسبوع</string>
+  <string id="20170">الصف</string>
+  <string id="20171">(SMB) شبكة النوافذ</string>
+  <string id="20172">XBMSP خادم</string>
+  <string id="20173">FTP خادم</string>
+  <string id="20174">(DAAP) مشاركة موسيقى الايتونز</string>
+  <string id="20175">خادم UPnP</string>
+  <string id="20176">عرض معلومات الفيديو</string>
+  <string id="20177">إنهاء</string>
+  <string id="20178">تغير</string>
+  <string id="20179">أحرف كبيرة</string>
+  <string id="20180">الرموز</string>
+  <string id="20181">مسافة للخلف</string>
+  <string id="20182">مسافة</string>
+  <string id="20183">إعادة تحميل الخلفية</string>
+  <string id="20184">EXIF استدارة الصور باستخدام معلومات  ​​</string>
+  <string id="20185">استخدام أنماط عرض الملصقات للبرامج التلفزيونية</string>
+  <string id="20186">الرجاء الانتظار</string>
+  <string id="20189">تمكين التمرير التلقائي للحوار والمراجعة</string>
+  <string id="20190">مخصص</string>
+  <string id="20191">تمكين تسجيل التصحيح</string>
+  <string id="20192">تنزيل معلومات إضافية اثناء التحديثات</string>
+  <string id="20193">الخدمة الافتراضية لمعلومات الألبوم</string>
+  <string id="20194">الخدمة الافتراضية لمعلومات الفنان</string>
+  <string id="20195">تغير المكشطه</string>
+  <string id="20196">تصدير مكتبة الموسيقى...</string>
+  <string id="20197">استيراد مكتبة الموسيقى...</string>
+  <string id="20198">!لم يتم العثور على الفنان</string>
+  <string id="20199">فشل تحميل معلومات الفنان</string>
+  <string id="20250">هناك طرفا! (فيديو)</string>
+  <string id="20251"> خلط المشروبات (فيديو)</string>
+  <string id="20252">ملء أكواب (فيديو)</string>
+  <string id="20300">(HTTP) دليل خادم الويب</string>
+  <string id="20301">(HTTPS) دليل خادم الويب</string>
+  <string id="20302">:لايمكن الكتابة إلى المجلد</string>
+  <string id="20303">هل تريد أن تتخطى وتذهب؟</string>
+  <string id="20307">Secondary DNS</string>
+  <string id="20308">:DHCP خادم</string>
+  <string id="20309">انشأ مجلد جديد</string>
+  <string id="20310">عند التشغيل LCD تبهيت</string>
+  <string id="20311">غير معروف أو على لوحة (محمية)</string>
+  <string id="20312">عند التوقف LCD تبهيت</string>
+  <string id="20314">الفيديو - المكتبة</string>
+  <string id="20316">ترتيب بواسطة: اسم المستخدم</string>
+  <string id="20324">تشغيل جزء...</string>
+  <string id="20325">إعادة المعايرة</string>
+  <string id="20326">%s هذا سوف يعين معايرة القيم لـ </string>
+  <string id="20327">القيم الافتراضية الخاصة به</string>
+  <string id="20328">استعراض للموقع</string>
+  <string id="20330">استخدام أسماء المجلد للبحث</string>
+  <string id="20331">المجلد</string>
+  <string id="20332">استخدام أسماء ملف أو مجلد؟</string>
+  <string id="20333">تعيين المحتوى</string>
+  <string id="20334">مجلد</string>
+  <string id="20335">بحث المحتوى المتكرر؟</string>
+  <string id="20336">فتح مصادر</string>
+  <string id="20337">الممثل</string>
+  <string id="20338">الفيلم</string>
+  <string id="20339">المخرج</string>
+  <string id="20340">هل تريد إزالة كافة المعلومات الموجودة في</string>
+  <string id="20341">؟XBMC هذا المسار من مكتبة </string>
+  <string id="20342">الأفلام</string>
+  <string id="20343">البرامج التلفزيونية</string>
+  <string id="20344">هذا الدليل يحتوي</string>
+  <string id="20345">تشغيل الفحص الآلي</string>
+  <string id="20346">فحص متكرر</string>
+  <string id="20347">مثل</string>
+  <string id="20348">المخرجين</string>
+  <string id="20349">!لاتوجد ملفات فيديو في هذا المسار</string>
+  <string id="20350">الأصوات</string>
+  <string id="20351">معلومات البرامج التلفزيونية</string>
+  <string id="20352">معلومات الحلقة</string>
+  <string id="20353">تحميل تفاصيل البرنامج التلفزيوني</string>
+  <string id="20354">استيراد دليل الحلقة</string>
+  <string id="20355">تحميل معلومات الحلقة في الدليل</string>
+  <string id="20356">:اختر البرنامج التلفزيوني</string>
+  <string id="20357">إدراج اسم البرنامج التلفزيوني</string>
+  <string id="20358">%i الفصل</string>
+  <string id="20359">الحلقة</string>
+  <string id="20360">الحلقات</string>
+  <string id="20361">تحميل تفاصيل الحلقة</string>
+  <string id="20362">إزالة الحلقة من المكتبة</string>
+  <string id="20363">إزالة البرنامج التلفزيوني من المكتبة</string>
+  <string id="20364">البرنامج التلفزيوني</string>
+  <string id="20365">محور الحلقة</string>
+  <string id="20366">* جميع الفصول</string>
+  <string id="20367">إخفاء المشاهدات</string>
+  <string id="20368">رمز الانتاج</string>
+  <string id="20369">اظهار حوار العناصر الغير مشاهدة</string>
+  <string id="20370">*مخفية لمنع المتطفلين*</string>
+  <string id="20371">تعيين مصغرة للفصل</string>
+  <string id="20372">صورة الفصل</string>
+  <string id="20373">الفصل</string>
+  <string id="20374">تحميل معلومات الفيلم</string>
+  <string id="20375">محتوى غير مخصص</string>
+  <string id="20376">العنوان الأصلي</string>
+  <string id="20377">تحديث معلومات البرنامج تلفزيوني </string>
+  <string id="20378">تحديث المعلومات لجميع الحلقات؟</string>
+  <string id="20379">المجلد المحدد يحتوي على برنامج تلفزيوني واحد</string>
+  <string id="20380">استبعاد المجلد المحدد من الفحص</string>
+  <string id="20381">العروض الخاصة</string>
+  <string id="20382">تحميل مصغرات الفصل تلقائي</string>
+  <string id="20383">المجلد المحدد يحتوي على فيديو واحد</string>
+  <string id="20384">ربط إلى البرنامج التلفزيوني</string>
+  <string id="20385">إزالة الربط من البرنامج التلفزيوني</string>
+  <string id="20386">أفلام أضيفت مؤخراً</string>
+  <string id="20387">حلقات أضيفت مؤخراً</string>
+  <string id="20388">استوديوهات</string>
+  <string id="20389">االفيديو كليب</string>
+  <string id="20390">اغاني فيديو كليب أضيفت مؤخراً</string>
+  <string id="20391">الفيديو كليب</string>
+  <string id="20392">إزالة اغاني الفيديو من المكتبة</string>
+  <string id="20393">معلومات الفيديو كليب</string>
+  <string id="20394">تحميل معلومات الفيديو كليب</string>
+  <string id="20395">مختلطة</string>
+  <string id="20396">اذهب لألبومات الفنانين</string>
+  <string id="20397">للألبومات</string>
+  <string id="20398">تشغيل الأغنية</string>
+  <string id="20399">اذهب لألبومات الفيديو الكليب</string>
+  <string id="20400">اذهب إلى الفيديو كليب حسب الفنان</string>
+  <string id="20401">تشغيل الفيديو كليب</string>
+  <string id="20402">تحميل صور مصغرة للممثل عند الإضافة إلى المكتبة</string>
+  <string id="20403">تعيين صورة مصغرة للمثل</string>
+  <string id="20405">إزالة علامة الحلقه</string>
+  <string id="20406">تعيين علامة الحلقه</string>
+  <string id="20407">إعدادات المكشطة </string>
+  <string id="20408"> تحميل معلومات الفيديو كليب</string>
+  <string id="20409">تنزيل معلومات البرنامج التلفزيوني</string>
+  <string id="20410">فيلم قصير</string>
+  <string id="20411">فلاتن</string>
+  <string id="20412">برامج تلفزيونية فلاتن</string>
+  <string id="20413">احصل Fanart</string>
+  <string id="20414">في مكتبات الفيديو والموسيقى Fanart إظهار </string>
+  <string id="20415">فحص عن محتوى جديد</string>
+  <string id="20416">البث الأول</string>
+  <string id="20417">الكاتب</string>
+  <string id="20418"></string>
+  <string id="20419">إظهار بيانات التعريف في عرض الملفات</string>
+  <string id="20420">أبداً</string>
+  <string id="20421">إذا فصل واحد فقط</string>
+  <string id="20422">دائما</string>
+  <string id="20423">فلم قصير</string>
+  <string id="20424">خطأ</string>
+  <string id="20425">Fanart عرض شرائح</string>
+  <string id="20426">تصدير إلى ملف واحد أو معزول</string>
+  <string id="20427">مدخل الملفات؟</string>
+  <string id="20428">ملف واحد</string>
+  <string id="20429">مفصول</string>
+  <string id="20430">تصدير المصغرات و Fanart?</string>
+  <string id="20431">الكتابة فوق الملفات القديمة؟</string>
+  <string id="20432">استبعاد المسار من تحديثات المكتبة</string>
+  <string id="20433">استخراج معلومات المصغرات والفيديو</string>
+  <string id="20434">تعيينات</string>
+  <string id="20435">تعيين مصغرات الفيديو</string>
+  <string id="20436">تصدير مصغرات الفنانين؟</string>
+  <string id="20437">اختر الخلفية</string>
+  <string id="20438">الخلفية المحلية</string>
+  <string id="20439">لاتوجد خلفية</string>
+  <string id="20440">الخلفية الحالية</string>
+  <string id="20441">الخلفية البعيدة</string>
+  <string id="20442">تغيير المحتوى</string>
+  <string id="20443">هل تريد تحديث كافة البيانات؟</string>
+  <string id="20444">العناصر في هذا المسار؟</string>
+  <string id="20445">Fanart</string>
+  <string id="20446">.العثور على معلومات محلية</string>
+  <string id="20447">تجاهل وحدث من الإنترنت؟ </string>
+  <string id="20448">لايمكن  تحميل المعلومات</string>
+  <string id="20449">غير قادر على الاتصال بالخادم البعيد</string>
+  <string id="20450">هل تريد الاستمرار في الفحص؟</string>
+  <string id="20451">الدول</string>
+  <string id="20452">الحلقة</string>
+  <string id="20453">الحلقات</string>
+  <string id="20454">المستمع</string>
+  <string id="20455">المستمعين</string>
+  <string id="20456">تعيين خلفية الفلم Fanart</string>
+  <string id="20457">تعيين الفلم</string>
+  <string id="21330">إظهار الملفات المخفية والدلائل</string>
+  <string id="21331">TuxBox عميل</string>
+  <string id="21332">ليس في وضع التسجيل TuxBox تحذير: جهاز</string>
+  <string id="21333">!سيتم إيقاف البث</string>
+  <string id="21334">!فشل %s :الانتقال الى القناة</string>
+  <string id="21335">هل أنت متأكد لبدأ البث؟</string>
+  <string id="21336">%s :يتصل الى</string>
+  <string id="21337">TuxBox جهاز</string>
+  <string id="21359">إضافة مشاركة الوسائط...</string>
+  <string id="21360">UPnP مشاركة الفيديو والموسيقى عبر</string>
+  <string id="21364">تحرير مشاركة الوسائط</string>
+  <string id="21365">إزالة مشاركة الوسائط</string>
+  <string id="21366">مجلد الترجمة</string>
+  <string id="21367">دليل ترجمة الفيديو البديل</string>
+  <string id="21368">ASS / SSA تجاوز خطوط الترجمات</string>
+  <string id="21369">تمكين دعم الفأره وشاشة اللمس</string>
+  <string id="21370">تشغيل أصوات التنقل أثناء تشغيل الوسائط</string>
+  <string id="21371">المصغرة</string>
+  <string id="21372">تحديد منطقة مشغل الدي في دي</string>
+  <string id="21373">مخرج الفيديو</string>
+  <string id="21374">حجم الفيديو</string>
+  <string id="21375">عادي</string>
+  <string id="21376">الرسائل</string>
+  <string id="21377">شاشة عريضة</string>
+  <string id="21378">480P تمكين</string>
+  <string id="21379">7200P تمكين</string>
+  <string id="21380">1080i تمكين</string>
+  <string id="21381">أدخل اسم قائمة تشغيل الجديدة</string>
+  <string id="21382">إظهار  أزرار"إضافة مصدر" في قوائم الملفات</string>
+  <string id="21383">تكمين أشرطة التمرير</string>
+  <string id="21384">Make watched filtering a toggle in video library</string>
+  <string id="21385">فتح</string>
+  <string id="21386">مستوى الإدارة الصوتية</string>
+  <string id="21387">سريع</string>
+  <string id="21388">هادئة</string>
+  <string id="21389">تمكين خلفية مخصصة</string>
+  <string id="21390">إدارة مستوى الطاقة</string>
+  <string id="21391">طاقة عالية</string>
+  <string id="21392">طاقة منخفضة</string>
+  <string id="21393">احتياطية عالية</string>
+  <string id="21394">احتياطية منخفضة</string>
+  <string id="21395">لا يمكن تخزين مؤقت لملفات أكبر من 4 غيغابايت </string>
+  <string id="21396">الفصل</string>
+  <string id="21398">مضلل بكسل عالي الجودة</string>
+  <string id="21399">استخدام الرسوم المتحركة</string>
+  <string id="21400">يحتوي على</string>
+  <string id="21401">لا يحتوي على</string>
+  <string id="21402">انه</string>
+  <string id="21403">ليس</string>
+  <string id="21404">يبدأ</string>
+  <string id="21405">ينتهي</string>
+  <string id="21406">أكبر من </string>
+  <string id="21407">أقل من </string>
+  <string id="21408">بعد </string>
+  <string id="21409">قبل</string>
+  <string id="21410">الاخير</string>
+  <string id="21411">لم يدم</string>
+  <string id="21412">الكاشطات</string>
+  <string id="21413">كاشط الفيلم الافتراضي</string>
+  <string id="21414">كاشط البرنامج التلفزيوني الافتراضي</string>
+  <string id="21415">كاشط الموسيقى الافتراضي</string>
+  <string id="21416">تمكين الاحتياطية على أساس اللغة المكشطة</string>
+  <string id="21417">الإعدادت</string>
+  <string id="21418">متعددة اللغات</string>
+  <string id="21419">لاتوجد مكشطة حالية</string>
+  <string id="21420">تعديل قيمة</string>
+  <string id="21421">قاعدة الأغاني الذكية</string>
+  <string id="21422">ضبط العناصر في</string>
+  <string id="21423">قانون جديد...</string>
+  <string id="21424">يجب مطابقة العناصر</string>
+  <string id="21425">جميع القوانين</string>
+  <string id="21426">قانون واحد أو أكثر</string>
+  <string id="21427">محدود</string>
+  <string id="21428">لايوجد حدود</string>
+  <string id="21429">ترتيب</string>
+  <string id="21430">تصاعدي</string>
+  <string id="21431">تنازلي</string>
+  <string id="21432">تحرير قائمة التشغيل الذكية</string>
+  <string id="21433">اسم قائمة التشغيل</string>
+  <string id="21434">البحث عن العناصر في</string>
+  <string id="21435">- تعديل</string>
+  <string id="21436">%i عناصر</string>
+  <string id="21437">قائمة ذكية للأغاني الجديد...</string>
+  <string id="21438">%c محرك</string>
+  <string id="21439">تحرير قوانين وضع الطرف</string>
+  <string id="21440">المجلد الرئيسي</string>
+  <string id="21441">حساب اللتي شوهدت</string>
+  <string id="21442">عنوان الحلقة</string>
+  <string id="21443">دقة الفيديو</string>
+  <string id="21444">القنوات السمعية</string>
+  <string id="21445">ترميز الفيديو</string>
+  <string id="21446">ترميز الصوت</string>
+  <string id="21447">لغة الصوت</string>
+  <string id="21448">لغة الترجمة</string>
+  <string id="21449">التحكم عن بعد لإرسال قيم لوحة المفاتيح</string>
+  <string id="21450">تعديل</string>
+  <string id="21451">.يتطلب اتصال بالإنترنت</string>
+  <string id="21452">احصل على المزيد من...</string>
+  <string id="21460">موقع الترجمة </string>
+  <string id="21461">صالح</string>
+  <string id="21462">أسفل الفيديو</string>
+  <string id="21463">تحت الفيديو</string>
+  <string id="21464">أعلى الفيديو</string>
+  <string id="21465">أعلا الفيديو</string>
+  <string id="21800">اسم الملف</string>
+  <string id="21801">مسار الملف</string>
+  <string id="21802">حجم الملف</string>
+  <string id="21803">تاريخ/وقت الملف</string>
+  <string id="21805">الدقة</string>
+  <string id="21806">التعليقات</string>
+  <string id="21807">أسود/أبيض اللون</string>
+  <string id="21820">الوقت/التاريخ</string>
+  <string id="21821">الوصف</string>
+  <string id="21822">الشركة المصنعة للكاميرا</string>
+  <string id="21823">طراز الكاميرا</string>
+  <string id="21824">EXIF ​​تعليق</string>
+  <string id="21825">الثابتة</string>
+  <string id="21826">الفتحة</string>
+  <string id="21827">البؤري</string>
+  <string id="21828">مسافة التركيز</string>
+  <string id="21829">التعرض</string>
+  <string id="21830">وقت التعرض</string>
+  <string id="21832">نمط التعرض</string>
+  <string id="21833">الفلاش المستخدمة</string>
+  <string id="21834">موازنة البياض</string>
+  <string id="21835">مصدر الضوء</string>
+  <string id="21836">وضع القياس</string>
+  <string id="21837">ISO</string>
+  <string id="21838">التقريب الرقمي</string>
+  <string id="21839">CCD عرض</string>
+  <string id="21840">GPS خطوط عرض</string>
+  <string id="21841">GPS خطوط طول</string>
+  <string id="21842">GPS ارتفاع</string>
+  <string id="21843">التوجه</string>
+  <string id="21860">أكثر الفئات</string>
+  <string id="21861">كلمات دالة</string>
+  <string id="21862">تفسير الكلمات</string>
+  <string id="21863">الكاتب</string>
+  <string id="21864">العنوان</string>
+  <string id="21865">تعليمات خاصة</string>
+  <string id="21866">الفئات</string>
+  <string id="21867">الخط الثانوي</string>
+  <string id="21868">عنوان الخط الثانوي</string>
+  <string id="21869">الائتمان</string>
+  <string id="21870">المصدر</string>
+  <string id="21871">حقوق التأليف</string>
+  <string id="21872">اسم الكائن</string>
+  <string id="21873">المدينة</string>
+  <string id="21874">البلد</string>
+  <string id="21875">البلد</string>
+  <string id="21877">تاريخ الإنشاء</string>
+  <string id="21878">علم حقوق المؤلف</string>
+  <string id="21879">رمز البلد</string>
+  <string id="21881">UPnP عبر XBMC سماح تحكم</string>
+  <string id="21882">DVD محاولة لتخطي الادوار التمهيدية قبل قائمة</string>
+  <string id="21883">الموسيقى المحفوظة</string>
+  <string id="21884">تحقق لجميع الفنانين</string>
+  <string id="21885">تحميل  معلومات الألبوم</string>
+  <string id="21886">تحميل  معلومات الفنان</string>
+  <string id="21887">السيرة الذاتية</string>
+  <string id="21888">Discography</string>
+  <string id="21889">يبحث عن فنان</string>
+  <string id="21890">اختر الفنان</string>
+  <string id="21891">معلومات الفنان</string>
+  <string id="21892">آلات</string>
+  <string id="21893">ولد</string>
+  <string id="21894">أنشأ</string>
+  <string id="21895">مواضيع</string>
+  <string id="21896">صرف النظر</string>
+  <string id="21897">توفي</string>
+  <string id="21898">سنوات النشاط</string>
+  <string id="21899">شركة الإنتاج</string>
+  <string id="21900">ولد / أنشأ</string>
+  <string id="22000">تحديث المكتبة عند بدء تشغيل</string>
+  <string id="22001">إخفاء تحديث المكتبة  في الخلفية</string>
+  <string id="22006">موازنة الترجمة</string>
+  <string id="22007">مزود OpenGL:</string>
+  <string id="22009">نسخة OpenGL:</string>
+  <string id="22010">درجة حرارة CPU: </string>
+  <string id="22011">درجة حرارة GPU:</string>
+  <string id="22012">إجمالي الذاكرة</string>
+  <string id="22013">البيانات الشخصية</string>
+  <string id="22014">استخدام التعتيم عند التوقف أثناء تشغيل الفيديو</string>
+  <string id="22015">جميع التسجيلات</string>
+  <string id="22016">​​حسب العنوان</string>
+  <string id="22017">حسب المجموعة</string>
+  <string id="22018">قنوات مباشرة</string>
+  <string id="22019">تسجيل حسب العنوان</string>
+  <string id="22020">الدليل</string>
+  <string id="22021">سماح الأخطاء في ما يتعلق بنسبة الجوانب وذلك للحد من الخطوط السوداء</string>
+  <string id="22022">عرض ملفات الفيديو في قوائم</string>
+  <string id="22023">:DirectX مزود</string>
+  <string id="22024">:Direct3D نسخة</string>
+  <string id="22030">الخط</string>
+  <string id="22031">الحجم</string>
+  <string id="22032">الألوان</string>
+  <string id="22033">تعيين الأحرف</string>
+  <string id="22034">HTML تصدير عناوين الكاريوكي مثل</string>
+  <string id="22035">CSV تصدير عناوين الكاريوكي مثل</string>
+  <string id="22036">استيراد عناوين الكاريوكي...</string>
+  <string id="22037">إظهار مؤشر الأغنية تلقائياً</string>
+  <string id="22038">تصدير عناوين الكاريوكي...</string>
+  <string id="22039">أدخل رقم الأغنية</string>
+  <string id="22040">أبيض/أخضر</string>
+  <string id="22041">أبيض/أحمر</string>
+  <string id="22042">أبيض/أزرق</string>
+  <string id="22043">أسود/أبيض</string>
+  <string id="22079">اختيار الإجراء الافتراضي</string>
+  <string id="22080">اختر</string>
+  <string id="22081">عرض المعلومات</string>
+  <string id="22082">المزيد...</string>
+  <string id="22083">تشغيل الكل</string>
+  <string id="23050">تنشيط النص</string>
+  <string id="23053">توقف</string>
+  <string id="23054">%i جزء</string>
+  <string id="23100">تنشيط المشغل الخارجي</string>
+  <string id="23101">انقر موافق لتعطيل المشغل</string>
+  <string id="23104">انقر موافق عند انتهاء التشغيل</string>
+  <string id="24000">الملحق</string>
+  <string id="24001">الملحقات</string>
+  <string id="24002">خيارات الملحقات</string>
+  <string id="24003">معلومات الملحقات </string>
+  <string id="24005">مصادر الوسائط</string>
+  <string id="24007">معلومات الفيلم</string>
+  <string id="24008">مؤقت الشاشة</string>
+  <string id="24009">سيناريو</string>
+  <string id="24010">التصور</string>
+  <string id="24011">مخزن الملحقات</string>
+  <string id="24012">الترجمات</string>
+  <string id="24013">كلمات الأغاني</string>
+  <string id="24014">معلومات التلفزيون</string>
+  <string id="24015">معلومات الفيديو كليب</string>
+  <string id="24016">معلومات الألبوم</string>
+  <string id="24017">معلومات الفنان</string>
+  <string id="24018">الخدمات</string>
+  <string id="24020">التكوين</string>
+  <string id="24021">تعطيل</string>
+  <string id="24022">تمكين</string>
+  <string id="24023">الموقع</string>
+  <string id="24027">الطقس</string>
+  <string id="24028">Weather.com (قياسي)</string>
+  <string id="24030">لايمكن تعديل هذا الملحق</string>
+  <string id="24031">خطأ في تحميل الإعدادت</string>
+  <string id="24032">كافة الملحقات</string>
+  <string id="24033">احصل على إضافات...</string>
+  <string id="24034">تحقق من وجود تحديثات</string>
+  <string id="24035">تحديث</string>
+  <string id="24036">سجل التغييرات</string>
+  <string id="24037">إزالة التثبيت</string>
+  <string id="24038">تثبيت</string>
+  <string id="24039">إضافات معطلة</string>
+  <string id="24040">(إزالة الإعدادات الموجودة)</string>
+  <string id="24041">تثبيت من ملف مضغوط</string>
+  <string id="24042">%i%% تحميل</string>
+  <string id="24043">التحديثات متوفرة</string>
+  <string id="24044">عدم توافق التطابقات</string>
+  <string id="24045">تركيبة الملحق غير صحيحة</string>
+  <string id="24046">%s مستخدم من قبل الملحق المثبت</string>
+  <string id="24047">لايمكن إزالة هذا الملحق</string>
+  <string id="24048">العودة</string>
+  <string id="24050">الملحقات المتوفرة</string>
+  <string id="24051">الإصدار:</string>
+  <string id="24052">تنويه</string>
+  <string id="24053">:الترخيص</string>
+  <string id="24054">سجل التغييرات</string>
+  <string id="24059">هل تريد تمكين هذا الملحق؟</string>
+  <string id="24060">هل تريد تعطيل هذا الملحق؟</string>
+  <string id="24061">!تحديث الملحق متوفر</string>
+  <string id="24062">الملحقات المثبته</string>
+  <string id="24063">التحديث التلقائي</string>
+  <string id="24064">الملحق المثبته</string>
+  <string id="24065">الملحق محدث</string>
+  <string id="24066">إلغاء تحميل الملحق؟</string>
+  <string id="24067">يتم تحميل الملحق حاليا</string>
+  <string id="24068">التحديث متوفر</string>
+  <string id="24069">تحديث</string>
+  <string id="24070">لم يتمكن من تحميل الملحق</string>
+  <string id="24071">.حدث خطأ غير معروف</string>
+  <string id="24072">تتطلب إعدادات</string>
+  <string id="24073">لم يتمكن من الإتصال</string>
+  <string id="24074">يحتاج الى إعادة تشغيل</string>
+  <string id="24075">تعطيل</string>
+  <string id="24076">يتطلب ملحق</string>
+  <string id="24080">محاولة إعادة الاتصال؟</string>
+  <string id="24089">إعادة تشغيل الملحق</string>
+  <string id="24090">قفل إدارة الملحق</string>
+  <string id="24094">(الحالي)</string>
+  <string id="24095">(القائمة السوداء)</string>
+  <string id="24096">ملحوظة المكونات غير صالحة في المخزن</string>
+  <string id="24097">تريد تعطيله من النظام؟</string>
+  <string id="24098">غير صالحة</string>
+  <string id="24099">سكين تريد استبداله؟</string>
+  <string id="24100">هل تريد التبديل الى هذه الخلفية؟</string>
+  <string id="24101">هل تريد تحميل هذا الملحق؟</string>
+  <string id="25000">الإشعارات</string>
+  <string id="29800">وضع المكتبة</string>
+  <string id="29801">QWERTY لوحة مفاتيح</string>
+  <string id="29802">عبور الصوت مستخدم</string>
+  <string id="33001">جودة المقطع</string>
+  <string id="33002">بث</string>
+  <string id="33003">تحميل</string>
+  <string id="33004">تحميل والتشغيل</string>
+  <string id="33005">تحميل وحفظ</string>
+  <string id="33006">اليوم</string>
+  <string id="33007">غدا</string>
+  <string id="33008">يحفظ</string>
+  <string id="33009">ينسخ</string>
+  <string id="33010">تعيين مجلد التنزيلات</string>
+  <string id="33011">أثناء البحث</string>
+  <string id="33012">قصيرة</string>
+  <string id="33013">طويلة</string>
+  <string id="33014">استخدام مشغل دي في دي بدلا من المشغل العادي</string>
+  <string id="33015">اسأل للتحميل قبل تشغيل الفيديو</string>
+  <string id="33016">المقاطع</string>
+  <string id="33017">إعادة تشغيل الملحق لتمكينه</string>
+  <string id="33018">ليلة</string>
+  <string id="33019">غداً ليلاً</string>
+  <string id="33020">الحالة</string>
+  <string id="33021">هطول</string>
+  <string id="33022">هطول</string>
+  <string id="33023">رطب</string>
+  <string id="33024">Feels</string>
+  <string id="33025">ملاحظ</string>
+  <string id="33026">خارج عن المعتاد</string>
+  <string id="33027">شروق الشمس</string>
+  <string id="33028">غروب الشمس</string>
+  <string id="33029">التفاصيل</string>
+  <string id="33030">التوقعات</string>
+  <string id="33031">Coverflow</string>
+  <string id="33032">ترجمة النص</string>
+  <string id="33033">قائمة الخريطة %s فئة </string>
+  <string id="33034">36 ساعة</string>
+  <string id="33035">الخرائط</string>
+  <string id="33036">كل ساعة</string>
+  <string id="33037">نهاية الاسبوع</string>
+  <string id="33038">%s اليوم</string>
+  <string id="33049">إنذار</string>
+  <string id="33050">إنذارات</string>
+  <string id="33051">اختر</string>
+  <string id="33052">تحقق</string>
+  <string id="33053">تعيين</string>
+  <string id="33054">مواسم</string>
+  <string id="33055">استخدم</string>
+  <string id="33056">شاهد</string>
+  <string id="33057">الاستماع إلى</string>
+  <string id="33058">عرض</string>
+  <string id="33059">تكوين</string>
+  <string id="33060">الطاقة</string>
+  <string id="33061">القائمة</string>
+  <string id="33062">تشغيل</string>
+  <string id="33063">الخيارات</string>
+  <string id="33065">المحرر</string>
+  <string id="33066">حول</string>
+  <string id="33067">ابدأ التقييم</string>
+  <string id="33068">الخلفية</string>
+  <string id="33069">الخلفية</string>
+  <string id="33070">خلفية مخصصة</string>
+  <string id="33071">الخلفيات المخصصة</string>
+  <string id="33072">Readme عرض الملف </string>
+  <string id="33073">عرض ملف سجل التغييرات</string>
+  <string id="33074">يتطلب %s هذا الاصدار من</string>
+  <string id="33075">أو أكثر للتشغيل %s XBMC revision يتطلب</string>
+  <string id="33076">XBMC يرجى تحديث</string>
+  <string id="33077">!لم يتم العثور على البيانات</string>
+  <string id="33078">الصفحة التالية</string>
+  <string id="33079">الحب</string>
+  <string id="33080">الكراهية</string>
+  <string id="33081">هذا الملف ينتمي إلى كشط. حدد نقطة التشغيل</string>
+  <string id="33100">فشل البدء</string>
+  <string id="33101">خادم الويب</string>
+  <string id="33102">خادم الحدث</string>
+  <string id="33103">خادم الدخول عن بعد</string>
+  <string id="34100">إعداد المكبر</string>
+  <string id="34201">لا يمكن العثور على العنصر التالي للتشغيل</string>
+  <string id="34202">لا يمكن العثور على العنصر السابق للتشغيل</string>
+  <string id="35000">الأجهزة الطرفية</string>
+  <string id="35001">العام HID جهاز</string>
+  <string id="35002">محول الشبكة العام</string>
+  <string id="35003">القرص العام</string>
+  <string id="35004">.أي إعدادات لهذا الجهاز</string>
+  <string id="35005">تم تعيين جهاز جديد</string>
+  <string id="35006">تم إزالة الجهاز</string>
+  <string id="35500">الموقع</string>
+  <string id="35501">التصنيف</string>
+  <string id="35502">الاسم</string>
+  <string id="35503">المزود</string>
+  <string id="35504">معرف المنتج</string>
+  <string id="36006">لم يتمكن من فتح المحول</string>
+  <string id="36007">XBMC تشغيل التلفزيون عند بدء</string>
+  <string id="36008">XBMC إيقاف التلفزيون عند إيقاف </string>
+  <string id="36009">وضع الأجهزة في وضع الاستعداد عند تنشيط شاشة التوقف</string>
+  <string id="36015">HDMI رقم منفذ</string>
+  <string id="36016">متصل</string>
+  <string id="36017">غير متوفر libcec تم العثور على الارتباط, ولكن</string>
+  <string id="36018">استخدام إعدادات لغة للتلفزيون</string>
+</strings>
\ No newline at end of file
index 582fc1a..47bd455 100644 (file)
@@ -64,7 +64,8 @@
       <datelong>DDDD, D MMMM YYYY 'г.'</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
-      <speedunit>kph</speedunit>
+      <speedunit>kmh</speedunit>
+      <timezone>EET</timezone>
     </region>
   </regions>
 </language>
index 34e745e..d7bdbb9 100644 (file)
@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--File used for translation: English, Revision: 35647 -->
 <!--Translator: tonywoolf-->
 <!--Email: tonywoolf@gmail.com-->
-<!--Date of translation: Dec/11/2010-->
-
+<!--Date of translation: 01/07/2012-->
 <strings>
   <string id="0">Програми</string>
   <string id="1">Снимки</string>
@@ -75,6 +73,7 @@
   <string id="85">NW</string>
   <string id="86">NNW</string>
   <string id="87">VAR</string>
+
   <string id="98">Вид: Автоматичен</string>
   <string id="99">Вид: Автоматичен едър</string>
   <string id="100">Вид: Икони</string>
@@ -90,8 +89,8 @@
   <string id="110">Създай картинки</string>
   <string id="111">Преки пътища</string>
   <string id="112">Пауза</string>
-  <string id="113"></string>
-  <string id="114"></string>
+  <string id="113">Неуспешен ъпдейт</string>
+  <string id="114">Неуспешна инсталация</string>
   <string id="115">Копирай</string>
   <string id="116">Местене</string>
   <string id="117">Изтрий</string>
   <string id="164">Няма Диск</string>
   <string id="165">Диск Намерен</string>
   <string id="166">Кожа</string>
-  <string id="167">Включи FTP сървър</string>
-  <string id="168">Включи интернет време</string>
+
   <string id="169">Резолюция</string>
   <string id="170">Промени честота на обновяване</string>
-  <string id="171"></string>
 
   <string id="172">Дата на издаване</string>
   <string id="173">Покажи 4:3 видео като</string>
   <string id="176">Стилове</string>
 
   <string id="179">Песен</string>
-  <string id="180">Ð\94Ñ\8aлжина</string>
+  <string id="180">Ð\9fÑ\80одÑ\8aлжиÑ\82елноÑ\81Ñ\82</string>
   <string id="181">Избери Албум</string>
   <string id="182">Песни</string>
   <string id="183">Преглед</string>
   <string id="282">Намерен %i позиции</string>
   <string id="283">Резултати от търсене</string>
   <string id="284">Няма резултати</string>
-  <string id="286"></string>
+
   <string id="287">Субтитри</string>
   <string id="288">Шрифт</string>
   <string id="289">- Размер</string>
   <string id="304">Език</string>
   <string id="305">Включен</string>
   <string id="306">Не-редуващи</string>
-  <string id="307"></string>
-  <string id="308"></string>
-  <string id="309"></string>
-  <string id="310"></string>
-  <string id="311"></string>
+
   <string id="312">(0=авто)</string>
   <string id="313">Почиствам базата данни</string>
   <string id="314">Приготвям...</string>
   <string id="404">Вятър</string>
   <string id="405">Оросяване</string>
   <string id="406">Влажност</string>
-  <string id="407">От</string>
-  <string id="408">на</string>
+
   <string id="409">Подразбиране</string>
   <string id="410">Достъп до метеорологична служба</string>
   <string id="411">Зареждам време за:</string>
   <string id="431">Няма кеш</string>
   <string id="432">Премахни филм от библиотеката</string>
   <string id="433">Наистина да премахна '%s'?</string>
-    <string id="434">От %s at %i %s</string> <!--From <wind dir.> at <speed> <unit>-->
+  <string id="434">От %s at %i %s</string> <!--From <wind dir.> at <speed> <unit>-->
 
   <string id="437">Сменяем диск</string>
   <string id="438">Отварям файл</string>
   <string id="517">Наскоро възпроизвеждани албуми</string>
   <string id="518">Старт</string>
   <string id="519">Стартирай със...</string>
-  <string id="520"></string>
+
   <string id="521">Компилации</string>
   <string id="522">Премахни източник</string>
   <string id="523">Превключи медия</string>
   <string id="573">Път</string>
   <string id="574">Държава</string>
   <string id="575">В процес</string>
+  <string id="576">Пъти просвирвано</string>
 
   <string id="580">Посока на сортиране</string>
   <string id="581">Метод на сортиране</string>
   <string id="609">CDDA път за извличане не е зададен.</string>
   <string id="610">Извличам аудио пътека</string>
   <string id="611">Въведи номер</string>
+  <string id="612">Bits/Sample</string>
+  <string id="613">Примерна честота</string>
 
   <string id="620">Аудио CD</string>
   <string id="621">Енкодер</string>
   <string id="706">- Сървър</string>
 
   <string id="708">Ползвай HTTP proxy сървър за достъп до интернет</string>
+
   <string id="711">Интернет Протокол (IP)</string>
   <string id="712">Избран невалиден порт. Стойността може да е между 1 и 65535.</string>
   <string id="713">HTTP proxy</string>
+
   <string id="715">- Задаване</string>
   <string id="716">Автоматично (DHCP)</string>
   <string id="717">Ръчно (Статично)</string>
-  <string id="718"></string>
+
   <string id="719">- IP address</string>
   <string id="720">- Netmask</string>
   <string id="721">- Default gateway</string>
   <string id="726">Промените не са запазени. Продължаване без запазване?</string>
   <string id="727">Web сървър</string>
   <string id="728">FTP сървър</string>
-  <string id="729"></string>
+
   <string id="730">Порт</string>
-  <string id="731"></string>
+
   <string id="732">Запази &amp; приложи</string>
   <string id="733">Парола</string>
   <string id="734">Без парола</string>
   <string id="851">Валидните портове са 1-65535</string>
   <string id="852">Валидните портове са 1024-65535</string>
 
+  <string id="998">Добави музика...</string>
+  <string id="999">Добави видео...</string>
   <string id="1000">- Преглед</string>
   <string id="1001">Не мога да се свържа</string>
   <string id="1002">XBMC не може да се свърже към мрежовото местоположение.</string>
   <string id="1234">Програми &amp; снимки &amp; музика</string>
   <string id="1235">Програми &amp; снимки &amp; видео</string>
 
-  <string id="1245"></string>
-  <string id="1246"></string>
-  <string id="1247"></string>
-
   <string id="1250">Автоматично откриване</string>
   <string id="1251">Система за автоматично откриване</string>
   <string id="1252">Nickname</string>
   <string id="1257">Желаете ли да се свържете към автоматично откриваща система?</string>
 
   <string id="1260">Обяви тези услуги за други системи през Zeroconf</string>
+  <string id="1270">Позволи XBMC да приема AirPlay съдържание</string>
+  <string id="1271">Име на устройство</string>
+  <string id="1272">- </string>
 
   <string id="1300">Потребителско аудио устройство</string>
   <string id="1301">Преходно потребителско устройство</string>
 
   <string id="2100">Скриптът неуспешен! : %s</string>
   <string id="2101">Необходима е по-нова версия - Виж лога</string>
-  <string id="2102"></string>
-  <string id="2103"></string>
 
   <string id="4501">Включи LCD/VFD</string>
 
   <string id="12009">Създаване на индекса наново...</string>
   <string id="12010">Връщане към прозореца с музика</string>
   <string id="12011">Връщане към прозореца с видео</string>
-  <string id="12012"></string>
-  <string id="12013"></string>
-  <string id="12014"></string>
-  <string id="12015"></string>
-  <string id="12016"></string>
-  <string id="12017"></string>
-  <string id="12018"></string>
-  <string id="12019"></string>
-  <string id="12020"></string>
+
   <string id="12021">Започване от начало</string>
   <string id="12022">Възобновяване от %s</string>
-  <string id="12023"></string>
-  
+
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12377">Това ще ресетне всички запазени стойности</string>
   <string id="12378">Покажи всяка снимка за</string>
   <string id="12379">Използвай ефекти за мащабиране</string>
-  <string id="12380"></string>
-  <string id="12381"></string>
-  <string id="12382"></string>
+
   <string id="12383">12 часов часовник</string>
   <string id="12384">24 часов часовник</string>
   <string id="12385">Ден/Месец</string>
   <string id="12386">Месец/Ден</string>
-  <string id="12387"></string>
+
   <string id="12390">Работа на системата</string>
   <string id="12391">Минути</string>
   <string id="12392">Час(а)</string>
   <string id="12393">Дни</string>
   <string id="12394">Всичко време от стартиране</string>
+  <string id="12395">Ниво на батерията</string>
 
   <string id="12600">Времето</string>
 
 
   <string id="13100">Филтър трептене</string>
   <string id="13101">Драйвер (изисква рестарт)</string>
+
   <string id="13105">Вертикална синхронизация</string>
   <string id="13106">Изключен</string>
   <string id="13107">Вкл при възпроизвеждане</string>
   <string id="13146">XBMC, променянето на тези настройки ще повлияе</string>
   <string id="13147">контрола. Искате ли да продължите?</string>
 
-  <string id="13150"></string>
-  <string id="13151"></string>
-  <string id="13152"></string>
-  <string id="13153"></string>
-  <string id="13154"></string>
-  <string id="13155"></string>
-  <string id="13156"></string>
-  <string id="13157"></string>
-  <string id="13158"></string>
   <string id="13159">Subnet mask</string>
   <string id="13160">Gateway</string>
   <string id="13161">Primary DNS</string>
   <string id="13162">Инициализиране неуспешно</string>
 
-  <string id="13163"></string>
-  <string id="13164"></string>
-  <string id="13165"></string>
-  <string id="13166"></string>
-  <string id="13167"></string>
-  <string id="13168"></string>
-  <string id="13169"></string>
-
-
   <string id="13170">Никога</string>
   <string id="13171">Незабавно</string>
   <string id="13172">След %i секунди</string>
 
   <string id="13200">Профили</string>
   <string id="13201">Изтрий профил '%s'?</string>
+
   <string id="13204">Последно зареден профил:</string>
   <string id="13205">Непознат</string>
   <string id="13206">Презапиши</string>
+
   <string id="13208">Алармен часовник</string>
   <string id="13209">Интервал на алармата (в минути)</string>
   <string id="13210">Стартирана, аларма в %im</string>
 
   <string id="13283">Операционна Система:</string>
   <string id="13284">CPU скорост:</string>
-  <string id="13285"></string>
+
   <string id="13286">Видео енкодер:</string>
   <string id="13287">Резолюция на екрана:</string>
-  <string id="13288"></string>
-  <string id="13289"></string>
-  <string id="13290"></string>
-  <string id="13291"></string>
+
   <string id="13292">А/В кабел:</string>
-  <string id="13293"></string>
+
   <string id="13294">DVD регион:</string>
   <string id="13295">Интернет:</string>
   <string id="13296">Свързан</string>
   <string id="13297">Не е свързан. Проверете мрежовите настройки.</string>
-  <string id="13298"></string>
+
   <string id="13299">Целева температура</string>
   <string id="13300">Скорост на вентилатор</string>
   <string id="13301">Атоматичен температурен контрол</string>
   <string id="13334">Редактиране етикет</string>
   <string id="13335">Направи по подразбиране</string>
   <string id="13336">Премахни бутон</string>
-  <string id="13338"></string>
-  <string id="13339"></string>
+
   <string id="13340">Остави както е</string>
   <string id="13341">Зелен</string>
   <string id="13342">Оранжев</string>
   <string id="13359">Снимка за изпълнител</string>
   <string id="13360">Генерирай картинка</string>
   <string id="13361">Включи глас</string>
+
   <string id="13375">Включи устройство</string>
   <string id="13376">Капацитет</string>
   <string id="13377">Режим на изглед по подразбиране</string>
   <string id="13409">Топ 250</string>
   <string id="13410">Настрой на Last.fm</string>
   <string id="13411">Минимална скорост на вентилатора</string>
-
+  <string id="13412">Изпълни от тук</string>
   <string id="13413">Сваляне</string>
   <string id="13414">Скрий изпълнител, участващ само в компилации</string>
   <string id="13415">Метод за рендване</string>
   <string id="13429">Позволи хардуерно ускорение (VDADecoder)</string>
   <string id="13430">Позволи хардуерно ускорение (OpenMax)</string>
   <string id="13431">Пикселни шейдъри</string>
+  <string id="13432">Позволи хардуерно ускориние (VideoToolbox)</string>
 
   <string id="13500">А/В метод за синхронизиране</string>
   <string id="13501">Аудио честота</string>
   <string id="13509">Наистина високо(бавно!)</string>
   <string id="13510">Синхронизирай възпроизвеждане към дисплея</string>
 
+  <string id="13550">Пауза при смяна на честота на опресняване</string>
+  <string id="13551">Изкл</string>
+  <string id="13552">%.1f секунда</string>
+  <string id="13553">%.1f секунди</string>
+
   <string id="13600">Apple Remote</string>
 
   <string id="13602">Винаги работещ</string>
   <string id="15283">Песни наскоро слушани %name%</string>
   <string id="15284">Слушай %name%те препоръчителни Last.fm радио</string>
   <string id="15285">Топ етикети за потребител %name%</string>
-  <string id="15286">Слушай %name%ят плейлист Last.fm радио</string>
+
   <string id="15287">Желаете ли да добавите текущата песен към любимите?</string>
   <string id="15288">Желаете ли да забраните текущата песен?</string>
   <string id="15289">Добавено към любимите: '%s'.</string>
   <string id="16033">Не мога да отворя базата данни.</string>
   <string id="16034">Не мога да взема песента от базата данни.</string>
   <string id="16035">Плейлист Режим парти</string>
+  <string id="16036">De-interlace (Half)</string>
+  <string id="16037">Deinterlace видео</string>
+  <string id="16038">Deinterlace метод</string>
+  <string id="16039">Изкл</string>
+  <string id="16040">Авто</string>
+  <string id="16041">Вкл</string>
 
   <string id="16100">Всички видео</string>
   <string id="16101">Не гледани</string>
   <string id="16103">Маркирай като гледани</string>
   <string id="16104">Маркирай като не гледани</string>
   <string id="16105">Редактиране заглавие</string>
-  <string id="16106"></string>
-  <string id="16107"></string>
-  <string id="16108"></string>
-  <string id="16109"></string>
-  <string id="16110"></string>
 
   <string id="16200">Операцията беше отхвърлена</string>
   <string id="16201">Копирането неуспешно</string>
   <string id="16317">Временно (Half)</string>
   <string id="16318">Временно/Пространствен (Half)</string>
   <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 оптимизирано</string>
+  <string id="16324">Софтуерно смесване</string>
 
   <string id="16400">Видео след-обработка</string>
-  <string id="16401">Изключен</string>
-  <string id="16402">Включен за SD съдържание</string>
-  <string id="16403">Винаги включен</string>
 
   <string id="17500">Изобразяване време за заспиване</string>
 
   <string id="20184">Завърти, ползвайки EXIF инфо</string>
   <string id="20185">Използвай стил плакат за ТВ Сериали</string>
   <string id="20186">Моля почакайте</string>
-  <string id="20187"></string>
-  <string id="20188"></string>
+
   <string id="20189">Включи автоскрол за резюме &amp; преглед</string>
   <string id="20190">Потребителски</string>
   <string id="20191">Включи дебъг запис</string>
   <string id="20255">Първо влизане, редактирайте си профила</string>
   <string id="20256">HTS Tvheadend клиент</string>
   <string id="20257">VDR Streamdev клиент</string>
+  <string id="20258">MythTV клиент</string>
+  <string id="20259">Мрежова файлова система (NFS)</string>
+  <string id="20260">Secure Shell (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
 
   <string id="20300">Web сървър директория (HTTP)</string>
   <string id="20301">Web сървър директория (HTTPS)</string>
   <string id="20303">Искате ли да пропуснете и да продължите?</string>
   <string id="20304">RSS емисии</string>
 
-  <string id="20306"></string>
   <string id="20307">Secondary DNS</string>
   <string id="20308">DHCP сървър:</string>
   <string id="20309">Направи нова папка</string>
   <string id="20310">Затъмни LCD при възпроизвеждане</string>
   <string id="20311">Неизвестен или вграден (защитен)</string>
   <string id="20312">Затъмни LCD на пауза</string>
-  <string id="20313">Превключи LED на вкл ако на пауза</string>
+
   <string id="20314">Видео - Библиотека</string>
-  <string id="20315">Запазени игри</string>
+
   <string id="20316">Сорт: ID</string>
-  <string id="20317"></string>
-  <string id="20318"></string>
-  <string id="20319"></string>
-  <string id="20320"></string>
-  <string id="20321"></string>
-  <string id="20322"></string>
-  <string id="20323"></string>
+
   <string id="20324">Възпроизведи част...</string>
   <string id="20325">Ресет на калибровката</string>
   <string id="20326">Това ще ресетне стойностите на калибровка от %s</string>
   <string id="20373">Сезон</string>
   <string id="20374">Свалям информация за филма</string>
   <string id="20375">Безцелно съдържание</string>
-
+  <string id="20376">Оригинално заглавие</string>
   <string id="20377">Опресни информация за ТВ Сериал</string>
   <string id="20378">Обновяване на информацията за всички епизоди?</string>
   <string id="20379">Избраната папка съдържа един ТВ Сериал</string>
   <string id="20416">Излъчен на</string>
   <string id="20417">Автор</string>
   <string id="20418">Почистване на имена на файлове и папки</string>
+  <string id="20419">Покажи метаданни във файл режим</string>
 
   <string id="20420">Никога</string>
   <string id="20421">Ако е само един сезон</string>
   <string id="20451">Държави</string>
   <string id="20452">епизод</string>
   <string id="20453">епизоди</string>
+  <string id="20454">Слушател</string>
+  <string id="20455">Слушатели</string>
+  <string id="20456">Задай плакат снимачна площадка</string>
+  <string id="20457">Снимачна площадка</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Показвай скрити папки и файлове</string>
   <string id="21365">Премахни споделяне на медия</string>
   <string id="21366">Потребителска папка за субтитри</string>
   <string id="21367">Премести &amp; алтернативна папка за субтитри</string>
+  <string id="21368">Презапиши ASS/SSA шрифт за субтитри</string>
 
   <string id="21369">Включи мишка</string>
   <string id="21370">Просвирвай навигационни звуци с възпроизвеждането на медия</string>
   <string id="21452">Вземи още...</string>
   <string id="21453">Основна файлова система</string>
 
+  <string id="21460">Местонахождение на субтитри</string>
+  <string id="21461">Фиксиран</string>
+  <string id="21462">Край на видео</string>
+  <string id="21463">Под видео</string>
+  <string id="21464">Горе видео</string>
+  <string id="21465">Над видео</string>
+
   <string id="21800">Име на файл</string>
   <string id="21801">Път на файл</string>
   <string id="21802">Размер на файл</string>
   <string id="22020">Ръководство</string>
   <string id="22021">Позволени грешки в съотношението (%)</string>
   <string id="22022">Включване на видео файлове в листинги</string>
+  <string id="22023">DirectX доставчик:</string>
+  <string id="22024">Direct3D версия:</string>
 
   <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">Шрифт</string>
   <string id="24015">Информация за музикално видео</string>
   <string id="24016">Информация за албум</string>
   <string id="24017">Информация за актьор</string>
+  <string id="24018">Услуги</string>
 
   <string id="24020">Конфигурация</string>
   <string id="24021">Изключено</string>
   <string id="24073">Не мога да се свържа</string>
   <string id="24074">Изисква се рестарт</string>
   <string id="24075">Изключи</string>
+  <string id="24076">Изисква добавка</string>
   <string id="24080">Свързване отново?</string>
   <string id="24089">Добавката се рестартира</string>
   <string id="24090">Заключи управление на добавки</string>
 
-  <string id="24091"></string>
-  <string id="24092"></string>
-  <string id="24093"></string>
-  <string id="24094"></string>
-  <string id="24095"></string>
-
   <string id="24096">Добавка маркирана като повредена в хранилището.</string>
   <string id="24097">Желаете ли да я изключите от системата?</string>
   <string id="24098">Повреден</string>
   <string id="24099">Желаете ли да превключите на тази кожа?</string>
+  <string id="24100">За да използвате това свойство, трябва да свалите добавка:</string>
+  <string id="24101">Желаете ли да свалите тази добавка?</string>
   <string id="25000">Известия</string>
 
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29801">QWERTY клавиатура</string>
   <string id="29802">Passthrough Аудио се използва</string>
 
-  <string id="29999"></string>
-
   <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
   <!-- strings 31000 thru 31999 reserved for skins -->
   <!-- strings 32000 thru 32999 reserved for scripts -->
   <string id="33082">Път до скрипт</string>
   <string id="33083">Включи потребителски скрипт бутон</string>
 
+  <string id="33100">Неуспешен старт</string>
+  <string id="33101">Уеб сървър</string>
+  <string id="33102">Сървър на събития</string>
+  <string id="33103">Отдалечен комуникационен сървър</string>
+
+  <!-- translators: no need to add these to your language files -->
+  <string id="34000">Lame</string>
+  <string id="34001">Vorbis</string>
+  <string id="34002">Wav</string>
+  <string id="34003">DXVA2</string>
+  <string id="34004">VAAPI</string>
+  <string id="34005">Flac</string>
+
+  <string id="34100">Конфигурация на високоговорители</string>
+  <string id="34101">2.0</string>
+  <string id="34102">2.1</string>
+  <string id="34103">3.0</string>
+  <string id="34104">3.1</string>
+  <string id="34105">4.0</string>
+  <string id="34106">4.1</string>
+  <string id="34107">5.0</string>
+  <string id="34108">5.1</string>
+  <string id="34109">7.0</string>
+  <string id="34110">7.1</string>
+  <!-- 34112-34200 reserved for future use -->
+
+  <string id="34201">Не мога да намеря следващ файл за просвирване</string>
+  <string id="34202">Не мога да намеря предишен файл за просвирване</string>
+
+  <string id="35000">Периферия</string>
+
+  <string id="35001">HID устройство</string>
+  <string id="35002">Мрежов адаптер</string>
+  <string id="35003">Диск</string>
+  <string id="35004">Няма достъпни настройки&#10;за това устройство.</string>
+  <string id="35005">Ново устройство конфигурирано</string>
+  <string id="35006">Устройството премахнато</string>
+  <string id="35007">Клавиши за това устройство</string>
+  <string id="35008">Клавиши активирани</string>
+
+  <string id="35500">Местоположение</string>
+  <string id="35501">Клас</string>
+  <string id="35502">Име</string>
+  <string id="35503">Доставчик</string>
+  <string id="35504">Продукт ID</string>
+
+  <string id="36000">Pulse-Eight CEC адаптер</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Превключи на клавиатура</string>
+  <string id="36003">Превключи на отдалечена страна</string>
+  <string id="36004">Натисни "user" бутон</string>
+  <string id="36005">Включи превключване на управление</string>
+  <string id="36006">Не мога да отворя адаптера</string>
+  <string id="36007">Включи телевизора, когато стартира XBMC</string>
+  <string id="36008">Изключи устройства, когато спира XBMC</string>
+  <string id="36009">Сложи устройствата на стендбай, когато се активира скрийнсейвър</string>
+  <string id="36010"></string>
+  <string id="36011">Не мога да открия  порт CEC. Настройте ръчно.</string>
+  <string id="36012">Не мога да открия  адаптер CEC.</string>
+  <string id="36013">Неподдържана libcec интерфейс версия. %d е по-голяма от поддържаната от XBMC (%d)</string>
+  <string id="36014">Компютъра на стендбай, когато телевизора е изключен</string>
+  <string id="36015">HDMI номер</string>
+  <string id="36016">Свързан</string> <!-- max. 13 characters -->
+  <string id="36017">Адаптера е намерен, но libcec не е достъпен</string>
+  <string id="36018">Ползвай езиковите настройки на телевизора</string>
 </strings>
index 1d2561c..cdf0d70 100644 (file)
   
   <string id="1270">Permet que l'XBMC rebi contingut de l'AirPlay</string>
   <string id="1271">Nom del dispositiu</string>
+  <string id="1272">- Utilitza protecció amb contrasenya</string>
 
   <string id="1300">Dispositiu d'àudio personalitzat</string>
   <string id="1301">Custom passthrough device</string>
   <string id="16020">Desentrellaçat</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (invertit)</string>
-  <string id="16023">Manejador entrellaçat</string>
+  <string id="16023"></string>
   <string id="16024">S'està cancel·lant...</string>
   <string id="16025">Introduïu el nom de l'artista</string>
   <string id="16026">La reproducció ha fallat</string>
   <string id="16027">Un o més ítems no s'han pogut reproduir.</string>
   <string id="16028">Introduïu el valor</string>
-  <string id="16029">Check the log file for details.</string>
+  <string id="16029">Comproveu el fitxer de registre per obtenir més detalls.</string>
   <string id="16030">Mode festa abortat.</string>
   <string id="16031">Sense cançons coincidents a la biblioteca</string>
   <string id="16032">No s'ha pogut inicialitzar la base de dades.</string>
   <string id="16033">No s'ha pogut obrir la base de dades.</string>
   <string id="16034">No s'han pogut obtenir les cançons de la base de dades.</string>
-  <string id="16035">Lllista de reproducció del mode festa</string>
+  <string id="16035">Llista de reproducció del mode festa</string>
   <string id="16036">Desentrellaçat (Half)</string>
+  <string id="16037">Deinterlace video</string>
+  <string id="16038">Mètode de desentrellaçat</string>
+  <string id="16039">Off</string>
+  <string id="16040">Auto</string>
+  <string id="16041">On</string>
 
   <string id="16100">Tots els vídeos</string>
   <string id="16101">No visualitzats</string>
   <string id="16321">DXVA Best</string>
   <string id="16322">Spline36</string>
   <string id="16323">Spline36 optimitzat</string>
+  <string id="16324">Software Blend</string>
 
   <string id="16400">Postprocessament</string>
 
   <string id="20258">Client de MythTV</string>
   <string id="20259">Network Filesystem (NFS)</string>
   <string id="20260">Secure Shell (SSH/SFTP)</string>
-  <string id="20261">Apple File Protocol (AFP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
 
   <string id="20300">Directori del servidor web (HTTP)</string>
   <string id="20301">Directori dels servidor web (HTTPS)</string>
   <string id="21336">S'està connectant a: %s</string>
   <string id="21337">Unitat de TuxBox</string>
   <!-- up to 21355 is reserved for the TuxBox Client!! !-->
-
+  
   <string id="21359">Afegeix recurs compartit...</string>
   <string id="21360">Comparteix les biblioteques de vídeo i música a través de UPnP</string>
-
+  
   <string id="21364">Edita recurs compartit</string>
   <string id="21365">Elimina recurs compartit</string>
   <string id="21366">Carpeta del subtítol</string>
   <string id="21367">Movie &amp; alternate subtitle directory</string>
-
-  <string id="21369">Activa el ratolí</string>
+  <string id="21368">Substitueix les fonts dels subtítols ASS/SSA</string>
+  
+  <string id="21369">Activa el suport de ratolí i pantalla tàctil</string>
   <string id="21370">Reprodueix els sons de navegació durant la reproducció</string>
   <string id="21371">Miniatura</string>
   <string id="21372">Força la regió del reproductor DVD</string>
   <string id="24073">No s'ha pogut connectar</string>
   <string id="24074">És necessari reiniciar</string>
   <string id="24075">Desactiva</string>
+  <string id="24076">Complement necessari</string>
   <string id="24080">Voleu tornar a provar de connectar?</string>
   <string id="24089">Reinicia el complement</string>
   <string id="24090">Bloqueja el gestor de complements</string>
   <string id="24097">Voleu desactivar-lo en el sistema?</string>
   <string id="24098">Trencat</string>
   <string id="24099">Voleu canviar a aquesta aparença?</string>
+  <string id="24100">Per utilitzar aquesta funció cal descarregar un complement:</string>
+  <string id="24101">Voleu descarregar aquest complement?</string>
   <string id="25000">Notificacions</string>
 
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   
   <string id="34201">Can't find a next item to play</string>
   <string id="34202">Can't find a previous item to play</string>
+  
+  <string id="35000">Perifèrics</string>
+  <string id="35001">Generic HID device</string>
+  <string id="35002">Adaptador de xarxa genèric</string>
+  <string id="35003">Disc genèric</string>
+  <string id="35004">No hi ha opcions disponibles&#10;per aquest perifèric.</string>
+  <string id="35005">Nou dispositiu configurat</string>
+  <string id="35006">Dispositiu eliminat</string>
+  <string id="35007">Keymap to use for this device</string>
+  <string id="35008">Mapa de teclat activat</string>
+  
+  <string id="35500">Ubicació</string>
+  <string id="35501">Classe</string>
+  <string id="35502">Nom</string>
+  <string id="35503">Venedor</string>
+  <string id="35504">Product ID</string>
+  
+  <string id="36000">Pulse-Eight CEC adapter</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Switch to keyboard side command</string>
+  <string id="36003">Switch to remote side command</string>
+  <string id="36004">Press "user" button command</string>
+  <string id="36005">Enable switch side commands</string>
+  <string id="36006">Could not open the adapter</string>
+  <string id="36007">Power on the TV when starting XBMC</string>
+  <string id="36008">Power off devices when stopping XBMC</string>
+  <string id="36009">Put devices in standby mode when activating screensaver</string>
+  <string id="36010"></string>
+  <string id="36011">Could not detect the CEC port. Set it up manually.</string>
+  <string id="36012">Could not detect the CEC adapter.</string>
+  <string id="36013">Unsupported libcec interface version. %d is greater than the version XBMC supports (%d)</string>
+  <string id="36014">Put this PC in standby mode when the TV is switched off</string>
+  <string id="36015">Número de port HDMI</string>
+  <string id="36016">Connectat</string> <!-- max. 13 characters -->
+  <string id="36017">S'ha trobat un adaptador, però la libcec no està disponible</string>
+  <string id="36018">Use the TV's language setting</string>
 </strings>
index 49397a5..5bb6ccc 100644 (file)
   <string id="10019">设置-&gt;用户界面</string>
   <string id="10020">脚本</string>
   <string id="10021">网页浏览器</string>
-
+  <string id="10025">视频</string>
   <string id="10028">视频/播放列表</string>
+  <string id="10029">登录屏</string>
   <string id="10034">设置-&gt;用户配置</string>
+  <string id="10040">扩展功能浏览器</string>
 
   <string id="10100">"是/否"对话框</string>
   <string id="10101">进度对话框</string>
   <string id="16321">DXVA 最优</string>
   <string id="16322">Spline36</string>
   <string id="16323">Spline36 优化</string>
+  <string id="16324">软件混合</string>
 
   <string id="16400">后处理</string>
 
   <string id="20326">这个操作会重新校准%s的配置</string>
   <string id="20327">还原为初时配置</string>
   <string id="20328">选择指定位置</string>
-
+  <string id="20329">电影在以片名命名的单独目录中</string>
   <string id="20330">以文件夹名来查找</string>
   <string id="20331">文件</string>
   <string id="20332">用文件夹名或文件名进行查找?</string>
   <string id="20416">最初发表</string>
   <string id="20417">编剧</string>
   <string id="20418"></string>
-  <string id="20419">文件视图显示媒体标识信息</string>
+  <string id="20419">用资料库标题替换文件名</string>
 
   <string id="20420">从不</string>
   <string id="20421">如果只有一季</string>
   <string id="20455">听众</string>
   <string id="20456">设置影片集同人画</string>
   <string id="20457">影片集</string>
+  <string id="20458">电影按影片集分组</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">显示隐藏文件和目录</string>
   <string id="21364">编辑媒体共享</string>
   <string id="21365">移除媒体共享</string>
   <string id="21366">字幕目录</string>
-  <string id="21367">视频和相关字幕目录</string>
+  <string id="21367">视频和备用字幕目录</string>
+  <string id="21368">取代 ASS/SSA 字幕字体</string>
 
-  <string id="21369">使用鼠标</string>
+  <string id="21369">启用鼠标和触摸屏支持</string>
   <string id="21370">在播放媒体文件时播放导航声效</string>
   <string id="21371">缩略图</string>
   <string id="21372">强制 DVD 播放器区码</string>
   <string id="21451">需要访问互联网。</string>
   <string id="21452">获取更多...</string>
   <string id="21453">根文件系统</string>
+  <string id="21454">缓存满</string>
+  <string id="21455">缓存在达到连续播放所需数量之前已满</string>
 
   <string id="21460">字幕位置</string>
   <string id="21461">固定</string>
   <string id="33102">事件服务器</string>
   <string id="33103">远程通信服务器</string>
 
+  <string id="33200">检测到新的连接</string>
+
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
 
   <string id="34201">未找到下一播放项目</string>
   <string id="34202">未找到上一播放项目</string>
+
+  <string id="34300">启动 zeroconf 失败</string>
+  <string id="34301">Apple 的 Bonjour 服务是否已安装?更多信息见日志记录。</string>
+
+  <string id="34400">视频渲染</string>
+  <string id="34401">视频滤镜/缩放器初始化失败,使用双线性缩放</string>
+  <string id="34402">音频设备初始化失败</string>
+  <string id="34403">检查你的音频设置</string>
+
+  <string id="35000">外部设备</string>
+
+  <string id="35001">通用 HID 设备</string>
+  <string id="35002">通用网络适配器</string>
+  <string id="35003">通用硬盘驱动器</string>
+  <string id="35004">此设备无可用设置。</string>
+  <string id="35005">新设备已配置</string>
+  <string id="35006">设备已移除</string>
+  <string id="35007">用于此设备的键盘映射</string>
+  <string id="35008">键盘映射已启用</string>
+
+  <string id="35500">位置</string>
+  <string id="35501">设备类型</string>
+  <string id="35502">名称</string>
+  <string id="35503">提供商</string>
+  <string id="35504">产品 ID</string>
+  
+  <string id="36000">Pulse-Eight CEC 适配器</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">切换到键盘指令</string>
+  <string id="36003">切换到遥控器指令</string>
+  <string id="36004">按“user”键指令</string>
+  <string id="36005">启用指令模式切换</string>
+  <string id="36006">无法打开适配器</string>
+  <string id="36007">启动XBMC时开启电视</string>
+  <string id="36008">退出XBMC时关闭设备</string>
+  <string id="36009">激活屏幕保护程序时设备进入待机状态</string>
+  <string id="36010"></string>
+  <string id="36011">未检测到 CEC 端口。需人工设置。</string>
+  <string id="36012">未检测到 CEC 适配器。</string>
+  <string id="36013">不支持的 libcec 界面版本。%d 高于 XBMC 支持的版本(%d)</string>
+  <string id="36014">电视关闭时本计算机进入待机状态</string>
+  <string id="36015">HDMI 端口号</string>
+  <string id="36016">XBMC 已连接</string> <!-- max. 13 characters -->
+  <string id="36017">发现适配器,但 libcec 不可用</string>
+  <string id="36018">使用电视机语言设置</string>
 </strings>
index 628e56d..232c30f 100644 (file)
@@ -1,8 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--Language file translated with Team XBMC Translator-->
-<!--Date of translation: 07/05/2011-->
+<!--Date of translation: 03/07/2012-->
 <!--$Revision$-->
-<!--Based on english strings version ....-->
 <strings>
   <string id="0">程式</string>
   <string id="1">圖片</string>
@@ -14,7 +13,6 @@
   <string id="7">檔案總管</string>
   <string id="8">氣象</string>
   <string id="9">xbmc 媒體中心</string>
-  
   <string id="11">星期一</string>
   <string id="12">星期二</string>
   <string id="13">星期三</string>
@@ -22,7 +20,6 @@
   <string id="15">星期五</string>
   <string id="16">星期六</string>
   <string id="17">星期日</string>
-  
   <string id="21">一月</string>
   <string id="22">二月</string>
   <string id="23">三月</string>
@@ -35,7 +32,6 @@
   <string id="30">十月</string>
   <string id="31">十一月</string>
   <string id="32">十二月</string>
-  
   <string id="41">周一</string>
   <string id="42">周二</string>
   <string id="43">周三</string>
@@ -43,7 +39,6 @@
   <string id="45">周五</string>
   <string id="46">周六</string>
   <string id="47">周日</string>
-  
   <string id="51">1月</string>
   <string id="52">2月</string>
   <string id="53">3月</string>
@@ -56,7 +51,6 @@
   <string id="60">10月</string>
   <string id="61">11月</string>
   <string id="62">12月</string>
-  
   <string id="71">北</string>
   <string id="72">北北東</string>
   <string id="73">東北</string>
@@ -74,7 +68,6 @@
   <string id="85">西北</string>
   <string id="86">北北西</string>
   <string id="87">多方向</string>
-  
   <string id="98">顯示:自動</string>
   <string id="99">顯示:自動大圖示</string>
   <string id="100">顯示:圖示</string>
@@ -90,6 +83,8 @@
   <string id="110">建立縮略圖</string>
   <string id="111">捷徑</string>
   <string id="112">暫停</string>
+  <string id="113">更新失敗</string>
+  <string id="114">安裝失敗</string>
   <string id="115">複製</string>
   <string id="116">移動</string>
   <string id="117">刪除</string>
   <string id="164">無光碟</string>
   <string id="165">光碟介紹</string>
   <string id="166">佈景主題</string>
-  
   <string id="169">解析度</string>
   <string id="170">調整視訊更新頻率以符合視訊</string>
   <string id="172">發行日期</string>
   <string id="173">播放4:3影片的方式</string>
-  
   <string id="175">主題</string>
   <string id="176">風格</string>
-  
   <string id="179">歌曲</string>
   <string id="180">持續時間</string>
   <string id="181">選擇專輯</string>
   <string id="197">讀取 %s 資訊</string>
   <string id="198">載入影片詳細資料</string>
   <string id="199">Web 介面</string>
-  
   <string id="202">標題</string>
   <string id="203">大綱</string>
-  
   <string id="205">得票:</string>
   <string id="206">演員表</string>
   <string id="207">簡介</string>
   <string id="221">網路未連線</string>
   <string id="222">取消</string>
   <string id="224">速度</string>
+  <string id="225">垂直位移</string>
   <string id="226">測試圖案…</string>
   <string id="227">在 freedb 查詢音樂 CD 資訊</string>
   <string id="228">隨機播放列表</string>
   <string id="243">更新頻率</string>
   <string id="244">全螢幕</string>
   <string id="245">縮放中:(%i,%i)-&gt;(%i,%i) (縮放 x%2.2f) AR:%2.2f:1 (像素: %2.2f:1)</string>
-  
   <string id="247">腳本</string>
   <string id="248">語言</string>
   <string id="249">音樂</string>
   <string id="282">找到 %i 條</string>
   <string id="283">搜尋結果</string>
   <string id="284">無結果</string>
-  
   <string id="287">字幕設定</string>
   <string id="288">字型</string>
   <string id="289">- 大小</string>
   <string id="304">語言</string>
   <string id="305">啟用</string>
   <string id="306">非交錯掃描</string>
-  
   <string id="312">(0=自動)</string>
   <string id="313">正在清除資料庫</string>
   <string id="314">準備中…</string>
   <string id="404">風</string>
   <string id="405">露點</string>
   <string id="406">濕度</string>
-  
   <string id="409">預設值</string>
   <string id="410">前往氣象伺服器</string>
   <string id="411">取得氣象資料:</string>
   <string id="418">低溫</string>
   <string id="419">高溫</string>
   <string id="420">HDMI</string>
-  
   <string id="422">刪除專輯資訊</string>
   <string id="423">刪除 CD 資訊</string>
   <string id="424">選擇</string>
   <string id="431">無緩衝區</string>
   <string id="432">從資料庫中移除影片</string>
   <string id="433">確定移除 '%s' 嗎?</string>
-  <string id="434">方向方位%s、風速%i %s</string> <!--From <wind dir.> at <speed> <unit>-->
+  <string id="434">方向方位%s、風速%i %s</string>
   <string id="437">隨身碟</string>
   <string id="438">打開檔案</string>
   <string id="439">快取</string>
   <string id="480">外觀主題</string>
   <string id="481">音效設定</string>
   <string id="482">關於 XBMC</string>
-  
   <string id="485">刪除專輯</string>
   <string id="486">重複</string>
   <string id="487">重複一次</string>
   <string id="513">主界面</string>
   <string id="514">設定界面</string>
   <string id="515">類別</string>
-  
   <string id="517">最近播放的專輯</string>
   <string id="518">執行</string>
   <string id="519">執行方式…</string>
-  
   <string id="521">編輯</string>
   <string id="522">移除來源</string>
   <string id="523">切換媒體</string>
   <string id="546">通過輸出裝置</string>
   <string id="547">此藝人沒有傳記</string>
   <string id="548">混合多聲道輸出為雙聲道</string>
-  
   <string id="550">排序:%s</string>
   <string id="551">名稱</string>
   <string id="552">日期</string>
   <string id="572">製作公司</string>
   <string id="573">路徑</string>
   <string id="574">國家</string>
-  <string id="575">進度</string> 
+  <string id="575">進度</string>
   <string id="576">已播放時間</string>
   <string id="580">排序方向</string>
   <string id="581">排序方法</string>
   <string id="582">顯示模式</string>
   <string id="595">重複:關閉</string>
   <string id="596">重複:單首</string>
   <string id="597">重複:全部</string>
-  
   <string id="600">擷取音樂 CD</string>
   <string id="601">中等</string>
   <string id="602">標準</string>
   <string id="603">最高</string>
   <string id="604">指定頻率</string>
   <string id="605">擷取中…</string>
-  
   <string id="607">儲存到:</string>
   <string id="608">無法擷取 CD 或音軌</string>
   <string id="609">CD 擷取路徑未設定。</string>
   <string id="611">輸入數字</string>
   <string id="612">Bits/取樣</string>
   <string id="613">取樣頻率</string>
-  
   <string id="620">音樂 CD 擷取</string>
   <string id="621">編碼</string>
   <string id="622">品質</string>
   <string id="657">瀏覽資料夾</string>
   <string id="658">歌曲資訊</string>
   <string id="659">非線性延伸</string>
-  
   <string id="660">音量放大</string>
   <string id="661">選擇匯出資料夾</string>
   <string id="662">這個檔案已經無法使用。</string>
   <string id="663">你要將它從資料庫移除嗎?</string>
   <string id="664">流覽腳本</string>
   <string id="665">壓縮等級</string>
-  
   <string id="700">清除音樂資料庫</string>
   <string id="701">移除音樂資料庫舊歌曲</string>
   <string id="702">目前路徑曾經搜尋過</string>
   <string id="705">網路設定</string>
   <string id="706">- 伺服器</string>
-  
   <string id="708">啟用 HTTP 代理伺服器</string>
-  
   <string id="711">網路位址(IP)</string>
   <string id="712">無效的連接埠,數值必須是 1 至 65535。</string>
   <string id="713">HTTP 代理伺服器</string>
-  
   <string id="715">- 分配</string>
   <string id="716">自動(動態分配)</string>
   <string id="717">手動(靜態分配)</string>
-  
   <string id="719">- IP 位址</string>
   <string id="720">- 子網路遮罩</string>
   <string id="721">- 預設閘道</string>
   <string id="726">改變未儲存. 不儲存就離開嗎?</string>
   <string id="727">Web 伺服器</string>
   <string id="728">FTP 伺服器</string>
-  
   <string id="730">- 連接埠</string>
-  
   <string id="732">儲存 &amp; 套用</string>
   <string id="733">- 密碼</string>
   <string id="734">無密碼</string>
   <string id="749">映像</string>
   <string id="750">您確定嗎?</string>
   <string id="751">移除來源</string>
-  
   <string id="754">新增程式連結</string>
   <string id="755">編輯程式路徑</string>
   <string id="756">編輯程式名稱</string>
   <string id="757">編輯路徑深度</string>
-  
   <string id="759">顯示:大列表</string>
   <string id="760">黃色</string>
   <string id="761">白色</string>
   <string id="765">青色</string>
   <string id="766">保留</string>
   <string id="767">保留</string>
-  <!-- strings 768 and 769 reserved for more subtitle colors -->
-  
   <string id="770">錯誤 %i:無法共享</string>
-  
   <string id="772">音效輸出</string>
   <string id="773">搜尋中</string>
   <string id="774">圖片資料夾</string>
   <string id="787">關閉網路界面</string>
   <string id="788">順利關閉網路界面。</string>
   <string id="789">無線網路帳號(ESSID)</string>
-  
   <string id="791">允許這個系統的程式控制XBMC</string>
   <string id="792">遠端伺服器埠號</string>
   <string id="793">遠端伺服器埠號範圍</string>
   <string id="796">連續重複延遲(毫秒)</string>
   <string id="797">最大客戶端數</string>
   <string id="798">網際網路訪問</string>
-  
   <string id="850">輸入不合法的連接埠</string>
   <string id="851">合法的連接埠範圍是 1-65535</string>
   <string id="852">合法的連接埠範圍是 1024-65535</string>
-  
+  <string id="998">新增音樂...</string>
+  <string id="999">新增影片...</string>
   <string id="1000">- 預覽</string>
   <string id="1001">無法連線</string>
   <string id="1002">XBMC 無法連線到網路。</string>
   <string id="1003">這可能是由於網路沒有連線。</string>
   <string id="1004">可以用其他方式來新增它嗎?</string>
-  
   <string id="1006">IP 位址</string>
   <string id="1007">新增網路位置</string>
   <string id="1008">協定</string>
   <string id="1049">腳本設定</string>
   <string id="1050">單曲</string>
   <string id="1051">輸入網路位址</string>
-  
   <string id="1200">SMB 共享設定</string>
   <string id="1202">工作群組</string>
   <string id="1203">預設帳號</string>
   <string id="1204">預設密碼</string>
-  
   <string id="1207">WINS 伺服器</string>
   <string id="1208">掛載 SMB 分享</string>
-  
   <string id="1210">移除</string>
   <string id="1211">音樂</string>
   <string id="1212">視訊</string>
   <string id="1233">程式 &amp; 視訊 &amp; 音樂</string>
   <string id="1234">程式 &amp; 圖片 &amp; 音樂</string>
   <string id="1235">程式 &amp; 圖片 &amp; 視訊</string>
-  
   <string id="1250">自動偵測</string>
   <string id="1251">自動偵測系統</string>
   <string id="1252">暱稱</string>
-  
   <string id="1254">詢問連線</string>
   <string id="1255">發送 FTP 帳號和密碼</string>
   <string id="1256">連線品質</string>
   <string id="1257">是否連線到自動偵測到的系統?</string>
-  
   <string id="1260">自動網路設定</string>
-  
+  <string id="1270">允許XBMC接收AirPlay內容</string>
+  <string id="1271">裝置名稱</string>
+  <string id="1272">- 使用密碼保護</string>
   <string id="1300">自訂音效設備</string>
   <string id="1301">自訂直通輸出設備</string>
-  
   <string id="1396">移動</string>
   <string id="1397">有</string>
   <string id="1398">結冰</string>
   <string id="1421">非常高</string>
   <string id="1422">風</string>
   <string id="1423">靄</string>
-  
-  <!-- strings through to 1450 reserved for weather translation -->
   <string id="1450">閒置時顯示器休眠</string>
-  <!-- strings through to 1470 reserved for power-saving -->
-  
   <string id="2050">視訊時間</string>
-  
   <string id="2100">腳本錯誤!:%s</string>
   <string id="2101">需要更新的版本 - 看記錄</string>
-  
   <string id="4501">啟用 LCD/VFD</string>
-  
   <string id="10000">首頁</string>
   <string id="10001">程式</string>
   <string id="10002">圖片</string>
   <string id="10019">設定 - 佈景主題</string>
   <string id="10020">腳本</string>
   <string id="10021">網路瀏覽器</string>
-  
+  <string id="10025">視訊</string>
   <string id="10028">視訊/播放列表</string>
+  <string id="10029">登入畫面</string>
   <string id="10034">設定 - 使用者設定檔</string>
-  
+  <string id="10040">附加元件瀏覽器</string>
   <string id="10100">確認對話框</string>
   <string id="10101">進度對話框</string>
-  
   <string id="10210">正在尋找字幕…</string>
   <string id="10211">正在尋找或者快取字幕…</string>
   <string id="10212">結束中</string>
   <string id="10213">緩衝中</string>
   <string id="10214">打開串流媒體</string>
-  
   <string id="10500">音樂/播放列表</string>
   <string id="10501">音樂/檔案</string>
   <string id="10502">音樂/資料庫</string>
   <string id="10509">網路遊戲</string>
   <string id="10510">擴充功能</string>
   <string id="10511">系統資訊</string>
-  
   <string id="10516">音樂 - 資料庫</string>
   <string id="10517">現正播放 - 音樂</string>
-  
   <string id="10522">現在播放 - 視訊</string>
   <string id="10523">專輯資訊</string>
   <string id="10524">電影資訊</string>
-  
   <string id="12000">選擇對話</string>
   <string id="12001">音樂/資訊</string>
   <string id="12002">確認</string>
   <string id="12004">腳本/資訊</string>
   <string id="12005">全螢幕視訊</string>
   <string id="12006">音效視覺效果</string>
-  
   <string id="12008">檔案堆疊對話框</string>
   <string id="12009">重建目錄索引…</string>
   <string id="12010">返回音樂視窗</string>
   <string id="12011">返回視訊視窗</string>
-  
   <string id="12021">從頭開始播放</string>
   <string id="12022">從 %s 開始播放</string>
-  
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12377">將重設之前的設定</string>
   <string id="12378">顯示各個圖像</string>
   <string id="12379">使用移動和縮放特效</string>
-  
   <string id="12383">12小時制</string>
   <string id="12384">24小時制</string>
   <string id="12385">日/月</string>
   <string id="12386">月/日</string>
-  
   <string id="12390">系統已運作時間</string>
   <string id="12391">分鐘</string>
   <string id="12392">小時</string>
   <string id="12393">天</string>
   <string id="12394">累計運作時間</string>
-  
+  <string id="12395">電池狀態</string>
   <string id="12600">氣象</string>
-  
   <string id="12900">螢幕保護</string>
   <string id="12901">全螢幕畫面調整</string>
-  
   <string id="13000">系統設定</string>
   <string id="13001">立即關閉硬碟</string>
   <string id="13002">只有視訊</string>
   <string id="13003">- 延遲</string>
   <string id="13004">- 最小媒體檔案長度</string>
   <string id="13005">關機</string>
-  
   <string id="13008">預設關機模式</string>
   <string id="13009">退出</string>
   <string id="13010">休眠</string>
   <string id="13014">最小化</string>
   <string id="13015">電源按鈕作用</string>
   <string id="13016">關閉系統</string>
-  
   <string id="13020">是否有透過 ssh 連接的會話存在?</string>
   <string id="13021">掛載行動碟</string>
   <string id="13022">不安全的移除裝置</string>
   <string id="13023">順利的移除裝置</string>
   <string id="13024">手把連接</string>
   <string id="13025">手把沒有連接</string>
-  
   <string id="13050">電池電量不足</string>
-  
   <string id="13100">閃爍過濾</string>
   <string id="13101">讓驅動選擇(必須重新啟動)</string>
   <string id="13105">垂直空白同步</string>
   <string id="13109">測試解析度</string>
   <string id="13110">儲存此解析度?</string>
   <string id="13111">是否儲存此解析度?</string>
-  
   <string id="13112">高品質軟體升頻</string>
   <string id="13113">停用</string>
   <string id="13114">在480解析度時啟用</string>
   <string id="13115">始終啟用</string>
-  
   <string id="13116">升頻方式</string>
   <string id="13117">Bicubic</string>
   <string id="13118">Lanczos</string>
   <string id="13120">VDPAU 硬體解碼</string>
   <string id="13121">VDPAU 高品質倍線等級</string>
   <string id="13122">VDPAU 視聽室等級色彩轉換</string>
-  
   <string id="13130">顯示空白</string>
   <string id="13131">停用</string>
   <string id="13132">空白顯示</string>
-  
   <string id="13140">主動偵測連接!</string>
   <string id="13141">如果你繼續,你也許會不能控制 XBMC</string>
   <string id="13142">更長的時間,你是否確定停止事件伺服器?</string>
-  
   <string id="13144">更改 Apple 遙控器模式?</string>
   <string id="13145">如果你正使用 Apple 遙控器來控制</string>
   <string id="13146">XBMC,更改此設定可能會影響到你</string>
   <string id="13147">繼續控制它,你要繼續嗎?</string>
-  
   <string id="13159">子網路遮罩</string>
   <string id="13160">閘道位址</string>
   <string id="13161">主要的 DNS 位址</string>
   <string id="13162">初始化失敗</string>
-  
   <string id="13170">從不</string>
   <string id="13171">立即</string>
   <string id="13172">隔 %i 秒之後</string>
   <string id="13173">硬碟安裝日期:</string>
   <string id="13174">硬碟運轉週期:</string>
-  
   <string id="13200">設定檔</string>
   <string id="13201">要刪除設定檔 '%s' 嗎?</string>
   <string id="13204">最近載入的設定檔:</string>
   <string id="13212">鬧鈴取消,剩下 %i 分 %i 秒</string>
   <string id="13213">%2.0f分</string>
   <string id="13214">%2.0f秒</string>
-  
   <string id="13249">掃瞄 RAR 檔案中的字幕</string>
   <string id="13250">瀏覽字幕…</string>
   <string id="13251">移動該項目</string>
   <string id="13252">將項目移動至此</string>
   <string id="13253">取消移動</string>
-  
   <string id="13270">硬體:</string>
   <string id="13271">CPU 使用率:</string>
-  
   <string id="13274">已連線,但是 DNS 無法使用。</string>
   <string id="13275">硬碟</string>
   <string id="13276">光碟機</string>
   <string id="13279">網路</string>
   <string id="13280">視訊</string>
   <string id="13281">硬體</string>
-  
   <string id="13283">作業系統:</string>
   <string id="13284">CPU 速度:</string>
-  
   <string id="13286">視訊晶片:</string>
   <string id="13287">螢幕解析度:</string>
-  
   <string id="13292">影音端子:</string>
-  
   <string id="13294">DVD 區碼:</string>
   <string id="13295">網際網路:</string>
   <string id="13296">已連線</string>
   <string id="13297">無法連線,請檢查網路設定。</string>
-  
   <string id="13299">目標溫度</string>
   <string id="13300">風扇轉速</string>
   <string id="13301">自動控溫</string>
   <string id="13334">編輯標籤</string>
   <string id="13335">設為預設值</string>
   <string id="13336">移除按鍵</string>
-  
   <string id="13340">讓它為</string>
   <string id="13341">綠色</string>
   <string id="13342">橙色</string>
   <string id="13409">排名前250</string>
   <string id="13410">收聽 Last.FM</string>
   <string id="13411">最低風扇轉速</string>
+  <string id="13412">從這裡開始播放</string>
   <string id="13413">下載中</string>
   <string id="13414">隱藏只在編輯出現的藝人</string>
   <string id="13415">渲染模式</string>
   <string id="13430">允許硬體加速 (OpenMax)</string>
   <string id="13431">Pixel Shaders</string>
   <string id="13432">允許硬體加速(VideoToolbox)</string>
-  
   <string id="13500">影音同步方式</string>
   <string id="13501">音效為主</string>
   <string id="13502">視訊為主(放棄/重複音效)</string>
   <string id="13508">高</string>
   <string id="13509">極高(慢!)</string>
   <string id="13510">同步重播顯示</string>
   <string id="13550">當變更更新率時暫停</string>
   <string id="13551">關閉</string>
   <string id="13552">%.1f秒</string>
   <string id="13553">%.1f秒</string>
-
   <string id="13600">Apple 遙控器</string>
-  
   <string id="13602">允許用遙控器啟動 XBMC</string>
   <string id="13603">序列延遲時間</string>
-  
   <string id="13610">關閉</string>
   <string id="13611">標準</string>
   <string id="13612">通用遙控器</string>
   <string id="13613">萬能遙控器(Harmony)</string>
-  
   <string id="13620">Apple 遙控器錯誤</string>
   <string id="13621">Apple 遙控器支援啟用。</string>
-  
   <string id="14000">堆疊開啟</string>
   <string id="14001">堆疊關閉</string>
   <string id="14003">下載播放列表檔案…</string>
   <string id="14005">分析串流媒體列表…</string>
   <string id="14006">下載串流媒體列表失敗</string>
   <string id="14007">下載播放列表檔案失敗</string>
-  
   <string id="14009">遊戲目錄</string>
   <string id="14010">自動切換為縮圖顯示</string>
   <string id="14011">啟用 自動切換為縮圖顯示</string>
   <string id="14034">光碟緩衝區 - 光碟機</string>
   <string id="14035">光碟緩衝區 - 區域網路</string>
   <string id="14036">服務</string>
-  
   <string id="14038">網路設定已改變</string>
   <string id="14039">XBMC 需要重新啟動以改變您的</string>
   <string id="14040">網路設定。 你要現在重新啟動嗎?</string>
   <string id="14041">網際網路連線頻寬限制</string>
-  
   <string id="14043">- 播放時關機</string>
   <string id="14044">%i 分</string>
   <string id="14045">%i 秒</string>
   <string id="14051">時間格式</string>
   <string id="14052">日期格式</string>
   <string id="14053">畫面濾鏡</string>
-  
   <string id="14055">使用背景搜尋</string>
   <string id="14056">停止搜尋</string>
   <string id="14057">無法搜尋媒體資訊</string>
   <string id="14069">現在套用這些設定嗎?</string>
   <string id="14070">現在套用改變</string>
   <string id="14071">允許重新命名和刪除檔案</string>
-  
   <string id="14074">設定時區</string>
   <string id="14075">使用日光節約時間</string>
   <string id="14076">加入我的最愛</string>
   <string id="14093">安全</string>
   <string id="14094">輸入裝置</string>
   <string id="14095">省電模式</string>
-  
   <string id="15015">移除</string>
   <string id="15016">遊戲</string>
-  
   <string id="15019">新增</string>
-  
   <string id="15052">密碼</string>
-  
   <string id="15100">瀏覽</string>
   <string id="15101">資料庫</string>
   <string id="15102">* 所有專輯</string>
   <string id="15103">* 所有藝人</string>
   <string id="15104">* 所有歌曲</string>
   <string id="15105">* 所有類別</string>
-  
   <string id="15107">緩衝中…</string>
   <string id="15108">按鍵音效</string>
   <string id="15109">佈景主題預設</string>
   <string id="15111">- 主題</string>
   <string id="15112">預設主題</string>
-  
   <string id="15200">Last.fm</string>
   <string id="15201">提交歌曲資訊到 Last.fm</string>
   <string id="15202">Last.fm 帳號</string>
   <string id="15219">Libre.fm 密碼</string>
   <string id="15220">Libre.fm</string>
   <string id="15221">提交歌曲</string>
-  
   <string id="15250">上傳電台到 Last.fm</string>
   <string id="15251">連線到 Last.fm…</string>
   <string id="15252">選擇電台…</string>
   <string id="15283">%name% 最近聽過的歌曲</string>
   <string id="15284">收聽 %name% 的推薦在 Last.fm 廣播</string>
   <string id="15285">%name% 的排行</string>
-  
-  <string id="15286">收聽 %name% 的播放列表在 Last.fm 廣播</string>
   <string id="15287">你想把目前歌曲加入你的最愛嗎?</string>
   <string id="15288">你想封鎖目前的歌曲嗎?</string>
   <string id="15289">已加入你的最愛歌曲: '%s'</string>
   <string id="15296">解除封鎖</string>
   <string id="15297">你想從你的最愛移除這首歌曲嗎?</string>
   <string id="15298">你想解除封鎖這首歌曲嗎?</string>
-  
   <string id="15300">路徑錯誤或無效</string>
   <string id="15301">無法連線到網路伺服器</string>
   <string id="15302">找不到伺服器</string>
   <string id="15303">找不到工作群組</string>
-  
   <string id="15310">打開多個來源路徑</string>
   <string id="15311">路徑:</string>
-  
   <string id="16000">一般設定</string>
-  
   <string id="16002">網路查詢</string>
   <string id="16003">播放設定</string>
   <string id="16004">播放光碟</string>
-  
   <string id="16008">輸入新標題</string>
   <string id="16009">輸入影片名稱</string>
   <string id="16010">輸入設定檔名稱</string>
   <string id="16033">無法打開資料庫。</string>
   <string id="16034">無法從資料庫取得歌曲檔案。</string>
   <string id="16035">派對模式播放列表</string>
-  
+  <string id="16039">關閉</string>
+  <string id="16040">自動</string>
+  <string id="16041">開啟</string>
   <string id="16100">所有視訊</string>
   <string id="16101">未看過的</string>
   <string id="16102">已看過的</string>
   <string id="16103">標記成已看過</string>
   <string id="16104">標記成未看過</string>
   <string id="16105">編輯標題</string>
-  
   <string id="16200">操作被取消</string>
   <string id="16201">無法複製</string>
   <string id="16202">至少一個檔案無法複製</string>
   <string id="16204">至少一個檔案無法搬移</string>
   <string id="16205">無法刪除</string>
   <string id="16206">至少一個檔案無法刪除</string>
-  
   <string id="16300">視訊縮放方式</string>
   <string id="16301">Nearest neighbour</string>
   <string id="16302">二元直線</string>
   <string id="16317">時間平滑 (不完全)</string>
   <string id="16318">時間/空間平滑(不完全)</string>
   <string id="16319">DXVA</string>
-  
+  <string id="16324">軟體混合</string>
   <string id="16400">視訊後處理</string>
-  
   <string id="17500">顯示休眠逾時</string>
-  
   <string id="19000">切換到頻道</string>
-  
   <string id="20000">音樂 CD 擷取資料夾</string>
   <string id="20001">使用其他 DVD 播放程式</string>
   <string id="20002">其他 DVD 播放程式</string>
   <string id="20003">金手指資料夾</string>
   <string id="20004">螢幕擷圖資料夾</string>
-  
   <string id="20006">播放列表資料夾</string>
   <string id="20007">錄音</string>
   <string id="20008">螢幕擷圖</string>
   <string id="20009">使用 XBMC</string>
-  
   <string id="20011">音樂播放列表</string>
   <string id="20012">視訊播放列表</string>
   <string id="20013">你要執行該遊戲?</string>
   <string id="20017">本地縮圖</string>
   <string id="20018">無縮圖</string>
   <string id="20019">選擇縮略圖</string>
-  
-  <!-- string id 20022 will always be set to an empty string (LocalizeStrings.cpp)-->
   <string id="20022">
   </string>
   <string id="20023">衝突</string>
   <string id="20024">掃描新加入</string>
   <string id="20025">掃描全部</string>
   <string id="20026">區域</string>
-  
- <!-- string id's 20027 thru 20034 are reserved for temperature strings (LocalizeStrings.cpp)-->
   <string id="20037">摘要</string>
   <string id="20038">鎖定音樂視窗</string>
   <string id="20039">鎖定視訊視窗</string>
   <string id="20053">已離開管理員模式</string>
   <string id="20054">已進入管理員模式</string>
   <string id="20055">Allmusic.com 縮圖</string>
-  
   <string id="20057">移除縮略圖</string>
   <string id="20058">新增設定檔…</string>
   <string id="20059">查詢所有專輯的資訊</string>
   <string id="20184">根據 EXIF 資訊旋轉圖片</string>
   <string id="20185">使用海報模式顯示電視節目</string>
   <string id="20186">請稍候</string>
-  
   <string id="20189">啟用 劇情和評論自動捲動</string>
   <string id="20190">自訂</string>
   <string id="20191">啟用 除錯記錄</string>
   <string id="20197">匯入音樂資料庫</string>
   <string id="20198">找不到藝人!</string>
   <string id="20199">下載藝人資訊失敗</string>
-
-  <!-- string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)-->
-  
   <string id="20250">派對模式!(視訊)</string>
   <string id="20251">Mixing drinks (視訊)</string>
   <string id="20252">Filling glasses (視訊)</string>
   <string id="20258">MythTV 客戶端</string>
   <string id="20259">網路檔案系統(NFS)</string>
   <string id="20260">Secure Shell (SSH/SFTP)</string>
-
   <string id="20300">Web 伺服器目錄(HTTP)</string>
   <string id="20301">Web 伺服器目錄(HTTPS)</string>
   <string id="20302">無法寫入資料夾:</string>
   <string id="20303">你要跳過並繼續嗎?</string>
   <string id="20304">RSS Feed</string>
-  
   <string id="20307">次要的 DNS 位址</string>
   <string id="20308">DHCP 伺服器:</string>
   <string id="20309">新建資料夾</string>
   <string id="20310">播放時關閉液晶螢幕背光</string>
   <string id="20311">未知或內建(寫入保護)</string>
   <string id="20312">暫停時關閉液晶螢幕背光</string>
-  
   <string id="20314">視訊 - 資料庫</string>
-  
   <string id="20316">排序:標籤</string>
-  
   <string id="20324">播放部分的…</string>
   <string id="20325">重設螢幕校正</string>
   <string id="20326">重設螢幕校正值為 %s</string>
   <string id="20327">還原為預設值</string>
   <string id="20328">瀏覽目的</string>
-  
+  <string id="20329">電影個別存放在和電影相同名稱的資料夾</string>
   <string id="20330">以資料夾名稱搜尋</string>
   <string id="20331">檔案</string>
   <string id="20332">以檔案或資料夾名稱來搜尋?</string>
   <string id="20373">季</string>
   <string id="20374">載入電影資訊</string>
   <string id="20375">不指定內容</string>
+  <string id="20376">原始標題</string>
   <string id="20377">重新整理電視節目資訊</string>
   <string id="20378">重新整理所有影集資訊?</string>
   <string id="20379">選擇的資料夾包含一個電視節目</string>
   <string id="20401">播放音樂影片</string>
   <string id="20402">自動擷取演員的縮圖</string>
   <string id="20403">設定演員縮圖</string>
-  
   <string id="20405">移除影集書籤</string>
   <string id="20406">設定影集書籤</string>
   <string id="20407">站台設定</string>
   <string id="20416">首播</string>
   <string id="20417">編劇</string>
   <string id="20418">清理檔案名稱</string>
-  
+  <string id="20419">在檔案檢視中顯示媒體資訊</string>
   <string id="20420">從不</string>
   <string id="20421">如果只有一季</string>
   <string id="20422">總是</string>
   <string id="20454">電台</string>
   <string id="20455">電台</string>
   <string id="20456">設定電影劇照</string>
-  <!-- up to 21329 is reserved for the video db !! !-->
-  
+  <string id="20457">電影集</string>
+  <string id="20458">按同系列電影分組</string>
   <string id="21330">顯示隱藏檔案和目錄</string>
-  
   <string id="21331">TuxBox 客戶端</string>
   <string id="21332">警告:目標 TuxBox 裝置在錄影模式!</string>
   <string id="21333">串流即將停止!</string>
   <string id="21335">你確定要開始串流?</string>
   <string id="21336">連線到:%s</string>
   <string id="21337">TuxBox 裝置</string>
-  <!-- up to 21355 is reserved for the TuxBox Client!! !-->
-  
   <string id="21359">加入媒體共享…</string>
   <string id="21360">啟用 UPnP 伺服器</string>
-  
   <string id="21364">編輯媒體共享</string>
   <string id="21365">移除媒體共享</string>
   <string id="21366">自訂字幕資料夾</string>
   <string id="21367">電影和替代字幕資料夾</string>
-  
+  <string id="21368">覆蓋 ASS/SSA 字幕的字型</string>
   <string id="21369">啟用滑鼠</string>
   <string id="21370">媒體播放時使用瀏覽音效</string>
   <string id="21371">縮略圖</string>
   <string id="21451">需要網際網路連線。</string>
   <string id="21452">取得更多...</string>
   <string id="21453">檔案系統 Root Filesystem</string>
-  
+  <string id="21454">完整快取</string>
+  <string id="21455">只快取到足夠連續播放的資料量</string>
+  <string id="21460">字幕位置</string>
+  <string id="21461">固定</string>
+  <string id="21462">影片底部</string>
+  <string id="21463">影片之下</string>
+  <string id="21464">影片上方</string>
+  <string id="21465">影片之上</string>
   <string id="21800">檔案名稱</string>
   <string id="21801">檔案路徑</string>
   <string id="21802">檔案大小</string>
   <string id="21806">評論</string>
   <string id="21807">彩色/黑白</string>
   <string id="21808">JPEG 影像處理</string>
-  
   <string id="21820">日期/時間</string>
   <string id="21821">描述</string>
   <string id="21822">製造廠商</string>
   <string id="21841">GPS 經度</string>
   <string id="21842">GPS 高度</string>
   <string id="21843">方位</string>
-  
   <string id="21860">補充類別</string>
   <string id="21861">關鍵字</string>
   <string id="21862">說明</string>
   <string id="21898">活躍</string>
   <string id="21899">標籤</string>
   <string id="21900">出生/出道</string>
-  
- <!-- strings 21900 thru 21999 reserved for slideshow info -->
   <string id="22000">在啟動時更新資料庫</string>
   <string id="22001">總是在幕後更新資料庫</string>
   <string id="22002">- DNS 的尾碼</string>
-  
   <string id="22003">%2.3f秒</string>
   <string id="22004">延遲:%2.3fs</string>
   <string id="22005">提前:%2.3fs</string>
   <string id="22022">在清單中顯示視訊檔</string>
   <string id="22023">DirectX 廠商:</string>
   <string id="22024">Direct3D 版本:</string>
-  
-  <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">字型</string>
   <string id="22031">- 大小</string>
   <string id="22032">- 顏色</string>
   <string id="22041">白/紅</string>
   <string id="22042">白/藍</string>
   <string id="22043">黑/白</string>
-  
   <string id="22079">預設選擇動作</string>
   <string id="22080">選擇</string>
   <string id="22081">顯示詳細資訊</string>
   <string id="22082">更多...</string>
   <string id="22083">播放全部</string>
-  
   <string id="23049">只不到 Teletext</string>
   <string id="23050">開啟電傳視訊</string>
   <string id="23051">片段 %i</string>
   <string id="23052">已緩衝 %i Bytes</string>
   <string id="23053">正在停止</string>
   <string id="23054">正在執行</string>
-  
-  <!-- strings 23100 thru 23150 reserved for external player -->
   <string id="23100">外部播放機啟動</string>
   <string id="23101">點選 OK 關閉播放機</string>
-  
   <string id="23104">播放完畢時點選 OK</string>
-  
-  <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
   <string id="24000">附加元件</string>
   <string id="24001">附加元件</string>
   <string id="24002">附加元件選項</string>
   <string id="24003">附加元件資訊</string>
-
   <string id="24005">媒體來源</string>
   <string id="24007">電影資訊</string>
   <string id="24008">螢幕保護程式</string>
   <string id="24016">專輯資訊</string>
   <string id="24017">藝術家資訊</string>
   <string id="24018">服務</string>
-  
   <string id="24020">設定</string>
   <string id="24021">停用</string>
   <string id="24022">啟用</string>
   <string id="24041">從 zip 檔案安裝</string>
   <string id="24042">已下載 %i%%</string>
   <string id="24043">可取得的更新</string>
-   <string id="24044">Dependencies 不相符</string>
+  <string id="24044">Dependencies 不相符</string>
   <string id="24045">附加元件未包含正確結構</string>
+  <string id="24046">%s 正被下列已安裝的附加元件使用中</string>
+  <string id="24047">這個附加元件不能解除安裝</string>
+  <string id="24048">回復舊版</string>
   <string id="24050">可取得的附加元件</string>
   <string id="24051">版本:</string>
   <string id="24052">免責聲明</string>
   <string id="24067">正在下載的附加元件</string>
   <string id="24068">有新的更新</string>
   <string id="24069">更新</string>
-  
   <string id="24070">附加元件無法被載入。</string>
   <string id="24071">發生未知的錯誤。</string>
   <string id="24072">需要的設定</string>
   <string id="24073">無法建立連線</string>
   <string id="24074">需要重新啟動</string>
   <string id="24075">停用</string>
+  <string id="24076">需要的附加元件</string>
   <string id="24080">要重新連線嗎?</string>
   <string id="24089">重啟附加元件</string>
   <string id="24090">鎖定附加元件管理員</string>
-  
+  <string id="24094">〈目前版本〉</string>
+  <string id="24095">〈黑名單〉</string>
   <string id="24096">附加元件已經被標記為"已損壞"。</string>
   <string id="24097">您想要在您的系統上停用嗎?</string>
   <string id="24098">已損壞</string>
   <string id="24099">是否要切換至此主題?</string>
+  <string id="24100">要使用這項功能你必須下載一個附加元件:</string>
+  <string id="24101">你要下載這個附加元件嗎?</string>
   <string id="25000">通知</string>
-
-  <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29800">資料庫模式</string>
   <string id="29801">QWERTY 鍵盤</string>
   <string id="29802">音效直通輸出啟用中</string>
-  
-  <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
-  <!-- strings 31000 thru 31999 reserved for skins -->
-  <!-- strings 32000 thru 32999 reserved for scripts -->
-  <!-- strings 33000 thru 33999 reserved for common strings used in addons -->
-  <string id="29999">遊戲套用閃爍過濾</string>
-  <string id="30011">搜尋持續時間</string>
   <string id="33001">預告片品質</string>
   <string id="33002">媒體流</string>
   <string id="33003">下載</string>
   <string id="33008">儲存中</string>
   <string id="33009">複製中</string>
   <string id="33010">設定下載目錄</string>
+  <string id="33011">搜尋持續時間</string>
   <string id="33012">短</string>
   <string id="33013">長</string>
   <string id="33014">用 DVD player 代替預設播放機</string>
   <string id="33081">這是一個堆疊檔,請選擇要播放的片段。</string>
   <string id="33082">腳本路徑</string>
   <string id="33083">啟用自訂腳本按鈕</string>
-  
   <string id="33100">起始失敗</string>
   <string id="33101">網站伺服器</string>
   <string id="33102">事件伺服器</string>
   <string id="33103">遠端通訊伺服器</string>
-
-  <!-- translators: no need to add these to your language files -->
+  <string id="33200">偵測新的連線</string>
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
   <string id="34002">Wav</string>
   <string id="34003">DXVA2</string>
   <string id="34004">VAAPI</string>
   <string id="34005">Flac</string>
   <string id="34100">喇叭設定</string>
   <string id="34101">2.0</string>
   <string id="34102">2.1</string>
   <string id="34108">5.1</string>
   <string id="34109">7.0</string>
   <string id="34110">7.1</string>
-  <!-- 34112-34200 reserved for future use -->
-  
+  <string id="34201">找不到下一個播放項目</string>
+  <string id="34202">找不到前一個播放項目</string>
+  <string id="34300">Zeroconf啟動失敗</string>
+  <string id="34301">已經啟用蘋果的 Bonjour 服務了嗎?請查閱記錄以取得更多資訊。</string>
+  <string id="34400">視訊渲染</string>
+  <string id="34401">影像濾鏡/放大器初始化失敗,改用預設的雙線性放大</string>
+  <string id="34402">初始化音訊裝置失敗</string>
+  <string id="34403">檢查你的音訊設定</string>
+  <string id="35000">周邊裝置</string>
+  <string id="35001">通用 HID 裝置</string>
+  <string id="35002">通用網路配接器</string>
+  <string id="35003">通用磁碟機</string>
+  <string id="35004">找不到這台周邊裝置
+的可用設定</string>
+  <string id="35005">新的裝置已設定</string>
+  <string id="35006">裝置已移除</string>
+  <string id="35007">給這個裝置的快速鍵</string>
+  <string id="35008">快速鍵已啟用</string>
+  <string id="35500">位置</string>
+  <string id="35501">分類</string>
+  <string id="35502">名稱</string>
+  <string id="35503">供應商</string>
+  <string id="35504">產品 ID</string>
+  <string id="36000">Pulse-Eight CEC 配接器</string>
+  <string id="36002">切換到鍵盤命令</string>
+  <string id="36003">切換到遙控器命令</string>
+  <string id="36004">按下"使用者"按鈕命令</string>
+  <string id="36005">啟用命令模式切換</string>
+  <string id="36006">無法開啟配接器</string>
+  <string id="36007">開啟 XBMC 時打開這台電視</string>
+  <string id="36008">當停止 XBMC 時關閉裝置</string>
+  <string id="36009">螢幕保護啟動時讓裝置進入待機模式</string>
+  <string id="36011">無法偵測CEC連接埠。請手動設定。</string>
+  <string id="36012">無法偵測CEC配接器</string>
+  <string id="36013">不支援的 libcec 介面版本。 %d 大於XBMC支援的版本 (%d)</string>
+  <string id="36014">如果關掉這台電視,讓這台電腦進入待機模式</string>
+  <string id="36015">HDMI連接埠編號</string>
+  <string id="36016">已連接</string>
+  <string id="36017">找到配接器,但無法取得 libcec</string>
+  <string id="36018">使用這個電視的語言設定</string>
 </strings>
index 9e5c4ef..b96f356 100644 (file)
@@ -14,7 +14,7 @@
   <regions>
     <region name="CZ" locale="CZ">
       <dateshort>D.M.YYYY</dateshort>
-      <datelong>D. MMMM YYYY</datelong>
+      <datelong>DDDD, D. MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
index aa35770..f226720 100644 (file)
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: ezechiel1917-->
-<!--Date of translation: 26/09/2010-->
-<!--Based on English strings version 34191-->
+<!--Date of translation: 26.09.2010-->
+<!--Updated 03.12.2011 by mirek-->
+<!--Updated 06.01.2012 by babča-->
 <strings>
   <string id="0">Programy</string>
   <string id="1">Obrázky</string>
@@ -10,7 +11,8 @@
   <string id="3">Video</string>
   <string id="4">TV Program</string>
   <string id="5">Nastavení</string>
-  <string id="7">Manažer</string>
+  <string id="6">XBMC SVN</string>
+  <string id="7">Správce souborů</string>
   <string id="8">Počasí</string>
   <string id="9">xbmc media center</string>
 
   <string id="46">So</string>
   <string id="47">Ne</string>
 
-  <string id="51">Led</string>
-  <string id="52">Ã\9ano</string>
-  <string id="53">Bře</string>
-  <string id="54">Dub</string>
-  <string id="55">Kvě</string>
-  <string id="56">Ä\8cer</string>
-  <string id="57">Ä\8crv</string>
-  <string id="58">Srp</string>
-  <string id="59">Zář</string>
-  <string id="60">Å\98íj</string>
-  <string id="61">Lis</string>
-  <string id="62">Pro</string>
+  <string id="51">led</string>
+  <string id="52">úno</string>
+  <string id="53">bře</string>
+  <string id="54">dub</string>
+  <string id="55">kvě</string>
+  <string id="56">Ä\8der</string>
+  <string id="57">Ä\8dec</string>
+  <string id="58">srp</string>
+  <string id="59">zář</string>
+  <string id="60">Å\99íj</string>
+  <string id="61">lis</string>
+  <string id="62">pro</string>
 
   <string id="71">S</string>
   <string id="72">SSV</string>
   <string id="84">ZSZ</string>
   <string id="85">SZ</string>
   <string id="86">SSZ</string>
-  <string id="87">promÄ\9bnlivé</string>
+  <string id="87">promÄ\9bnlivý</string>
 
-  <string id="98">Automaticky</string>
-  <string id="99">Auto (velké)</string>
-  <string id="100">Ikony</string>
-  <string id="101">Seznam</string>
+  <string id="98">Zobrazení: automaticky</string>
+  <string id="99">Zobrazení: auto (velké)</string>
+  <string id="100">Zobrazení: ikony</string>
+  <string id="101">Zobrazení: seznam</string>
   <string id="102">Prohledat</string>
   <string id="103">Dle názvu</string>
-  <string id="104">Dle datumu</string>
+  <string id="104">Dle data</string>
   <string id="105">Dle velikosti</string>
   <string id="106">Ne</string>
   <string id="107">Ano</string>
@@ -88,7 +90,7 @@
   <string id="109">Vytvořit náhledy</string>
   <string id="110">Vytvořit náhledy</string>
   <string id="111">Zástupci</string>
-  <string id="112">POZASTAVENO</string>
+  <string id="112">Pozastaveno</string>
   <string id="113">Aktualizace se nezdařila</string>
   <string id="114">Instalace se nezdařila</string>
   <string id="115">Kopírovat</string>
   <string id="124">Opravdu chcete tyto soubory přesunout?</string>
   <string id="125">Opravdu chcete tyto soubory nevratně odstranit?</string>
   <string id="126">Průběh</string>
-  <string id="127">objekt(ů)</string>
+  <string id="127">Objekt(ů)</string>
   <string id="128">Hlavní</string>
   <string id="129">Prezentace</string>
   <string id="130">Informace o systému</string>
   <string id="135">Žánry</string>
   <string id="136">Seznamy stop</string>
   <string id="137">Hledat</string>
-  <string id="138">INFORMACE O SYSTÉMU</string>
-  <string id="139">Teplota:</string>
-  <string id="140">CPU:</string>
+  <string id="138">Informace o systému</string>
+  <string id="139">Teploty:</string>
+  <string id="140">Procesor:</string>
   <string id="141">Grafická karta:</string>
   <string id="142">Čas:</string>
   <string id="143">Aktuálně:</string>
   <string id="146">Typ:</string>
   <string id="147">Statická</string>
   <string id="148">DHCP</string>
-  <string id="149">MAC</string>
+  <string id="149">MAC adresa</string>
   <string id="150">IP adresa</string>
   <string id="151">Stav:</string>
   <string id="152">Poloviční duplex</string>
   <string id="153">Plný duplex</string>
-  <string id="154">kapacita</string>
+  <string id="154">Kapacita</string>
   <string id="155">Disk</string>
   <string id="156">- volné místo</string>
   <string id="157">Video</string>
   <string id="164">Žádné médium</string>
   <string id="165">Médium vloženo</string>
   <string id="166">Vzhled</string>
-  <string id="167"></string>
-  <string id="168"></string>
+
   <string id="169">Rozlišení obrazovky</string>
   <string id="170">Přizpůsobovat obnovovací frekvenci obrazovky dle videa</string>
-  <string id="171"></string>
 
-  <string id="172">Datum vydání:</string>
+  <string id="172">Datum vydání</string>
   <string id="173">Režim zobrazení 4:3 videí</string>
 
   <string id="175">Nálady</string>
-  <string id="176">Styly:</string>
+  <string id="176">Styly</string>
 
   <string id="179">Skladba</string>
   <string id="180">Délka</string>
   <string id="208">Přehrát</string>
   <string id="209">Další</string>
   <string id="210">Předchozí</string>
-  <string id="213">Kalibrace uživatelského rozhraní</string>
-  <string id="214">Kalibrace obrazu</string>
+  <string id="213">Kalibrace uživatelského rozhraní...</string>
+  <string id="214">Kalibrace obrazu...</string>
   <string id="215">Změkčení</string>
   <string id="216">Přiblížení</string>
   <string id="217">Poměr stran</string>
-  <string id="218">DVD-ROM</string>
+  <string id="218">DVD mechanika</string>
   <string id="219">Vložte prosím disk</string>
   <string id="220">Vzdálené sdílení</string>
   <string id="221">Síť není připojena</string>
   <string id="222">Storno</string>
   <string id="224">Čas zobrazení obrázku</string>
-
-  <string id="226">Testovací obrazce</string>
-  <string id="227">Stahovat informace o CD z FreeDB.org</string>
+  <string id="225">Vertikální posunutí</string>
+  <string id="226">Testovací obrazce...</string>
+  <string id="227">Stahovat informace o CD z freedb.org</string>
   <string id="228">Po načtení seznamu stop přehrávat skladby náhodně</string>
   <string id="229">Uspávat HDD</string>
   <string id="230">Video filtry</string>
   <string id="231">vypnuto</string>
   <string id="232">Bodový</string>
-  <string id="233">Linearní</string>
+  <string id="233">Lineární</string>
   <string id="234">Anisotropní</string>
   <string id="235">Quincunx</string>
   <string id="236">Gaussovsko Kubický</string>
-  <string id="237">Zmenšení:</string>
-  <string id="238">Zvětšení:</string>
+  <string id="237">Zmenšení</string>
+  <string id="238">Zvětšení</string>
   <string id="239">Vymazat seznam stop po dokončení přehrávání</string>
   <string id="240">Režim zobrazení</string>
   <string id="241">Celá obrazovka #%d</string>
   <string id="242">V okně</string>
   <string id="243">Obnovovací frekvence</string>
   <string id="244">Celá obrazovka</string>
-  <string id="245">Změna velikosti: (%i,%i)-&gt;(%i,%i) (Přiblížení x%2.2f) AR:%2.2f:1 (Pixelů: %2.2f:1)</string>
+  <string id="245">Změna velikosti: (%i,%i)-&gt;(%i,%i) (Přiblížení x%2.2f) AR:%2.2f:1 (Pixelů: %2.2f:1) (VShift: %2.2f)</string>
 
   <string id="247">Skripty</string>
   <string id="248">Jazyk</string>
   <string id="256">Probíhá stahování informací o CD</string>
   <string id="257">Chyba</string>
   <string id="258">Zobrazovat ID3 popisky</string>
-  <string id="259">Otevírám...</string>
+  <string id="259">Otevírám</string>
   <string id="260">Shoutcast</string>
   <string id="261">Probíhá příprava spuštění...</string>
   <string id="262">Výstup skriptů</string>
   <string id="277">Posunutím přímky nastavte umístění titulků</string>
   <string id="278">Nastavte strany tak, aby vznikl čtverec</string>
   <string id="279">Nastavení nelze načíst</string>
-  <string id="280">program načte výchozí nastavení</string>
+  <string id="280">Program načte výchozí nastavení</string>
   <string id="281">Zkontrolujte prosím .xml soubory</string>
-  <string id="282">nalezeno %i položek</string>
+  <string id="282">Nalezeno %i položek</string>
   <string id="283">Výsledky hledání</string>
   <string id="284">Žádné výsledky nebyly nalezeny</string>
-  <string id="286">Postprocessing filtr</string>
+
   <string id="287">Titulky</string>
   <string id="288">Písmo</string>
   <string id="289">- Velikost</string>
   <string id="304">Jazyk</string>
   <string id="305">Aktivováno</string>
   <string id="306">Neprokládané video</string>
-  <string id="307"></string>
-  <string id="308"></string>
-  <string id="309"></string>
-  <string id="310"></string>
-  <string id="311"></string>
+
   <string id="312">(0=auto)</string>
   <string id="313">Probíhá aktualizace knihovny</string>
   <string id="314">Probíhá příprava...</string>
   <string id="338">Analogový</string>
   <string id="339">Optický/Koaxiální</string>
   <string id="340">Různí interpreti</string>
-  <string id="341">Přehrát DVD</string>
+  <string id="341">Přehrát disk</string>
   <string id="342">Filmy</string>
   <string id="343">Přizpůsobovat snímkování TV normě</string>
   <string id="344">Herci</string>
   <string id="353">Černá obrazovka</string>
   <string id="354">Kód Matrixu</string>
   <string id="355">Počkat</string>
-  <string id="356">Špořič obrazovky</string>
+  <string id="356">Spořič obrazovky</string>
   <string id="357">Vypnout systém při nečinnosti</string>
   <string id="358">Všechna alba</string>
   <string id="359">Nejnovější alba</string>
   <string id="370">bouřky</string>
   <string id="371">částečně</string>
   <string id="372">převážně</string>
-  <string id="373">slunečno</string>
-  <string id="374">zamračeno</string>
+  <string id="373">jasno</string>
+  <string id="374">zataženo</string>
   <string id="375">sněžení</string>
   <string id="376">déšť</string>
-  <string id="377">lehké</string>
+  <string id="377">slabý(é)</string>
   <string id="378">dop.</string>
   <string id="379">odp.</string>
   <string id="380">přeháňky</string>
-  <string id="381">zřídka</string>
-  <string id="382">proměnlivé</string>
-  <string id="383">větrno</string>
+  <string id="381">ojediněle</string>
+  <string id="382">místy</string>
+  <string id="383">vítr</string>
   <string id="384">silný</string>
-  <string id="385">pěkně</string>
+  <string id="385">skoro jasno</string>
   <string id="386">jasno</string>
-  <string id="387">zamračeno</string>
+  <string id="387">oblačno</string>
   <string id="388">ranní</string>
   <string id="389">přeháňky</string>
-  <string id="390">větrno</string>
-  <string id="391">min.</string>
+  <string id="390">sněhové přeháňky</string>
+  <string id="391">nízký</string>
   <string id="392">střední</string>
-  <string id="393">max.</string>
-  <string id="394">hustá mlha</string>
-  <string id="395">slabé mrholení</string>
+  <string id="393">vysoký</string>
+  <string id="394">mlha</string>
+  <string id="395">opar</string>
   <string id="396">Vyberte město</string>
   <string id="397">Obnovovat po</string>
   <string id="398">Jednotky teploty</string>
   <string id="399">Jednotky rychlosti</string>
   <string id="400">Počasí</string>
   <string id="401">Teplota</string>
-  <string id="402">Bio zátěž</string>
+  <string id="402">Pocitově</string>
   <string id="403">UV index</string>
   <string id="404">Vítr</string>
   <string id="405">Rosný bod</string>
   <string id="406">Vlhkost</string>
-  <string id="407"></string>
-  <string id="408"></string>
+
   <string id="409">Výchozí hodnoty</string>
   <string id="410">Probíhá připojování k weather.com</string>
   <string id="411">Probíhá stahování počasí pro:</string>
   <string id="415">Probíhá stahování náhledu...</string>
   <string id="416">Není k dispozici</string>
   <string id="417">Velké ikony</string>
-  <string id="418">Nízké</string>
-  <string id="419">Vysoké</string>
+  <string id="418">Noc</string>
+  <string id="419">Den</string>
   <string id="420">HDMI</string>
 
   <string id="422">Smazat informace o albu</string>
-  <string id="423">Smazat CDDB informace</string>
+  <string id="423">Smazat informace o CD</string>
   <string id="424">Vybrat</string>
-  <string id="425">Informace o albu nebyly nalezeny.</string>
-  <string id="426">CDDB informace nenalezeny.</string>
-  <string id="427">Disk:</string>
+  <string id="425">Informace o albu nebyly nalezeny</string>
+  <string id="426">Informace o CD nenalezeny</string>
+  <string id="427">Disk</string>
   <string id="428">Vložte správné CD/DVD</string>
-  <string id="429">Vložte prosím CD/DVD s označením</string>
+  <string id="429">Vložte prosím disk s označením:</string>
   <string id="430">Dle DVD#</string>
   <string id="431">Nepoužívat mezipaměť</string>
   <string id="432">Odebrat film z knihovny</string>
-  <string id="433">Opravdu chcete z knihovny odebrat '%s'?</string>
-  <string id="434">Z %s rychlostí %i %s</string>
+  <string id="433">Opravdu chcete odebrat '%s'?</string>
+  <string id="434">%s %i %s</string>
 
-  <string id="437">Vyměnitelný disk:</string>
+  <string id="437">Vyměnitelný disk</string>
   <string id="438">Probíhá otevírání souboru</string>
   <string id="439">Mezipaměť</string>
   <string id="440">HDD</string>
   <string id="441">UDF</string>
-  <string id="442">LAN</string>
+  <string id="442">Lokální síť</string>
   <string id="443">Internet</string>
   <string id="444">Video</string>
   <string id="445">Audio</string>
   <string id="448">LCD</string>
   <string id="449">Aktivní</string>
   <string id="450">Počet sloupců</string>
-  <string id="451">Adresa 1. řádku:</string>
-  <string id="452">Adresa 2. řádku:</string>
-  <string id="453">Adresa 3. řádku:</string>
-  <string id="454">Adresa 4. řádku:</string>
+  <string id="451">Adresa 1. řádku</string>
+  <string id="452">Adresa 2. řádku</string>
+  <string id="453">Adresa 3. řádku</string>
+  <string id="454">Adresa 4. řádku</string>
   <string id="455">Počet řádků</string>
   <string id="456">Mód</string>
   <string id="457">Zobrazení</string>
   <string id="471">Modchip</string>
   <string id="474">Vyp.</string>
   <string id="475">Pouze hudbu</string>
-  <string id="476">Hudbu &amp; Video</string>
+  <string id="476">Hudbu a Video</string>
   <string id="477">Seznam stop nelze načíst</string>
   <string id="478">OSD</string>
-  <string id="479">Vzhled &amp; Jazyk</string>
+  <string id="479">Vzhled a Jazyk</string>
   <string id="480">Prostředí</string>
   <string id="481">Zvuk</string>
   <string id="482">O XBMC</string>
   <string id="496">Kalibrace</string>
   <string id="497">Zobrazovat přípony médií</string>
   <string id="498">Dle typu</string>
-  <string id="499">Nelze se připojit k www.allmusic.com</string>
-  <string id="500">Stáhování informací o albu selhalo</string>
+  <string id="499">Nelze se připojit k online vyhledávání</string>
+  <string id="500">Stahování informací o albu selhalo</string>
   <string id="501">Probíhá hledání názvů alb...</string>
   <string id="502">vysunutá</string>
   <string id="503">načítá se obsah</string>
 
   <string id="517">Poslední poslech</string>
   <string id="518">Spustit</string>
-  <string id="519">Spustit v ...</string>
-  <string id="520"></string>
+  <string id="519">Spustit v...</string>
+
   <string id="521">Kompilace</string>
   <string id="522">Odebrat zdroj</string>
   <string id="523">Přejít do jiné sekce</string>
   <string id="541">Náhledy alb</string>
   <string id="542">Náhledy DVD</string>
   <string id="543">DVD</string>
-  <string id="544">Media info</string>
+  <string id="544">Informace o médiu</string>
   <string id="545">Zařízení pro výstup zvuku</string>
   <string id="546">Zařízení pro passthrough zvuku</string>
   <string id="547">Životopis tohoto interpreta není k dispozici</string>
-  <string id="548">Převádět vícekanalový zvuk na stereo</string>
+  <string id="548">Převádět vícekanálový zvuk na stereo</string>
 
   <string id="550">Řadit dle: %s</string>
   <string id="551">Název</string>
   <string id="573">Cesta</string>
   <string id="574">Země</string>
   <string id="575">Právě probíhá</string>
+  <string id="576">Počet přehrání</string>
 
   <string id="580">Způsob řazení</string>
   <string id="581">Řadit dle</string>
   <string id="587">Filtr</string>
   <string id="588">Zrušit Párty mód</string>
   <string id="589">Párty mód</string>
-  <string id="590">Nahodně</string>
-  <string id="591">vypnuto</string>
-  <string id="592">jednou</string>
+  <string id="590">Náhodně</string>
+  <string id="591">Vypnuto</string>
+  <string id="592">Jednou</string>
   <string id="593">Vše</string>
-  <string id="594">vypnuto</string>
+  <string id="594">Vypnuto</string>
   <string id="595">Opakovat: vypnuto</string>
   <string id="596">Opakovat: vybrané</string>
   <string id="597">Opakovat: vše</string>
   <string id="611">Zadejte číslo</string>
   <string id="612">Bitů/Vzorek</string>
   <string id="613">Vzorkovací frekvence</string>
-  
+
   <string id="620">Audio CD</string>
   <string id="621">Enkodér</string>
   <string id="622">Kvalita</string>
 
   <string id="700">Probíhá aktualizace knihovny</string>
   <string id="701">Probíhá odebírání skladby z knihovny</string>
-  <string id="702">Tato cesta byla již dříve prohledána.</string>
+  <string id="702">Tato cesta byla již dříve prohledána</string>
   <string id="705">Síť</string>
   <string id="706">- Server</string>
 
   <string id="712">Nebyl nastaven platný port. Hodnota musí být od 1 do 65535.</string>
   <string id="713">Nastavení HTTP Proxy</string>
 
-  <string id="715">Přidělování IP adresy</string>
+  <string id="715">Přidělování IP adresy</string>
   <string id="716">Automatické (DHCP)</string>
   <string id="717">Manuálně (Statická IP)</string>
-  <string id="718"></string>
+
   <string id="719">- IP adresa</string>
   <string id="720">- Maska podsítě</string>
   <string id="721">- Výchozí brána</string>
   <string id="725">a obsahovat čísla od 0 do 255.</string>
   <string id="726">Změny nebyly uloženy. Pokračovat bez uložení?</string>
   <string id="727">Webový server</string>
-  <string id="728">FTP Server</string>
-  <string id="729"></string>
+  <string id="728">FTP server</string>
 
   <string id="730">- Port</string>
-  <string id="731"></string>
-  <string id="732">Uložit &amp; použít</string>
+
+  <string id="732">Uložit a použít</string>
   <string id="733">- Heslo</string>
   <string id="734">bez hesla</string>
   <string id="735">- Znaková sada</string>
   <string id="763">Světle zelená</string>
   <string id="764">Žluto-zelená</string>
   <string id="765">Modro-zelená</string>
-  <string id="766">Světlě šedá</string>
+  <string id="766">Světle šedá</string>
   <string id="767">Šedá</string>
   <!-- strings 768 and 769 reserved for more subtitle colors -->
 
   <string id="770">Chyba %i: sdílená položka je nedostupná</string>
-  <string id="771"></string>
+
   <string id="772">Zvukový výstup</string>
   <string id="773">Probíhá vyhledávání</string>
   <string id="774">Složka s obrázky pro Spořič obrazovky</string>
   <string id="775">Síťové rozhraní</string>
-  <string id="776">- Název Bezdrátové sítě (ESSID)</string>
-  <string id="777">- Heslo Bezdrátové sítě</string>
-  <string id="778">- Bezpečnost Bezdrátové sítě</string>
-  <string id="779">Uložit a použít nastavení Bezdrátové sítě</string>
+  <string id="776">- Název bezdrátové sítě (ESSID)</string>
+  <string id="777">- Heslo bezdrátové sítě</string>
+  <string id="778">- Bezpečnost bezdrátové sítě</string>
+  <string id="779">Uložit a použít nastavení sítě</string>
   <string id="780">Žádné šifrování</string>
   <string id="781">WEP</string>
   <string id="782">WPA</string>
   <string id="783">WPA2</string>
-  <string id="784">Probíhá aplikace změn nastavení Bezdrátové sítě. Vyčkejte prosím.</string>
+  <string id="784">Probíhá aplikace změn nastavení sítě. Vyčkejte prosím.</string>
   <string id="785">Restart síťové rozhraní proběhl úspěšně.</string>
-  <string id="786">Spuštění siťového rozhraní se nezdařilo.</string>
+  <string id="786">Spuštění síťového rozhraní se nezdařilo.</string>
   <string id="787">Rozhraní není aktivováno</string>
   <string id="788">Síťové rozhraní bylo úspěšně deaktivováno.</string>
-  <string id="789">Název Bezdrátové sítě (ESSID)</string>
+  <string id="789">Název bezdrátové sítě (ESSID)</string>
 
   <string id="791">Povolit programům v tomto počítači ovládat XBMC</string>
   <string id="792">Port dálkového ovládání</string>
   <string id="793">Rozsah portů pro dálkové ovládání</string>
   <string id="794">Povolit programům z ostatních počítačů ovládat XBMC</string>
   <string id="795">Úvodní zpoždění opakovaní (ms)</string>
-  <string id="796">Následující zpoždení opakovaní (ms)</string>
+  <string id="796">Následující zpoždění opakovaní (ms)</string>
   <string id="797">Maximální počet klientů</string>
   <string id="798">Internet</string>
 
   <string id="851">Povolený rozsah portu je 1-65535</string>
   <string id="852">Povolený rozsah portu je 1024-65535</string>
 
+  <string id="998">Přidat hudbu...</string>
+  <string id="999">Přidat video...</string>
   <string id="1000">Náhled spořiče obrazovky</string>
   <string id="1001">Nemohu se připojit.</string>
-  <string id="1002">XBMC se nepodařilo připojit k síťovému prostředku.</string>
+  <string id="1002">XBMC se nepodařilo připojit k síťovému umístění.</string>
   <string id="1003">Je možné, že síť není připojena.</string>
   <string id="1004">Chcete ho přesto přidat?</string>
 
   <string id="1031">Vyberte složku s obrázky</string>
   <string id="1032">Přidat síťové umístění...</string>
   <string id="1033">Vyberte soubor</string>
-  <string id="1034">Submenu</string>
-  <string id="1035">Povolit tlačítka Submenu</string>
-  <string id="1036">Oblíbené položky</string>
+  <string id="1034">Podmenu</string>
+  <string id="1035">Povolit tlačítka podmenu</string>
+  <string id="1036">Oblíbené</string>
   <string id="1037">Doplňky - Video</string>
   <string id="1038">Doplňky - Hudba</string>
   <string id="1039">Doplňky - Obrázky</string>
   <string id="1212">Video</string>
   <string id="1213">Obrázky</string>
   <string id="1214">Soubory</string>
-  <string id="1215">Hudba &amp; Video </string>
-  <string id="1216">Hudba &amp; Obrázky</string>
-  <string id="1217">Hudba &amp; Soubory</string>
-  <string id="1218">Video &amp; Obrázky</string>
-  <string id="1219">Video &amp; Soubory</string>
-  <string id="1220">Obrázky &amp; Soubory</string>
-  <string id="1221">Hudba &amp; Video &amp; Obrázky</string>
-  <string id="1222">Hudba &amp; Video &amp; Obr. &amp; Soub.</string>
+  <string id="1215">Hudba a video </string>
+  <string id="1216">Hudba a obrázky</string>
+  <string id="1217">Hudba a soubory</string>
+  <string id="1218">Video a obrázky</string>
+  <string id="1219">Video a soubory</string>
+  <string id="1220">Obrázky a soubory</string>
+  <string id="1221">Hudba a video a obrázky</string>
+  <string id="1222">Hudba a video a obr. a soub.</string>
   <string id="1223">Zakázáno</string>
-  <string id="1226">Soubory &amp; Hudba &amp; Video</string>
-  <string id="1227">Soubory &amp; Obrázky &amp; Hudba</string>
-  <string id="1228">Soubory &amp; Obrázky &amp; Video</string>
-  <string id="1229">Hudba &amp; Programy</string>
-  <string id="1230">Video &amp; Programy</string>
-  <string id="1231">Obrázky &amp; Programy</string>
-  <string id="1232">Hudba &amp; Video &amp; Obrázky &amp; Programy</string>
-  <string id="1233">Programy &amp; Video &amp; Hudba</string>
-  <string id="1234">Programy &amp; Obrázky &amp; Hudba</string>
-  <string id="1235">Programy &amp; Obrázky &amp; Obrázky</string>
-
-  <string id="1245"></string>
-  <string id="1246"></string>
-  <string id="1247"></string>
+  <string id="1226">Soubory a hudba a video</string>
+  <string id="1227">Soubory a obrázky a hudba</string>
+  <string id="1228">Soubory a obrázky a video</string>
+  <string id="1229">Hudba a programy</string>
+  <string id="1230">Video a programy</string>
+  <string id="1231">Obrázky a programy</string>
+  <string id="1232">Hudba a video a obrázky a programy</string>
+  <string id="1233">Programy a video a hudba</string>
+  <string id="1234">Programy a obrázky a hudba</string>
+  <string id="1235">Programy a obrázky a video</string>
 
   <string id="1250">Autodetekce</string>
   <string id="1251">Autodetekovat systém</string>
   <string id="1257">Chcete se připojit k nalezenému systému?</string>
 
   <string id="1260">Oznamovat tyto služby ostatním počítačům přes Zeroconf</string>
+  <string id="1270">Povolit XBMC přijímat AirPlay obsah</string>
+  <string id="1271">Název zařízení</string>
+  <string id="1272">- Použít ochranu heslem</string>
 
   <string id="1300">Vlastní zařízení pro výstup zvuku</string>
   <string id="1301">Vlastní zařízení pro passthrough zvuku</string>
   <string id="1406">blízkém</string>
   <string id="1407">okolí</string>
   <string id="1408">ledové</string>
-  <string id="1409">krstalky</string>
+  <string id="1409">krystalky</string>
   <string id="1410">bezvětří</string>
   <string id="1411">s</string>
   <string id="1412">větrno</string>
   <string id="1420">Střední</string>
   <string id="1421">Velmi vysoké</string>
   <string id="1422">Větrno</string>
-  <string id="1423">Mlhavo</string>
+  <string id="1423">Kouřmo</string>
 
   <!-- strings through to 1450 reserved for weather translation -->
 
 
   <string id="2100">Chyba skriptu! : %s</string>
   <string id="2101">Je vyžadována novější verze - Více informací v logu</string>
-  <string id="2102"></string>
-  <string id="2103"></string>
 
   <string id="4501">Aktivovat LCD/VFD displej</string>
 
   <string id="10005">Hudba</string>
   <string id="10006">Video</string>
   <string id="10007">Informace o systému</string>
-  <string id="10008">Nastavení-&gt;Hlavní</string>
-  <string id="10009">Nastavení-&gt;Zobrazení</string>
-  <string id="10010">Nastavení-&gt;Zobrazení-&gt;Kalibrace UI</string>
-  <string id="10011">Nastavení-&gt;Zobrazení-&gt;Kalibrace obrazu</string>
-  <string id="10012">Nastavení-&gt;Prezentace</string>
-  <string id="10013">Nastavení-&gt;Zobrazení-&gt;Filtry</string>
-  <string id="10014">Nastavení-&gt;Hudba</string>
-  <string id="10015">Nastavení-&gt;Zobrazení-&gt;Titulky</string>
-  <string id="10016">Nastavení-&gt;Zobrazení-&gt;Spořič obrazovky</string>
-  <string id="10017">Nastavení-&gt;Počasí</string>
-  <string id="10018">Nastavení-&gt;Síť</string>
-  <string id="10019">Nastavení-&gt;Vzhled</string>
-  <string id="10020">Nastavení-&gt;Skripty</string>
+  <string id="10008">Nastavení - Hlavní</string>
+  <string id="10009">Nastavení - Obrazovka</string>
+  <string id="10010">Nastavení - Vzhled - Kalibrace UI</string>
+  <string id="10011">Nastavení - Video - Kalibrace obrazu</string>
+  <string id="10012">Nastavení - Obrázky</string>
+  <string id="10013">Nastavení - Programy</string>
+  <string id="10014">Nastavení - Počasí</string>
+  <string id="10015">Nastavení - Hudba</string>
+  <string id="10016">Nastavení - Systém</string>
+  <string id="10017">Nastavení - Video</string>
+  <string id="10018">Nastavení - Síť</string>
+  <string id="10019">Nastavení - Vzhled</string>
+  <string id="10020">Skripty</string>
   <string id="10021">Webový prohlížeč</string>
 
   <string id="10028">Videa/Seznam stop</string>
-  <string id="10034">Nastavení-&gt;Profily</string>
+  <string id="10034">Nastavení - Profily</string>
 
   <string id="10100">Dialog Ano/Ne</string>
   <string id="10101">Dialog s průběhem stavu</string>
 
   <string id="10210">Probíhá vyhledávání titulků...</string>
   <string id="10211">Probíhá načítání titulků...</string>
-  <string id="10212">Probíhá přerušení požadavku</string>
-  <string id="10213">Probíhá načítání do mezipaměti</string>
-  <string id="10214">Probíhá otevírání souboru</string>
+  <string id="10212">ukončování</string>
+  <string id="10213">načítání do mezipaměti</string>
+  <string id="10214">Probíhá otevírání streamu</string>
 
   <string id="10500">Hudba/Seznam stop</string>
   <string id="10501">Hudba/Soubory</string>
   <string id="12009">Reorganizovat index...</string>
   <string id="12010">Návrat do sekce Hudba</string>
   <string id="12011">Návrat do sekce Video</string>
-  <string id="12012">Aktualizovat seznam trainerů</string>
-  <string id="12013">Trainery</string>
-  <string id="12014">Žádné trainery nebyly nalezeny</string>
-  <string id="12015">Nastavení trainerů</string>
-  <string id="12016">Všechny registrované trainery chybí. Aktualizujte seznam prosím.</string>
-  <string id="12017">Pokračovat z poslední přehrávané pozice</string>
-  <string id="12018">Ne</string>
-  <string id="12019">Ano</string>
-  <string id="12020">Zeptat se</string>
+
   <string id="12021">Začít od začátku</string>
-  <string id="12022">Pokračovat z posl. pozice</string>
-  <string id="12023">Probíhá ověření stávájících trainerů...</string>
+  <string id="12022">Pokračovat od %s</string>
 
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12318">8</string>
   <string id="12319">9</string>
   <string id="12320">c</string>
-  <string id="12321">ok</string>
+  <string id="12321">Ok</string>
   <string id="12322">*</string>
   <string id="12325">Uzamčeno! Zadejte kód...</string>
-  <string id="12326">Zadejte kód:</string>
-  <string id="12327">Zadejte Hlavní kód a stiskněte Enter,</string>
-  <string id="12328">Zadejte kód pro odemknutí a stiskněte Enter,</string>
+  <string id="12326">Zadejte heslo:</string>
+  <string id="12327">Zadejte hlavní kód</string>
+  <string id="12328">Zadejte kód pro odemknutí</string>
   <string id="12329">nebo stiskněte C pro zrušení</string>
-  <string id="12330">Zadejte kód pomocí kombinace tlačítek a </string>
-  <string id="12331">stiskněte Start. Pro zrušení stiskněte Zpět</string>
+  <string id="12330">Zadejte kód pomocí kombinace tlačítek a</string>
+  <string id="12331">stiskněte OK. Pro zrušení stiskněte Zpět</string>
   <string id="12332">Nastavit kód uzamčení</string>
   <string id="12333">Odemknout</string>
   <string id="12334">Reset uzamčení</string>
   <string id="12335">Zrušit uzamčení</string>
   <string id="12337">Číselný kód</string>
   <string id="12338">Kód - kombinace tlačítek</string>
-  <string id="12339">Full-textový kód</string>
+  <string id="12339">Fulltextový kód</string>
   <string id="12340">Zadejte nový kód</string>
   <string id="12341">Potvrďte nový kód</string>
   <string id="12342">Špatný kód,</string>
   <string id="12362">Při překročení počtu pokusů vypnout systém</string>
   <string id="12367">Hlavní kód není správný!</string>
   <string id="12368">Zadejte prosím správný Hlavní kód</string>
-  <string id="12373">Nastavení &amp;  Manažer</string>
+  <string id="12373">Nastavení a správce souborů</string>
   <string id="12376">Uložit nastavení jako výchozí pro všechny videa</string>
   <string id="12377">Uložením se přepíše předchozí nastavení.</string>
   <string id="12378">Zobrazovat každý obrázek po dobu</string>
   <string id="12379">Používat efekty přiblížení a posunutí obrázku</string>
-  <string id="12380"></string>
-  <string id="12381"></string>
-  <string id="12382"></string>
+
   <string id="12383">12h formát hodin</string>
   <string id="12384">24h formát hodin</string>
   <string id="12385">Den/Měsíc</string>
   <string id="12392">hodin</string>
   <string id="12393">dní</string>
   <string id="12394">Celková doba používání</string>
+  <string id="12395">Stav baterie</string>
 
   <string id="12600">Počasí</string>
 
   <string id="13003">- Prodleva</string>
   <string id="13004">- Minimální délka souboru</string>
   <string id="13005">Vypnout</string>
-  <string id="13006"></string>
-  <string id="13007"></string>
+
   <string id="13008">Výchozí způsob vypínání</string>
   <string id="13009">Ukončit</string>
-  <string id="13010">Uspat (Hibernace)</string>
-  <string id="13011">Uspat (Režim spánku)</string>
+  <string id="13010">Uspat na disk</string>
+  <string id="13011">Uspat do paměti</string>
   <string id="13012">Ukončit</string>
   <string id="13013">Restartovat</string>
   <string id="13014">Minimalizovat</string>
   <string id="13015">Funkce tlačítka pro vypnutí</string>
-
   <string id="13016">Vypnout systém</string>
-  <string id="13020">Existuje nějaké aktivní připojení (např. přes SSH) ?</string>
+
+  <string id="13020">Existuje nějaké aktivní připojení (např. přes SSH)?</string>
   <string id="13021">Připojen vyměnitelný pevný disk</string>
-  <string id="13022">Nebezpečně odebrat zařízení</string>
+  <string id="13022">Nebezpečné odebrání zařízení</string>
   <string id="13023">Zařízení bylo úspěšně odebráno</string>
   <string id="13024">Joystick byl připojen</string>
   <string id="13025">Joystick byl odpojen</string>
 
   <string id="13100">Filtr blikání</string>
   <string id="13101">Ponechat nastavení ovladače (vyžadován restart)</string>
+
   <string id="13105">Vertikální synchronizace obrazovky (V-Sync)</string>
   <string id="13106">Vypnuto</string>
   <string id="13107">Zapnuto při přehrávání videa</string>
   <string id="13119">Sinc</string>
   <string id="13120">VDPAU</string>
   <string id="13121">VDPAU - HQ přepočet</string>
-  <string id="13122">VDPAU - rozsah barevného prostoru: 16-235 - Studio Levels</string>
+  <string id="13122">VDPAU - rozsah barevného prostoru Studio Levels</string>
 
   <string id="13130">Ztmavovat ostatní obrazovky</string>
   <string id="13131">Vypnuto</string>
 
   <string id="13140">Nalezena aktivní spojení!</string>
   <string id="13141">V případě, že budete pokračovat je pravděpodobné že nebudete</string>
-  <string id="13142">moci nadále ovládat XBMC. Opravdu chcete ukončit Event Server?</string>
+  <string id="13142">moci nadále ovládat XBMC. Opravdu chcete ukončit Event server?</string>
 
   <string id="13144">Chcete změnit mód Dálkového ovladače Apple?</string>
   <string id="13145">V případě, že používáte Dálkový ovladač Apple</string>
   <string id="13146">k ovládání XBMC, změnou tohoto nastavení můžete</string>
   <string id="13147">přijít o možnost ovládání. Opravdu chcete pokračovat?</string>
 
-  <string id="13150"></string>
-  <string id="13151"></string>
-  <string id="13152"></string>
-  <string id="13153"></string>
-  <string id="13154"></string>
-  <string id="13155"></string>
-  <string id="13156"></string>
-  <string id="13157"></string>
-  <string id="13158"></string>
   <string id="13159">Maska podsítě</string>
   <string id="13160">Výchozí brána</string>
   <string id="13161">Primární DNS</string>
   <string id="13162">Inicializace selhala</string>
 
-  <string id="13163"></string>
-  <string id="13164"></string>
-  <string id="13165"></string>
-  <string id="13166"></string>
-  <string id="13167"></string>
-  <string id="13168"></string>
-  <string id="13169"></string>
-
-
   <string id="13170">Nikdy</string>
   <string id="13171">Okamžitě</string>
   <string id="13172">Po %i sekundách</string>
   <string id="13174">Počet spuštění HDD:</string>
 
   <string id="13200">Profily</string>
-  <string id="13201">Odstranit profil: '%s'?</string>
+  <string id="13201">Odstranit profil '%s'?</string>
+
   <string id="13204">Naposledy načtený profil:</string>
   <string id="13205">Neznámý</string>
   <string id="13206">Přepsat</string>
+
   <string id="13208">Budík</string>
   <string id="13209">Interval budíku (v min)</string>
   <string id="13210">Budík nastaven na %im</string>
 
   <string id="13283">Operační systém:</string>
   <string id="13284">CPU frekvence:</string>
-  <string id="13285"></string>
+
   <string id="13286">Grafický adaptér:</string>
   <string id="13287">Rozlišení obrazovky:</string>
-  <string id="13288"></string>
-  <string id="13289"></string>
-  <string id="13290"></string>
-  <string id="13291"></string>
+
   <string id="13292">A/V kabel:</string>
-  <string id="13293"></string>
+
   <string id="13294">DVD region:</string>
   <string id="13295">Internet:</string>
   <string id="13296">Připojeno</string>
-  <string id="13297">Nepřipojeno! Zkontrolujte nastavení sítě!</string>
-  <string id="13298">XBLIVE klíč:</string>
+  <string id="13297">Nepřipojeno. Zkontrolujte nastavení sítě.</string>
+
   <string id="13299">Cílová teplota</string>
-  <string id="13300">Rychlost vetráčku</string>
+  <string id="13300">Rychlost větráčku</string>
   <string id="13301">Automatická kontrola teploty</string>
   <string id="13302">Manuální nastavení rychlosti větráčku</string>
   <string id="13303">Písmo vzhledu</string>
   <string id="13334">Změnit název</string>
   <string id="13335">Nastavit jako vých. složku</string>
   <string id="13336">Odebrat tlačítko</string>
-  <string id="13338">Přední LED</string>
-  <string id="13339">Barva Přední LED</string>
+
   <string id="13340">Standardní</string>
   <string id="13341">Zelená</string>
   <string id="13342">Oranžová</string>
   <string id="13345">Vypnout LED při přehrávání</string>
   <string id="13346">Informace o filmu</string>
   <string id="13347">Přidat do Seznamu stop</string>
-  <string id="13348">Vyhledat na IMDb</string>
+  <string id="13348">Vyhledat na IMDb...</string>
   <string id="13349">Vyhledat nový obsah</string>
-  <string id="13350">Seznam stop</string>
+  <string id="13350">Přehrává se...</string>
   <string id="13351">Informace o albu</string>
   <string id="13352">Přidat do Knihovny</string>
   <string id="13353">Ukončit vyhledávání</string>
   <string id="13354">Způsob vykreslení</string>
-  <string id="13355">Nízká kvalita Pixel Shaderu</string>
+  <string id="13355">Nízká kvalita pixel shaderu</string>
   <string id="13356">Hardwarové překrytí</string>
-  <string id="13357">Vysoká kvalita Pixel Shaderu</string>
+  <string id="13357">Vysoká kvalita pixel shaderu</string>
   <string id="13358">Přehrát položku</string>
   <string id="13359">Přiřadit ikonu interpreta</string>
   <string id="13360">Automaticky generovat náhledy</string>
   <string id="13361">Povolit úpravu hlasu</string>
+
   <string id="13375">Povolit zařízení</string>
   <string id="13376">Hlasitost</string>
-  <string id="13377">Výchozí nastavení - Zobrazení</string>
-  <string id="13378">Výchozí nastavení - Jas</string>
-  <string id="13379">Výchozí nastavení - Kontrast</string>
-  <string id="13380">Výchozí nastavení - Gamma</string>
+  <string id="13377">Výchozí nastavení zobrazení</string>
+  <string id="13378">Výchozí nastavení jasu</string>
+  <string id="13379">Výchozí nastavení kontrastu</string>
+  <string id="13380">Výchozí nastavení gama</string>
   <string id="13381">Pokračovat ve videu</string>
-  <string id="13382">Zabarvení hlasu - Port 0</string>
-  <string id="13383">Zabarvení hlasu - Port 1</string>
-  <string id="13384">Zabarvení hlasu - Port 2</string>
-  <string id="13385">Zabarvení hlasu - Port 3</string>
+  <string id="13382">Zabarvení hlasu - Port 1</string>
+  <string id="13383">Zabarvení hlasu - Port 2</string>
+  <string id="13384">Zabarvení hlasu - Port 3</string>
+  <string id="13385">Zabarvení hlasu - Port 4</string>
   <string id="13386">Použít pevně dané čas. intervaly při přeskakování ve videu</string>
   <string id="13387">Šablona názvu stopy - vpravo</string>
   <string id="13388">Předvolby</string>
   <string id="13396">Nastavení zvuku/titulků</string>
   <string id="13397">Zobrazovat titulky</string>
   <string id="13398">Záložky</string>
-  <string id="13399">Při řazení ignorovat "členy" na začátku názvů položek</string>
+  <string id="13399">Při řazení ignorovat "členy" na začátku názvu ("the")</string>
   <string id="13400">Plynule přecházet mezi skladbami ze stejného alba</string>
   <string id="13401">Hledat %s</string>
   <string id="13402">Zobrazovat pozici stopy</string>
   <string id="13406">Informace o obrázku</string>
   <string id="13407">%s předvolby</string>
   <string id="13408">(Hodnocení uživatelů IMDb)</string>
-  <string id="13409">Top 250:</string>
-  <string id="13410">Naladit na LastFM</string>
+  <string id="13409">Top 250</string>
+  <string id="13410">Naladit na Last.fm</string>
   <string id="13411">Minimální rychlost větráčku</string>
-
+  <string id="13412">Přehrát z tohoto místa</string>
   <string id="13413">Probíhá stahování</string>
   <string id="13414">Zobrazovat mezi Interprety i ty, kteří se vyskytují pouze u kompilací</string>
   <string id="13415">Způsob vykreslování</string>
   <string id="13422">Spustit prezentaci</string>
   <string id="13423">Zapamatovat pro tuto cestu</string>
   <string id="13424">Použít objekty vyrovnávací paměti pixelu</string>
-  <string id="13425">Broadcom Crystal HD</string>
+  <string id="13425">Aktivovat hardwarovou akceleraci (VDPAU)</string>
   <string id="13426">Aktivovat hardwarovou akceleraci (VAAPI)</string>
   <string id="13427">Aktivovat hardwarovou akceleraci (DXVA2)</string>
   <string id="13428">Aktivovat hardwarovou akceleraci (CrystalHD)</string>
   <string id="13429">Aktivovat hardwarovou akceleraci (VDADecoder)</string>
   <string id="13430">Aktivovat hardwarovou akceleraci (OpenMax)</string>
   <string id="13431">Pixel Shadery</string>
+  <string id="13432">Povolit hardwarovou akceleraci (VideoToolbox)</string>
 
   <string id="13500">Způsob synchronizace A/V</string>
   <string id="13501">dle audia</string>
   <string id="14040">restart XBMC. Chcete ho provést nyní?</string>
   <string id="14041">Post Processing</string>
 
-  <string id="14043">- Aktivovat vypnutí v případě že je hra spuštěna</string>
+  <string id="14043">- Aktivovat vypnutí v případě, že je hra spuštěna</string>
   <string id="14044">%i min</string>
   <string id="14045">%i sek</string>
   <string id="14046">%i ms</string>
   <string id="14049">%i kb</string>
   <string id="14050">%i.0 dB</string>
   <string id="14051">Formát hodin</string>
-  <string id="14052">Formát datumu</string>
+  <string id="14052">Formát data</string>
   <string id="14053">Filtry GUI</string>
 
   <string id="14055">Použít vyhledávání na pozadí</string>
   <string id="14060">Mezipaměť - Ostatní - Internet</string>
   <string id="14061">Automaticky</string>
   <string id="14062">Zadejte uživatelské jméno pro</string>
-  <string id="14063">Datum &amp; Čas</string>
+  <string id="14063">Datum a Čas</string>
   <string id="14064">Datum</string>
   <string id="14065">Čas</string>
   <string id="14066">Zadejte čas ve 24h formátu (HH:MM)</string>
 
   <string id="14074">Časové pásmo</string>
   <string id="14075">Automaticky upravit hodiny na letní čas</string>
-  <string id="14076">Přidat do Oblíbených</string>
-  <string id="14077">Odebrat z Oblíbených</string>
+  <string id="14076">Přidat do oblíbených</string>
+  <string id="14077">Odebrat z oblíbených</string>
   <string id="14078">Barvy vzhledu</string>
   <string id="14079">Časové pásmo - Země</string>
   <string id="14080">Časové pásmo</string>
   <string id="14081">Soubory a složky</string>
   <string id="14082">Zobrazovat EXIF informace o obrázku</string>
-  <string id="14083">Upřednostňovat režim celé obrazovky na velikost okna</string>
+  <string id="14083">Otevřít v okně přes celou obrazovku namísto pravého fullscreen režimu</string>
   <string id="14084">Přidávat skladby do fronty při jejich výběru</string>
   <string id="14085">Automaticky přehrávat Audio CD</string>
   <string id="14086">Přehrávání</string>
   <string id="14087">DVD</string>
   <string id="14088">Automaticky přehrávat DVD</string>
-  <string id="14089">Font pro textové titulky</string>
+  <string id="14089">Písmo pro textové titulky</string>
   <string id="14090">Oblast a jazyk</string>
   <string id="14091">Znaková sada</string>
   <string id="14092">Ladění</string>
 
   <string id="15100">Knihovna</string>
   <string id="15101">Databáze</string>
-  <string id="15102">* Všechny alba</string>
+  <string id="15102">* Všechna alba</string>
   <string id="15103">* Všichni interpreti</string>
   <string id="15104">* Všechny skladby</string>
   <string id="15105">* Všechny žánry</string>
 
-  <string id="15107">Probíhá načítání do mezipaměti...</string>
+  <string id="15107">Načítání do mezipaměti...</string>
   <string id="15108">Zvuky při navigaci</string>
   <string id="15109">Standardní</string>
-  <string id="15111">Téma vzhledu</string>
+  <string id="15111">Téma vzhledu</string>
   <string id="15112">Výchozí vzhled</string>
 
-  <string id="15200">Last.FM</string>
-  <string id="15201">Last.FM - Odesílat informace o skladbách</string>
-  <string id="15202">Last.FM - Uživatelské jméno</string>
-  <string id="15203">Last.FM - Heslo</string>
+  <string id="15200">Last.fm</string>
+  <string id="15201">Last.fm - Odesílat informace o skladbách</string>
+  <string id="15202">Last.fm - Uživatelské jméno</string>
+  <string id="15203">Last.fm - Heslo</string>
   <string id="15204">Nepovolená operace: Probíhá ukončování...</string>
   <string id="15205">Aktualizujte prosím XBMC</string>
-  <string id="15206">Neuspěšná autorizace: Zkontrolujte uživ. jméno a heslo</string>
+  <string id="15206">Neúspěšná autorizace: Zkontrolujte uživ. jméno a heslo</string>
   <string id="15207">Připojeno</string>
   <string id="15208">Nepřipojeno</string>
   <string id="15209">Interval odesílání %i</string>
   <string id="15220">Libre.fm</string>
   <string id="15221">Online služby</string>
 
-  <string id="15250">Last.FM - Odesílat informace o rádiích</string>
-  <string id="15251">Probíhá připojování k Last.FM...</string>
+  <string id="15250">Last.fm - Odesílat informace o rádiích</string>
+  <string id="15251">Probíhá připojování k Last.fm...</string>
   <string id="15252">Probíhá výběr stanice...</string>
   <string id="15253">Vyhledat podobné interprety...</string>
   <string id="15254">Vyhledat podobné slova...</string>
   <string id="15257">NEJ interpreti pro slovo %name%</string>
   <string id="15258">NEJ alba pro slovo %name%</string>
   <string id="15259">NEJ skladby pro slovo %name%</string>
-  <string id="15260">Poslouchat slovo %name% Last.FM radio</string>
+  <string id="15260">Poslouchat slovo %name% Last.fm radio</string>
   <string id="15261">Podobní interpreti jako %name%</string>
   <string id="15262">%name% - NEJ alba</string>
   <string id="15263">%name% - NEJ skladby</string>
   <string id="15264">%name% - NEJ slova</string>
   <string id="15265">Největší fanoušci - %name%</string>
-  <string id="15266">Poslouchat %name% fanoušky Last.FM radio</string>
-  <string id="15267">Poslouchat %name% podobné interprety Last.FM radio</string>
+  <string id="15266">Poslouchat %name% fanoušky Last.fm radio</string>
+  <string id="15267">Poslouchat %name% podobné interprety Last.fm radio</string>
   <string id="15268">NEJ interpreti uživatele %name%</string>
   <string id="15269">NEJ alba uživatele %name%</string>
   <string id="15270">NEJ skladby uživatele %name%</string>
   <string id="15273">Žebříček interpretů týdne pro %name%</string>
   <string id="15274">Žebříček alb týdne pro %name%</string>
   <string id="15275">Žebříček skladeb týdne pro %name%</string>
-  <string id="15276">Poslouchat %name% sousedovo Last.FM radio</string>
-  <string id="15277">Poslouchat %name% osobní Last.FM radio</string>
-  <string id="15278">Poslouchat %name% nejoblíbenější skladby Last.FM radia</string>
-  <string id="15279">Probíhá stahování seznamu z Last.FM...</string>
-  <string id="15280">Seznam z Last.FM se nepodařilo stáhnout...</string>
+  <string id="15276">Poslouchat %name% sousedovo Last.fm radio</string>
+  <string id="15277">Poslouchat %name% osobní Last.fm radio</string>
+  <string id="15278">Poslouchat %name% nejoblíbenější skladby Last.fm radia</string>
+  <string id="15279">Probíhá stahování seznamu z Last.fm...</string>
+  <string id="15280">Seznam z Last.fm se nepodařilo stáhnout...</string>
   <string id="15281">Zadejte jméno interpreta pro vyhledání jemu podobných</string>
   <string id="15282">Zadejte slovo pro vyhledání podobných</string>
   <string id="15283">Skladby, které naposledy poslouchal %name%</string>
-  <string id="15284">Poslouchám: %name%'s doporučení Last.FM radio</string>
+  <string id="15284">Poslouchám: %name%'s doporučení Last.fm radio</string>
   <string id="15285">Nejoblíbenější tagy uživatele %name%</string>
-  <string id="15286">Poslechnout si Last.FM seznam stop uživatele %name% </string>
+
   <string id="15287">Chcete přidat tuto skladbu k vašim oblíbeným?</string>
   <string id="15288">Chcete zakázat aktuální skladbu?</string>
   <string id="15289">Skladba přidána do oblíbených: '%s'.</string>
   <string id="16015">Vstoupit do složky</string>
   <string id="16016">Dostupné parametry: %A, %T, %N, %B, %D, %G, %Y, %F, %S</string>
   <string id="16017">Zadejte text k vyhledání</string>
-  <string id="16018">bez změny</string>
-  <string id="16019">zpracovat automaticky</string>
-  <string id="16020">deinterlacovat</string>
+  <string id="16018">Bez změny</string>
+  <string id="16019">Zpracovat automaticky</string>
+  <string id="16020">Odstranit prokládání</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (opačný)</string>
   <string id="16023">Prokládaný materiál</string>
   <string id="16033">Nemohu otevřít knihovnu.</string>
   <string id="16034">Nepodařilo se načíst skladby z knihovny.</string>
   <string id="16035">Seznam stop - Párty mód</string>
+  <string id="16036">De-interlace (Half)</string>
+  <string id="16037">Deinterlace video</string>
+  <string id="16038">Deinterlace method</string>
+  <string id="16039">Off</string>
+  <string id="16040">Auto</string>
+  <string id="16041">On</string>
 
   <string id="16100">Všechna videa</string>
   <string id="16101">Nezhlédnuté</string>
   <string id="16103">Označit jako zhlédnuté</string>
   <string id="16104">Označit jako nezhlédnuté</string>
   <string id="16105">Upravit název</string>
-  <string id="16106"></string>
-  <string id="16107"></string>
-  <string id="16108"></string>
-  <string id="16109"></string>
-  <string id="16110"></string>
 
   <string id="16200">Operace byla zrušena</string>
   <string id="16201">Kopírování selhalo</string>
   <string id="16317">Temporal (poloviční)</string>
   <string id="16318">Temporal/Spatial (poloviční)</string>
   <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 optimized</string>
+  <string id="16324">Software Blend</string>
 
   <string id="16400">Post-processing</string>
-  <string id="16401"></string>
-  <string id="16402"></string>
-  <string id="16403"></string>
 
   <string id="17500">Zobrazovat odpočet do uspání</string>
 
   <string id="20039">Uzamknout video sekci</string>
   <string id="20040">Uzamknout sekci s obrázky</string>
   <string id="20041">Uzamknout sekci s programy a skripty</string>
-  <string id="20042">Uzamknout souborový manažer</string>
+  <string id="20042">Uzamknout správce souborů</string>
   <string id="20043">Uzamknout nastavení</string>
   <string id="20044">Výchozí</string>
   <string id="20045">Odemknout rodičovský zámek</string>
   <string id="20057">Odebrat náhled</string>
   <string id="20058">Přidat profil...</string>
   <string id="20059">Získat informace pro všechna alba</string>
-  <string id="20060">Media info</string>
+  <string id="20060">Informace o médiích</string>
   <string id="20061">Oddělit</string>
   <string id="20062">Sdílet se stávajícími</string>
   <string id="20063">Sdílet se stávajícími (jen pro čtení)</string>
   <string id="20069">Nemohu vytvořit složku</string>
   <string id="20070">Složka profilu</string>
   <string id="20071">Chcete nastavit výchozí zdroje médií</string>
-  <string id="20072">Ujistěte se, zda je do vybráné složky možnost zápisu</string>
+  <string id="20072">Ujistěte se, zda je do vybrané složky možnost zápisu</string>
   <string id="20073">a nový název složky v pořádku</string>
   <string id="20074">Přístupnost</string>
   <string id="20075">Zadejte hlavní kód rodičovského zámku</string>
   <string id="20107">Oddělit (uzamknout)</string>
   <string id="20108">Výchozí složka</string>
   <string id="20109">Přiblížení vzhledu</string>
-  <string id="20110">UPnP</string>
-  <string id="20111">UPnP klient</string>
+  <string id="20110">Nastavení UPnP</string>
+  <string id="20111">Automaticky spustit UPnP klienta</string>
   <string id="20112">Poslední přihlášení: %s</string>
   <string id="20113">Nikdy nepřihlášen</string>
   <string id="20114">Profil %i / %i</string>
   <string id="20164">Uzamknutí není podporováno</string>
   <string id="20165">Neuzamknuto</string>
   <string id="20166">Uzamknuto</string>
-  <string id="20167">Zmraženo</string>
+  <string id="20167">Zmrazeno</string>
   <string id="20168">Vyžadován restart</string>
   <string id="20169">Týden</string>
   <string id="20170">Linka</string>
   <string id="20171">Síť Windows (SMB)</string>
-  <string id="20172">XBMSP Server</string>
-  <string id="20173">FTP Server</string>
-  <string id="20174">Sdílená složka ITunes (DAAP)</string>
-  <string id="20175">UPnP Server</string>
+  <string id="20172">XBMSP server</string>
+  <string id="20173">FTP server</string>
+  <string id="20174">Sdílená složka iTunes (DAAP)</string>
+  <string id="20175">UPnP server</string>
   <string id="20176">Zobrazovat informace o videu</string>
   <string id="20177">Hotovo</string>
   <string id="20178">Shift</string>
   <string id="20179">Caps Lock</string>
   <string id="20180">Symboly</string>
-  <string id="20181">Odebrat</string>
+  <string id="20181">Smazat</string>
   <string id="20182">Mezera</string>
-  <string id="20183">Aktualizovat</string>
+  <string id="20183">Obnovit motiv vzhledu</string>
   <string id="20184">Otáčet obrázky pomocí informací z EXIFu</string>
   <string id="20185">Použít styl plakátů u TV Seriálů</string>
   <string id="20186">Vyčkejte</string>
-  <string id="20187">Zálohuji EEPROM</string>
-  <string id="20188">Zálohuji BIOS</string>
+
   <string id="20189">Aktivovat automatické posouvání děje a recenze</string>
   <string id="20190">Vlastní</string>
   <string id="20191">Ukládat pokročilé informace o ladění</string>
 
   <string id="20250">Párty zahájena! (videa)</string>
   <string id="20251">Míchám nápoje (videa)</string>
-  <string id="20252">Nalévám sklenice (videas)</string>
+  <string id="20252">Nalévám sklenice (videa)</string>
   <string id="20253">WebDAV server (HTTP)</string>
   <string id="20254">WebDAV server (HTTPS)</string>
   <string id="20255">První přihlášení, upravte si svůj profil</string>
   <string id="20256">HTS Tvheadend klient</string>
   <string id="20257">VDR Streamdev klient</string>
   <string id="20258">MythTV klient</string>
+  <string id="20259">Network Filesystem (NFS)</string>
+  <string id="20260">Secure Shell (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
 
   <string id="20300">Web server složka (HTTP)</string>
   <string id="20301">Web server složka (HTTPS)</string>
   <string id="20303">Chcete ji přeskočit a pokračovat dále?</string>
   <string id="20304">RSS zpravodajství</string>
 
-  <string id="20306"></string>
   <string id="20307">Sekundární DNS</string>
-  <string id="20308">DHCP Server:</string>
+  <string id="20308">DHCP server:</string>
   <string id="20309">Vytvořit novou složku</string>
   <string id="20310">Ztmavovat LCD při přehrávání</string>
   <string id="20311">Neznámé nebo integrované</string>
   <string id="20312">Ztmavovat LCD při pozastavení</string>
-  <string id="20313"></string>
+
   <string id="20314">Video - Knihovna</string>
-  <string id="20315"></string>
+
   <string id="20316">Dle ID</string>
-  <string id="20317"></string>
-  <string id="20318"></string>
-  <string id="20319"></string>
-  <string id="20320"></string>
-  <string id="20321"></string>
-  <string id="20322"></string>
-  <string id="20323"></string>
+
   <string id="20324">Hrát část...</string>
   <string id="20325">Vynulování kalibrace</string>
   <string id="20326">Tímto smažete veškeré uložené hodnoty kalibrace pro %s</string>
   <string id="20393">Informace k hudebnímu videoklipu</string>
   <string id="20394">Probíhá načítání informací o hudebním videoklipu</string>
   <string id="20395">Smíšené</string>
-  <string id="20396">Přejít k intepretovým albům</string>
+  <string id="20396">Přejít k interpretovým albům</string>
   <string id="20397">Přejít k albu</string>
   <string id="20398">Přehrát skladbu</string>
   <string id="20399">Přejít k hudebním videoklipům alba</string>
   <string id="20410">Upoutávka</string>
   <string id="20411">Jednoduchý mód</string>
   <string id="20412">Zobrazit TV seriály zjednodušeně</string>
-  <string id="20413">Změnit FanArt</string>
-  <string id="20414">Povolit FanArt v knihovně videí</string>
+  <string id="20413">Změnit fanart</string>
+  <string id="20414">Povolit fanart v knihovně videí a hudby</string>
   <string id="20415">Probíhá vyhledávání nového obsahu</string>
   <string id="20416">Premiéra</string>
   <string id="20417">Autor</string>
   <string id="20418">Zobrazovat "vyčištěné" názvy souborů</string>
+  <string id="20419">Zobrazit metadata v seznamu souborů</string>
 
   <string id="20420">Nikdy</string>
-  <string id="20421">V případě že má 1 řadu</string>
+  <string id="20421">Pokud má 1 řadu</string>
   <string id="20422">Vždy</string>
   <string id="20423">Má upoutávku</string>
   <string id="20424">Nepravdivé</string>
-  <string id="20425">FanArt prezentace</string>
+  <string id="20425">Fanart prezentace</string>
   <string id="20426">Exportovat vše do jednoho souboru nebo</string>
   <string id="20427">každou položku do samostatného souboru?</string>
   <string id="20428">1 soubor</string>
   <string id="20429">Samostatně</string>
-  <string id="20430">Exportovat náhledy a FanArt?</string>
+  <string id="20430">Exportovat náhledy a fanart?</string>
   <string id="20431">Přepsat existující soubory?</string>
   <string id="20432">Nezahrnovat položky v tomto umístění při aktualizaci knihovny</string>
   <string id="20433">Získávat ze souborů náhledy a informace o videu</string>
-  <string id="20434">Sady</string>
-  <string id="20435">Přiřadit náhled sadě</string>
+  <string id="20434">Série</string>
+  <string id="20435">Přiřadit náhled filmové sérii</string>
   <string id="20436">Exportovat náhledy herců</string>
-  <string id="20437">Vyberte FanArt</string>
-  <string id="20438">Lokální FanArt</string>
-  <string id="20439">Žádný FanArt</string>
-  <string id="20440">Současný FanArt</string>
-  <string id="20441">Internetový FanArt</string>
+  <string id="20437">Vyberte fanart</string>
+  <string id="20438">Lokální fanart</string>
+  <string id="20439">Žádný fanart</string>
+  <string id="20440">Současný fanart</string>
+  <string id="20441">Internetový fanart</string>
   <string id="20442">Změnit obsah</string>
   <string id="20443">Chcete aktualizovat informace pro</string>
   <string id="20444">všechny položky v tomto umístění?</string>
-  <string id="20445">FanArt</string>
+  <string id="20445">Fanart</string>
   <string id="20446">Byly nalezeny informace, které jsou uložené lokálně.</string>
   <string id="20447">Chcete je aktualizovat informacemi z internetu?</string>
   <string id="20448">Informace se nepodařilo stáhnout</string>
   <string id="20451">Země</string>
   <string id="20452">epizoda</string>
   <string id="20453">epizod(y)</string>
+  <string id="20454">Posluchač</string>
+  <string id="20455">Posluchači</string>
+  <string id="20456">Přiřadit fanart filmové sérii</string>
+  <string id="20457">Filmová série</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Zobrazovat skryté soubory a složky</string>
   <string id="21364">Upravit sdílení</string>
   <string id="21365">Odebrat sdílení</string>
   <string id="21366">Složka s titulky</string>
-  <string id="21367">Video &amp; alternativní složka s titulky</string>
+  <string id="21367">Video a alternativní složka s titulky</string>
+  <string id="21368">Přepsat písmo v ASS/SSA titulcích</string>
 
   <string id="21369">Povolit kurzor myši</string>
   <string id="21370">Přehrávat zvuky při přehrávání multimediálních souborů</string>
   <string id="21380">Aktivovat 1080i</string>
   <string id="21381">Zadejte název nového Seznamu stop</string>
   <string id="21382">Zobrazovat tlačítko "Přidat zdroj" v jednotlivých sekcích</string>
-  <string id="21383">Zobrazovat skrolovací lištu</string>
+  <string id="21383">Zobrazovat posuvníky</string>
   <string id="21384">Aktivovat v knihovně filtr zhlédnutých/nezhlédnutých videí</string>
   <string id="21385">Otevřít Seznam stop</string>
   <string id="21386">Úroveň hlučnosti</string>
   <string id="21394">Režim spánku s nižší spotřebou</string>
   <string id="21395">Soubory větší než 4GB nelze načíst do vyrovnávací paměti</string>
   <string id="21396">Kapitola</string>
-  <string id="21397">High Quality Pixel Shader V2</string>
+  <string id="21397">High quality pixel shader v2</string>
   <string id="21398">Načíst Seznam stop při spuštění</string>
   <string id="21399">Aktivovat "neposednou" animaci</string>
   <string id="21400">obsahuje</string>
   <string id="21452">Získat další...</string>
   <string id="21453">Kořenový adresář souborového systému</string>
 
+  <string id="21460">Umístění titulků</string>
+  <string id="21461">Pevné</string>
+  <string id="21462">Spodní část obrazu</string>
+  <string id="21463">Pod obrazem</string>
+  <string id="21464">Horní část obrazu</string>
+  <string id="21465">Nad obrazem</string>
+
   <string id="21800">Název souboru</string>
   <string id="21801">Cesta k souboru</string>
   <string id="21802">Velikost souboru</string>
   <string id="21805">Rozlišení</string>
   <string id="21806">Komentář</string>
   <string id="21807">Barva/ČB</string>
-  <string id="21808">Zpracování Jpeg</string>
+  <string id="21808">Zpracování JPEG</string>
 
   <string id="21820">Datum/Čas</string>
   <string id="21821">Popis</string>
   <string id="21822">Značka fotoaparátu</string>
   <string id="21823">Model fotoaparátu</string>
-  <string id="21824">Exif komentář</string>
+  <string id="21824">EXIF komentář</string>
   <string id="21825">Firmware</string>
   <string id="21826">Clona</string>
   <string id="21827">Ohnisko objektivu</string>
   <string id="21886">Probíhá stahování informací o interpretovi</string>
   <string id="21887">Životopis</string>
   <string id="21888">Diskografie</string>
-  <string id="21889">Probíhá vyhledávání informací o interptretovi</string>
+  <string id="21889">Probíhá vyhledávání informací o interpretovi</string>
   <string id="21890">Vyberte interpreta</string>
   <string id="21891">Informace o interpretovi</string>
-  <string id="21892">Hudební nástroje:</string>
-  <string id="21893">Datum narození:</string>
-  <string id="21894">Datum seskupení:</string>
-  <string id="21895">Tématické zaměření:</string>
-  <string id="21896">Datum rozpuštění:</string>
-  <string id="21897">Datum úmrtí:</string>
-  <string id="21898">Aktivní v letech:</string>
-  <string id="21899">Label:</string>
-  <string id="21900">Datum narození/seskupení:</string>
+  <string id="21892">Hudební nástroje</string>
+  <string id="21893">Datum narození</string>
+  <string id="21894">Datum seskupení</string>
+  <string id="21895">Tematické zaměření</string>
+  <string id="21896">Datum rozpuštění</string>
+  <string id="21897">Datum úmrtí</string>
+  <string id="21898">Aktivní v letech</string>
+  <string id="21899">Label</string>
+  <string id="21900">Datum narození/seskupení</string>
 
   <!-- strings 21900 thru 21999 reserved for slideshow info -->
 
   <string id="22019">Nahrávky dle názvů</string>
   <string id="22020">Návod</string>
   <string id="22021">Odchylka poměru stran k minimalizaci černých okrajů</string>
-  <string id="22022">Zobrazovat videa v seznamu soborů</string>
+  <string id="22022">Zobrazovat videa v seznamu souborů</string>
   <string id="22023">DirectX výrobce:</string>
   <string id="22024">Direct3D verze:</string>
 
   <!-- strings 22030 thru 22060 reserved for karaoke -->
-  <string id="22030">Font</string>
+  <string id="22030">Písmo</string>
   <string id="22031">- Velikost</string>
   <string id="22032">- Barva</string>
   <string id="22033">- Znaková sada</string>
   <string id="22034">Exportovat do HTML</string>
   <string id="22035">Exportovat do CSV</string>
-  <string id="22036">Importovat karaoke tituly...</string>
+  <string id="22036">Importovat karaoke titulky...</string>
   <string id="22037">Automaticky zobrazovat dialog pro výběr skladby</string>
-  <string id="22038">Exportovat karaoke tituly...</string>
+  <string id="22038">Exportovat karaoke titulky...</string>
   <string id="22039">Vyberte číslo skladby</string>
   <string id="22040">bílá/zelená</string>
   <string id="22041">bílá/červená</string>
   <string id="24008">Spořič obrazovky</string>
   <string id="24009">Skript</string>
   <string id="24010">Vizualizace</string>
-  <string id="24011">Repozitář doplňků</string>
+  <string id="24011">Zdroj doplňků</string>
   <string id="24012">Titulky</string>
   <string id="24013">Texty skladeb</string>
   <string id="24014">Informace o TV seriálu</string>
   <string id="24015">Informace o hudebním videu</string>
   <string id="24016">Informace o albu</string>
-  <string id="24017">Informace o intepretovi</string>
+  <string id="24017">Informace o interpretovi</string>
+  <string id="24018">Služby</string>
 
   <string id="24020">Nastavení</string>
   <string id="24021">Deaktivovat</string>
   <string id="24041">Instalovat doplněk ze zip archivu</string>
   <string id="24042">Staženo %i%%</string>
   <string id="24043">Doplňky s dostupnou aktualizací</string>
+  <string id="24044">Nesplněné závislosti</string>
+  <string id="24045">Doplněk nemá správnou strukturu</string>
+  <string id="24046">%s je používán těmito nainstalovanými doplňky</string>
+  <string id="24047">Tento doplněk není možné odinstalovat</string>
+  <string id="24048">Vrácení změn</string>
 
   <string id="24050">Dostupné doplňky</string>
   <string id="24051">Verze:</string>
   <string id="24052">Upozornění</string>
   <string id="24053">Licence:</string>
   <string id="24054">Změny</string>
-  <string id="24059">Chcete aktivovat tento doplňek?</string>
-  <string id="24060">Chcete deaktivovat tento doplňek?</string>
+  <string id="24059">Chcete aktivovat tento doplk?</string>
+  <string id="24060">Chcete deaktivovat tento doplk?</string>
   <string id="24061">Je k dispozici aktualizace doplňku!</string>
   <string id="24062">Aktivované doplňky</string>
   <string id="24063">Auto. aktualizace</string>
   <string id="24073">Nelze se připojit</string>
   <string id="24074">Je vyžadován restart</string>
   <string id="24075">Deaktivovat</string>
+  <string id="24076">Doplněk vyžadován</string>
   <string id="24080">Pokusit se o opětovné připojení?</string>
   <string id="24089">Doplněk se restartuje</string>
   <string id="24090">Uzamknutí správce doplňků</string>
 
-  <string id="24091"></string>
-  <string id="24092"></string>
-  <string id="24093"></string>
-  <string id="24094"></string>
-  <string id="24095"></string>
-
-  <string id="24096">Doplněk byl v repozitáři označen jako nefunkční.</string>
+  <string id="24094">(stávající)</string>
+  <string id="24095">(zakázaný)</string>
+  <string id="24096">Doplněk byl ve zdroji označen jako nefunkční.</string>
   <string id="24097">Chcete ho deaktivovat?</string>
   <string id="24098">Nefunkční</string>
   <string id="24099">Chcete použít tento Vzhled?</string>
-  <string id="25000">Notifikace</string>
-
+  <string id="24100">Chcete-li používat tuto funkci, musíte stáhnout doplněk:</string>
+  <string id="24101">Chcete stáhnout tento doplněk?</string>
+  <string id="25000">Upozorňování</string>
 
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29800">Mód knihovny</string>
   <string id="29801">QWERTY klávesnice</string>
   <string id="29802">Audio je přeposíláno receiveru</string>
 
-  <string id="29999">Automaticky aplikovat filtr blikání u her</string>
-
   <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
   <!-- strings 31000 thru 31999 reserved for skins -->
   <!-- strings 32000 thru 32999 reserved for scripts -->
   <!-- strings 33000 thru 33999 reserved for common strings used in addons -->
-  <string id="33001">Kvalita traileru</string>
+  <string id="33001">Kvalita upoutávky</string>
   <string id="33002">Streamovat</string>
   <string id="33003">Stáhnout</string>
   <string id="33004">Stáhnout a přehrát</string>
   <string id="33027">Východ slunce</string>
   <string id="33028">Západ slunce</string>
   <string id="33029">Detaily</string>
-  <string id="33030">Outlook</string>
+  <string id="33030">Výhled</string>
   <string id="33031">Coverflow</string>
   <string id="33032">Přeložit text</string>
   <string id="33033">Namapovat seznam %s kategorie</string>
   <string id="33082">Cesta ke skriptu</string>
   <string id="33083">Povolit vlastní tlačítko skriptu</string>
 
+  <string id="33100">Nepodařilo se spustit</string>
+  <string id="33101">Webserver</string>
+  <string id="33102">Event Server</string>
+  <string id="33103">Remote communication server</string>
+
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
   <string id="34002">Wav</string>
-  <string id="34003">DXVA</string>
+  <string id="34003">DXVA2</string>
   <string id="34004">VAAPI</string>
-  <string id="34005">FLAC</string>
+  <string id="34005">Flac</string>
 
   <string id="34100">Konfigurace reproduktorů</string>
   <string id="34101">2.0</string>
   <string id="34110">7.1</string>
   <!-- 34112-34200 reserved for future use -->
 
+  <string id="34201">Nelze nalézt další položku pro přehrávání</string>
+  <string id="34202">Nelze nalézt předchozí položku pro přehrávání</string>
+
+  <string id="35000">Periferní zařízení</string>
+
+  <string id="35001">Obecné HID zařízení</string>
+  <string id="35002">Obecný síťový adaptér</string>
+  <string id="35003">Obecný disk</string>
+  <string id="35004">Pro toto periferní zařízení nejsou&#10;k dispozici žádná nastavení.</string>
+  <string id="35005">Nové zařízení nastaveno</string>
+  <string id="35006">Zařízení odebráno</string>
+  <string id="35007">Rozložení kláves pro toto zařízení</string>
+  <string id="35008">Rozložení kláves povoleno</string>
+
+  <string id="35500">Umístění</string>
+  <string id="35501">Třída</string>
+  <string id="35502">Název</string>
+  <string id="35503">Výrobce</string>
+  <string id="35504">ID produktu</string>
+
+  <string id="36000">Pulse-Eight CEC adaptér</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Switch to keyboard side command</string>
+  <string id="36003">Switch to remote side command</string>
+  <string id="36004">Press "user" button command</string>
+  <string id="36005">Enable switch side commands</string>
+  <string id="36006">Could not open the adapter</string>
+  <string id="36007">Zapnout TV při spouštění XBMC</string>
+  <string id="36008">Vypnout zařízení při ukončování XBMC</string>
+  <string id="36009">Uvést zařízení do pohotovostního režimu při aktivování spořiče obrazovky</string>
+  <string id="36010"></string>
+  <string id="36011">Nepodařilo se najít CEC port. Nastavte jej ručně.</string>
+  <string id="36012">Nepodařilo se najít CEC adaptér.</string>
+  <string id="36013">Nepodporovaná verze libcec rozhraní. %d je vyšší než verze podporovaná XBMC (%d)</string>
+  <string id="36014">Při vypnutí TV uspat tento počítač</string>
+  <string id="36015">HDMI port</string>
+  <string id="36016">Připojeno</string> <!-- maximálně 13 znaků -->
+  <string id="36017">Adaptér byl nalezen, ale libcec není k dispozici</string>
+  <string id="36018">Použít nastavení jazyka v TV</string>
 </strings>
index dee9414..8452a88 100644 (file)
@@ -11,7 +11,7 @@
   <string id="7">Bestandsbeheer</string>
   <string id="8">Weer</string>
   <string id="9">XBMC Media Center</string>
-  
+
   <string id="11">Maandag</string>
   <string id="12">Dinsdag</string>
   <string id="13">Woensdag</string>
@@ -19,7 +19,7 @@
   <string id="15">Vrijdag</string>
   <string id="16">Zaterdag</string>
   <string id="17">Zondag</string>
-  
+
   <string id="21">januari</string>
   <string id="22">februari</string>
   <string id="23">maart</string>
@@ -32,7 +32,7 @@
   <string id="30">oktober</string>
   <string id="31">november</string>
   <string id="32">december</string>
-  
+
   <string id="41">Ma</string>
   <string id="42">Di</string>
   <string id="43">Wo</string>
@@ -40,7 +40,7 @@
   <string id="45">Vr</string>
   <string id="46">Za</string>
   <string id="47">Zo</string>
-  
+
   <string id="51">jan</string>
   <string id="52">feb</string>
   <string id="53">mrt</string>
@@ -53,7 +53,7 @@
   <string id="60">okt</string>
   <string id="61">nov</string>
   <string id="62">dec</string>
-  
+
   <string id="71">N</string>
   <string id="72">NNO</string>
   <string id="73">NO</string>
@@ -70,7 +70,7 @@
   <string id="84">WNW</string>
   <string id="85">NW</string>
   <string id="86">NNW</string>
-  
+
   <string id="87">variabele</string>
   <string id="98">Layout: Automatisch</string>
   <string id="99">Layout: Autom. groot</string>
   <string id="164">Geen schijf</string>
   <string id="165">Schijf aanwezig</string>
   <string id="166">Skin</string>
-  
+
   <string id="169">Resolutie</string>
   <string id="170">Verversingsfrequentie scherm aanpassen aan video</string>
+
   <string id="172">Releasedatum:</string>
   <string id="173">Geef 4:3 video's weer als</string>
-  
+
   <string id="175">Stemmingen</string>
   <string id="176">Stijlen</string>
-  
+
   <string id="179">Tracklist</string>
   <string id="180">Tijdsduur</string>
   <string id="181">Selecteer album</string>
   <string id="197">%s raadplegen voor informatie</string>
   <string id="198">Filmgegevens ophalen</string>
   <string id="199">Webinterface</string>
-  
+
   <string id="202">Slagzin</string>
   <string id="203">Plot</string>
-  
+
   <string id="205">Stemmen</string>
   <string id="206">Acteurs</string>
   <string id="207">Plot</string>
   <string id="243">Verversingsfrequentie</string>
   <string id="244">Volledig scherm</string>
   <string id="245">Formaat: (%i,%i)-&gt;(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1)</string>
-  
+
   <string id="247">Scripts</string>
   <string id="248">Taal</string>
   <string id="249">Muziek</string>
   <string id="304">Taal</string>
   <string id="305">Ingeschakeld</string>
   <string id="306">Non-Interleaved</string>
-  
+
   <string id="312">(0=auto)</string>
   <string id="313">Bibliotheek opschonen</string>
   <string id="314">Voorbereiden...</string>
   <string id="404">Wind</string>
   <string id="405">Dauwpunt</string>
   <string id="406">Vochtigheid</string>
-  
+
   <string id="409">Standaard</string>
   <string id="410">Weersverwachting opzoeken</string>
   <string id="411">Weersverwachting ophalen voor</string>
   <string id="419">Max</string>
   <string id="420">HDMI</string>
   <string id="422">Albuminformatie wissen</string>
-  
+
   <string id="423">CDDB-informatie wissen</string>
   <string id="424">Selecteer</string>
   <string id="425">Geen albuminformatie gevonden.</string>
   <string id="432">Speelfilm uit bibliotheek verwijderen</string>
   <string id="433">'%s' zeker verwijderen?</string>
   <string id="434">Uit het %s met %i %s</string>
-  
+
   <string id="437">Verwisselbare schijf</string>
   <string id="438">Bestand openen</string>
   <string id="439">Buffer</string>
   <string id="480">Uiterlijk</string>
   <string id="481">Geluidsinstellingen</string>
   <string id="482">Over XBMC</string>
-  
+
   <string id="485">Album verwijderen</string>
   <string id="486">Herhalen</string>
   <string id="487">Nummer herhalen</string>
   <string id="513">Beginscherm</string>
   <string id="514">Handmatige instellingen</string>
   <string id="515">Genre</string>
-  
+
   <string id="517">Laatst afgespeelde albums</string>
   <string id="518">Starten</string>
   <string id="519">Starten in..</string>
-  
+
   <string id="521">Compilaties</string>
   <string id="522">Snelkoppeling verwijderen</string>
   <string id="523">Media veranderen</string>
   <string id="546">Doorgifte Geluidsuitvoerapparaat</string>
   <string id="547">Geen biografie beschikbaar voor artiest</string>
   <string id="548">Downmix multikanaals audio naar stereo</string>
-  
+
   <string id="550">Sorteer: %s</string>
   <string id="551">Naam</string>
   <string id="552">Datum</string>
   <string id="574">Land</string>
   <string id="575">Bezig</string>
   <string id="576">Keren afgespeeld</string>
-  
+
   <string id="580">Sorteerrichting</string>
   <string id="581">Sorteren op</string>
   <string id="582">Layout</string>
   <string id="595">Herhalen: Uit</string>
   <string id="596">Herhalen: 1</string>
   <string id="597">Herhalen: Alles</string>
-  
+
   <string id="600">Cd kopiëren</string>
   <string id="601">Middelmatig</string>
   <string id="602">Standaard</string>
   <string id="603">Extreem</string>
   <string id="604">Constante bitsnelheid</string>
   <string id="605">Kopiëren...</string>
-  
+
   <string id="607">Naar:</string>
   <string id="608">Kopiëren van CD of nummer mislukt</string>
   <string id="609">CDDA-doelmap is niet ingegeven.</string>
   <string id="611">Voer nummer in</string>
   <string id="612">Bits/Sample</string>
   <string id="613">Sample frequentie</string>
-  
+
   <string id="620">Muziek CD's</string>
   <string id="621">Encoder</string>
   <string id="622">Kwaliteit</string>
   <string id="657">Map openen</string>
   <string id="658">Muziekinformatie</string>
   <string id="659">Niet-lineair uitrekken</string>
-  
+
   <string id="660">Volumeversterking</string>
   <string id="661">Exporteerlocatie kiezen</string>
   <string id="662">Dit bestand is niet langer beschikbaar.</string>
   <string id="663">Wilt u het verwijderen uit de bibliotheek?</string>
   <string id="664">Naar script zoeken</string>
   <string id="665">Compressieniveau</string>
-  
+
   <string id="700">Bibliotheek opschonen</string>
   <string id="701">Oude nummers uit bibliotheek verwijderen</string>
   <string id="702">Deze locatie is al eerder gescand</string>
   <string id="705">Netwerk</string>
   <string id="706">- Host</string>
-  
+
   <string id="708">HTTP-proxy gebruiken</string>
-  
+
   <string id="711">Internet Protocol (IP)</string>
   <string id="712">Ongeldig poortnummer. Waarde moet tussen 1 en 65535 liggen.</string>
   <string id="713">HTTP proxy</string>
-  
+
   <string id="715">Toewijzing</string>
   <string id="716">Automatisch (DHCP)</string>
   <string id="717">Handmatig (Statisch)</string>
   <string id="726">Veranderingen niet opgeslagen. Doorgaan zonder op te slaan?</string>
   <string id="727">Webserver</string>
   <string id="728">FTP-server</string>
-  
+
   <string id="730">- Poort</string>
 
   <string id="732">Opslaan en toepassen</string>
   <string id="749">Spiegel afbeelding</string>
   <string id="750">Weet u het zeker?</string>
   <string id="751">Snelkoppeling verwijderen</string>
-  
+
   <string id="754">Programmalink toevoegen</string>
   <string id="755">Programmalink wijzigen</string>
   <string id="756">Programmanaam wijzigen</string>
   <string id="757">Zoekdiepte instellen</string>
-  
+
   <string id="759">Layout: Groot</string>
   <string id="760">Geel</string>
   <string id="761">Wit</string>
   <string id="787">Verbinding uitgeschakeld</string>
   <string id="788">Verbinding succesvol uitgeschakeld.</string>
   <string id="789">Naam draadloos netwerk (ESSID)</string>
-  
+
   <string id="791">Gebeurtenissen op afstand activeren</string>
   <string id="792">Poort voor gebeurtenissen op afstand</string>
   <string id="793">Poortbereik voor gebeurtenissen op afstand</string>
   <string id="796">Doorgaande herhalingsvertraging (ms)</string>
   <string id="797">Maximaal aantal gebruikers</string>
   <string id="798">Internettoegang</string>
-  
+
   <string id="850">Ongeldig poortnummer ingevoerd</string>
   <string id="851">Geldig poortbereik is 1-65535</string>
   <string id="852">Geldig poortbereik is 1024-65535</string>
-  
+
 
   <string id="998">Muziek Toevoegen...</string>
   <string id="999">Videos Toevoegen...</string>
   <string id="1002">XBMC kon niet verbinden met de netwerklocatie.</string>
   <string id="1003">Dit kan veroorzaakt worden doordat het netwerk niet verbonden is.</string>
   <string id="1004">Wilt u het toch toevoegen?</string>
-  
+
   <string id="1006">IP-adres</string>
   <string id="1007">Netwerklocatie toevoegen</string>
   <string id="1008">Protocol</string>
   <string id="1049">Script instellingen</string>
   <string id="1050">Singles</string>
   <string id="1051">Voer URL in</string>
-  
+
   <string id="1200">SMB-client</string>
   <string id="1202">Werkgroep</string>
   <string id="1203">Standaardgebruikersnaam</string>
   <string id="1204">Standaardwachtwoord</string>
-  
+
   <string id="1207">WINS-server</string>
   <string id="1208">Laad SMB gedeeld netwerk</string>
-  
+
   <string id="1210">Verwijder</string>
   <string id="1211">Muziek</string>
   <string id="1212">Video</string>
   <string id="1233">Programma's, video en muziek</string>
   <string id="1234">Programma's, afbeeldingen en muziek</string>
   <string id="1235">Programma's, afbeeldingen en video's</string>
-  
+
   <string id="1250">Systeem detecteren</string>
   <string id="1251">Aangesloten systemen automatisch detecteren</string>
   <string id="1252">Bijnaam</string>
 
   <string id="1260">Zeroconf publishing</string>
 
+  <string id="1270">Ontvangen van AirPlay-inhoud door XBMC toelaten</string>
+  <string id="1271">Apparaatnaam</string>
+  <string id="1272">- Beveiliging met wachtwoord</string>
+
   <string id="1300">Aangepaste geluidskaart</string>
   <string id="1301">Aangepast Passthrough apparaat</string>
 
   <string id="1421">Heel hoog</string>
   <string id="1422">Winderig</string>
   <string id="1423">Mist</string>
-  
-   <!-- strings through to 1450 reserved for weather translation -->
-   
+
+  <!-- strings through to 1450 reserved for weather translation -->
+
   <string id="1450">Schakel beeldscherm uit bij inactiviteit</string>
   <!-- strings through to 1470 reserved for power-saving -->
-  
+
   <string id="2050">Speelduur</string>
-  
+
   <string id="2100">Fout in script! : %s</string>
   <string id="2101">Nieuwere versie vereist - Zie log</string>
 
   <string id="10020">Scripts</string>
   <string id="10021">Webbrowser</string>
 
+  <string id="10025">Video's</string>
   <string id="10028">Video/Afspeellijst</string>
+  <string id="10029">Aanmeld scherm</string>
   <string id="10034">Instellingen - Profielen</string>
-  
+  <string id="10040">Addon verkenner</string>
+
   <string id="10100">Ja/Nee</string>
   <string id="10101">Voortgang</string>
-  
+
   <string id="10210">Zoeken naar ondertitels...</string>
   <string id="10211">Ondertitels cachen...</string>
   <string id="10212">Bezig met afsluiten</string>
   <string id="10213">Bufferen</string>
   <string id="10214">Bezig met het openen van stream</string>
-  
+
   <string id="10500">Muziek/Afspeellijst</string>
   <string id="10501">Muziek/Bestanden</string>
   <string id="10502">Muziek/Bibliotheek</string>
   <string id="10509">Netwerk gaming</string>
   <string id="10510">Extensies</string>
   <string id="10511">Systeeminformatie</string>
-  
+
   <string id="10516">Muziek - Bibliotheek</string>
   <string id="10517">Muziek - Afspeellijst</string>
 
   <string id="12377">Dit zal alle voorgaande opgeslagen waarden resetten</string>
   <string id="12378">Afbeeldingen weergeven gedurende</string>
   <string id="12379">Pan- en zoomeffecten gebruiken</string>
-    
+
   <string id="12383">12-uursformaat</string>
   <string id="12384">24-uursformaat</string>
   <string id="12385">Dag/Maand</string>
   <string id="12386">Maand/Dag</string>
-  
+
   <string id="12390">Systeem actief</string>
   <string id="12391">minuten</string>
   <string id="12392">uur</string>
   <string id="12395">Battery niveau</string>
 
   <string id="12600">Het weer</string>
-    
+
   <string id="12900">Schermbeveiliging</string>
   <string id="12901">Volledig scherm On Screen Display</string>
-  
+
   <string id="13000">Systeem</string>
   <string id="13001">Harde schijf onmiddellijk uitschakelen</string>
   <string id="13002">Alleen beeld</string>
   <string id="13003">- Vertraging</string>
   <string id="13004">- Minimale bestandsduur</string>
   <string id="13005">Computer uitschakelen</string>
-  
+
   <string id="13008">Standaard afsluitmethode</string>
-  <string id="13009">XBMC afsluiten</string>
-  <string id="13010">Winterslaap (S4)</string>
+  <string id="13009">Afsluiten</string>
+  <string id="13010">Sluimerstand</string>
   <string id="13011">Slaapstand</string>
   <string id="13012">Stoppen</string>
   <string id="13013">Opnieuw opstarten</string>
   <string id="13114">Inschakelen voor SD-beelden</string>
   <string id="13115">Altijd inschakelen</string>
   <string id="13116">Beeldverbeteringsmethode</string>
-  <string id="13117">Bicubic</string>
+  <string id="13117">Bicubisch</string>
   <string id="13118">Lanczos</string>
   <string id="13119">Sinc</string>
   <string id="13120">Strikte Pixmap-Texture Binding (vereist herstart)</string>
   <string id="13121">VDPAU HQ Upscaling level</string>
   <string id="13122">VDPAU Studio level color conversion</string>
-  
+
   <string id="13130">Stop doorgifte videosignaal aan andere beeldschermen</string>
   <string id="13131">Uitgeschakeld</string>
   <string id="13132">Stop doorgifte videosignaal</string>
-  
+
   <string id="13140">Actieve verbindingen gedetecteerd!</string>
   <string id="13141">Als u doorgaat, kunt u XBMC mogelijk niet meer</string>
   <string id="13142">besturen. Weet u zeker dat u de Event Server wilt stoppen?</string>
-  
-  <string id="13144">Verander Apple afstandsbediengsmodus?</string>
+
+  <string id="13144">Verander Apple afstandsbedieningsmodus?</string>
   <string id="13145">Als u op dit moment de Apple afstandsbediening gebruikt</string>
   <string id="13146">om XBMC te besturen, kan het veranderen van deze instelling</string>
   <string id="13147">de mogelijkheid om het te blijven besturen beïnvloeden. Doorgaan?</string>
-  
+
   <string id="13159">Subnetmasker</string>
   <string id="13160">Gateway</string>
   <string id="13161">DNS-server</string>
   <string id="13162">Initialiseren mislukt</string>
-  
+
   <string id="13170">Nooit</string>
   <string id="13171">Direct</string>
   <string id="13172">Na %i sec.</string>
   <string id="13173">HDD installatiedatum:</string>
   <string id="13174">HDD Power Cycle teller:</string>
-  
+
   <string id="13200">Profielen</string>
   <string id="13201">Profiel '%s' verwijderen?</string>
-  
+
   <string id="13204">Laatst gebruikt profiel:</string>
   <string id="13205">Onbekend</string>
   <string id="13206">Overschrijven</string>
-  
+
   <string id="13208">Alarmklok</string>
   <string id="13209">Alarmklokinterval (in minuten)</string>
   <string id="13210">Gestart, alarm over %im</string>
   <string id="13212">Gestopt met nog %im%is te gaan</string>
   <string id="13213">%2.0fm</string>
   <string id="13214">%2.0fs</string>
-  
+
   <string id="13249">Naar ondertitels zoeken in RAR-archieven</string>
   <string id="13250">Ondertitels zoeken</string>
   <string id="13251">Item verplaatsen</string>
   <string id="13252">Item hierheen verplaatsen</string>
   <string id="13253">Verplaatsen annuleren</string>
-  
+
   <string id="13270">Hardware:</string>
   <string id="13271">Belasting:</string>
-  
+
   <string id="13274">XBMC is verbonden, maar geen DNS beschikbaar.</string>
   <string id="13275">Harde schijf</string>
   <string id="13276">DVD-ROM</string>
   <string id="13359">Afbeelding artiest instellen</string>
   <string id="13360">Miniaturen automatisch aanmaken</string>
   <string id="13361">Stem inschakelen</string>
-  
+
   <string id="13375">Apparaat inschakelen</string>
   <string id="13376">Volume</string>
   <string id="13377">Standaard weergavemodus</string>
   <string id="13430">Hardwareversnelling inschakelen (OpenMax)</string>
   <string id="13431">Pixelshaders</string>
   <string id="13432">Hardware acceleratie toestaan (VideoToolbox)</string>
-  
+
   <string id="13500">A/V-synchronisatiemethode</string>
   <string id="13501">Audiosignaal</string>
   <string id="13502">Videosignaal (Drop/Dupe audio)</string>
   <string id="13508">Hoog</string>
   <string id="13509">Echt hoog (traag!)</string>
   <string id="13510">Synchroniseer video met beeldschermfrequentie</string>
-  
+
   <string id="13550">Pauzeren gedurende wijzigen verversing snelheid</string>
   <string id="13551">Uit</string>
   <string id="13552">%.1f Seconde</string>
   <string id="13553">%.1f Seconden</string>
 
   <string id="13600">Type Apple afstandsbediening</string>
-  
+
   <string id="13602">Gebruik afstandsbediening om XBMC zelf op te staren</string>
   <string id="13603">Ondertitel eerder/later starten</string>
-  
+
   <string id="13610">Uitgeschakeld</string>
   <string id="13611">Standaard</string>
   <string id="13612">Universele afstandsbediening</string>
   <string id="13613">Multi Remote (Harmony)</string>
-   
+
   <string id="13620">Apple afstandsbedieningsfout</string>
   <string id="13621">Apple afstandsbedieningsondersteuning kan niet worden geactiveerd.</string>
-  
+
   <string id="14000">Groeperen</string>
   <string id="14001">Groeperen: Uit</string>
   <string id="14003">Afspeellijst downloaden...</string>
   <string id="14005">Streamlijst verwerken...</string>
   <string id="14006">Streamlijst downloaden mislukt</string>
   <string id="14007">Afspeellijst downloaden mislukt</string>
-  
+
   <string id="14009">Spellocatie</string>
   <string id="14010">Automatisch overschakelen naar miniaturen als</string>
   <string id="14011">Automatisch overschakelen naar miniaturen</string>
   <string id="14038">Netwerkinstellingen gewijzigd</string>
   <string id="14039">XBMC moet herstarten om de netwerkinstellingen</string>
   <string id="14040">te wijzigen. Wilt u nu herstarten?</string>
-  <string id="14041">Bandbreedte internet verbinding limiteren</string>
-  
+  <string id="14041">Bandbreedte internetverbinding beperken</string>
+
   <string id="14043">- Uitschakelen tijdens gebruik</string>
   <string id="14044">%i minuten</string>
   <string id="14045">%i sec.</string>
   <string id="14051">Tijdnotatie</string>
   <string id="14052">Datumnotatie</string>
   <string id="14053">GUI-filters</string>
-  
+
   <string id="14055">Scannen op de achtergrond inschakelen</string>
   <string id="14056">Scan annuleren</string>
   <string id="14057">Niet mogelijk tijdens scannen naar media-info</string>
   <string id="14069">Instellingen nu toepassen?</string>
   <string id="14070">Instellingen toepassen</string>
   <string id="14071">Hernoemen en verwijderen van bestanden toestaan</string>
-  
+
   <string id="14074">Tijdzone</string>
   <string id="14075">Automatische zomer-/wintertijd</string>
   <string id="14076">Aan favorieten toevoegen</string>
   <string id="14093">Beveiliging</string>
   <string id="14094">Invoerapparaten</string>
   <string id="14095">Energiebeheer</string>
-  
+
   <string id="15015">Verwijder</string>
   <string id="15016">Spellen</string>
-  
+
   <string id="15019">Voeg toe</string>
-  
+
   <string id="15052">Wachtwoord</string>
-  
+
   <string id="15100">Bibliotheek</string>
   <string id="15101">Database</string>
   <string id="15102">* Alle albums</string>
   <string id="15103">* Alle artiesten</string>
   <string id="15104">* Alle nummers</string>
   <string id="15105">* Alle genres</string>
-  
+
   <string id="15107">Bufferen...</string>
   <string id="15108">Navigatiegeluiden</string>
   <string id="15109">Standaarduiterijk</string>
   <string id="15111">- Thema</string>
   <string id="15112">Standaard thema</string>
-  
+
   <string id="15200">Last.FM</string>
   <string id="15201">Afgespeelde nummers op Last.FM bijhouden</string>
   <string id="15202">Last.FM-gebruikersnaam</string>
   <string id="15219">Libre.fm-wachtwoord</string>
   <string id="15220">Libre.fm</string>
   <string id="15221">Nummers bijhouden</string>
-  
+
   <string id="15250">Last.FM-radio aan Last.FM toevoegen</string>
   <string id="15251">Verbinding maken met Last.FM...</string>
   <string id="15252">Station selecteren...</string>
   <string id="15283">Onlangs door %name% afgespeelde nummers</string>
   <string id="15284">Beluister de aanbevelingen van %name% op Last.FM-radio</string>
   <string id="15285">Top tags van %name%</string>
-  
+
   <string id="15287">Wilt u dit nummer toevoegen aan uw favoriete nummers?</string>
   <string id="15288">Wilt u dit nummer verbannen?</string>
   <string id="15289">Toegevoegd aan favoriete nummers: %s</string>
   <string id="15296">Ban opheffen</string>
   <string id="15297">Wilt u dit nummer verwijderen uit uw favoriete nummers?</string>
   <string id="15298">Wilt u de ban op dit nummer opheffen?</string>
-  
+
   <string id="15300">Pad niet gevonden of ongeldig</string>
   <string id="15301">Kan niet verbinden met netwerkserver</string>
   <string id="15302">Geen servers gevonden</string>
   <string id="15303">Werkgroep niet gevonden</string>
-  
+
   <string id="15310">Openen multi-pad favoriet</string>
   <string id="15311">Pad:</string>
-  
+
   <string id="16000">Algemeen</string>
-  
+
   <string id="16002">Zoeken op CDDB</string>
   <string id="16003">Speler</string>
   <string id="16004">Media van disk afspelen</string>
-  
+
   <string id="16008">Geef een nieuwe titel</string>
   <string id="16009">Geef naam van de film</string>
   <string id="16010">Geef profielnaam</string>
   <string id="16033">Kan database niet openen.</string>
   <string id="16034">Kan geen nummers uit database verkrijgen.</string>
   <string id="16035">Feestmix afspeellijst</string>
-  
+  <string id="16036">Deinterlace (Half)</string>
+  <string id="16037">Deinterlace video</string>
+  <string id="16038">Deinterlace methode</string>
+  <string id="16039">Uit</string>
+  <string id="16040">Auto</string>
+  <string id="16041">Aan</string>
+
   <string id="16100">Alle video's</string>
   <string id="16101">Niet bekeken</string>
   <string id="16102">Bekeken</string>
   <string id="16204">Tenminste 1 bestand is niet verplaatst</string>
   <string id="16205">Verwijderen mislukt</string>
   <string id="16206">Tenminste 1 bestand is niet verwijderd</string>
-  
+
   <string id="16300">Videoschalingsmethode</string>
   <string id="16301">Nearest neighbour</string>
   <string id="16302">Bilinear</string>
   <string id="16317">Temporal (Half)</string>
   <string id="16318">Temporal/Spatial (Half)</string>
   <string id="16319">DXVA</string>
-  
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 geoptimaliseerd</string>
+  <string id="16324">Software menging</string>
+
   <string id="16400">Kwaliteitsverbetering video</string>
-   
+
   <string id="17500">Uitschakeltijd beeldscherm</string>
-  
+
   <string id="19000">Kanaal wijzigen</string>
-  
+
   <string id="20000">Opgeslagen muziek map...</string>
   <string id="20001">Andere DVD-speler gebruiken</string>
   <string id="20002">- Locatie van de DVD-speler</string>
   <string id="20003">Trainersmap</string>
   <string id="20004">Screenshotmap</string>
-  
+
   <string id="20006">Afspeellijstmap</string>
   <string id="20007">Opnames</string>
   <string id="20008">Screenshots</string>
   <string id="20009">XBMC gebruiken</string>
-  
+
   <string id="20011">Muziekafspeellijsten</string>
   <string id="20012">Videoafspeellijsten</string>
   <string id="20013">Wilt u het spel starten?</string>
   <string id="20019">Miniatuur kiezen</string>
 
   <!-- string id 20022 will always be set to an empty string (LocalizeStrings.cpp)-->
-  <string id="20022"></string>
+  <string id="20022"></string>  
   <string id="20023">Conflict</string>
   <string id="20024">Scan nieuwe</string>
   <string id="20025">Scan alles</string>
   <string id="20026">Regio</string>
-  
+
   <!-- string id's 20027 thru 20034 are reserved for temperature strings (LocalizeStrings.cpp)-->
 
-  <string id="20037">Samenvatting</string>
+  <string id="20037">Overzicht</string>
   <string id="20038">Muzieksectie vergrendelen</string>
   <string id="20039">Videosectie vergrendelen</string>
   <string id="20040">Afbeeldingensectie vergrendelen</string>
   <string id="20053">Ontgrendelde modus verlaten</string>
   <string id="20054">Ontgrendelde modus inschakelen</string>
   <string id="20055">Allmusic.com-miniatuur</string>
-  
+
   <string id="20057">Miniatuur verwijderen</string>
   <string id="20058">Profiel toevoegen...</string>
   <string id="20059">Info opvragen voor alle albums</string>
   <string id="20109">- Verschalen </string>
   <string id="20110">UPnP-client</string>
   <string id="20111">Automatisch starten</string>
-  <string id="20112">Vorige login: %s</string>
+  <string id="20112">Vorige aanmelding: %s</string>
   <string id="20113">Nog nooit ingelogd</string>
   <string id="20114">Profiel %i / %i</string>
-  <string id="20115">Gebruikerslogin / Selecteer een profiel</string>
+  <string id="20115">Gebruikersaanmelding / Selecteer een profiel</string>
   <string id="20116">Inlogscherm vergrendelen</string>
   <string id="20117">Ongeldige vergrendelcode.</string>
   <string id="20118">Dit vereist een actieve hoofdvergrendeling.</string>
   <string id="20184">Foto's draaien op basis van EXIF-informatie</string>
   <string id="20185">Posterstijl voor tv-series gebruiken</string>
   <string id="20186">Even geduld...</string>
-  
+
   <string id="20189">Plot en bespreking automatisch scrollen</string>
   <string id="20190">Handmatig</string>
   <string id="20191">Foutregistratie inschakelen</string>
   <string id="20197">Muziekbibliotheek importeren...</string>
   <string id="20198">Geen artiest gevonden!</string>
   <string id="20199">Downloaden van artiestinformatie mislukt</string>
-  
+
   <!-- string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)-->
 
   <string id="20250">Feesten maar! (video's)</string>
   <string id="20252">Glazen vullen (video's)</string>
   <string id="20253">WebDAV-server (HTTP)</string>
   <string id="20254">WebDAV-server (HTTPS)</string>
-  <string id="20255">Eerste login, profiel bijwerken</string>
+  <string id="20255">Eerste aanmelding, profiel bijwerken</string>
   <string id="20256">HTS tvheadend client</string>
   <string id="20257">VDR streamdev client</string>
- <string id="20258">MythTV client</string>
 <string id="20258">MythTV client</string>
   <string id="20259">Network Filesystem (NFS)</string>
   <string id="20260">Secure Shell (SSH/SFTP)</string>
-  
+  <string id="20261">Apple Filing Protocol (AFP)</string>
+
   <string id="20300">Webservermap (HTTP)</string>
   <string id="20301">Webservermap (HTTPS)</string>
   <string id="20302">Kan niet schrijven naar map:</string>
   <string id="20303">Overslaan en verdergaan?</string>
   <string id="20304">RSS-feed</string>
-  
+
   <string id="20307">Secundaire DNS</string>
   <string id="20308">DHCP-server:</string>
   <string id="20309">Nieuwe map</string>
   <string id="20326">Dit zet de kalibratiewaarden voor %s</string>
   <string id="20327">terug naar de standaardwaarden.</string>
   <string id="20328">een locatie om naar te kopiëren</string>
-
+  <string id="20329">Films staan in aparte folders die overeenkomen met de film titel</string>
   <string id="20330">Gebruik mapnamen bij zoeken</string>
   <string id="20331">Bestand</string>
   <string id="20332">Ook in bestands- of mapnamen zoeken?</string>
   <string id="20333">Inhoud toewijzen</string>
   <string id="20334">Map</string>
   <string id="20335">Ook in onderliggende mappen zoeken?</string>
-  <string id="20336">Unlock bronnen</string>
+  <string id="20336">Bronnen vrijgeven</string>
   <string id="20337">Acteur</string>
   <string id="20338">Film</string>
   <string id="20339">Regisseur</string>
   <string id="20401">Muziekvideo afspelen</string>
   <string id="20402">Afbeeldingen van acteurs automatisch downloaden</string>
   <string id="20403">Acteursafbeelding instellen</string>
-  
+
   <string id="20405">Afl. uit favorieten verwijderen</string>
   <string id="20406">Afl. aan favorieten toevoegen</string>
   <string id="20407">Scraperinstellingen</string>
   <string id="20416">Eerst uitgez.</string>
   <string id="20417">Schrijver</string>
   <string id="20418"></string>
-  <string id="20419">Laat metadata zien in bestandslayout</string>
-  
+  <string id="20419">Vervang bestandsnamen met bibliotheek titels</string>
+
   <string id="20420">Nooit</string>
   <string id="20421">Alleen indien &#xe9;&#xe9;n seizoen</string>
   <string id="20422">Altijd</string>
   <string id="20432">Pad uitsluiten van bibliotheekupdates</string>
   <string id="20433">Miniaturen en codec informatie uitlezen</string>
   <string id="20434">Sets</string>
-  <string id="20435">Filmsetthumb kiezen</string>
+  <string id="20435">Filmset-miniatuur kiezen</string>
   <string id="20436">Acteurminiaturen exporteren</string>
   <string id="20437">Fanart kiezen</string>
   <string id="20438">Lokale fanart</string>
   <string id="20453">Afleveringen</string>
   <string id="20454">Luisteraar</string>
   <string id="20455">Luisteraars</string>
-  <string id="20456">Kies movieset fanart</string>
-    <!-- up to 21329 is reserved for the video db !! !-->
+  <string id="20456">Kies filmset fanart</string>
+  <string id="20457">Filmsets</string>
+  <string id="20458">Groepeer films in sets</string>
+  <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Verborgen bestanden en mappen weergeven</string>
-  
+
   <string id="21331">TuxBox-client</string>
   <string id="21332">WAARSCHUWING: TuxBox is aan het opnemen.</string>
   <string id="21333">De stream wordt gestopt!</string>
   <string id="21336">Verbinden met: %s</string>
   <string id="21337">TuxBox-apparaat</string>
     <!-- up to 21355 is reserved for the TuxBox Client!! !-->
-    
+
   <string id="21359">Gedeelde media toevoegen...</string>
   <string id="21360">UPnP-server inschakelen</string>
-  
+
   <string id="21364">Gedeelde media wijzigen</string>
   <string id="21365">Gedeelde media verwijderen</string>
   <string id="21366">Map voor ondertitels...</string>
   <string id="21367">Video - alternatieve ondertitelmap</string>
-  
+  <string id="21368">ASS/SSA lettertype voor ondertitels negeren</string>
   <string id="21369">Muis inschakelen</string>
   <string id="21370">Navigatiegeluiden afspelen tijdens afspelen van media</string>
   <string id="21371">Miniatuur</string>
   <string id="21394">Laag Standby</string>
   <string id="21395">Niet mogelijk bestanden groter dan 4 GiB te laden</string>
   <string id="21396">Hoofdstuk</string>
-  <string id="21397">Hoge kwaliteit Pixel Shader V2</string>
+  <string id="21397">Hoge kwaliteit Pixel Shader v2</string>
   <string id="21398">Afspeellijst afspelen bij opstarten</string>
   <string id="21399">Animatie gebruiken bij schermovergang</string>
   <string id="21400">bevat</string>
   <string id="21414">Standaard tv-serie scraper</string>
   <string id="21415">Standaard muziekvideo scraper</string>
   <string id="21416">Alternatieven toestaan op basis van originele scraper taal</string>
-  <string id="21417">- Instellingen schermbeveiliging</string>
+  <string id="21417">- Instellingen</string>
   <string id="21418">Meertalig</string>
   <string id="21419">Geen scrapers beschikbaar</string>
   <string id="21420">Waarde gelijk aan</string>
   <string id="21451">Internetverbinding vereist.</string>
   <string id="21452">Add-ons installeren</string>
   <string id="21453">Rootbestandsysteem</string>
-  
+
+  <string id="21454">Cache is vol</string>
+  <string id="21455">Cache is vol voordat benodigde hoeveelheid is bereikt voor continu afspelen</string>
+  
+  <string id="21460">Plaats van de ondertitels</string>
+  <string id="21461">Vast</string>
+  <string id="21462">Onderaan video</string>
+  <string id="21463">Onder video</string>
+  <string id="21464">Bovenaan video</string>
+  <string id="21465">Boven video</string>
+
   <string id="21800">Bestandsnaam</string>
   <string id="21801">Pad</string>
   <string id="21802">Bestandsgrootte</string>
   <string id="21806">Opmerking</string>
   <string id="21807">Kleur/zwart-wit</string>
   <string id="21808">JPEG-proces</string>
-  
+
   <string id="21820">Datum/tijd</string>
   <string id="21821">Omschrijving</string>
   <string id="21822">Cameramerk</string>
   <string id="21841">GPS-breedtegraad</string>
   <string id="21842">GPS-hoogte</string>
   <string id="21843">Oriëntatie</string>
-  
+
   <string id="21860">Overige categorieën</string>
   <string id="21861">Sleutelwoorden</string>
   <string id="21862">Titel</string>
   <string id="21898">Periode:</string>
   <string id="21899">Platenlabel</string>
   <string id="21900">Geboren/Opgericht</string>
-  
+
   <!-- strings 21900 thru 21999 reserved for slideshow info -->
 
   <string id="22000">Bibliotheek bijwerken bij het opstarten</string>
   <string id="22022">Toon videobestanden in lijst met afbeeldingen</string>
   <string id="22023">DirectX-leverancier:</string>
   <string id="22024">Direct3D-versie</string>
-  
+
   <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">Lettertype</string>
   <string id="22031">- Grootte</string>
   <string id="22041">wit/rood</string>
   <string id="22042">wit/blauw</string>
   <string id="22043">zwart/wit</string>
-  
+
   <string id="22079">Standaardactie bij selecteren</string>
   <string id="22080">Kiezen</string>
   <string id="22081">Informatie tonen</string>
   <string id="22082">Meer...</string>
   <string id="22083">Alles afspelen</string>
-  
+
   <string id="23049">Teletekst niet beschikbaar</string>
   <string id="23050">Teletekst activeren</string>
   <string id="23051">Stuk %i</string>
   <string id="23052">%i bytes bufferen</string>
   <string id="23053">Instellingen ontbreken</string>
   <string id="23054">Instellingen verkeerd</string>
-  
+
   <!-- strings 23100 thru 23150 reserved for external player -->
   <string id="23100">Externe speler actief</string>
   <string id="23101">Klik op OK om de speler te beëindigen</string>
-  
+
   <string id="23104">Klik op OK als afspelen beëindigd is</string>
-  
+
   <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
   <string id="24000">Add-on</string>
   <string id="24001">Add-ons</string>
   <string id="24002">Add-on opties</string>
   <string id="24003">Add-on informatie</string>
-  
+
   <string id="24005">Mediabronnen</string>
   <string id="24007">Filminformatie</string>
   <string id="24008">Schermbeveiliging</string>
   <string id="24016">Albuminformatie</string>
   <string id="24017">Artiestinformatie</string>
   <string id="24018">Processen</string>
-  
+
   <string id="24020">Configureren</string>
   <string id="24021">Uitschakelen</string>
   <string id="24022">Inschakelen</string>
   <string id="24043">Beschikbare updates</string>
   <string id="24044">Niet voldaan aan afhankelijkheden</string>
   <string id="24045">Add-on heeft niet de juiste structuur</string>
-  
+  <string id="24046">%s wordt gebruikt door volgende geinstalleerde add-on(s)</string>
+  <string id="24047">Deze add-on kan niet verwijderd worden</string>
+  <string id="24048">Ongedaan maken</string>
+
   <string id="24050">Beschikbare add-ons</string>
   <string id="24051">Versie:</string>
   <string id="24052">Disclaimer</string>
   <string id="24073">Kan niet verbinden</string>
   <string id="24074">Herstart vereist</string>
   <string id="24075">Uitschakelen</string>
+  <string id="24076">Vereiste add-on</string>
   <string id="24080">Nogmaals proberen te verbinden?</string>
   <string id="24089">Add-on aan het herstarten</string>
   <string id="24090">Add-onmanager vastzetten</string>
-  
+
+  <string id="24094">(huidige)</string>
+  <string id="24095">(geblacklist)</string>
   <string id="24096">Add-on is gemarkeerd als niet werkend in het repository.</string>
   <string id="24097">Wilt u de add-on uitschakelen?</string>
   <string id="24098">Defect</string>
   <string id="24099">Wilt u deze skin gebruiken?</string>
+  <string id="24100">Om deze eigenschap te gebruiken, moet een add-on gedownload worden:</string>
+  <string id="24101">Wil U deze add-on downloaden?</string>
   <string id="25000">Mededelingen</string>
 
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29800">Bibliotheekmodus</string>
-  <string id="29801">QWERTY-indeling toetsenbord</string>
+  <string id="29801">QWERTY-toetsenbordindeling </string>
   <string id="29802">Passthrough audio in gebruik</string>
 
   <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
   <string id="33081">Dit bestand bestaat uit meerdere delen, selecteer het deel dat u wilt afspelen.</string>
   <string id="33082">Pad naar script</string>
   <string id="33083">Stel aangepaste scriptknop in</string>
-  
+
   <string id="33100">Starten mislukt</string>
   <string id="33101">Webserver</string>
   <string id="33102">Event Server</string>
   <string id="33103">Remote communication server</string>
+
+  <string id="33200">Detecteer nieuwe verbinding</string>
   
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34003">DXVA2</string>
   <string id="34004">VAAPI</string>
   <string id="34005">FLAC</string>
-  
+
   <string id="34100">Aantal geluidskanalen</string>
   <string id="34101">2.0</string>
   <string id="34102">2.1</string>
   <string id="34108">5.1</string>
   <string id="34109">7.0</string>
   <string id="34110">7.1</string>
-    <!-- 34112-34200 reserved for future use -->
-  <string id="34201">Kan volgende item niet vinden om af te spelen</string> 
-  <string id="34202">Kan vorige item niet vinden om af te spelen</string> 
-</strings>
+  <!-- 34112-34200 reserved for future use -->
+
+  <string id="34201">Kan volgende item niet vinden om af te spelen</string>
+  <string id="34202">Kan vorige item niet vinden om af te spelen</string>
+  
+  <string id="34300">Niet gelukt om zeroconf te starten</string>
+  <string id="34301">Is Apple's Bonjour Service geinstalleerd? Zie log voor meer info.</string>
+  <string id="34400">Video Rendering</string>
+  <string id="34401">Niet gelukt om video filters/scalers initialiseren, terugvallen naar bilinear scaling</string>
+  <string id="34402"></string>
+  <string id="34402">Niet gelukt om audio apparaat te initialiseren</string>
+  <string id="34403">Controleer je audio-instellingen</string>
+  
+  <string id="35000">Randapparatuur</string>
+
+  <string id="35001">Generiek HID apparaat</string>
+  <string id="35002">Generieke netwerkadapter</string>
+  <string id="35003">Generieke schijf</string>
+  <string id="35004">Er zijn geen instellingen beschikbaar&#10;voor dit apparaat.</string>
+  <string id="35005">Nieuw apparaat geconfigureerd</string>
+  <string id="35006">Apparaat verwijderd</string>
+  <string id="35007">Keymap voor dit apparaat</string>
+  <string id="35008">Keymap ingeschakeld</string>
+
+  <string id="35500">Locatie</string>
+  <string id="35501">Klasse</string>
+  <string id="35502">Naam</string>
+  <string id="35503">Fabrikant</string>
+  <string id="35504">Product ID</string>
+
+  <string id="36000">Pulse-Eight CEC adapter</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Wissel naar toetsenbord commando</string>
+  <string id="36003">Wissel naar afstandbediening commando</string>
+  <string id="36004">Druk op "user" knop commando</string>
+  <string id="36005">Schakel commando's in bij het wisselen van kant</string>
+  <string id="36006">Kon de adapter niet openen</string>
+  <string id="36007">Schakel apparatuur in bij het opstarten van XBMC</string>
+  <string id="36008">Schakel apparatuur uit bij het stoppen van XBMC</string>
+  <string id="36009">Schakel app. uit zolang de schermbeveiliging actief is</string>
+  <string id="36010"></string>
+  <string id="36011">Kon de COM poort niet detecteren. Stel het manueel in.</string>
+  <string id="36012">Kon de CEC adapter niet initialiseren.</string>
+  <string id="36013">Versie %d van de libCEC interface version wordt niet ondersteund door XBMC (> %d)</string>
+  <string id="36014">Zet XBMC in standby wanneer de TV uitgeschakeld wordt</string>
+  <string id="36015">HDMI poort nummer</string>
+  <string id="36016">Verbonden</string> <!-- max. 13 characters -->
+  <string id="36017">Adapter gevonden, maar libCEC is niet beschikbaar</string>
+  <string id="36018">Gebruik de taalinstelling van de TV</string>
+  <string id="36019">Verbonden met HDMI apparaat</string>
+  <string id="36020">Maak XBMC de actieve bron bij het opstarten</string>
+  <string id="36021">Physiek adres (overschrijft HDMI poort)</string>
+  <string id="36022">COM poort (laat leeg, tenzij noodzakelijk)</string>
+  <string id="36023">Configuratie aangepast</string>
+  <string id="36024">Kon de nieuwe configuratie niet instellen. Controleer de instellingen.</string>
+  <string id="36025">Verstuur 'inactieve bron' commando bij het stoppen</string>
+</strings>
\ No newline at end of file
index 5ea0501..5858d5c 100644 (file)
     </region>
     
     <region name="Central Europe" locale="DE">
-         <dateshort>YYYY-MM-DD</dateshort>
+      <dateshort>DD-MM-YYYY</dateshort>
       <datelong>DDDD, D MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
index d157ef3..5ad11dd 100644 (file)
   <string id="787">Interface disabled</string>
   <string id="788">Network interface disabled successfully.</string>
   <string id="789">Wireless network name (ESSID)</string>
-
+  <string id="790">Remote control</string>
   <string id="791">Allow programs on this system to control XBMC</string>
   <string id="792">Port</string>
   <string id="793">Port range</string>
   <string id="1256">Ping interval</string>
   <string id="1257">Would you like to connect to the auto-detected system?</string>
 
+  <string id="1259">Zeroconf</string>
   <string id="1260">Announce these services to other systems via Zeroconf</string>
   <string id="1270">Allow XBMC to receive AirPlay content</string>
   <string id="1271">Device name</string>
   <string id="1272">- Use password protection</string>
+  <string id="1273">AirPlay</string>
 
   <string id="1300">Custom audio device</string>
   <string id="1301">Custom passthrough device</string>
   <string id="10019">Settings - Appearance</string>
   <string id="10020">Scripts</string>
   <string id="10021">Web Browser</string>
-
+  <string id="10025">Videos</string>
   <string id="10028">Videos/Playlist</string>
+  <string id="10029">Login screen</string>
   <string id="10034">Settings - Profiles</string>
+  <string id="10040">Addon browser</string>
 
   <string id="10100">Yes/No dialog</string>
   <string id="10101">Progress dialog</string>
   <string id="20184">Rotate pictures using EXIF information</string>
   <string id="20185">Use poster view styles for TV shows</string>
   <string id="20186">Please wait</string>
+  <string id="20187">UPnP</string>
 
   <string id="20189">Enable auto scrolling for plot &amp; review</string>
   <string id="20190">Custom</string>
   <string id="20326">This will reset the calibration values for %s</string>
   <string id="20327">to it's default values.</string>
   <string id="20328">Browse for destination</string>
-
+  <string id="20329">Movies are in separate folders that match the movie title</string>
   <string id="20330">Use folder names for lookups</string>
   <string id="20331">File</string>
   <string id="20332">Use file or folder names in lookups?</string>
   <string id="20416">First aired</string>
   <string id="20417">Writer</string>
   <string id="20418"></string>
-  <string id="20419">Show metadata in files view</string>
+  <string id="20419">Replace file names with library titles</string>
 
   <string id="20420">Never</string>
   <string id="20421">If only one season</string>
   <string id="20455">Listeners</string>
   <string id="20456">Set movieset fanart</string>
   <string id="20457">Movie set</string>
+  <string id="20458">Group movies in sets</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Show hidden files and directories</string>
   <string id="21365">Remove media share</string>
   <string id="21366">Subtitle folder</string>
   <string id="21367">Movie &amp; alternate subtitle directory</string>
-
-  <string id="21369">Enable mouse</string>
+  <string id="21368">Override ASS/SSA subtitles fonts</string>
+  
+  <string id="21369">Enable mouse and Touch Screen support</string>
   <string id="21370">Play navigation sounds during media playback</string>
   <string id="21371">Thumbnail</string>
   <string id="21372">Forced DVD player region</string>
   <string id="21451">Internet connection required.</string>
   <string id="21452">Get More...</string>
   <string id="21453">Root filesystem</string>
-
+  <string id="21454">Cache full</string>
+  <string id="21455">Cache filled before reaching required amount for continous playback</string>
+  
   <string id="21460">Subtitle location</string>
   <string id="21461">Fixed</string>
   <string id="21462">Bottom of video</string>
   <string id="33101">Webserver</string>
   <string id="33102">Event Server</string>
   <string id="33103">Remote communication server</string>
+  
+  <string id="33200">Detected New Connection</string>
 
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
 
   <string id="34201">Can't find a next item to play</string>
   <string id="34202">Can't find a previous item to play</string>
+  
+  <string id="34300">Failed to start zeroconf</string>
+  <string id="34301">Is Apple's Bonjour Service installed? See log for more info.</string>
+  
+  <string id="34400">Video Rendering</string>
+  <string id="34401">Failed to init video filters/scalers, falling back to bilinear scaling</string>
+  <string id="34402">Failed to initialize audio device</string>
+  <string id="34403">Check your audiosettings</string>
 
   <string id="35000">Peripherals</string>
 
   <string id="35006">Device removed</string>
   <string id="35007">Keymap to use for this device</string>
   <string id="35008">Keymap enabled</string>
+  <string id="35009">Do not use the custom keymap for this device</string>
 
   <string id="35500">Location</string>
   <string id="35501">Class</string>
   <string id="36004">Press "user" button command</string>
   <string id="36005">Enable switch side commands</string>
   <string id="36006">Could not open the adapter</string>
-  <string id="36007">Power on devices when starting XBMC</string>
-  <string id="36008">Power off devices when stopping XBMC</string>
+  <string id="36007">Devices to power on the TV when starting XBMC</string>
+  <string id="36008">Devices to power off devices when stopping XBMC</string>
   <string id="36009">Put devices in standby mode when activating screensaver</string>
-  <string id="36010">Set as inactive source when stopping XBMC</string>
+  <string id="36010"></string>
   <string id="36011">Could not detect the CEC port. Set it up manually.</string>
-  <string id="36012">Could not detect the CEC adapter.</string>
-  <string id="36013">Unsupported libcec interface version. %d is greater than the version XBMC supports (%d)</string>
+  <string id="36012">Could not initialise the CEC adapter. Check your settings.</string>
+  <string id="36013">Unsupported libCEC interface version. %d is greater than the version XBMC supports (%d)</string>
   <string id="36014">Put this PC in standby mode when the TV is switched off</string>
+  <string id="36015">HDMI port number</string>
+  <string id="36016">Connected</string> <!-- max. 13 characters -->
+  <string id="36017">Adapter found, but libCEC is not available</string>
+  <string id="36018">Use the TV's language setting</string>
+  <string id="36019">Connected to HDMI device</string>
+  <string id="36020">Make XBMC the active source when starting</string>
+  <string id="36021">Physical address (overrules HDMI port)</string>
+  <string id="36022">COM port (leave empty unless needed)</string>
+  <string id="36023">Configuration updated</string>
+  <string id="36024">Failed to set the new configuration. Please check your settings.</string>
+  <string id="36025">Send 'inactive source' command when stopping XBMC</string>
 </strings>
index 699e168..22c0631 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--Translator: Anssi Hannula-->
 <!--Email: anssi@xbmc.org-->
-<!--Based on English strings from git-77215a4-->
+<!--Based on English strings from git-ba852bb-->
 <!--$Revision$-->
 <strings>
   <string id="0">Ohjelmat</string>
   <string id="62">joulu</string>
 
   <string id="71">Pohjoisesta</string>
-  <string id="72">Pohjoisen ja koillisen välistä</string>
+  <string id="72">Pohjoiskoillisesta</string>
   <string id="73">Koillisesta</string>
-  <string id="74">Idän ja koillisen välistä</string>
+  <string id="74">Itäkoillisesta</string>
   <string id="75">Idästä</string>
-  <string id="76">Idän ja kaakon välistä</string>
+  <string id="76">Itäkaakosta</string>
   <string id="77">Kaakosta</string>
-  <string id="78">Etelän ja kaakon välistä</string>
+  <string id="78">Eteläkaakosta</string>
   <string id="79">Etelästä</string>
-  <string id="80">Etelän ja lounaan välistä</string>
+  <string id="80">Etelälounaasta</string>
   <string id="81">Lounaasta</string>
-  <string id="82">Lännen ja lounaan välistä</string>
+  <string id="82">Länsilounaasta</string>
   <string id="83">Lännestä</string>
-  <string id="84">Lännen ja luoteen välistä</string>
+  <string id="84">Länsiluoteesta</string>
   <string id="85">Luoteesta</string>
-  <string id="86">Pohjoisen ja luoteen välistä</string>
+  <string id="86">Pohjoisluoteesta</string>
   <string id="87">Vaihteleva</string>
 
   <string id="98">Näytä: Autom.</string>
   <string id="170">Säädä näytön päivitysnopeus elokuvaan sopivaksi</string>
 
   <string id="172">Julkaistu</string>
-  <string id="173">4:3 videoiden näyttömuoto</string>
+  <string id="173">4:3-videoiden näyttömuoto</string>
 
   <string id="175">Musiikkityyli</string>
   <string id="176">Tyylilaji</string>
   <string id="251">Valitse kohdehakemisto</string>
   <string id="252">Syötä stereoääni kaikille kaiuttimille</string>
   <string id="253">Kanavien määrä</string>
-  <string id="254">- DTS yhteensopiva vastaanotin</string>
+  <string id="254">- DTS-yhteensopiva vastaanotin</string>
   <string id="255">CD-tietokanta</string>
   <string id="256">Noudetaan CD-tietoja</string>
   <string id="257">Virhe</string>
   <string id="296">Poista kirjanmerkit</string>
   <string id="297">Äänen ajoitus</string>
   <string id="298">Kirjanmerkit</string>
-  <string id="299">- AAC yhteensopiva vastaanotin</string>
-  <string id="300">- MP1 yhteensopiva vastaanotin</string>
-  <string id="301">- MP2 yhteensopiva vastaanotin</string>
-  <string id="302">- MP3 yhteensopiva vastaanotin</string>
+  <string id="299">- AAC-yhteensopiva vastaanotin</string>
+  <string id="300">- MP1-yhteensopiva vastaanotin</string>
+  <string id="301">- MP2-yhteensopiva vastaanotin</string>
+  <string id="302">- MP3-yhteensopiva vastaanotin</string>
   <string id="303">Viive</string>
   <string id="304">Kieli</string>
   <string id="305">Käytössä</string>
   <string id="336">Kuvataajuuden muunto</string>
   <string id="337">Äänilähtö</string>
   <string id="338">Analoginen</string>
-  <string id="339">Optinen/Koaksiaali</string>
+  <string id="339">Optinen/koaksiaali</string>
   <string id="340">Eri esittäjiä</string>
   <string id="341">Toista levy</string>
   <string id="342">Elokuvat</string>
   <string id="361">Kaikkien kuvaesitys</string>
   <string id="362">Näytönsäästäjän läpinäkyvyys</string>
   <string id="363">Järjestä: Tiedostonimi</string>
-  <string id="364">- Dolby Digital (AC3) yhteensopiva vastaanotin</string>
+  <string id="364">- Dolby Digital (AC3) -yhteensopiva vastaanotin</string>
   <string id="365">Järjestä: Nimi</string>
   <string id="366">Järjestä: Vuosi</string>
   <string id="367">Järjestä: Arvosana</string>
   <string id="543">DVD</string>
   <string id="544">Mediatiedot</string>
   <string id="545">Äänen ulostulo</string>
-  <string id="546">Äänen ulostulon laite</string>
+  <string id="546">Pakatun äänen ulostulo</string>
   <string id="547">Esittäjästä ei ole tietoja</string>
   <string id="548">Yhdistä monikanavaiset äänet stereoksi</string>
 
   <string id="633">Leveyden zoomaus</string>
   <string id="634">Venytä kokoon 16:9</string>
   <string id="635">Alkuperäinen koko</string>
-  <string id="636">Oma asetus</string>
+  <string id="636">Mukautettu</string>
   <string id="637">Tasonkorjaus</string>
   <string id="638">Tasonkorjaus-tilan säädöt</string>
   <string id="639">Käytä kappaletasoja</string>
   <string id="788">Verkkoliitäntä poistettu käytöstä.</string>
   <string id="789">Langattoman verkon nimi (ESSID)</string>
 
-  <string id="791">Tämän järjestelmän ohjelmat voi ohjata XBMC:aa</string>
+  <string id="791">Salli tämän järjestelmän ohjelmien ohjata XBMC:iä</string>
   <string id="792">Portti</string>
   <string id="793">Porttialue</string>
-  <string id="794">Muiden järjestelmien ohjelmat voi ohjata XBMC:aa</string>
+  <string id="794">Salli muiden järjestelmien ohjelmien ohjata XBMC:iä</string>
   <string id="795">Kertatapahtuman viive (ms)</string>
   <string id="796">Jatkuvan toiston viive (ms)</string>
   <string id="797">Yhteyksien enimmäismäärä</string>
   <string id="798">Internet-yhteys</string>
 
   <string id="850">Syötetty portin arvo on sopimaton</string>
-  <string id="851">Portti oltava väliltä 1-65535</string>
-  <string id="852">Portti oltava väliltä 1024-65535</string>
+  <string id="851">Portin oltava väliltä 1-65535</string>
+  <string id="852">Portin oltava väliltä 1024-65535</string>
 
   <string id="998">Lisää musiikkia...</string>
   <string id="999">Lisää videoita...</string>
   <string id="1256">Pingauksen väli</string>
   <string id="1257">Yhdistetäänkö havaittuun järjestelmään?</string>
 
-  <string id="1260">Julkista nämä palvelut toisiin järjestelmiin Zeroconf publishing:in kautta</string>
-  <string id="1270">Salli XBMC:n vastaanottaa AirPlay sisältöä</string>
+  <string id="1260">Julkista nämä palvelut toisiin järjestelmiin Zeroconf-julkaisujärjestelmän kautta</string>
+  <string id="1270">Salli XBMC:n vastaanottaa AirPlay-sisältöä</string>
   <string id="1271">Laitteen nimi</string>
   <string id="1272">- Käytä salasanaa</string>
 
-  <string id="1300">Valinnainen äänilaite</string>
-  <string id="1301">Valinnainen äänen ulostulon laite</string>
+  <string id="1300">Mukautettu äänilaite</string>
+  <string id="1301">Mukautettu pakatun äänen laite</string>
 
   <string id="1396">kasaantuvaa</string>
   <string id="1397">ja</string>
   <string id="10019">Asetukset - Käyttöliittymä</string>
   <string id="10020">Skriptit</string>
   <string id="10021">Nettiselain</string>
-
+  <string id="10025">Videot</string>
   <string id="10028">Videot/Toistolista</string>
+  <string id="10029">Kirjautumisikkuna</string>
   <string id="10034">Asetukset - Profiilit</string>
+  <string id="10040">Lisäosaselain</string>
 
   <string id="10100">Kyllä/Ei -dialogi</string>
   <string id="10101">Tila -dialogi</string>
   <string id="13119">Sinc</string>
   <string id="13120">VDPAU</string>
   <string id="13121">VDPAU HQ skaalaustaso</string>
-  <string id="13122">VDPAU studiotasoinen värimuunnos</string>
+  <string id="13122">VDPAU:n studiotasoinen värimuunnos</string>
 
   <string id="13130">Tyhjennä muut näytöt</string>
   <string id="13131">Ei käytössä</string>
   <string id="13414">Sisällytä vain kokoelmilla olevat esittäjät</string>
   <string id="13415">Renderöintimenetelmä</string>
   <string id="13416">Automaattinen tunnistus</string>
-  <string id="13417">Basic Shaders (ARB)</string>
-  <string id="13418">Advanced Shaders (GLSL)</string>
+  <string id="13417">Yksinkertaiset varjostimet (ARB)</string>
+  <string id="13418">Edistyneet varjostimet (GLSL)</string>
   <string id="13419">Ohjelmallinen</string>
   <string id="13420">Poista turvallisesti</string>
   <string id="13421">VDPAU</string>
   <string id="13422">Aloita kuvaesitys tästä</string>
   <string id="13423">Muista tämä polku</string>
-  <string id="13424">Pixel buffer objects käytössä</string>
+  <string id="13424">Käytä pikselipuskuriobjekteja</string>
   <string id="13425">Laitteistopohjainen kiihdytys (VDPAU)</string>
   <string id="13426">Laitteistopohjainen kiihdytys (VAAPI)</string>
   <string id="13427">Laitteistopohjainen kiihdytys (DXVA2)</string>
 
   <string id="13500">A/V-tahdistusmenetelmä</string>
   <string id="13501">Äänen kello</string>
-  <string id="13502">Videon kello (poista/lisää ääntä)</string>
+  <string id="13502">Videon kello (poista/kopioi ääninäytteitä)</string>
   <string id="13503">Videon kello (äänen uudelleennäytteistys)</string>
-  <string id="13504">Maksimi uudelleennäytteistys (%)</string>
+  <string id="13504">Maksimiuudelleennäytteistys (%)</string>
   <string id="13505">Uudellennäytteistyksen laatu</string>
-  <string id="13506">Matala(nopea)</string>
+  <string id="13506">Matala (nopea)</string>
   <string id="13507">Keski</string>
   <string id="13508">Korkea</string>
-  <string id="13509">Todella korkea(hidas)</string>
+  <string id="13509">Todella korkea (hidas)</string>
   <string id="13510">Tahdista toisto näyttöön</string>
 
   <string id="13550">Pysäytä toisto virkistystaajuuden vaihtamisen ajaksi</string>
   <string id="13600">Apple remote -kauko-ohjain</string>
 
   <string id="13602">XBMC voidaan käynnistää kauko-ohjaimella</string>
-  <string id="13603">Jaksottainen viive</string>
+  <string id="13603">Jaksoittainen viive</string>
 
   <string id="13610">Ei käytössä</string>
   <string id="13611">Normaali</string>
   <string id="14038">Verkkoasetuksia muutettu</string>
   <string id="14039">XBMC täytyy käynnistää uudelleen, jotta uudet</string>
   <string id="14040">asetukset tulevat käyttöön. Käynnistetäänkö uudelleen nyt?</string>
-  <string id="14041">Internet-yhteyden kaistan rajoitus</string>
+  <string id="14041">Internet-yhteyden kaistanrajoitus</string>
 
   <string id="14043">- Sammuta kesken toiston</string>
   <string id="14044">%i min</string>
   <string id="16020">Lomituksenpoisto</string>
   <string id="16021">Synk. parittomat</string>
   <string id="16022">Synk. parilliset</string>
-  <string id="16023">Lomituksen käsittely</string>
+  <string id="16023"></string>
   <string id="16024">Peruutetaan...</string>
   <string id="16025">Anna esittäjän nimi</string>
   <string id="16026">Toisto ei onnistu</string>
   <string id="16033">Tietokantaa ei voida avata.</string>
   <string id="16034">Tietokannasta ei voitu hakea kappaleita.</string>
   <string id="16035">Jukeboksi toistolista</string>
-  <string id="16036">Lomituksenpoisto (Half)</string>
+  <string id="16036">Lomituksenpoisto (puolinopeus)</string>
   <string id="16037">Videon lomituksenpoisto</string>
   <string id="16038">Lomituksenpoistomenetelmä</string>
   <string id="16039">Pois päältä</string>
   <string id="16309">Sinc (ohjelmallinen)</string>
   <string id="16310">Temporal</string>
   <string id="16311">Temporal/Spatial</string>
-  <string id="16312">(VDPAU)Kohinanvähennys</string>
-  <string id="16313">(VDPAU)Terävyys</string>
+  <string id="16312">(VDPAU) Kohinanvähennys</string>
+  <string id="16313">(VDPAU) Terävyys</string>
   <string id="16314">Inverse Telecine</string>
-  <string id="16315">Lanczos3 optimized</string>
+  <string id="16315">Lanczos3 optimoitu</string>
   <string id="16316">Automaattinen</string>
-  <string id="16317">Temporal (Half)</string>
-  <string id="16318">Temporal/Spatial (Half)</string>
+  <string id="16317">Temporal (puolinopeus)</string>
+  <string id="16318">Temporal/Spatial (puolinopeus)</string>
   <string id="16319">DXVA</string>
   <string id="16320">DXVA Synk. parittomat</string>
   <string id="16321">DXVA Paras</string>
   <string id="16322">Spline36</string>
-  <string id="16323">Spline36 optimized</string>
+  <string id="16323">Spline36 optimoitu</string>
+  <string id="16324">Ohjelmistopohjainen sekoitus</string>
 
   <string id="16400">Videon jälkikäsittely</string>
 
   <string id="20253">WebDAV palvelin (HTTP)</string>
   <string id="20254">WebDAV palvelin (HTTPS)</string>
   <string id="20255">Ensimmäinen kirjautuminen, muokkaa profiiliasi</string>
-  <string id="20256">HTS Tvheadend-asiakas</string>
-  <string id="20257">VDR Streamdev-asiakas</string>
-  <string id="20258">MythTV-asiakas</string>
+  <string id="20256">HTS Tvheadend -asiakas</string>
+  <string id="20257">VDR Streamdev -asiakas</string>
+  <string id="20258">MythTV -asiakas</string>
   <string id="20259">Verkkotiedostojärjestelmä (NFS)</string>
   <string id="20260">Secure Shell (SSH/SFTP)</string>
-  <string id="20261">Apple File Protocol (AFP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
 
   <string id="20300">Web-palvelimen hakemisto (HTTP)</string>
   <string id="20301">Web-palvelimen hakemisto (HTTPS)</string>
   <string id="20326">Tämä palauttaa asettamasi %s kalibroinnin arvot</string>
   <string id="20327">oletusarvoiksi</string>
   <string id="20328">Valitse kohdesijainti</string>
-
+  <string id="20329">Elokuvan tiedostot ovat eri kansioissa, jotka ovat nimetty elokuvan mukaan</string>
   <string id="20330">Hae kansionimiä</string>
   <string id="20331">Tiedostonimet</string>
   <string id="20332">Käytetäänkö haettaessa tiedosto- vai kansionimiä?</string>
   <string id="20416">Ensiesitys</string>
   <string id="20417">Käsikirjoittaja</string>
   <string id="20418"></string>
-  <string id="20419">Näytä metatiedot "Tiedostot"-näkymässä</string>
+  <string id="20419">Korvaa tiedostojen nimet kirjaston sisältämillä nimillä</string>
 
   <string id="20420">Ei koskaan</string>
   <string id="20421">Jos samalta tuotantokaudelta</string>
   <string id="20455">Kuuntelijat</string>
   <string id="20456">Aseta elokuvasetin fanitaide</string>
   <string id="20457">Elokuvasetti</string>
+  <string id="20458">Ryhmittele elokuvat settien mukaan</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Näytä piilotetut tiedostot ja kansiot</string>
   <string id="21365">Poista sijainti</string>
   <string id="21366">Tekstityskansio</string>
   <string id="21367">Elokuvien ja vaihtoehtoisten tekstitysten hakemisto</string>
+  <string id="21368">Älä käytä ASS/SSA -tekstitysten kirjasinta</string>
 
-  <string id="21369">Hiiri käytössä</string>
+  <string id="21369">Hiiri- ja kosketusnäyttötuki käytössä</string>
   <string id="21370">Ohjauspainikkeiden äänitehosteet käytössä</string>
   <string id="21371">Pienoiskuva</string>
   <string id="21372">Pakotettu DVD-aluekoodi</string>
   <string id="21451">Internet-yhteys vaaditaan.</string>
   <string id="21452">Nouda lisää...</string>
   <string id="21453">Juurikansio</string>
+  <string id="21454">Välimuisti täynnä</string>
+  <string id="21455">Välimuisti täyttyi ennen toistoon tarvittavaa määrää</string>
 
   <string id="21460">Tekstityksen sijainti</string>
   <string id="21461">Kiinteä</string>
   <string id="22004">Viivästetty: %2.3fs</string>
   <string id="22005">Aiennettu: %2.3fs</string>
   <string id="22006">Tekstityksen ajoitus</string>
-  <string id="22007">OpenGL-valmistaja:</string>
-  <string id="22008">OpenGL-renderoija:</string>
+  <string id="22007">OpenGL-toimittaja:</string>
+  <string id="22008">OpenGL-renderöijä:</string>
   <string id="22009">OpenGL-versio:</string>
   <string id="22010">GPU:n lämpötila:</string>
   <string id="22011">CPU:n lämpötila:</string>
   <string id="22012">Kokonaismuisti</string>
   <string id="22013">Profiilin tiedot</string>
-  <string id="22014">Himmennä jos videon toisto keskeytetään</string>
+  <string id="22014">Himmennä keskeytettäessä videon toisto</string>
   <string id="22015">Kaikki tallennukset</string>
   <string id="22016">Nimet</string>
   <string id="22017">Ryhmät</string>
   <string id="22020">Ohjelmaopas</string>
   <string id="22021">Sallittu kuvasuhdevirhe mustien palkkien minimoimiseksi</string>
   <string id="22022">Näytä videotiedostot listauksissa</string>
-  <string id="22023">DirectX valmistaja:</string>
-  <string id="22024">Direct3D versio:</string>
+  <string id="22023">DirectX-toimittaja:</string>
+  <string id="22024">Direct3D-versio:</string>
 
   <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">Kirjasin</string>
   <string id="33102">Tapahtumapalvelin</string>
   <string id="33103">Etäviestipalvelin</string>
 
+  <string id="33200">Uusi yhteys tunnistettu</string>
+
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
 
   <string id="34201">Seuraavaa kohdetta ei löydy</string>
   <string id="34202">Edellistä kohdetta ei löydy</string>
+
+  <string id="34300">Zeroconf-palvelua ei voitu käynnistää</string>
+  <string id="34301">Onko Applen Bonjour -palvelu asennettu? Katso lokitiedostosta lisätietoja.</string>
+
+  <string id="34400">Videon renderöintitapa</string>
+  <string id="34401">Ei voitu käyttää videon suodatin/skaalaus -asetuksia, otetaan käyttöön bilineaarinen skaalausmenetelmä</string>
+  <string id="34402">Äänilaitteen alustaminen epäonnistui</string>
+  <string id="34403">Tarkista ääniasetukset</string>
+
+  <string id="35000">Oheislaitteet</string>
+
+  <string id="35001">Yleinen HID-laite</string>
+  <string id="35002">Yleinen verkkosovitin</string>
+  <string id="35003">Yleinen levy</string>
+  <string id="35004">Asetuksia ei ole saatavilla&#10;tälle oheislaitteelle.</string>
+  <string id="35005">Uusi laite määritetty</string>
+  <string id="35006">Laite poistettu</string>
+  <string id="35007">Tämän laitteen näppäimistöasettelu</string>
+  <string id="35008">Näppäimistöasettelu käytössä</string>
+
+  <string id="35500">Sijainti</string>
+  <string id="35501">Luokka</string>
+  <string id="35502">Nimi</string>
+  <string id="35503">Valmistaja</string>
+  <string id="35504">Tuotetunnus</string>
+
+  <string id="36000">Pulse-Eight CEC-sovitin</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Vaihda hallinta näppäimistöpuolelle</string>
+  <string id="36003">Vaihda kallinta kaukosäädinpuolelle</string>
+  <string id="36004">Paina "user"-painikkeen komento</string>
+  <string id="36005">Käytä puolen vaihtokomentoja</string>
+  <string id="36006">Sovitinta ei voitu avata</string>
+  <string id="36007">Käynnistä TV kun XBMC käynnistetään</string>
+  <string id="36008">Sammuta laitteet kun XBMC sammutetaan</string>
+  <string id="36009">Aseta laitteet valmiustilaan näytönsäästäjän aktivoituessa</string>
+  <string id="36010"></string>
+  <string id="36011">CEC-porttia ei havaittu. Määritä se käsin.</string>
+  <string id="36012">CEC-sovitinta ei havaittu.</string>
+  <string id="36013">Ei tuettu libcec-rajapinnan versio. %d on suurempi kuin versio, jota XBMC tukee (%d)</string>
+  <string id="36014">Aseta tämä tietokone valmiustilaan kun TV sammutetaan</string>
+  <string id="36015">HDMI-liitin</string>
+  <string id="36016">Yhdistetty</string>
+  <string id="36017">Sovitin löytyi, mutta libcec ei ole saatavilla</string>
+  <string id="36018">Käytä TV:n kieliasetusta</string>
 </strings>
index 4d34279..0760cb3 100644 (file)
@@ -19,7 +19,7 @@
   <regions>
     <region name="France" locale="FR">
       <dateshort>DD/MM/YYYY</dateshort>
-      <datelong>DDDD, D MMMM YYYY</datelong>
+      <datelong>DDDD D MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
@@ -28,7 +28,7 @@
 
     <region name="Belgique" locale="BE">
       <dateshort>DD/MM/YYYY</dateshort>
-      <datelong>DDDD, D MMMM YYYY</datelong>
+      <datelong>DDDD D MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
@@ -37,7 +37,7 @@
 
     <region name="Luxembourg" locale="LU">
       <dateshort>DD/MM/YYYY</dateshort>
-      <datelong>DDDD, D MMMM YYYY</datelong>
+      <datelong>DDDD D MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
@@ -46,7 +46,7 @@
 
     <region name="Suisse" locale="CH">
       <dateshort>DD/MM/YYYY</dateshort>
-      <datelong>DDDD, D MMMM YYYY</datelong>
+      <datelong>DDDD D MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
@@ -55,7 +55,7 @@
 
     <region name="Principauté de Monaco" locale="MC">
       <dateshort>DD/MM/YYYY</dateshort>
-      <datelong>DDDD, D MMMM YYYY</datelong>
+      <datelong>DDDD D MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
@@ -64,7 +64,7 @@
 
     <region name="Canada" locale="CA">
       <dateshort>DD/MM/YYYY</dateshort>
-      <datelong>DDDD, D MMMM YYYY</datelong>
+      <datelong>DDDD D MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
index 4ef1490..64b3a5a 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--$Revision$-->
+<!--Based on English 0ee1ef09238e4d913cf6c47fa18138c3654cd33e (08.02.2012)-->
 <strings>
   <string id="0">Programmes</string>
   <string id="1">Images</string>
@@ -11,7 +11,7 @@
   <string id="7">Fichiers</string>
   <string id="8">Météo</string>
   <string id="9">Xbmc media center</string>
-  
+
   <string id="11">Lundi</string>
   <string id="12">Mardi</string>
   <string id="13">Mercredi</string>
@@ -19,7 +19,7 @@
   <string id="15">Vendredi</string>
   <string id="16">Samedi</string>
   <string id="17">Dimanche</string>
-  
+
   <string id="21">Janvier</string>
   <string id="22">Février</string>
   <string id="23">Mars</string>
   <string id="30">Octobre</string>
   <string id="31">Novembre</string>
   <string id="32">Décembre</string>
-  
-  <string id="41">Lun.</string>
-  <string id="42">Mar.</string>
-  <string id="43">Mer.</string>
-  <string id="44">Jeu.</string>
-  <string id="45">Ven.</string>
-  <string id="46">Sam.</string>
-  <string id="47">Dim.</string>
-  
+
+  <string id="41">Lun</string>
+  <string id="42">Mar</string>
+  <string id="43">Mer</string>
+  <string id="44">Jeu</string>
+  <string id="45">Ven</string>
+  <string id="46">Sam</string>
+  <string id="47">Dim</string>
+
   <string id="51">Jan</string>
   <string id="52">Fev</string>
   <string id="53">Mar</string>
@@ -53,7 +53,7 @@
   <string id="60">Oct</string>
   <string id="61">Nov</string>
   <string id="62">Dec</string>
-  
+
   <string id="71">N</string>
   <string id="72">NNE</string>
   <string id="73">NE</string>
   <string id="77">SE</string>
   <string id="78">SSE</string>
   <string id="79">S</string>
-  <string id="80">SSW</string>
-  <string id="81">SW</string>
-  <string id="82">WSW</string>
-  <string id="83">W</string>
-  <string id="84">WNW</string>
-  <string id="85">NW</string>
-  <string id="86">NNW</string>
+  <string id="80">SSO</string>
+  <string id="81">SO</string>
+  <string id="82">OSO</string>
+  <string id="83">O</string>
+  <string id="84">ONO</string>
+  <string id="85">NO</string>
+  <string id="86">NNO</string>
   <string id="87">VAR</string>
-  
+
   <string id="98">Vue : Auto</string>
   <string id="99">Vue : Auto Grand</string>
   <string id="100">Vue : Icônes</string>
@@ -87,8 +87,8 @@
   <string id="110">Créer vignettes</string>
   <string id="111">Raccourcis</string>
   <string id="112">PAUSE</string>
-  <string id="113">Echec Mise-à-jour</string>
-  <string id="114">Echec Installation</string>  
+  <string id="113">Échec mise-à-jour</string>
+  <string id="114">Échec installation</string>
   <string id="115">Copier</string>
   <string id="116">Déplacer</string>
   <string id="117">Effacer</string>
@@ -97,9 +97,9 @@
   <string id="120">Confirmer copie du fichier</string>
   <string id="121">Confirmer déplacement du fichier</string>
   <string id="122">Confirmer effacement du fichier ?</string>
-  <string id="123">Êtes-vous sûr(e) de copier ce(s) fichier(s)?</string>
-  <string id="124">Êtes-vous sûr(e) de déplacer ce(s) fichier(s)?</string>
-  <string id="125">Voulez-vous supprimer ces fichiers? Ceci sera définitif !</string>
+  <string id="123">Êtes-vous sûr(e) de copier ce(s) fichier(s) ?</string>
+  <string id="124">Êtes-vous sûr(e) de déplacer ce(s) fichier(s) ?</string>
+  <string id="125">Voulez-vous supprimer ces fichiers ? Ceci sera définitif !</string>
   <string id="126">Statut</string>
   <string id="127">Objets</string>
   <string id="128">Général</string>
   <string id="153">Full duplex</string>
   <string id="154">Stockage</string>
   <string id="155">Lecteur</string>
-  <string id="156">Libre</string>
+  <string id="156">libre</string>
   <string id="157">Vidéo</string>
-  <string id="158">Mémoire Libre</string>
+  <string id="158">Mémoire libre</string>
   <string id="159">Câble débranché</string>
-  <string id="160">Libre</string>
+  <string id="160">libres</string>
   <string id="161">Non disponible</string>
   <string id="162">Tiroir ouvert</string>
   <string id="163">Lecture</string>
 
   <string id="169">Résolution</string>
   <string id="170">Ajuster le taux de rafraîchissement sur la vidéo</string>
-  
+
   <string id="172">Version du</string>
   <string id="173">Affichage 4:3</string>
-  
+
   <string id="175">Sonorités</string>
   <string id="176">Styles</string>
-  
+
   <string id="179">Chanson</string>
   <string id="180">Durée</string>
   <string id="181">Sélectionner un album</string>
   <string id="197">Demande d'info sur %s</string>
   <string id="198">Chargement des détails du film</string>
   <string id="199">Interface Web</string>
-  
+
   <string id="202">Critiques</string>
   <string id="203">Intrigue</string>
-  
+
   <string id="205">Votes</string>
   <string id="206">Casting</string>
   <string id="207">Résumé</string>
   <string id="221">Le réseau n'est pas connecté</string>
   <string id="222">Annuler</string>
   <string id="224">Vitesse</string>
-  
+
   <string id="225">Hauteur de l'image</string>
   <string id="226">Afficher la mire...</string>
   <string id="227">Rechercher le nom des pistes CD Audio sur freedb.org</string>
   <string id="238">Optique (+)</string>
   <string id="239">Effacer la playliste à la fin de la lecture</string>
   <string id="240">Mode d'affichage</string>
-  <string id="241">Plein Ecran #%d</string>
+  <string id="241">Plein écran #%d</string>
   <string id="242">Fenêtré</string>
   <string id="243">Taux de rafraîchissement</string>
   <string id="244">Plein écran</string>
-  <string id="245">Sizing: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1)</string>
-  
+  <string id="245">Sizing : (%i,%i)->(%i,%i) (Zoom x%2.2f) AR :%2.2f :1 (Pixels : %2.2f :1)</string>
+
   <string id="247">Scripts</string>
   <string id="248">Langue</string>
   <string id="249">Musique</string>
   <string id="303">Délai</string>
   <string id="304">Langue</string>
   <string id="305">Activé</string>
-  <string id="306">Non Entrelacé</string>
+  <string id="306">Non entrelacé</string>
 
   <string id="312">(0=auto)</string>
   <string id="313">Nettoyage de la base de données</string>
   <string id="379">Après-midi</string>
   <string id="380">Averses</string>
   <string id="381">Quelques</string>
-  <string id="382">Eparse</string>
+  <string id="382">Éparse</string>
   <string id="383">Vent</string>
   <string id="384">Fort</string>
   <string id="385">Beau</string>
   <string id="418">Min.</string>
   <string id="419">Max.</string>
   <string id="420">HDMI</string>
-  
+
   <string id="422">Supprimer les infos album</string>
   <string id="423">Supprimer les infos CD</string>
   <string id="424">Valider</string>
   <string id="431">Pas de cache</string>
   <string id="432">Retirer le film de la médiathèque</string>
   <string id="433">Êtes-vous sûr(e) de retirer '%s' ?</string>
-  <string id="434">Direction : %s, Vitesse :  %i %s</string> <!--From <wind dir.> at <speed> <unit>-->
-  
+  <string id="434">%s à %i %s</string> <!--From <wind dir.> at <speed> <unit>-->
+
   <string id="437">Disque amovible</string>
   <string id="438">Ouverture du fichier</string>
   <string id="439">Cache</string>
   <string id="480">Apparence</string>
   <string id="481">Options Audio</string>
   <string id="482">À propos de XBMC</string>
-  
+
   <string id="485">Supprimer l'album</string>
   <string id="486">Répéter</string>
   <string id="487">Répéter une fois</string>
   <string id="513">Accueil</string>
   <string id="514">Configuration manuelle</string>
   <string id="515">Genre</string>
-  
+
   <string id="517">Albums récemment joués</string>
   <string id="518">Lancer</string>
   <string id="519">Lancer en...</string>
   <string id="526">Ajouter à la playliste</string>
   <string id="527">Ajout manuel à la médiath...</string>
   <string id="528">Entrer le titre</string>
-  <string id="529">Erreur : Doublon</string>
+  <string id="529">Erreur : doublon</string>
   <string id="530">Choisir le genre</string>
   <string id="531">Nouveau genre</string>
   <string id="532">Ajout manuel</string>
   <string id="546">Passthrough vers le périphérique de sortie</string>
   <string id="547">Pas de biographie pour cet artiste</string>
   <string id="548">Dé-multiplexer l'audio multi-canal en stéréo</string>
-  
+
   <string id="550">Trier par : %s</string>
   <string id="551">Nom</string>
   <string id="552">Date</string>
   <string id="572">Studio</string>
   <string id="573">Chemin</string>
   <string id="574">Pays</string>
-  <string id="575">En cours</string>  
-  
+  <string id="575">En cours</string>
+  <string id="576">Nombre de Lectures</string>
+
   <string id="580">Direction du tri</string>
   <string id="581">Méthode du tri</string>
   <string id="582">Mode de vue</string>
   <string id="595">Répéter : Non</string>
   <string id="596">Répéter : Une fois</string>
   <string id="597">Répéter : Tous</string>
-  
+
   <string id="600">Importer le CD</string>
   <string id="601">Moyenne</string>
   <string id="602">Standard</string>
   <string id="603">Excellente</string>
   <string id="604">Débit constant</string>
   <string id="605">Importation en cours...</string>
-  
+
   <string id="607">Destination :</string>
   <string id="608">Impossible d'importer le CD ou la piste</string>
   <string id="609">Le chemin CDDA d'importation n'est pas défini.</string>
   <string id="610">Importer une piste audio</string>
   <string id="611">Entrer le numéro</string>
   <string id="612">Bits/Sample</string>
-  <string id="613">Fréquence d'échantillonage</string>  
-  
+  <string id="613">Fréquence d'échantillonage</string>
+
   <string id="620">CDs audio</string>
   <string id="621">Encodeur</string>
   <string id="622">Qualité</string>
   <string id="640">Utiliser le volume de l'album</string>
   <string id="641">Amplification des fichiers Replay gain</string>
   <string id="642">Amplification des fichiers non Replay gain</string>
-  <string id="643">Eviter les coupures sur les fichiers replay gain</string>
+  <string id="643">Éviter les coupures sur les fichiers replay gain</string>
   <string id="644">Couper les barres noires</string>
   <string id="645">Besoin de décompresser un gros fichier. Continuer ?</string>
   <string id="646">Retirer de la médiathèque</string>
   <string id="650">Exportation</string>
   <string id="651">Rechercher une médiathèque</string>
   <string id="652">Années</string>
-  <string id="653">MAJ la médiathèque</string>
+  <string id="653">Actualiser la médiathèque</string>
   <string id="654">Voir les infos debug</string>
   <string id="655">Recherche d'exécutable</string>
   <string id="656">Recherche d'une playliste</string>
   <string id="657">Recherche d'un dossier</string>
   <string id="658">Information de la chanson</string>
-  <string id="659">Etirement non-linéaire</string>
-  
+  <string id="659">Étirement non-linéaire</string>
+
   <string id="660">Volume d'amplification</string>
   <string id="661">Choisissez le dossier d'exportation</string>
   <string id="662">Ce fichier n'est plus disponible.</string>
   <string id="663">Souhaitez-vous le supprimer de la médiathèque ?</string>
   <string id="664">Rechercher un script</string>
   <string id="665">Niveau de compression</string>
-  
+
   <string id="700">Nettoyage de la médiathèque</string>
   <string id="701">Suppression des anciens morceaux de la médiathèque</string>
   <string id="702">Ce dossier a déjà été scanné</string>
   <string id="705">Réseau</string>
   <string id="706">- Serveur</string>
-  
+
   <string id="708">Utiliser un serveur proxy HTTP pour accéder à internet</string>
-  
+
   <string id="711">Protocole Internet (IP)</string>
   <string id="712">Port spécifié invalide. Doit être compris entre 1 et 65535.</string>
   <string id="713">Proxy HTTP</string>
-  
+
   <string id="715">- Attribution</string>
   <string id="716">Automatique (DHCP)</string>
   <string id="717">Manuelle (Statique)</string>
   <string id="749">Retourner l'image</string>
   <string id="750">Êtes-vous sûr(e) ?</string>
   <string id="751">Supprimer la source</string>
-  
+
   <string id="754">Ajouter un lien programme</string>
   <string id="755">Éditer le chemin du programme</string>
   <string id="756">Éditer le nom du programme</string>
   <string id="757">Éditer la profondeur du chemin</string>
-  
+
   <string id="759">Vue : Grande liste</string>
   <string id="760">Jaune</string>
   <string id="761">Blanc</string>
   <string id="787">Interface désactivée</string>
   <string id="788">L'interface réseau a été désactivée avec succès.</string>
   <string id="789">Nom réseau sans fil (ESSID)</string>
-  
+
   <string id="791">Autoriser le contrôle de XBMC par des programmes locaux</string>
   <string id="792">Port</string>
   <string id="793">Port série</string>
   <string id="796">Délai répétition continue (ms)</string>
   <string id="797">Nombre maximum de clients</string>
   <string id="798">Accès Internet</string>
-  
+
   <string id="850">Numéro de port invalide</string>
   <string id="851">Port valide compris entre 1-65535</string>
   <string id="852">Port valide compris entre 1024-65535</string>
-  
+
   <string id="998">Ajouter une source musicale...</string>
   <string id="999">Ajouter une source vidéo...</string>
   <string id="1000">- Prévisualiser</string>
   <string id="1002">XBMC ne peut pas se connecter au chemin réseau.</string>
   <string id="1003">Vérifiez votre chemin ou votre installation réseau.</string>
   <string id="1004">Désirez-vous tout de même l'ajouter ?</string>
-  
+
   <string id="1006">Adresse IP</string>
   <string id="1007">Ajouter un chemin réseau</string>
   <string id="1008">Protocole</string>
   <string id="1039">Add-ons Image</string>
   <string id="1040">Chargement du dossier</string>
   <string id="1041">%i objets chargés</string>
-  <string id="1042">%i de %i objets chargés</string>
+  <string id="1042">%i objets chargés sur %i</string>
   <string id="1043">Add-ons programme</string>
   <string id="1044">Choisir une vignette plugin</string>
   <string id="1045">Paramètres de l'Add-on</string>
   <string id="1049">Paramètres du Script</string>
   <string id="1050">Singles</string>
   <string id="1051">Entrez l'adresse web</string>
-  
+
   <string id="1200">Client SMB</string>
   <string id="1202">Groupe de travail</string>
   <string id="1203">Utilisateur par défaut</string>
   <string id="1204">Mot de passe par défaut</string>
-  
+
   <string id="1207">Serveur WINS</string>
   <string id="1208">Monter les partages SMB</string>
-  
+
   <string id="1210">Supprimer</string>
   <string id="1211">Musique</string>
   <string id="1212">Vidéo</string>
   <string id="1250">Auto-détection</string>
   <string id="1251">Auto-détection du système</string>
   <string id="1252">Pseudo</string>
-  
+
   <string id="1254">Demander pour se connecter</string>
   <string id="1255">Envoyer les Mot de Passe et Nom d'Utilisateur FTP</string>
   <string id="1256">Temps de réponse (ping)</string>
   <string id="1257">Souhaitez-vous vous connecter à l'auto-détection du système ?</string>
-  
+
   <string id="1260">Annoncer ces services à d'autres systèmes via Zéroconf</string>
-  
+  <string id="1270">Autoriser XBMC à recevoir du contenu AirPlay</string>
+  <string id="1271">Nom du dispositif</string>
+  <string id="1272">- Protection par mot de passe</string>
+
   <string id="1300">Personnaliser le périphérique audio</string>
   <string id="1301">Personnaliser le périphérique passthrough</string>
-  
+
   <string id="1396">Dérivant</string>
   <string id="1397">et</string>
   <string id="1398">gelant</string>
   <string id="1420">Modéré</string>
   <string id="1421">Très Fort</string>
   <string id="1422">Venteux</string>
-  <string id="1423">Brouillard</string>  
+  <string id="1423">Brouillard</string>
 
   <!-- strings through to 1450 reserved for weather translation -->
 
   <!-- strings through to 1470 reserved for power-saving -->
 
   <string id="2050">Durée</string>
-  
+
   <string id="2100">Échec du script ! : %s</string>
   <string id="2101">Nouvelle version requise - Voir le log</string>
-  
+
   <string id="4501">Activer LCD/VFD</string>
-  
+
   <string id="10000">Accueil</string>
   <string id="10001">Programmes</string>
   <string id="10002">Images</string>
   <string id="10019">Paramètres - Apparence</string>
   <string id="10020">Scripts</string>
   <string id="10021">Navigateur</string>
-  
+  <string id="10025">Vidéos</string>
   <string id="10028">Vidéos/Playliste</string>
+  <string id="10029">Écran de connexion</string>
   <string id="10034">Paramètres - Profils</string>
-  
+  <string id="10040">Gestionnaire d'add-ons</string>
+
   <string id="10100">Dialogues Oui/Non</string>
   <string id="10101">Dialogues Progression</string>
-  
+
   <string id="10210">Recherche de sous-titres...</string>
   <string id="10211">Recherche de sous-titres mis en cache...</string>
   <string id="10212">Finalisation</string>
   <string id="10213">Mise en cache</string>
   <string id="10214">Ouverture du flux</string>
-  
+
   <string id="10500">Musique/Playliste</string>
   <string id="10501">Musique/Fichiers</string>
   <string id="10502">Musique/Médiathèque</string>
   <string id="10509">Jeux en réseau</string>
   <string id="10510">Extensions</string>
   <string id="10511">Infos Système</string>
-  
+
   <string id="10516">Musique - Médiath.</string>
   <string id="10517">Musique - Lecture en cours</string>
-  
+
   <string id="10522">Vidéos - Lecture en cours</string>
   <string id="10523">Infos Album</string>
   <string id="10524">Infos Film</string>
-  
+
   <string id="12000">Choisir un dialogue</string>
   <string id="12001">Musique/info</string>
   <string id="12002">Dialogues OK</string>
   <string id="12004">Scripts/Info</string>
   <string id="12005">Vidéo plein écran</string>
   <string id="12006">Visualisation audio</string>
-  
+
   <string id="12008">Dialogue empiler fichiers</string>
   <string id="12009">Reconstruire l'index...</string>
   <string id="12010">Revenir à l'écran musique</string>
 
   <string id="12021">Reprendre depuis le début</string>
   <string id="12022">Reprendre à partir de %s</string>
-  
+
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12320">c</string>
   <string id="12321">Ok</string>
   <string id="12322">*</string>
-  <string id="12325">Vérouillé ! Entrer le code</string>
+  <string id="12325">Verrouillé ! Entrer le code</string>
   <string id="12326">Saisissez le mot de passe</string>
   <string id="12327">Saisissez le code Administrateur</string>
-  <string id="12328">Saisissez le code de dévérouillage</string>
+  <string id="12328">Saisissez le code de déverrouillage</string>
   <string id="12329">ou appuyez sur C pour annuler</string>
   <string id="12330">Saisissez la combinaison de boutons gamepad et</string>
-  <string id="12331"></string>
+  <string id="12331">pressez OK, ou BACK pour annuler</string>
   <string id="12332">Sécuriser</string>
-  <string id="12333">Dévérouiller</string>
-  <string id="12334">Réinitialiser le vérouillage</string>
-  <string id="12335">Enlever le vérouillage</string>
+  <string id="12333">Déverrouiller</string>
+  <string id="12334">Réinitialiser le verrouillage</string>
+  <string id="12335">Enlever le verrouillage</string>
   <string id="12337">Mot de passe numérique</string>
   <string id="12338">Combinaison de boutons</string>
   <string id="12339">Mot de passe texte</string>
-  <string id="12340">Saisissez un nouveau mot de passe</string>
-  <string id="12341">Saisissez à nouveau le mot de passe</string>
+  <string id="12340">Saisir un nouveau mot de passe</string>
+  <string id="12341">Saisir à nouveau le mot de passe</string>
   <string id="12342">Mot de passe incorrect,</string>
   <string id="12343">Nombre d'essais restants</string>
   <string id="12344">Les mots de passe saisis ne correspondent pas.</string>
   <string id="12357">Verrou sources</string>
   <string id="12358">Le mot de passe entré est vide. Recommencez.</string>
   <string id="12360">Verrou admin.</string>
-  <string id="12362">Eteindre le système après trop de tentatives</string>
+  <string id="12362">Éteindre le système après trop de tentatives</string>
   <string id="12367">Le code Admin n'est pas valide</string>
   <string id="12368">Merci d'entrer un code Admin valide</string>
   <string id="12373">Paramètres &amp; Fichiers</string>
   <string id="12384">Horloge 24 Heures</string>
   <string id="12385">Jour/Mois</string>
   <string id="12386">Mois/Jour</string>
-  
+
   <string id="12390">Système démarré depuis</string>
-  <string id="12391">Minutes</string>
-  <string id="12392">Heures</string>
-  <string id="12393">Jours</string>
-  <string id="12394">Temps de Fonctionnement Total</string>
+  <string id="12391">minutes</string>
+  <string id="12392">heures</string>
+  <string id="12393">jours</string>
+  <string id="12394">Temps de fonctionnement total</string>
   <string id="12395">Niveau de batterie</string>
-  
+
   <string id="12600">Météo</string>
-  
+
   <string id="12900">Écran de veille</string>
   <string id="12901">Réglages plein écran</string>
-  
+
   <string id="13000">Système</string>
   <string id="13001">Ralentissement immédiat du DD</string>
   <string id="13002">Vidéo seulement</string>
   <string id="13003">- Délai</string>
   <string id="13004">- Durée minimale du fichier</string>
-  <string id="13005">Eteindre</string>
+  <string id="13005">Éteindre</string>
 
   <string id="13008">Mode d'arrêt par défaut</string>
   <string id="13009">Quitter</string>
   <string id="13014">Minimiser</string>
   <string id="13015">Action du bouton Power</string>
   <string id="13016">Arrêt du système</string>
-  
+
   <string id="13020">Une autre session est en cours, peut être en ssh ?</string>
   <string id="13021">Disque dur externe monté</string>
   <string id="13022">Déconnexion non sécurisée du périphérique</string>
   <string id="13023">Périphérique déconnecté avec succès</string>
   <string id="13024">Manette connectée</string>
   <string id="13025">Manette déconnectée</string>
-  
+
   <string id="13050">Batterie faible</string>
 
   <string id="13100">Filtre de scintillement</string>
   <string id="13109">Tester &amp; appliquer la résolution</string>
   <string id="13110">Appliquer cette résolution ?</string>
   <string id="13111">Voulez-vous garder cette résolution ?</string>
-  
+
   <string id="13112">Upscaling Haute Qualité</string>
   <string id="13113">Désactivé</string>
   <string id="13114">Activé pour contenu SD</string>
   <string id="13115">Toujours activé</string>
-  
+
   <string id="13116">Méthode d'Upscaling</string>
   <string id="13117">Bicubique</string>
   <string id="13118">Lanczos</string>
   <string id="13120">VDPAU</string>
   <string id="13121">VDPAU niveau Upscaling HQ</string>
   <string id="13122">VDPAU niveau Studio conversion des couleurs</string>
-  
+
   <string id="13130">Vider les autres écrans</string>
   <string id="13131">Désactivé</string>
   <string id="13132">Activer Blanking</string>
-  
+
   <string id="13140">Connexions actives détectées !</string>
   <string id="13141">Si vous continuez vous ne serez plus en mesure de</string>
-  <string id="13142"> contrôler XBMC. Etes-vous sur d'arréter le serveur ?</string>
-  
+  <string id="13142"> contrôler XBMC. Êtes-vous sûr d'arrêter le serveur ?</string>
+
   <string id="13144">Changer le mode Apple Remote ?</string>
   <string id="13145">Si vous utilisez actuellement la télécommande Apple pour contrôler</string>
   <string id="13146">XBMC, le changement de ce paramètre peut affecter la capacité</string>
   <string id="13147">à contrôler celui-ci. Effectuer la modification ?</string>
-  
+
   <string id="13159">Masque de sous-réseau</string>
   <string id="13160">Passerelle</string>
   <string id="13161">DNS Primaire</string>
   <string id="13162">Échec lors de l'initialisation</string>
-  
+
   <string id="13170">Jamais</string>
   <string id="13171">Immédiatement</string>
   <string id="13172">Après %i secs</string>
   <string id="13173">HDD Installé le :</string>
-  <string id="13174">HDD Nbr. de cycles marche/arrêt complets :</string>
-  
+  <string id="13174">HDD Nb. de cycles marche/arrêt complets :</string>
+
   <string id="13200">Profils</string>
   <string id="13201">Supprimer le profil '%s' ?</string>
   <string id="13204">Dernier profil chargé</string>
   <string id="13212">Annulé avec %im%is restantes</string>
   <string id="13213">%2.0fm</string> <!--minutes (left from countdown)-->
   <string id="13214">%2.0fs</string> <!--seconds (left from countdown)-->
-  
+
   <string id="13249">Recherche de sous-titres dans les RARs</string>
   <string id="13250">Recherche d'un sous-titre...</string>
   <string id="13251">Déplacer</string>
   <string id="13252">Déplacer ici</string>
   <string id="13253">Annuler le déplacement</string>
-  
+
   <string id="13270">Matériel :</string>
   <string id="13271">Utilisation CPU :</string>
-  
+
   <string id="13274">Connecté, mais aucun DNS disponible.</string>
   <string id="13275">Disque Dur</string>
   <string id="13276">DVD-ROM</string>
-  <string id="13277">Capacités</string>
+  <string id="13277">Stockage</string>
   <string id="13278">Défaut</string>
   <string id="13279">Réseau</string>
   <string id="13280">Vidéo</string>
   <string id="13281">Matériel</string>
-  
+
   <string id="13283">Système d'exploitation :</string>
   <string id="13284">Vitesse du CPU :</string>
 
 
   <string id="13294">Région DVD :</string>
   <string id="13295">Internet :</string>
-  <string id="13296">Connecté</string>
-  <string id="13297">Non connecté. Vérifiez vos paramètres réseau.</string>
+  <string id="13296">connecté</string>
+  <string id="13297">non connecté. Vérifiez vos paramètres réseau.</string>
 
   <string id="13299">Température de consigne</string>
   <string id="13300">Vitesse du ventilateur</string>
   <string id="13305">Afficher les flux RSS</string>
   <string id="13306">Afficher l'accès au répertoire parent</string>
   <string id="13307">Mise en forme des titres</string>
-  <string id="13308">Voulez-vous redémarrer le système ?</string>
+  <string id="13308">Voulez-vous redémarrer le système</string>
   <string id="13309">au lieu de redémarrer simplement XBMC ?</string>
   <string id="13310">Effet de zoom</string>
   <string id="13311">Effet de flottement</string>
   <string id="13342">Orange</string>
   <string id="13343">Rouge</string>
   <string id="13344">Cyclique</string>
-  <string id="13345">Eteindre la LED pendant la lecture</string>
+  <string id="13345">Éteindre la LED pendant la lecture</string>
   <string id="13346">Informations du film</string>
   <string id="13347">Ajouter</string>
   <string id="13348">Chercher sur IMDb...</string>
   <string id="13430">Activer l'accélération matérielle (OpenMax)</string>
   <string id="13431">Pixel Shaders</string>
   <string id="13432">Autoriser l'accélération matérielle (VideoToolbox)</string>
-  
+
   <string id="13500">Méthode de synchro. A/V</string>
   <string id="13501">Horloge audio</string>
   <string id="13502">Horloge vidéo (Drop/Dupe audio)</string>
   <string id="13551">Off</string>
   <string id="13552">%.1f Seconde</string>
   <string id="13553">%.1f Secondes</string>
-  
+
   <string id="13600">Télécommande Apple</string>
-  
+
   <string id="13602">Permettre le démarrage de XBMC par la télécommande</string>
   <string id="13603">Temps de délai de séquence</string>
-  
+
   <string id="13610">Désactivé</string>
   <string id="13611">Standard</string>
   <string id="13612">Télécommande universelle</string>
   <string id="13613">Télécommande multiple (Harmony)</string>
-  
+
   <string id="13620">Erreur Apple Remote.</string>
   <string id="13621">Le support de la télécommande Apple ne peut être activé.</string>
-  
+
   <string id="14000">Empiler</string>
   <string id="14001">Dépiler</string>
   <string id="14003">Téléchargement de la playliste...</string>
   <string id="14005">Scan de la liste des flux...</string>
   <string id="14006">Échec du téléchargement de la liste des flux</string>
   <string id="14007">Échec du téléchargement de la playliste</string>
-  
+
   <string id="14009">Répertoire des jeux</string>
   <string id="14010">Basculement des vignettes basées sur</string>
   <string id="14011">Activer le basculement</string>
   <string id="14034">Cache DVD - DVDRom</string>
   <string id="14035">- Réseau Local</string>
   <string id="14036">Services</string>
-  
+
   <string id="14038">Les paramètres réseau ont été changés</string>
   <string id="14039">Vous venez de modifier les paramètres réseau.</string>
   <string id="14040">Redémarrer XBMC pour appliquer les changements ?</string>
-  <string id="14041">Limitation de la bande passante de la connexion Internet</string>
-  
-  <string id="14043">- Eteindre pendant la lecture</string>
+  <string id="14041">Limiter la bande passante de la connexion Internet</string>
+
+  <string id="14043">- Éteindre pendant la lecture</string>
   <string id="14044">%i min</string>
   <string id="14045">%i sec</string>
   <string id="14046">%i ms</string>
   <string id="14051">Format de l'heure</string>
   <string id="14052">Format de la date</string>
   <string id="14053">Filtres Interface</string>
-  
+
   <string id="14055">Utiliser le scan en tâche de fond</string>
   <string id="14056">Stopper le scan</string>
   <string id="14057">Impossible d'afficher les infos lors du scan</string>
   <string id="14069">Voulez-vous appliquer cette configuration ?</string>
   <string id="14070">Appliquer les changements maintenant</string>
   <string id="14071">Permettre de renommer et supprimer</string>
-  
+
   <string id="14074">Définir le fuseau horaire</string>
   <string id="14075">Ajuster l'horloge pour l'observation auto. de l'heure d'été</string>
   <string id="14076">Ajouter aux favoris</string>
   <string id="14089">Police à utiliser pour les sous-titres</string>
   <string id="14090">Région</string>
   <string id="14091">Jeu de caractères</string>
-  <string id="14092">Debugging</string>
+  <string id="14092">Debogage</string>
   <string id="14093">Sécurité</string>
   <string id="14094">Périphériques</string>
   <string id="14095">Gestion de l'énergie</string>
-  
+
   <string id="15015">Supprimer</string>
   <string id="15016">Jeux</string>
-  
+
   <string id="15019">Ajouter</string>
-  
+
   <string id="15052">Mot de passe</string>
-  
+
   <string id="15100">Médiathèque</string>
   <string id="15101">Base de données</string>
   <string id="15102">* Tous les albums</string>
   <string id="15103">* Tous les artistes</string>
   <string id="15104">* Toutes les chansons</string>
   <string id="15105">* Tous les genres</string>
-  
+
   <string id="15107">Mise en cache...</string>
   <string id="15108">Sons de navigation</string>
   <string id="15109">Skin par défaut</string>
   <string id="15111">- Thème</string>
   <string id="15112">Thème par défaut</string>
-  
+
   <string id="15200">Last.fm</string>
   <string id="15201">Soumettre les chansons à Last.fm</string>
   <string id="15202">Nom d'utilisateur Last.fm</string>
   <string id="15203">Mot de passe Last.fm</string>
-  <string id="15204">Impossible de contacter le serveur : En attente...</string>
+  <string id="15204">Impossible de contacter le serveur : en attente...</string>
   <string id="15205">Merci de mettre à jour XBMC</string>
-  <string id="15206">Autorisation refusée : Vérifiez vos identifiants</string>
-  <string id="15207">Connecté</string>
-  <string id="15208">Non connecté</string>
+  <string id="15206">Autorisation refusée : vérifiez vos identifiants</string>
+  <string id="15207">connecté</string>
+  <string id="15208">non connecté</string>
   <string id="15209">Intervalle de transfert %i</string>
   <string id="15210">Mise en cache %i chansons</string>
   <string id="15211">Transfert...</string>
   <string id="15219">Mot de passe Libre.fm</string>
   <string id="15220">Libre.fm</string>
   <string id="15221">Soumettre un titre</string>
-  
+
   <string id="15250">Soumettre la radio Last.fm à Last.fm</string>
   <string id="15251">Connexion à Last.fm...</string>
   <string id="15252">Sélection de la station...</string>
   <string id="15293">Coups de coeur récents de %name%</string>
   <string id="15294">Bannissements récents par %name%</string>
   <string id="15295">Supprimé des coups de coeur</string>
-  <string id="15296">Dé-bannir</string>
+  <string id="15296">Réhabiliter</string>
   <string id="15297">Voulez-vous supprimer ce morceau de vos coups de coeur ?</string>
-  <string id="15298">Voulez-vous débannir ce morceau ?</string>
-  
+  <string id="15298">Voulez-vous réhabiliter ce morceau ?</string>
+
   <string id="15300">Chemin non trouvé ou invalide</string>
   <string id="15301">Impossible de se connecter au serveur</string>
   <string id="15302">Serveur non trouvé</string>
   <string id="15303">Groupe de travail non trouvé</string>
-  
+
   <string id="15310">Ouverture des sources multi-chemin</string>
   <string id="15311">Chemin :</string>
-  
+
   <string id="16000">Général</string>
-  
+
   <string id="16002">Recherche internet</string>
   <string id="16003">Lecteur</string>
   <string id="16004">Jouer les médias depuis le disque</string>
-  
+
   <string id="16008">Saisissez le nouveau titre</string>
   <string id="16009">Saisissez le nom du film</string>
   <string id="16010">Saisissez le nom du profil</string>
   <string id="16017">Saisissez le nom de votre recherche</string>
   <string id="16018">Aucun</string>
   <string id="16019">Sélection automatique</string>
-  <string id="16020">Dés-entrelacé</string>
+  <string id="16020">Désentrelacé</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (inversé)</string>
   <string id="16023">Méthode d'entrelacement</string>
   <string id="16039">Off</string>
   <string id="16040">Auto</string>
   <string id="16041">On</string>
-  
+
   <string id="16100">Toutes les vidéos</string>
-  <string id="16101">Non vus</string>
+  <string id="16101">Non vues</string>
   <string id="16102">Vues</string>
-  <string id="16103">Marquer comme vu</string>
-  <string id="16104">Marquer comme non vu</string>
+  <string id="16103">Marquer comme vue</string>
+  <string id="16104">Marquer comme non vue</string>
   <string id="16105">Éditer le titre</string>
-  
+
   <string id="16200">Opération annulée</string>
   <string id="16201">La copie a échouée</string>
   <string id="16202">Un ou plusieurs fichiers n’ont pas été copiés</string>
   <string id="16204">Un ou plusieurs fichiers n’ont pas été déplacés</string>
   <string id="16205">La suppression a échoué</string>
   <string id="16206">Un ou plusieurs fichiers n’ont pas été supprimés</string>
-  
+
   <string id="16300">Méthode de mise à l'échelle</string>
   <string id="16301">La plus proche</string>
   <string id="16302">Bilinéaire</string>
   <string id="16324">Software Blend</string>
 
   <string id="16400">Post-processing Vidéo</string>
-  
+
   <string id="17500">Afficher le temps avant la mise en veille</string>
 
   <string id="17997">%i Mo</string>
   <string id="17998">%i heures</string>
   <string id="17999">%i jours</string>
-  
+
   <string id="19000">Changer de canal</string>
-  
+
   <string id="20000">Dossier des enregistrements musique</string>
   <string id="20001">Utiliser un lecteur DVD externe</string>
   <string id="20002">Lecteur DVD externe</string>
   <string id="20003">Dossier des trainers</string>
   <string id="20004">Dossier des captures d'écran</string>
-  
+
   <string id="20006">Dossier des playlistes</string>
   <string id="20007">Enregistrements</string>
   <string id="20008">Captures d'écran</string>
   <string id="20009">Utiliser XBMC</string>
-  
+
   <string id="20011">Playlistes musicales</string>
   <string id="20012">Playlistes vidéo</string>
   <string id="20013">Voulez-vous lancer le jeu ?</string>
   <string id="20017">Locale</string>
   <string id="20018">Aucune</string>
   <string id="20019">Choisir une vignette</string>
-  
+
   <!-- string id 20022 will always be set to an empty string (LocalizeStrings.cpp)-->
   <string id="20022"></string>
   <string id="20023">Conflit</string>
   <string id="20024">Scanner les nouveaux</string>
   <string id="20025">Tout scanner</string>
   <string id="20026">Région</string>
-  
+
   <!-- string id's 20027 thru 20034 are reserved for temperature strings (LocalizeStrings.cpp)-->
 
   <string id="20037">Sommaire</string>
-  <string id="20038">Vérouiller la section Musique</string>
-  <string id="20039">Vérouiller la section Vidéo</string>
-  <string id="20040">Vérouiller la section Images</string>
-  <string id="20041">Vérouiller Programmes, Sauvegardes et Scripts</string>
-  <string id="20042">Vérouiller le gestionnaire de fichiers</string>
-  <string id="20043">Vérouiller les paramètres</string>
+  <string id="20038">Verrouiller la section Musique</string>
+  <string id="20039">Verrouiller la section Vidéo</string>
+  <string id="20040">Verrouiller la section Images</string>
+  <string id="20041">Verrouiller Programmes, Sauvegardes et Scripts</string>
+  <string id="20042">Verrouiller le gestionnaire de fichiers</string>
+  <string id="20043">Verrouiller les paramètres</string>
   <string id="20044">Nouvelle configuration</string>
   <string id="20045">Entrer en mode Admin.</string>
   <string id="20046">Sortir du mode Admin.</string>
   <string id="20053">Vous quittez le mode Admin.</string>
   <string id="20054">Vous entrez en mode Admin.</string>
   <string id="20055">Vignette Allmusic.com</string>
-  
+
   <string id="20057">Supprimer la vignette</string>
   <string id="20058">Ajouter un profil...</string>
   <string id="20059">Infos pour tous les albums</string>
   <string id="20110">Paramètres UPnP</string>
   <string id="20111">Démarrage auto. du client UPnP</string>
   <string id="20112">Dernière connexion : %s</string>
-  <string id="20113">Jamais connecté</string>
+  <string id="20113">jamais connecté</string>
   <string id="20114">Profil %i / %i</string>
   <string id="20115">Connexion utilisateur / Choix du profil</string>
   <string id="20116">Utiliser le verrou sur l'écran de connexion</string>
   <string id="20137">Unité mémoire montée</string>
   <string id="20138">Impossible de monter l'unité mémoire</string>
   <string id="20139">Dans le port %i, emplacement %i</string>
-  <string id="20140">Vérouiller l'écran de veille</string>
+  <string id="20140">Verrouiller l'écran de veille</string>
   <string id="20141">Choisir</string>
   <string id="20142">Nom d'utilisateur</string>
   <string id="20143">Entrer le mot de passe pour</string>
   <string id="20149">Extinction dans 120 minutes</string>
   <string id="20150">Minuteur d'extinction personnalisé</string>
   <string id="20151">Annuler le minuteur d'extinction</string>
-  <string id="20152">Vérouiller les préférences pour %s</string>
+  <string id="20152">Verrouiller les préférences pour %s</string>
   <string id="20153">Parcourir...</string>
   <string id="20154">Résumé des informations</string>
   <string id="20155">Infos de stockage</string>
   <string id="20190">Personnaliser</string>
   <string id="20191">Activer le mode debug</string>
   <string id="20192">Télécharger les infos supplémentaires lors des mises à jour</string>
-  <string id="20193">Service d'informations par défaut - Album</string>  
+  <string id="20193">Service d'informations par défaut - Album</string>
   <string id="20194">Service d'informations par défaut - Artiste</string>
   <string id="20195">Changer le scraper</string>
   <string id="20196">Exporter la médiathèque musicale</string>
   <string id="20197">Importer une médiathèque musicale</string>
   <string id="20198">Aucun artiste trouvé !</string>
   <string id="20199">Échec du téléchargement des infos Artiste</string>
-  
+
   <!-- string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)-->
 
   <string id="20250">C'est Party ! (vidéos)</string>
   <string id="20251">Barman au shaker (vidéos)</string>
   <string id="20252">Remplissage des verres (vidéos)</string>
-  <string id="20253">Server WebDAV (HTTP)</string>
-  <string id="20254">Server WebDAV (HTTPS)</string>
+  <string id="20253">Serveur WebDAV (HTTP)</string>
+  <string id="20254">Serveur WebDAV (HTTPS)</string>
   <string id="20255">Première connexion, modifier votre profil</string>
   <string id="20256">Client HTS Tvheadend</string>
   <string id="20257">Client VDR Streamdev</string>
   <string id="20259">Network Filesystem (NFS)</string>
   <string id="20260">Secure Shell (SSH/SFTP)</string>
   <string id="20261">Apple File Protocol (AFP)</string>
-   
+
   <string id="20300">Dossier Server Web (HTTP)</string>
   <string id="20301">Dossier Server Web (HTTPS)</string>
   <string id="20302">Impossible d'écrire dans le dossier</string>
   <string id="20303">Voulez-vous passer et continuer ?</string>
   <string id="20304">Flux RSS</string>
-  
+
   <string id="20307">DNS secondaire</string>
   <string id="20308">Serveur DHCP</string>
   <string id="20309">Créer un nouveau dossier</string>
   <string id="20326">Ceci remettra à zéro les valeurs de calibrage pour %s</string>
   <string id="20327">aux valeurs par défaut.</string>
   <string id="20328">Parcourir pour une destination</string>
-  
+  <string id="20329">Chaque film dans un dossier séparé, libellé avec son titre</string>
   <string id="20330">Consultation avec les noms des dossiers</string>
   <string id="20331">Fichier</string>
-  <string id="20332">Utiliser le nom des dossiers ou fichiers pour la consultation</string>
+  <string id="20332">Utiliser le nom des dossiers ou fichiers pour la consultation ?</string>
   <string id="20333">Catégorie</string>
   <string id="20334">Dossier</string>
   <string id="20335">Rechercher le contenu de façon récursive ?</string>
-  <string id="20336">Dévérouiller les sources</string>
+  <string id="20336">Déverrouiller les sources</string>
   <string id="20337">Acteur</string>
   <string id="20338">Film</string>
   <string id="20339">Réalisateur</string>
   <string id="20353">Chargement des détails de la série TV</string>
   <string id="20354">Recherche du guide de l'épisode</string>
   <string id="20355">Chargement des infos pour les épisodes dans le répertoire</string>
-  <string id="20356">Choisir la série TV:</string>
+  <string id="20356">Choisir la série TV :</string>
   <string id="20357">Entrer le nom de la Série TV</string>
   <string id="20358">Saison %i</string>
   <string id="20359">Épisode</string>
   <string id="20401">Jouer le clip</string>
   <string id="20402">Télécharger les vignettes d'acteurs lors de l'ajout à la médiathèque</string>
   <string id="20403">Définir la vignette Acteur</string>
-  
+
   <string id="20405">Supprimer le signet d'épisode</string>
   <string id="20406">Créer un signet d'épisode</string>
   <string id="20407">Paramètres du scraper</string>
   <string id="20415">Recherche de nouveaux contenus</string>
   <string id="20416">Diffusion</string>
   <string id="20417">Scénariste</string>
-  <string id="20418">Nettoyer les noms de fichiers et dossiers</string>
+  <string id="20418"></string>
   <string id="20419">Montrer les métadonnées en vue fichiers</string>
 
   <string id="20420">Jamais</string>
   <string id="20431">Écraser les anciens fichiers ?</string>
   <string id="20432">Exclure le chemin de la MAJ médiathèque</string>
   <string id="20433">Extraire les vignettes et les informations vidéo</string>
-  <string id="20434">Groupes</string>
+  <string id="20434">Sagas</string>
   <string id="20435">Définir une vignette de saga</string>
   <string id="20436">Exporter les vignettes acteur</string>
   <string id="20437">Choisir un fanart</string>
-  <string id="20438">Locale</string>
+  <string id="20438">En local</string>
   <string id="20439">Aucun</string>
   <string id="20440">Actuel</string>
-  <string id="20441">Internet</string>
+  <string id="20441">En ligne</string>
   <string id="20442">Changer de catégorie</string>
   <string id="20443">Voulez-vous rafraîchir les infos pour</string>
   <string id="20444">tous les articles de ce chemin ?</string>
   <string id="20452">épisode</string>
   <string id="20453">épisodes</string>
   <string id="20454">Auditeur</string>
-  <string id="20455">Auditeurs</string>  
+  <string id="20455">Auditeurs</string>
   <string id="20456">Choisir le Fanart de la saga</string>
   <string id="20457">Saga</string>
-  <!-- up to 21329 is reserved for the video db !! !-->
+  <string id="20458">Grouper les films en saga</string>
+  <!-- up to 21329 is reserved for the video db  !!  !-->
 
   <string id="21330">Afficher les dossiers et les fichiers cachés</string>
-  
+
   <string id="21331">Client TuxBox</string>
-  <string id="21332">AVERTISSEMENT : Le dispositif TuxBox est en mode d'enregistrement !</string>
+  <string id="21332">AVERTISSEMENT : le dispositif TuxBox est en mode d'enregistrement !</string>
   <string id="21333">Le flux sera arrêté !</string>
   <string id="21334">Le zap du canal : %s a échoué !</string>
   <string id="21335">Êtes-vous sûr de débuter le flux ?</string>
   <string id="21336">Connexion à : %s</string>
   <string id="21337">Dispositif TuxBox</string>
-  <!-- up to 21355 is reserved for the TuxBox Client!! !-->
+  <!-- up to 21355 is reserved for the TuxBox Client !!  !-->
 
   <string id="21359">Ajouter un partage média...</string>
   <string id="21360">Partager les médiathèques vidéos et musique via l'UPnP</string>
-  
+
   <string id="21364">Éditer le partage média</string>
   <string id="21365">Effacer le partage média</string>
   <string id="21366">Dossier de sous-titres</string>
   <string id="21367">Film &amp; dossier alternatif de sous-titres</string>
-  
-  <string id="21369">Activer la souris</string>
+  <string id="21368">Outrepasser les polices de sous-titres ASS/SSA</string>
+  <string id="21369">Activer la souris et le mode tactile</string>
   <string id="21370">Sons de la navigation lors de la lecture des médias</string>
   <string id="21371">Vignette</string>
   <string id="21372">Forcer la région du lecteur DVD</string>
   <string id="21451">Connexion Internet requise.</string>
   <string id="21452">Plus...</string>
   <string id="21453">Racine</string>
+  <string id="21454">Cache plein</string>
+  <string id="21455">Cache rempli mais insuffisant pour une lecture continue</string>
 
   <string id="21460">Emplacement du sous-titre</string>
   <string id="21461">Fixe</string>
   <string id="21463">Sous la vidéo</string>
   <string id="21464">En haut de la vidéo</string>
   <string id="21465">Au-dessus de la vidéo</string>
-  
+
   <string id="21800">Nom du fichier</string>
   <string id="21801">Répertoire du fichier</string>
   <string id="21802">Taille du fichier</string>
   <string id="21806">Commentaire</string>
   <string id="21807">Couleur/N&amp;B</string>
   <string id="21808">Traitement JPEG</string>
-  
+
   <string id="21820">Date/Heure</string>
   <string id="21821">Description</string>
   <string id="21822">Marque de l'appareil</string>
   <string id="21841">Longitude GPS</string>
   <string id="21842">Altitude GPS</string>
   <string id="21843">Orientation</string>
-  
+
   <string id="21860">Catégories supplémentaires</string>
   <string id="21861">Mots-clés</string>
   <string id="21862">Légende</string>
   <string id="21898">Années actives</string>
   <string id="21899">Label(s)</string>
   <string id="21900">Naissance/Création</string>
-  
+
   <!-- strings 21900 thru 21999 reserved for slideshow info -->
 
   <string id="22000">Actualiser la médiathèque au démarrage</string>
   <string id="22001">Masquer l'avancement lors de la màj de la mediathèque</string>
   <string id="22002">- Suffixe DNS</string>
-  
-  <string id="22003">%2.3fs</string>  
+
+  <string id="22003">%2.3fs</string>
   <string id="22004">Retarder de : %2.3fs</string>
   <string id="22005">Avancer de : %2.3fs</string>
   <string id="22006">Décalage sous-titres</string>
   <string id="22022">Afficher les fichiers vidéo dans les listes</string>
   <string id="22023">Vendor DirectX :</string>
   <string id="22024">Version Direct3D :</string>
-  
+
   <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">Police</string>
   <string id="22031">- Taille</string>
   <string id="22081">Afficher Infos</string>
   <string id="22082">Plus...</string>
   <string id="22083">Tout jouer</string>
-  
+
   <string id="23049">Teletext non disponible</string>
   <string id="23050">Activer le télétexte</string>
   <string id="23051">Partie %i</string>
   <string id="23052">%i octets mis en cache</string>
-  <string id="23053">En cours d'arrêts</string>
+  <string id="23053">Arrêt en cours</string>
   <string id="23054">Lecture en cours</string>
-  
+
   <!-- strings 23100 thru 23150 reserved for external player -->
   <string id="23100">Lecteur externe actif</string>
   <string id="23101">Cliquez sur OK pour arrêter le lecteur</string>
-  
+
   <string id="23104">Cliquez sur OK lorsque la lecture est terminée</string>
-  
+
   <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
   <string id="24000">Add-on</string>
   <string id="24001">Add-ons</string>
   <string id="24002">Options Add-on</string>
   <string id="24003">Infos Add-on</string>
-  
+
   <string id="24005">Sources media</string>
   <string id="24007">Infos Film</string>
-  <string id="24008">Ecran de veille</string>
+  <string id="24008">Écran de veille</string>
   <string id="24009">Script</string>
   <string id="24010">Visualisation</string>
   <string id="24011">Dépots d'add-ons</string>
   <string id="24016">Infos album</string>
   <string id="24017">Infos artiste</string>
   <string id="24018">Services</string>
-  
+
   <string id="24020">Configurer</string>
   <string id="24021">Désactiver</string>
   <string id="24022">Activer</string>
   <string id="24065">Add-ons à jour</string>
   <string id="24066">Annuler le téléchargement ?</string>
   <string id="24067">Téléchargements en cours</string>
-  <string id="24068">Mise à jour disponible</string>
-  <string id="24069">Mise à jour</string>
-  
+  <string id="24068">Mise-à-jour disponible</string>
+  <string id="24069">Mise-à-jour</string>
+
   <string id="24070">L'Add-on n'a pu être chargé.</string>
-  <string id="24071">Une erreur inconnue a eu lieu.</string>
+  <string id="24071">Une erreur inconnue rencontrée.</string>
   <string id="24072">Paramètres obligatoires</string>
-  <string id="24073">Connection impossible</string>
+  <string id="24073">Connexion impossible</string>
   <string id="24074">Redémarrage requis</string>
   <string id="24075">Désactiver</string>
+  <string id="24076">Add-on requis</string>
   <string id="24080">Tenter la reconnexion ?</string>
   <string id="24089">Redémarrage de l'Add-on</string>
-  <string id="24090">Vérouiller le gestionnaire d'Add-on</string>
-  
+  <string id="24090">Verrouiller le gestionnaire d'Add-on</string>
+
   <string id="24094">(actuel)</string>
-  <string id="24095">(blacklisté)</string>
-  <string id="24096">L'Add-on est indiqué non-fonctionnel dans le dépot.</string>
+  <string id="24095">(sur liste noire)</string>
+  <string id="24096">Le dépot indique cet add-on comme inutilisable.</string>
   <string id="24097">Voulez-vous le désactiver sur votre système ?</string>
   <string id="24098">Cassé</string>
-  <string id="24099">Voulez-vous basculer vers ce thème?</string>
+  <string id="24099">Voulez-vous basculer vers ce thème ?</string>
+  <string id="24100">Pour utiliser cette fonctionnalité, vous devez télécharger un Add-on :</string>
+  <string id="24101">Voulez-vous télécharger cet Add-on ?</string>
   <string id="25000">Notifications</string>
-  
+
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29800">Médiathèque</string>
   <string id="29801">Clavier QWERTY</string>
   <string id="29802">Passthrough Audio en cours</string>
-  
+
   <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
   <!-- strings 31000 thru 31999 reserved for skins -->
   <!-- strings 32000 thru 32999 reserved for scripts -->
   <!-- strings 33000 thru 33999 reserved for common strings used in Add-ons -->
-  <string id="30011">Chercher la durée</string>
   <string id="33001">Qualité du trailer</string>
   <string id="33002">Flux</string>
   <string id="33003">Télécharger</string>
   <string id="33008">Enregistrement en cours</string>
   <string id="33009">Copie en cours</string>
   <string id="33010">Définir le répertoire de téléchargement</string>
+  <string id="33011">Durée de la recherche</string>
   <string id="33012">Court</string>
   <string id="33013">Long</string>
   <string id="33014">Utiliser le lecteur DVD au lieu du lecteur habituel</string>
   <string id="33081">Ce fichier est empilé, sélectionnez la partie que vous souhaitez lire.</string>
   <string id="33082">Chemin du script</string>
   <string id="33083">Activer le bouton de script personnalisé</string>
-  
-  <string id="33100">Echec du lancement</string>
+
+  <string id="33100">Échec du lancement</string>
   <string id="33101">Serveur Web</string>
-  <string id="33102">Evènement serveur</string>
+  <string id="33102">Serveur d'évènement</string>
   <string id="33103">Communication à distance avec le serveur</string>
 
+  <string id="33200">Nouvelle connexion détectée</string>
+
   <!-- translators : no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
   <string id="34003">DXVA2</string>
   <string id="34004">VAAPI</string>
   <string id="34005">Flac</string>
-  
+
   <string id="34100">Configuration des Haut-Parleurs</string>
   <string id="34101">2.0</string>
   <string id="34102">2.1</string>
 
   <string id="34201">Aucun média à suivre</string>
   <string id="34202">Aucun média précédent</string>
+
+  <string id="34300">Échec du démarrage zeroconf</string>
+  <string id="34301">Est-ce que le service d'Apple Bonjour est installé ? Consultez le log pour plus d'infos.</string>
+
+  <string id="34400">Rendu Vidéo</string>
+  <string id="34401">Échec du filtre/redimensionnement vidéo, utilisation du redimensionnement bilinéaire à la place</string>
+  <string id="34402">Échec d'initialisation du périphérique audio</string>
+  <string id="34403">Vérifiez vos paramètres audio</string>
+
+  <string id="35000">Périphériques</string>
+
+  <string id="35001">Périphérique HID générique</string>
+  <string id="35002">Adaptateur réseau générique</string>
+  <string id="35003">Disque générique</string>
+  <string id="35004">Pas de paramètres possibles&#10;pour ce périphérique.</string>
+  <string id="35005">Nouveau dispositif configuré</string>
+  <string id="35006">Dispositif retiré</string>
+  <string id="35007">Mappage clavier à utiliser pour ce dispositif</string>
+  <string id="35008">Mappage clavier activé</string>
+
+  <string id="35500">Emplacement</string>
+  <string id="35501">Classe</string>
+  <string id="35502">Nom</string>
+  <string id="35503">Vendor</string>
+  <string id="35504">ID du produit</string>
+
+  <string id="36000">Adaptateur CEC Pulse-Eight</string>
+  <string id="36001">Nyxboard Pulse-Eight</string>
+  <string id="36002">Basculer le contrôle côté clavier</string>
+  <string id="36003">Basculer le contrôle côté télécommande</string>
+  <string id="36004">Appuyer sur le bouton de commande "user"</string>
+  <string id="36005">Activer les contrôles de bascule</string>
+  <string id="36006">Impossible d'ouvrir l'adaptateur</string>
+  <string id="36007">Allumer la TV au démarrage de XBMC</string>
+  <string id="36008">Éteindre les dispositifs à l'arrêt de XBMC</string>
+  <string id="36009">Placer les dispositifs en veille si l'écran de veille est activé</string>
+  <string id="36010"></string>
+  <string id="36011">Impossible de détecter le port CEC. Le paramétrer manuellement.</string>
+  <string id="36012">Impossible de détecter l'adaptateur CEC.</string>
+  <string id="36013">Version de l'interface libcec non-supportée. %d est plus grand que le version supportée par XBMC (%d)</string>
+  <string id="36014">Placer ce PC en veille lorsque la TV est éteinte</string>
+  <string id="36015">Numéro de port HDMI</string>
+  <string id="36016">Connecté</string> <!-- max. 13 characters -->
+  <string id="36017">Adaptateur trouvé, mais libcec indisponible</string>
+  <string id="36018">Utiliser le paramètre de langage de la TV.</string>
 </strings>
index 43d622a..0bca3e0 100644 (file)
   <string id="787">Karte deaktiviert</string>
   <string id="788">Netzwerkkarte erfolgreich deaktiviert.</string>
   <string id="789">Wireless Netzwerkname (ESSID)</string>
+  <string id="790">Fernsteuerung</string>
 
   <string id="791">Steuerung über lokale Programme zulassen</string>
   <string id="792">Port</string>
   <string id="1422">Windig</string>
   <string id="1423">Dunst</string>
 
-  <string id="1450">Aktiviere Energiesparmodus bei Leerlauf</string>
+  <string id="1450">Energiesparmodus des Bildschirms aktivieren</string>
 
-  <string id="2050">Länge</string>
+  <string id="2050">Laufzeit</string>
 
   <string id="2100">Script-Fehler! : %s</string>
   <string id="2101">Neuere Version benötigt - Siehe Logfile</string>
   <string id="10021">Webbrowser</string>
 
   <string id="10028">Videos/Playlisten</string>
+  <string id="10029">Anmeldebildschirm</string>
   <string id="10034">Einstellungen-&gt;Profile</string>
+  <string id="10040">Addon-Browser</string>
 
   <string id="10100">Ja/Nein Dialog</string>
   <string id="10101">Fortschrittsanzeige</string>
   <string id="13409">Top 250</string>
   <string id="13410">Last.fm einschalten</string>
   <string id="13411">Minimale Lüftergeschwindigkeit</string>
-
+  <string id="13412">Ab hier abspielen</string>
   <string id="13413">Herunterladen</string>
   <string id="13414">Interpreten anzeigen die nur in Zusammenstellungen vorkommen</string>
   <string id="13415">Render-Methode</string>
   <string id="20326">Dies setzt den Kalibrierwert für %s</string>
   <string id="20327">auf den Standardwert zurück</string>
   <string id="20328">Nach einem Speicherort durchsuchen...</string>
+  <string id="20329">Filme sind in seperaten Ordnern, welche Filmtitel entsprechen</string>
 
   <string id="20330">Ordnernamen für Anfragen verwenden</string>
   <string id="20331">Dateinamen</string>
   <string id="20383">Ordner enthält ein einziges Video</string>
   <string id="20384">Link zur TV-Serie</string>
   <string id="20385">Link zur TV-Serie entfernen</string>
-  <string id="20386">Kürzlich hinzugefügte Filme</string>
-  <string id="20387">Kürzlich hinzugefügte Episoden</string>
+  <string id="20386">Neu hinzugefügte Filme</string>
+  <string id="20387">Neu hinzugefügte Episoden</string>
   <string id="20388">Studios</string>
   <string id="20389">Musikvideos</string>
-  <string id="20390">Kürzlich hinzugefügte Musikvideos</string>
+  <string id="20390">Neu hinzugefügte Musikvideos</string>
   <string id="20391">Musikvideo</string>
   <string id="20392">Musikvideos aus Datenbank entfernen</string>
   <string id="20393">Musikvideo-Informationen</string>
   <string id="20416">Erstausstrahlung</string>
   <string id="20417">Autor</string>
   <string id="20418"></string>
-  <string id="20419">Metadaten im Datei-Modus anzeigen</string>
+  <string id="20419">Ersetze Dateinamen durch Datenbankeinträge</string>
 
   <string id="20420">Nie</string>
   <string id="20421">Nur bei einer Staffel</string>
 
   <string id="20456">Filmset Fanart setzen</string>
   <string id="20457">Zusammenstellung</string>
+  <string id="20458">Gruppiere Filme nach Zusammenstellungen</string>
 
   <string id="21330">Versteckte Ordner und Dateien anzeigen</string>
   <string id="21331">TuxBox Client</string>
   <string id="21366">Alternatives Untertitel-Verzeichnis</string>
   <string id="21367">Video- &amp; alternatives Untertitel-Verzeichnis</string>
 
-  <string id="21369">Maus aktivieren</string>
+  <string id="21368">ASS/SSA Untertitel Schriftarten ignorieren</string>
+  <string id="21369">Maus und Touchscreen Unterstützung aktivieren</string>
   <string id="21370">Navigations-Sounds während Medienwiedergabe aktivieren</string>
   <string id="21371">Thumbnail</string>
   <string id="21372">Erzwungene DVD-Player Region</string>
   <string id="21451">Internetverbindung benötigt.</string>
   <string id="21452">Mehr...</string>
   <string id="21453">Root Dateisystem</string>
+  <string id="21454">Cache voll</string>
+  <string id="21455">Cache gefüllt bevor ausreichende Datenmenge für ruckelfreie Wiedergabe erreicht wurde</string>
 
   <string id="21460">Position der Untertitel</string>
   <string id="21461">Fixiert</string>
   <string id="33081">Diese Datei ist gestapelt, wähle den Teil der abgespielt werden soll.</string>
   <string id="33082">Skriptpfad</string>
   <string id="33083">Benutzerdefinierten Skript Button aktivieren</string>
-
+  <string id="33200">Neue Verbindung erkannt</string>
   <string id="34100">Lautsprecherkonfiguration</string>
+
+  <string id="34201">Nächstes Element konnte nicht gefunden werden</string>
+  <string id="34202">Vorheriges Element konnte nich gefunden werden</string>
+  <string id="34300">zeroconf konnte nicht gestartet werden</string>
+  <string id="34301">Ist der Bonjour Service von Apple installiert? Log-File einsehen für mehr Info</string>
+  
+  <string id="34400">Video Rendering</string>
+  <string id="34401">Videofilter/-scaler konnte nicht initialisiert werden! Verwende Bilineares Scaling</string>
+  <string id="34402">Audiogerät konnte nicht initialisiert werden</string>
+  <string id="34403">Audio-Einstellungen überprüfen</string>
+  <string id="35000">Geräte</string>
+
+  <string id="35001">HID-Gerät</string>
+  <string id="35002">Netzwerkadapter</string>
+  <string id="35003">Festplatte</string>
+  <string id="35004">Für dieses Gerät sind keine Einstellungen verfügbar</string>
+  <string id="35005">Neues Gerät konfiguriert</string>
+  <string id="35006">Gerät entfernt</string>
+  <string id="35007">Tastenbelegung für dieses Gerät</string>
+  <string id="35008">Tastenbelegung aktiviert</string>
+
+  <string id="35500">Ort</string>
+  <string id="35501">Klasse</string>
+  <string id="35502">Name</string>
+  <string id="35503">Hersteller</string>
+  <string id="35504">Produkt ID</string>
+
+  <string id="36000">Pulse-Eight CEC Adapter</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Befehl beim Wechsel zur Tastatur-Seite</string>
+  <string id="36003">Befehl beim Wechsel zur Fernbedienungs-Seite</string>
+  <string id="36004">Befehl der benutzerdefinierten Taste (USER)</string>
+  <string id="36005">Seitenwechsel Befehle aktivieren</string>
+  <string id="36006">Der Adapter konnte nicht geöffnet werden</string>
+  <string id="36007">Geräte anschalten wenn XBMC startet</string>
+  <string id="36008">Geräte ausschalten wenn XBMC beendet wird</string>
+  <string id="36009">Geräte in den Standby versetzen wenn der Bilschirmschoner aktiviert wird</string>
+  <string id="36010"></string>
+  <string id="36011">Der CEC Port konnte nicht gefunden werden. Manuell einstellen.</string>
+  <string id="36012">Der CEC Adapter konnte nicht gefunden werden.</string>
+  <string id="36013">Nicht unterstützte libcec Version. %d ist größer als die von XBMC unterstützte Version (%d)</string>
+  <string id="36014">PC in den Standby versetzen wenn der Fernseher ausgeschaltet wird</string>
+  <string id="36015">HDMI Port Nummer</string>
+  <string id="36016">Verbunden</string> <!-- max. 13 characters -->
+  <string id="36017">CEC Adapter gefunden, aber libcec ist nicht verfügbar</string>
+  <string id="36018">Spracheinstellung des Fernsehers in XBMC nutzen</string>
 </strings>
index c6f21ef..6a4b790 100644 (file)
@@ -1,13 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--Language file translated with Team XBMC Translator-->
-<!--Translator: Ydatografida-->
-<!--Email: ydatografida@gmail.com-->
-<!--Date of translation: 08/21/2011-->
-<!--$Revision$-->
-<!--Based on english strings version 1E+42-->
+<!--$Revision$--> <!--Original translator: Ydatografida (ydatografida@gmail.com) / Last update (by CutSickAss): 23/03/2012 -->
 <strings>
   <string id="0">Εφαρμογές</string>
-  <string id="1">ΦÏ\89Ï\84ογÏ\81αÏ\86ίες</string>
+  <string id="1">Î\95ικÏ\8cνες</string>
   <string id="2">Μουσική</string>
   <string id="3">Βίντεο</string>
   <string id="4">Οδηγός τηλεόρασης</string>
@@ -16,6 +11,7 @@
   <string id="7">Διαχείριση αρχείων</string>
   <string id="8">Καιρός</string>
   <string id="9">xbmc media center</string>
+
   <string id="11">Δευτέρα</string>
   <string id="12">Τρίτη</string>
   <string id="13">Τετάρτη</string>
@@ -23,6 +19,7 @@
   <string id="15">Παρασκευή</string>
   <string id="16">Σάββατο</string>
   <string id="17">Κυριακή</string>
+
   <string id="21">Ιανουαρίου</string>
   <string id="22">Φεβρουαρίου</string>
   <string id="23">Μαρτίου</string>
@@ -35,6 +32,7 @@
   <string id="30">Οκτωβρίου</string>
   <string id="31">Νοεμβρίου</string>
   <string id="32">Δεκεμβρίου</string>
+
   <string id="41">Δευ</string>
   <string id="42">Τρι</string>
   <string id="43">Τετ</string>
@@ -42,6 +40,7 @@
   <string id="45">Παρ</string>
   <string id="46">Σαβ</string>
   <string id="47">Κυρ</string>
+
   <string id="51">Ιαν</string>
   <string id="52">Φεβ</string>
   <string id="53">Μαρ</string>
@@ -54,6 +53,7 @@
   <string id="60">Οκτ</string>
   <string id="61">Νοε</string>
   <string id="62">Δεκ</string>
+
   <string id="71">Β</string>
   <string id="72">ΒΒΑ</string>
   <string id="73">ΒΑ</string>
   <string id="85">ΒΔ</string>
   <string id="86">ΒΒΔ</string>
   <string id="87">ΔΙΑΦ</string>
+
   <string id="98">Προβολή: Αυτόματη</string>
   <string id="99">Προβολή: Εικόνες</string>
   <string id="100">Προβολή: Εικονίδια</string>
   <string id="101">Προβολή: Λίστα</string>
   <string id="102">Σάρωση</string>
-  <string id="103">Ταξιν.: Όνομα</string>
-  <string id="104">Ταξιν.: Ημ/νία</string>
-  <string id="105">Ταξιν.: Μέγεθος</string>
+  <string id="103">Ταξ.: Όνομα</string>
+  <string id="104">Ταξ.: Ημ/νία</string>
+  <string id="105">Ταξ.: Μέγεθος</string>
   <string id="106">Όχι</string>
   <string id="107">Ναι</string>
-  <string id="108">Παρουσίαση</string>
+  <string id="108">Παρουσίαση διαφανειών</string>
   <string id="109">Δημιουργία εικονιδίων</string>
   <string id="110">Δημιουργία μικρογραφιών</string>
   <string id="111">Συντομεύσεις</string>
   <string id="126">Λειτουργία</string>
   <string id="127">Αντικείμενα</string>
   <string id="128">Γενικά</string>
-  <string id="129">Παρουσίαση</string>
+  <string id="129">Παρουσίαση διαφανειών</string>
   <string id="130">Πληροφορίες συστήματος</string>
   <string id="131">Απεικόνιση</string>
   <string id="132">Άλμπουμ</string>
   <string id="140">CPU:</string>
   <string id="141">GPU:</string>
   <string id="142">Ώρα:</string>
-  <string id="143">Î\98εÏ\81μοκÏ\81αÏ\83ία:</string>
+  <string id="143">ΤÏ\81έÏ\87οÏ\85Ï\83α:</string>
   <string id="144">Έκδοση:</string>
   <string id="145">Δίκτυο:</string>
   <string id="146">Τύπος:</string>
   <string id="147">Στατική</string>
   <string id="148">DHCP</string>
-  <string id="149">ΦÏ\85Ï\83ική Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η</string>
+  <string id="149">Î\94ιεÏ\8dθÏ\85νÏ\83η MAC</string>
   <string id="150">Διεύθυνση IP</string>
   <string id="151">Σύνδεση:</string>
   <string id="152">Μονόδρομη</string>
   <string id="159">Καμία σύνδεση</string>
   <string id="160">Ελεύθερα</string>
   <string id="161">Μη διαθέσιμο</string>
-  <string id="162">Î\86νοιγμα Î¼Î¿Î½Î¬Î´Î±Ï\82</string>
+  <string id="162">Î\98Ï\8dÏ\81α Î´Î¯Ï\83κοÏ\85 Î±Î½Î¿Î¹ÎºÏ\84ή</string>
   <string id="163">Ανάγνωση</string>
   <string id="164">Δεν υπάρχει δίσκος</string>
   <string id="165">Υπάρχει δίσκος</string>
   <string id="166">Κέλυφος</string>
+
   <string id="169">Ανάλυση</string>
-  <string id="170">Προσαρμογή του ρυθμού ανανέωσης</string>
+  <string id="170">Προσαρμογή του ρυθμού ανανέωσης για να ταιριάζει με το βίντεο</string>
+
   <string id="172">Ημερομηνία κυκλοφορίας</string>
   <string id="173">Προβολή των βίντεο με αναλογία 4:3 ως</string>
-  <string id="175">Διάθεση</string>
+
+  <string id="175">Τάσεις</string>
   <string id="176">Στυλ</string>
+
   <string id="179">Τραγούδι</string>
   <string id="180">Διάρκεια</string>
   <string id="181">Επιλογή άλμπουμ</string>
   <string id="194">Αναζήτηση...</string>
   <string id="195">Δεν βρέθηκαν πληροφορίες!</string>
   <string id="196">Επιλογή ταινίας:</string>
-  <string id="197">Î\91ναζήÏ\84ηση πληροφοριών %s</string>
+  <string id="197">Î\95Ï\8dÏ\81εση πληροφοριών %s</string>
   <string id="198">Φόρτωση πληροφοριών ταινίας</string>
   <string id="199">Διεπαφή ιστού</string>
-  <string id="202">Σύνθημα</string>
+
+  <string id="202">Σλόγκαν</string>
   <string id="203">Περίληψη πλοκής</string>
+
   <string id="205">Ψήφοι</string>
-  <string id="206">ΡÏ\8cλοι ÎºÎ±Î¹ Î·Î¸Î¿Ï\80οιοί</string>
+  <string id="206">Î\94ιανομή Ï\81Ï\8cλÏ\89ν</string>
   <string id="207">Πλοκή</string>
   <string id="208">Εκκίνηση</string>
   <string id="209">Επόμενο</string>
   <string id="210">Προηγούμενο</string>
-  <string id="213">Βαθμονόμηση οθόνης</string>
-  <string id="214">Βαθμονόμηση βίντεο</string>
+  <string id="213">Βαθμονόμηση οθόνης...</string>
+  <string id="214">Βαθμονόμηση βίντεο...</string>
   <string id="215">Απάλυνση εικόνας</string>
   <string id="216">Ποσοστό μεγέθυνσης</string>
   <string id="217">Λόγος εικονοστοιχείων</string>
   <string id="218">Μονάδα DVD</string>
-  <string id="219">Παρακαλώ, εισάγετε δίσκο</string>
+  <string id="219">Παρακαλώ εισάγετε δίσκο</string>
   <string id="220">Απομακρυσμένος κοινόχρηστος πόρος</string>
   <string id="221">Το δίκτυο είναι αποσυνδεμένο</string>
   <string id="222">Άκυρο</string>
   <string id="225">Κατακόρυφη μετατόπιση</string>
   <string id="226">Δοκιμή μοτίβων...</string>
   <string id="227">Αναζήτηση ονομάτων μουσικών κομματιών από το freedb.org</string>
-  <string id="228">Î\91νακάÏ\84εμα Î»Î¯Ï\83Ï\84αÏ\82 Î±Î½Î±Ï\80αÏ\81αγÏ\89γήÏ\82 ÎºÎ±Ï\84α τη φόρτωση</string>
+  <string id="228">Î\91νακάÏ\84εμα Î»Î¯Ï\83Ï\84αÏ\82 Î±Î½Î±Ï\80αÏ\81αγÏ\89γήÏ\82 ÎºÎ±Ï\84ά τη φόρτωση</string>
   <string id="229">Χρόνος ελάττωσης περιστροφής (Spindown)</string>
   <string id="230">Φίλτρα βίντεο</string>
   <string id="231">Κανένα</string>
   <string id="234">Ανισοτροπικό</string>
   <string id="235">Quincunx</string>
   <string id="236">Gaussian cubic</string>
-  <string id="237">Î\95λαÏ\87ιÏ\83Ï\84οÏ\80οίηση</string>
+  <string id="237">ΣμίκÏ\81Ï\85νση</string>
   <string id="238">Μεγέθυνση</string>
   <string id="239">Εκκαθάριση λίστας αναπαραγωγής στη λήξη</string>
-  <string id="240">Î\9aαÏ\84άÏ\83Ï\84αÏ\83η Ï\80ροβολής</string>
+  <string id="240">Î\9bειÏ\84οÏ\85Ï\81γία Î ροβολής</string>
   <string id="241">Πλήρης οθόνη #%d</string>
   <string id="242">Σε παράθυρο</string>
   <string id="243">Ανανέωση βαθμολογίας</string>
   <string id="244">Πλήρης οθόνη</string>
-  <string id="245">Μέγεθος: (%i,%i)-&gt;(%i,%i) (Εστίαση x%2.2f) AR:%2.2f:1 (Εινονοστοιχεία: %2.2f:1) (ΚΜετατόπιση: %2.2f)</string>
+  <string id="245">Μέγεθος: (%i,%i)->(%i,%i) (Εστίαση x%2.2f) AR:%2.2f:1 (Εικονοστοιχεία: %2.2f:1) (ΚΜετατόπιση: %2.2f)</string>
+
   <string id="247">Scripts</string>
   <string id="248">Γλώσσα</string>
   <string id="249">Μουσική</string>
-  <string id="250">Î\91Ï\80εικÏ\8cνιση</string>
+  <string id="250">Î\9fÏ\80Ï\84ικοÏ\80οίηση</string>
   <string id="251">Επιλογή καταλόγου προορισμού</string>
-  <string id="252">Στέρεο έξοδος σ' όλα τα ηχεία</string>
+  <string id="252">Στέρεο έξοδος σε όλα τα ηχεία</string>
   <string id="253">Αριθμός καναλιών</string>
   <string id="254">- Δέκτης ικανός για αναπαραγωγή DTS</string>
   <string id="255">CDDB</string>
   <string id="258">Ενεργοποίηση ID3 ετικετών</string>
   <string id="259">Άνοιγμα</string>
   <string id="260">Shoutcast</string>
-  <string id="261">Αναμονή για την έναρξη....</string>
+  <string id="261">Αναμονή για την έναρξη...</string>
   <string id="262">Εξαγωγές Scripts</string>
-  <string id="263">Î\88γκÏ\81ιÏ\83η ÎµÎ»Î­Î³Ï\87οÏ\85 Ï\84οÏ\85 XBMC Î±Ï\80Ï\8c Ï\84ο HTTP</string>
+  <string id="263">Î\88γκÏ\81ιÏ\83η ÎµÎ»Î­Î³Ï\87οÏ\85 Ï\84οÏ\85 XBMC Î¼Î­Ï\83Ï\89 HTTP</string>
   <string id="264">Εγγραφή</string>
   <string id="265">Διακοπή εγγραφής</string>
-  <string id="266">Ταξιν.: Κομμάτι</string>
-  <string id="267">Ταξιν.: Έτος</string>
-  <string id="268">Ταξιν.: Τίτλος</string>
-  <string id="269">Ταξιν.: Καλλιτέχνης</string>
-  <string id="270">Ταξιν.: Άλμπουμ</string>
+  <string id="266">Ταξ.: Κομμάτι</string>
+  <string id="267">Ταξ.: Χρόνος</string>
+  <string id="268">Ταξ.: Τίτλος</string>
+  <string id="269">Ταξ.: Καλλιτέχνης</string>
+  <string id="270">Ταξ.: Άλμπουμ</string>
   <string id="271">100 κορυφαία</string>
   <string id="272">Επάνω αριστερή προσαρμογή του ορατού πλαισίου</string>
   <string id="273">Κάτω δεξιά προσαρμογή του ορατού πλαισίου</string>
   <string id="274">Θέση υποτίτλων</string>
   <string id="275">Ρύθμιση λόγου εικονοστοιχείων</string>
   <string id="276">Μετακινήστε το βέλος για να αλλάξετε το μέγεθος του ορατού πλαισίου</string>
-  <string id="277">Μετακινήστε την μπάρα για να αλλάξει η θέση των υποτίτλων</string>
+  <string id="277">Μετακινήστε τη μπάρα για να αλλάξει η θέση των υποτίτλων</string>
   <string id="278">Αλλάξτε το σχήμα ώστε να είναι τέλειο τετράγωνο</string>
   <string id="279">Αδυναμία φόρτωσης των ρυθμίσεων</string>
-  <string id="280">ΧÏ\81ηÏ\83ιμοÏ\80οίηση προεπιλεγμένων ρυθμίσεων</string>
-  <string id="281">Παρακαλώ, ελέγξτε τα αρχεία .xml</string>
+  <string id="280">ΧÏ\81ήση προεπιλεγμένων ρυθμίσεων</string>
+  <string id="281">Παρακαλώ ελέγξτε τα αρχεία .XML</string>
   <string id="282">Βρέθηκαν %i αντικείμενα</string>
   <string id="283">Αποτελέσματα αναζήτησης</string>
   <string id="284">Δεν βρέθηκαν αποτελέσματα</string>
+
   <string id="287">Υπότιτλοι</string>
   <string id="288">Γραμματοσειρά</string>
   <string id="289">- Μέγεθος</string>
   <string id="292">Ήχος</string>
   <string id="293">Αναζήτηση για υπότιτλους</string>
   <string id="294">Δημιουργία</string>
-  <string id="296">Î\91Ï\80αλοιÏ\86ή</string>
+  <string id="296">Î\95κκαθάÏ\81ιÏ\83η</string>
   <string id="297">Καθυστέρηση ήχου</string>
   <string id="298">Σελιδοδείκτες</string>
-  <string id="299">- Δέκτης ικανός για αναπαραγωγή AAC </string>
+  <string id="299">- Δέκτης ικανός για αναπαραγωγή AAC</string>
   <string id="300">- Δέκτης ικανός για αναπαραγωγή MP1</string>
-  <string id="301">- Δέκτης ικανός για αναπαραγωγή MP2 </string>
+  <string id="301">- Δέκτης ικανός για αναπαραγωγή MP2</string>
   <string id="302">- Δέκτης ικανός για αναπαραγωγή MP3</string>
   <string id="303">Καθυστέρηση</string>
   <string id="304">Γλώσσα</string>
   <string id="305">Ενεργό/ή</string>
-  <string id="306">Μη-διαστρωματωμένο</string>
+  <string id="306">Non-interleaved</string>
+
   <string id="312">(0=αυτόματα)</string>
   <string id="313">Εκκαθάριση βάσης δεδομένων</string>
   <string id="314">Προετοιμασία...</string>
   <string id="338">Αναλογική</string>
   <string id="339">Οπτική/Coax</string>
   <string id="340">Διάφοροι καλλιτέχνες</string>
-  <string id="341">Έναρξη DVD</string>
+  <string id="341">Έναρξη δίσκου</string>
   <string id="342">Ταινίες</string>
   <string id="343">Προσαρμογή δειγματοληψίας</string>
   <string id="344">Ηθοποιοί</string>
   <string id="352">Αμυδρό φως</string>
   <string id="353">Μαύρη οθόνη</string>
   <string id="354">Ίχνη πλέγματος</string>
-  <string id="355">Î\91ναμονή ÎµÎ½ÎµÏ\81γοÏ\80οίηÏ\83ηÏ\82 Ï\80Ï\81οÏ\86Ï\8dλαξηÏ\82 οθόνης</string>
+  <string id="355">Î\91ναμονή Î³Î¹Î± Ï\80Ï\81οÏ\86Ï\8dλαξη οθόνης</string>
   <string id="356">Λειτουργία προφύλαξης οθόνης</string>
   <string id="357">Λειτουργία χρονοδιακόπτη τερματισμού</string>
   <string id="358">Όλα τα άλμπουμ</string>
   <string id="359">Πρόσφατα άλμπουμ</string>
   <string id="360">Προφύλαξη οθόνης</string>
-  <string id="361">Παρουσίαση</string>
+  <string id="361">Παρουσίαση διαφανειών και των υποφακέλων</string>
   <string id="362">Ποσοστό εξασθένισης της προφύλαξης οθόνης</string>
-  <string id="363">Ταξιν.: Αρχείο</string>
+  <string id="363">Ταξ.: Αρχείο</string>
   <string id="364">- Δέκτης με ικανότητα αναπαραγωγής Dolby Digital (AC3)</string>
-  <string id="365">Ταξιν.: Όνομα</string>
-  <string id="366">Ταξιν.: Έτος</string>
-  <string id="367">Ταξιν.: Βαθμολογία</string>
+  <string id="365">Ταξ.: Όνομα</string>
+  <string id="366">Ταξ.: Έτος</string>
+  <string id="367">Ταξ.: Βαθμολογία</string>
   <string id="368">IMDb</string>
   <string id="369">Τίτλος</string>
   <string id="370">Καταιγίδες</string>
   <string id="371">Διάσπαρτα</string>
-  <string id="372">ΥεÏ\84Ï\8cς</string>
-  <string id="373">Î\91ίθÏ\81ιοÏ\82</string>
+  <string id="372">Î\9aÏ\85Ï\81ίÏ\89ς</string>
+  <string id="373">Î\97λιοÏ\86άνεια</string>
   <string id="374">Νέφη</string>
   <string id="375">Χιόνι</string>
   <string id="376">Βροχή</string>
   <string id="382">Σποραδικά</string>
   <string id="383">Άνεμος</string>
   <string id="384">Δυνατός</string>
-  <string id="385">Î\9dεÏ\86ελÏ\8eδης</string>
+  <string id="385">Î\89Ï\80ιος</string>
   <string id="386">Αίθριος</string>
   <string id="387">Νεφοσκεπής</string>
   <string id="388">τις πρώτες πρωινές ώρες</string>
   <string id="389">Μπόρα</string>
-  <string id="390">ΣÏ\8dνÏ\84ομεÏ\82 Îµλαφρές χιονοπτώσεις</string>
+  <string id="390">Î\95λαφρές χιονοπτώσεις</string>
   <string id="391">Ελαχ.</string>
   <string id="392">Μεσ.</string>
   <string id="393">Μεγ.</string>
   <string id="394">Ομίχλη</string>
-  <string id="395">Î\9aαÏ\84αÏ\87νιά</string>
+  <string id="395">Î\9eηÏ\81ά Î±Ï\87λή</string>
   <string id="396">Επιλογή τοποθεσίας</string>
   <string id="397">Ανανέωση χρόνου</string>
   <string id="398">Μονάδα θερμοκρασίας</string>
   <string id="399">Μονάδα ταχύτητας</string>
   <string id="400">Ο Καιρός</string>
   <string id="401">Θερμοκρασία</string>
-  <string id="402">Î\91ιÏ\83θάνεÏ\83αι Ï\8cÏ\80ως</string>
+  <string id="402">Î\91ίÏ\83θηÏ\83η ως</string>
   <string id="403">Δείκτης UV</string>
   <string id="404">Άνεμος</string>
   <string id="405">Σημείο δρόσου</string>
   <string id="406">Υγρασία</string>
+
   <string id="409">Προεπιλεγμένα</string>
-  <string id="410">ΠÏ\81Ï\8cÏ\83βαÏ\83η Ï\83Ï\84ο Weather.com</string>
-  <string id="411">ΠληÏ\81οÏ\86οÏ\81ίεÏ\82 ÎºÎ±Î¹Ï\81οÏ\8d:</string>
-  <string id="412">Αδυναμία λήξης δεδομένων καιρού</string>
+  <string id="410">ΠÏ\81Ï\8cÏ\83βαÏ\83η Ï\83Ï\84ην Ï\85Ï\80ηÏ\81εÏ\83ία ÎºÎ±Î¹Ï\81οÏ\8d</string>
+  <string id="411">Î\91νάκÏ\84ηÏ\83η ÎºÎ±Î¹Ï\81οÏ\8d Î³Î¹Î±:</string>
+  <string id="412">Αδυναμία λήψης δεδομένων καιρού</string>
   <string id="413">Χειροκίνητα</string>
   <string id="414">Καμιά κριτική για το άλμπουμ</string>
   <string id="415">Λήψη μικρογραφίας...</string>
   <string id="416">Μη διαθέσιμος πόρος</string>
-  <string id="417">ΠÏ\81οβολή: Î\95ικÏ\8cνεÏ\82</string>
+  <string id="417">ΠÏ\81οβολή: Î\9cεγ. Î\95ικονίδια</string>
   <string id="418">Ελαχ.</string>
   <string id="419">Μεγ.</string>
   <string id="420">HDMI</string>
+
   <string id="422">Διαγραφή πληροφοριών άλμπουμ</string>
   <string id="423">Διαγραφή πληροφοριών CD</string>
   <string id="424">Επιλογή</string>
   <string id="425">Δεν βρέθηκαν πληροφορίες για το άλμπουμ</string>
   <string id="426">Δεν βρέθηκαν πληροφορίες για το CD</string>
   <string id="427">Δίσκος</string>
-  <string id="428">Î\95ιÏ\83αγÏ\89γή Î¿Ï\81θοÏ\8d CD/DVD</string>
+  <string id="428">Î\95ιÏ\83άγεÏ\84ε Ï\84ο Ï\83Ï\89Ï\83Ï\84Ï\8c CD/DVD</string>
   <string id="429">Παρακαλώ, εισάγετε τον ακόλουθο δίσκο:</string>
-  <string id="430">Ταξιν.: DVD#</string>
+  <string id="430">Ταξ.: DVD#</string>
   <string id="431">Δεν υπάρχει ελεύθερη λανθάνουσα μνήμη</string>
   <string id="432">Διαγραφή ταινίας από τη συλλογή</string>
   <string id="433">Να διαγραφεί '%s';</string>
-  <string id="434">Από %s με ένταση %i %s</string>
+  <string id="434">Από %s με ένταση %i %s</string> <!--From <wind dir.> at <speed> <unit>-->
+
   <string id="437">Αφαιρούμενος δίσκος</string>
   <string id="438">Άνοιγμα αρχείου</string>
   <string id="439">Λανθάνουσα μνήμη</string>
   <string id="440">Σκληρός δίσκος</string>
   <string id="441">UDF</string>
   <string id="442">Τοπικό δίκτυο</string>
-  <string id="443">Internet</string>
+  <string id="443">Διαδίκτυο</string>
   <string id="444">Βίντεο</string>
   <string id="445">Ήχος</string>
   <string id="446">DVD</string>
-  <string id="447">Αυτόματη εκκίνηση πολυμέσων  </string>
+  <string id="447">Αυτόματη εκκίνηση πολυμέσων</string>
   <string id="448">LCD</string>
   <string id="449">Ενεργό/ή</string>
   <string id="450">Στήλες</string>
   <string id="463">Οπίσθιος φωτισμός</string>
   <string id="464">Φωτεινότητα</string>
   <string id="465">Αντίθεση</string>
-  <string id="466">Συντελεστής γάμα</string>
+  <string id="466">ΣÏ\85νÏ\84ελεÏ\83Ï\84ήÏ\82 Î³Î¬Î¼Î¼Î±</string>
   <string id="467">Τύπος</string>
-  <string id="468">Î\9cεÏ\84ακίνηÏ\83η Ï\84ηÏ\82 Î¼Ï\80άÏ\81αÏ\82 Î³Î¹Î± Ï\84ην αλλαγή της θέσης των απεικονίσεων οθόνης (OSD)</string>
+  <string id="468">Î\9cεÏ\84ακινήÏ\83Ï\84ε Ï\84η Î¼Ï\80άÏ\81α Î³Î¹Î± αλλαγή της θέσης των απεικονίσεων οθόνης (OSD)</string>
   <string id="469">Θέση απεικονίσεων οθόνης (OSD)</string>
   <string id="470">Συντελεστές</string>
   <string id="471">Τσιπάκι</string>
   <string id="475">Μουσική μόνο</string>
   <string id="476">Μουσική &amp; βίντεο</string>
   <string id="477">Αδυναμία φόρτωσης της λίστας αναπαραγωγής</string>
-  <string id="478">Aπεικόνισεις οθόνης (OSD)</string>
+  <string id="478">Aπεικονίσεις οθόνης (OSD)</string>
   <string id="479">Κέλυφος &amp; γλώσσα</string>
   <string id="480">Εξατομίκευση</string>
   <string id="481">Ιδιότητες ήχου</string>
   <string id="482">Περί XBMC</string>
+
   <string id="485">Διαγραφή άλμπουμ</string>
   <string id="486">Επανάληψη</string>
-  <string id="487">Î\95Ï\80ανάληÏ\88η Ï\84οÏ\85 Î¹Î´Î¯ου</string>
-  <string id="488">Επανάληψη φακέλων</string>
+  <string id="487">Î\95Ï\80ανάληÏ\88η Ï\84οÏ\85 Î¯Î´Î¹ου</string>
+  <string id="488">Επανάληψη φακέλου</string>
   <string id="489">Αυτόματη αναπαραγωγή επόμενου κομματιού</string>
-  <string id="491">- Χρήση Μ. εικονιδίων</string>
+  <string id="491">- Χρήση Μεγ. εικονιδίων</string>
   <string id="492">Μεγέθυνση υποτίτλων</string>
   <string id="493">Ρυθμίσεις για προχωρημένους!</string>
   <string id="494">Εύρος στάθμης γενικού ήχου</string>
   <string id="495">Αύξηση δειγματοληψίας ανάλυσης σε γραφικό περιβάλλον (GUI)</string>
   <string id="496">Βαθμονόμηση</string>
   <string id="497">Εμφάνιση επεκτάσεων αρχείων</string>
-  <string id="498">Ταξιν: Τύπος</string>
+  <string id="498">Ταξ.: Τύπος</string>
   <string id="499">Αδυναμία σύνδεσης στην υπηρεσία έρευνας</string>
   <string id="500">Απέτυχε η λήψη των πληροφοριών άλμπουμ</string>
   <string id="501">Αναζήτηση για ονόματα άλμπουμ...</string>
   <string id="502">Άνοιγμα</string>
   <string id="503">Απασχολημένο</string>
-  <string id="504">Κενός </string>
+  <string id="504">Κενός</string>
   <string id="505">Φόρτωση πληροφοριών πολυμέσων...</string>
-  <string id="507">Ταξιν: Χρήση</string>
-  <string id="510">Î\95νεÏ\81γοÏ\80οίηÏ\83η Î±Ï\80εικονίσεων</string>
+  <string id="507">Ταξ.: Χρήση</string>
+  <string id="510">Î\95νεÏ\81γοÏ\80οίηÏ\83η Î¿Ï\80Ï\84ικοÏ\80οιήσεων</string>
   <string id="511">Ενεργοποίηση εναλλαγής λειτουργίας βίντεο</string>
   <string id="512">Παράθυρο εκκίνησης</string>
   <string id="513">Αρχική οθόνη</string>
   <string id="514">Χειροκίνητες ρυθμίσεις</string>
   <string id="515">Είδος</string>
+
   <string id="517">Πρόσφατα εκτελεσθέντα άλμπουμ</string>
   <string id="518">Εκκίνηση</string>
   <string id="519">Εκκίνηση σε...</string>
-  <string id="521">Συλλογές</string>
+
+  <string id="521">Συνθέσεις</string>
   <string id="522">Απομάκρυνση πηγής</string>
   <string id="523">Εναλλαγή πολυμέσων</string>
   <string id="524">Επιλογή λίστας αναπαραγωγής</string>
   <string id="526">Προσθήκη στη λίστα αναπαραγωγής</string>
   <string id="527">Χειροκίνητη προσθήκη στη συλλογή</string>
   <string id="528">Εισάγετε τίτλο</string>
-  <string id="529">Σφάλμα: Διπλός τίτλος</string>
+  <string id="529">ΣÏ\86άλμα: Î\94ιÏ\80λÏ\8cÏ\84Ï\85Ï\80οÏ\82 Ï\84ίÏ\84λοÏ\82</string>
   <string id="530">Επιλέξτε είδος</string>
   <string id="531">Νέο είδος</string>
   <string id="532">Χειροκίνητη προσθήκη</string>
   <string id="535">Λίστα</string>
   <string id="536">Εικονίδια</string>
   <string id="537">Μεγάλη λίστα</string>
-  <string id="538">Î\95ικÏ\8cνεÏ\82</string>
+  <string id="538">Î\9cεγ. Î\95ικονίδια</string>
   <string id="539">Ευρεία</string>
   <string id="540">Πολύ ευρεία</string>
-  <string id="541">Εικόνες άλμπουμ</string>
-  <string id="542">Εικόνες DVD</string>
+  <string id="541">Εικον. άλμπουμ</string>
+  <string id="542">Εικον. DVD</string>
   <string id="543">DVD</string>
   <string id="544">Πληροφορίες</string>
   <string id="545">Συσκευή εξόδου ήχου</string>
   <string id="546">Συσκευή εξόδου διέλευσης</string>
   <string id="547">Δεν υπάρχει βιογραφία γι΄ αυτόν τον καλλιτέχνη</string>
   <string id="548">Υποβιβασμός πολυκάναλου ήχου σε στερεοφωνικό</string>
-  <string id="550">Κατάταξη: %s</string>
+
+  <string id="550">Ταξ.: %s</string>
   <string id="551">Όνομα</string>
   <string id="552">Ημερομηνία</string>
   <string id="553">Μέγεθος</string>
   <string id="554">Κομμάτι</string>
-  <string id="555">Î\8fÏ\81α</string>
+  <string id="555">ΧÏ\81Ï\8cνοÏ\82</string>
   <string id="556">Τίτλος</string>
   <string id="557">Καλλιτέχνης</string>
   <string id="558">Άλμπουμ</string>
   <string id="562">Έτος</string>
   <string id="563">Αξιολόγηση</string>
   <string id="564">Τύπος</string>
-  <string id="565">ΧÏ\81ηÏ\83ιμÏ\8cÏ\84ηÏ\84α</string>
-  <string id="566">Î\86λμÏ\80οÏ\85μ ÎºÎ±Î»Î»Î¹Ï\84έÏ\87νη</string>
-  <string id="567">Î\94ιάÏ\81κεια</string>
+  <string id="565">ΧÏ\81ήÏ\83η</string>
+  <string id="566">Î\9aαλλιÏ\84έÏ\87νηÏ\82 Î\86λμÏ\80οÏ\85μ</string>
+  <string id="567">Î\91ναÏ\80αÏ\81άÏ\87θηκε</string>
   <string id="568">Τελευταία αναπαραγωγή</string>
   <string id="569">Σχόλια</string>
-  <string id="570">Î\97μ/νία Ï\80Ï\81οÏ\83άÏ\81Ï\84ηÏ\83ης</string>
+  <string id="570">Î\97μ/νία Ï\80Ï\81οÏ\83θήκης</string>
   <string id="571">Προεπιλεγμένη</string>
   <string id="572">Εταιρεία (studio)</string>
   <string id="573">Διαδρομή</string>
   <string id="574">Χώρα</string>
   <string id="575">Σε εξέλιξη</string>
   <string id="576">Αριθμός αναπαραγωγών</string>
+
   <string id="580">Σειρά ταξινόμησης</string>
-  <string id="581">Î\9aÏ\81ιÏ\84ήÏ\81ια ταξινόμησης</string>
-  <string id="582">Λειτουργία προβολής</string>
+  <string id="581">Î\9cέθοδοÏ\82 ταξινόμησης</string>
+  <string id="582">Λειτουργία Προβολής</string>
   <string id="583">Απομνημόνευση προβολών διαφορετικών φακέλων</string>
   <string id="584">Αύξουσα</string>
   <string id="585">Φθίνουσα</string>
   <string id="591">Όχι</string>
   <string id="592">Ένα</string>
   <string id="593">Όλα</string>
-  <string id="594">Î\9dαι</string>
+  <string id="594">Î\8cÏ\87ι</string>
   <string id="595">Επανάληψη: Όχι</string>
   <string id="596">Επανάληψη: Μία φορά</string>
   <string id="597">Επανάληψη: Όλων</string>
-  <string id="600">Εγγραφή CD ήχου</string>
+
+  <string id="600">Αντιγραφή CD ήχου</string>
   <string id="601">Μεσαία</string>
   <string id="602">Κανονική</string>
   <string id="603">Ακραία</string>
-  <string id="604">Σταθερός ρυθμός</string>
-  <string id="605">Εγγραφή...</string>
+  <string id="604">Σταθερό bitrate</string>
+  <string id="605">Αντιγραφή...</string>
+
   <string id="607">Προς:</string>
-  <string id="608">Î\91δÏ\85ναμία ÎµÎ³γραφής CD ή κομματιού</string>
-  <string id="609">Î\94εν Î¿Ï\81ίÏ\83θηκε Î´Î¹Î±Î´Ï\81ομή ÎµÎ¾Î±Î³Ï\89γής CDDA.</string>
-  <string id="610">Î\95γγραφή κομματιού</string>
+  <string id="608">Î\91δÏ\85ναμία Î±Î½Ï\84ιγραφής CD ή κομματιού</string>
+  <string id="609">Î\94εν Î¿Ï\81ίÏ\83θηκε Î´Î¹Î±Î´Ï\81ομή Î±Î½Ï\84ιγÏ\81αÏ\86ής CDDA.</string>
+  <string id="610">Î\91νÏ\84ιγραφή κομματιού</string>
   <string id="611">Εισαγωγή αριθμού</string>
   <string id="612">Bits/Sample</string>
   <string id="613">Συχνότητα δειγματοληψίας</string>
-  <string id="620">CDs ήχου</string>
+
+  <string id="620">CD ήχου</string>
   <string id="621">Κωδικοποιητής</string>
   <string id="622">Ποιότητα</string>
-  <string id="623">Ρυθμός</string>
+  <string id="623">Bitrate</string>
   <string id="624">Συμπερίληψη αριθμού κομματιού</string>
   <string id="625">Όλα τα τραγούδια</string>
   <string id="629">Λειτουργία προβολής</string>
   <string id="657">Αναζήτηση φακέλου</string>
   <string id="658">Πληροφορίες τραγουδιού</string>
   <string id="659">Μη γραμμική παραμόρφωση</string>
+
   <string id="660">Ενίσχυση έντασης</string>
   <string id="661">Επιλογή φακέλου εξαγωγής</string>
   <string id="662">Αυτό το αρχείο δεν είναι πλέον διαθέσιμο.</string>
   <string id="663">Να αφαιρεθεί από τη συλλογή;</string>
   <string id="664">Αναζήτηση Script</string>
   <string id="665">Επίπεδο συμπίεσης</string>
+
   <string id="700">Εκκαθάριση συλλογής</string>
   <string id="701">Απομάκρυνση παλαιών τραγουδιών από τη συλλογή</string>
-  <string id="702">Η διαδρομή έχει σαρωθεί προηγούμενος</string>
+  <string id="702">Η διαδρομή έχει σαρωθεί παλαιότερα</string>
   <string id="705">Δίκτυο</string>
   <string id="706">- Διακομιστής</string>
-  <string id="708">Χρήση ενός διαμεσολαβητή HTTP για πρόσβαση στο internet</string>
+
+  <string id="708">Χρήση διαμεσολαβητή HTTP για πρόσβαση στο Διαδίκτυο</string>
+
   <string id="711">Πρωτόκολλο Internet (IP)</string>
-  <string id="712">ΠÏ\81οÏ\83διοÏ\81ίÏ\83αÏ\84ε Î»Î¬Î¸Î¿Ï\82 Î¸Ï\8dÏ\81α. Î\97 Ï\84ιμή ÎºÏ\85μαίνεÏ\84αι μεταξύ 1 και 65535.</string>
+  <string id="712">Î\9fÏ\81ίÏ\83Ï\84ηκε Î»Î¬Î¸Î¿Ï\82 Î¸Ï\8dÏ\81α. Î\97 Ï\84ιμή Ï\80Ï\81έÏ\80ει Î½Î± ÎµÎ¯Î½αι μεταξύ 1 και 65535.</string>
   <string id="713">Διαμεσολαβητής HTTP</string>
-  <string id="715">- Εκχώρηση</string>
+
+  <string id="715">- Ανάθεση</string>
   <string id="716">Αυτόματη (DHCP)</string>
   <string id="717">Χειροκίνητη (Στατική)</string>
+
   <string id="719">- Διεύθυνση IP</string>
   <string id="720">- Μάσκα δικτύου</string>
   <string id="721">- Προεπιλεγμένη πύλη</string>
-  <string id="722">- Διακομιστή DNS</string>
+  <string id="722">- Διακομιστής DNS</string>
   <string id="723">Αποθήκευση &amp; επανεκκίνηση</string>
-  <string id="724">ΠÏ\81οÏ\83διοÏ\81ίÏ\83Ï\84ηκε ÎµÏ\83Ï\86αλμένη Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η. Î\97 Ï\84ιμή Ï\80ρέπει να έχει τη μορφή AAA.BBB.CCC.DDD</string>
+  <string id="724">Î\9fÏ\81ίÏ\83Ï\84ηκε Î»Î¬Î¸Î¿Ï\82 Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η. Î ρέπει να έχει τη μορφή AAA.BBB.CCC.DDD</string>
   <string id="725">με τιμές μεταξύ 0 και 255.</string>
-  <string id="726">Î\9fι Î±Î»Î»Î±Î³Î­Ï\82 Î´ÎµÎ½ Î±Ï\80οθηκεÏ\8dÏ\84ηκαν. Î£Ï\85νέÏ\87ιÏ\83η χωρίς αποθήκευση;</string>
+  <string id="726">Î\9fι Î±Î»Î»Î±Î³Î­Ï\82 Î´ÎµÎ½ Î±Ï\80οθηκεÏ\8dÏ\84ηκαν. Î£Ï\85νέÏ\87εια χωρίς αποθήκευση;</string>
   <string id="727">Διακομιστής Ιστού</string>
   <string id="728">Διακομιστής FTP</string>
+
   <string id="730">- Θύρα</string>
+
   <string id="732">Αποθήκευση &amp; εφαρμογή</string>
   <string id="733">- Κωδικός πρόσβασης</string>
-  <string id="734">Χωρίς κωδικό πρόσβασης</string>
+  <string id="734">Χωρίς κωδικό</string>
   <string id="735">- Κωδικοποίηση χαρακτήρων</string>
   <string id="736">- Στυλ</string>
   <string id="737">- Χρώμα</string>
   <string id="742">Λευκό</string>
   <string id="743">Κίτρινο</string>
   <string id="744">Αρχεία</string>
-  <string id="745">Î\94εν Ï\85Ï\80άÏ\81Ï\87ει Ï\80ληÏ\81οÏ\86οÏ\81ία Î³Î¹Î\84 Î±Ï\85Ï\84ή την προβολή</string>
-  <string id="746">Απενεργοποιήστε την λειτουργία συλλογής</string>
-  <string id="747">Σφάλμα κατά την φόρτωση της εικόνας</string>
+  <string id="745">Î\9aαμία Ï\80ληÏ\81οÏ\86οÏ\81ία Î³Î¹Î± Î±Ï\85Ï\84ήν την προβολή</string>
+  <string id="746">Απενεργοποιήστε τη λειτουργία συλλογής</string>
+  <string id="747">Σφάλμα κατά τη φόρτωση της εικόνας</string>
   <string id="748">Επεξεργασία διαδρομής</string>
   <string id="749">Kατοπτρική εικόνα</string>
   <string id="750">Είστε σίγουρος;</string>
   <string id="751">Απομάκρυνση πηγής</string>
+
   <string id="754">Προσθήκη συνδέσμου εφαρμογής</string>
   <string id="755">Επεξεργασία διαδρομής εφαρμογής</string>
   <string id="756">Επεξεργασία ονόματος εφαρμογής</string>
   <string id="757">Επεξεργασία βάθους διαδρομής</string>
+
   <string id="759">Προβολή: Μεγάλη λίστα</string>
   <string id="760">Κίτρινο</string>
   <string id="761">Λευκό</string>
   <string id="762">Μπλε</string>
-  <string id="763">ΦÏ\89Ï\84εινÏ\8c πράσινο</string>
+  <string id="763">Î\88νÏ\84ονο πράσινο</string>
   <string id="764">Κιτρινοπράσινο</string>
   <string id="765">Κυανό</string>
   <string id="766">Ανοικτό γκρι</string>
   <string id="767">Γκρι</string>
+  <!-- strings 768 and 769 reserved for more subtitle colors -->
+
   <string id="770">Σφάλμα %i: ο κοινόχρηστος πόρος δεν είναι διαθέσιμος</string>
+
   <string id="772">Έξοδος ήχου</string>
   <string id="773">Αναζήτηση</string>
   <string id="774">Φάκελος παρουσίασης διαφανειών</string>
-  <string id="775">Διασύνδεση</string>
+  <string id="775">Διασύνδεση δικτύου</string>
   <string id="776">- Όνομα ασύρματου δικτύου (ESSID)</string>
   <string id="777">- Κωδικός πρόσβασης ασύρματου δικτύου</string>
   <string id="778">- Ασφάλεια ασύρματου δικτύου</string>
   <string id="781">WEP</string>
   <string id="782">WPA</string>
   <string id="783">WPA2</string>
-  <string id="784">Εφαρμογή των ρυθμίσεων διασύνδεσης δικτύου. Παρακαλώ, περιμένετε.</string>
-  <string id="785">Επιτυχής εκκίνηση της διασύνδεσης δικτύου.</string>
-  <string id="786">Δεν ήταν επιτυχής η εκκίνηση της διασύνδεσης  δικτύου.</string>
+  <string id="784">Εφαρμογή των ρυθμίσεων διασύνδεσης δικτύου. Παρακαλώ περιμένετε.</string>
+  <string id="785">Επιτυχής επανεκκίνηση της διασύνδεσης δικτύου.</string>
+  <string id="786">Δεν ήταν επιτυχής η εκκίνηση της διασύνδεσης δικτύου.</string>
   <string id="787">Απενεργοποίηση Διασύνδεσης</string>
   <string id="788">Η Διασύνδεση δικτύου απενεργοποιήθηκε επιτυχώς.</string>
   <string id="789">Όνομα ασύρματου δικτύου (ESSID)</string>
-  <string id="791">Έγκριση σε προγράμματα απομακρυσμένου ελέγχου να ελέγξουν το XBMC</string>
+
+  <string id="791">Έγκριση σε προγράμματα του συστήματος να ελέγχουν το XBMC</string>
   <string id="792">Θύρα</string>
-  <string id="793">Î\95Ï\8dÏ\81οÏ\82 Î¸Ï\8dÏ\81αÏ\82</string>
-  <string id="794">Î\88γκÏ\81ιÏ\83η Ï\83ε Ï\80Ï\81ογÏ\81άμμαÏ\84α Î¬Î»Î»Ï\89ν Ï\85Ï\80ολογιÏ\83Ï\84Ï\8eν Î½Î± ÎµÎ»Î­Î³Î¾ουν το XBMC</string>
+  <string id="793">Î\95Ï\8dÏ\81οÏ\82 Î¸Ï\85Ï\81Ï\8eν</string>
+  <string id="794">Î\88γκÏ\81ιÏ\83η Ï\83ε Ï\80Ï\81ογÏ\81άμμαÏ\84α Î¬Î»Î»Ï\89ν Ï\83Ï\85Ï\83Ï\84ημάÏ\84Ï\89ν Î½Î± ÎµÎ»Î­Î³Ï\87ουν το XBMC</string>
   <string id="795">Αρχική καθυστέρηση (ms)</string>
   <string id="796">Συνεχής καθυστέρηση (ms)</string>
   <string id="797">Μέγιστος αριθμός πελατών</string>
-  <string id="798">Πρόσβαση στο internet</string>
-  <string id="850">Εισαγωγή μη έγκυρου εύρους τιμών θύρας</string>
-  <string id="851">Το έγκυρο εύρος τιμών θύρας είναι 1-65535</string>
-  <string id="852">Το έγκυρο εύρος τιμών θύρας είναι 1024-65535</string>
+  <string id="798">Πρόσβαση στο Διαδίκτυο</string>
+
+  <string id="850">Εισαγωγή μη έγκυρης τιμής θύρας</string>
+  <string id="851">Το έγκυρο εύρος θυρών είναι 1-65535</string>
+  <string id="852">Το έγκυρο εύρος θυρών είναι 1024-65535</string>
+
   <string id="998">Προσθήκη Μουσικής...</string>
   <string id="999">Προσθήκη Βίντεο...</string>
   <string id="1000">- Προεπισκόπηση</string>
   <string id="1001">Αδυναμία σύνδεσης</string>
-  <string id="1002">Το ΧΒMC είναι ανίκανο να συνδεθεί στο δίκτυο.</string>
-  <string id="1003">Αυτό μπορεί να συμβαίνει διότι το δίκτυο δεν είναι συνδεμένο.</string>
-  <string id="1004">Θέλετε οπωσδήποτε να το προσθέσετε;</string>
+  <string id="1002">Το XBMC δεν μπόρεσε να συνδεθεί στο δίκτυο.</string>
+  <string id="1003">Αυτό μπορεί να συνέβη διότι το δίκτυο δεν είναι συνδεμένο.</string>
+  <string id="1004">Θέλετε παρ' όλα αυτά να το προσθέσετε;</string>
+
   <string id="1006">Διεύθυνση IP</string>
   <string id="1007">Προσθήκη τοποθεσίας δικτύου</string>
   <string id="1008">Πρωτόκολλο</string>
   <string id="1019">Εισαγωγή του ονόματος χρήστη</string>
   <string id="1020">Προσθήκη πηγής %s</string>
   <string id="1021">Εισαγωγή διαδρομών ή αναζήτηση τοποθεσιών πολυμέσων.</string>
-  <string id="1022">Î\95ιÏ\83αγÏ\89γή ÎµÏ\84ικέÏ\84αÏ\82 Î³Î¹Î± Ï\84η πηγή πολυμέσων.</string>
+  <string id="1022">Î\95ιÏ\83αγÏ\89γή Î¿Î½Ï\8cμαÏ\84οÏ\82 Î³Î¹Î± Ï\84ην πηγή πολυμέσων.</string>
   <string id="1023">Αναζήτηση νέου κοινόχρηστου πόρου</string>
   <string id="1024">Αναζήτηση</string>
   <string id="1025">Δεν ήταν δυνατόν να ανακτηθούν οι πληροφορίες καταλόγου.</string>
   <string id="1034">Yπομενού</string>
   <string id="1035">Ενεργοποίηση πλήκτρων υπομενού</string>
   <string id="1036">Αγαπημένα</string>
-  <string id="1037">Î\95Ï\80εκÏ\84άÏ\83ειÏ\82 Î²ίντεο</string>
-  <string id="1038">Î\95Ï\80εκÏ\84άÏ\83ειÏ\82 Î¼ουσικής</string>
-  <string id="1039">Î\95Ï\80εκÏ\84άÏ\83ειÏ\82 Îµικόνας</string>
+  <string id="1037">ΠÏ\81Ï\8cÏ\83θεÏ\84α Î\92ίντεο</string>
+  <string id="1038">ΠÏ\81Ï\8cÏ\83θεÏ\84α Î\9cουσικής</string>
+  <string id="1039">ΠÏ\81Ï\8cÏ\83θεÏ\84α Î\95ικόνας</string>
   <string id="1040">Φόρτωση φακέλου</string>
   <string id="1041">Ανακτήθηκαν %i αντικείμενα</string>
-  <string id="1042">Ανακτήθηκαν %i από %i αντικείμενα</string>
-  <string id="1043">Î\95Ï\80εκÏ\84άÏ\83ειÏ\82 ÎµÏ\86αÏ\81μογής</string>
-  <string id="1044">Ορισμός πρόσθετου σελιδοδείκτη</string>
-  <string id="1045">Ρυθμίσεις επέκτασης</string>
+  <string id="1042">Ανακτήθηκαν %i από τα %i αντικείμενα</string>
+  <string id="1043">ΠÏ\81Ï\8cÏ\83θεÏ\84εÏ\82 Î\95Ï\86αÏ\81μογές</string>
+  <string id="1044">Ορισμός μικρογραφίας plugin</string>
+  <string id="1045">Ρυθμίσεις πρόσθετου</string>
   <string id="1046">Σημεία πρόσβασης</string>
   <string id="1047">Άλλα...</string>
   <string id="1048">- Όνομα χρήστη</string>
   <string id="1049">Ρυθμίσεις script</string>
   <string id="1050">Μεμονωμένα</string>
   <string id="1051">Εισαγωγή διεύθυνσης</string>
+
   <string id="1200">Πελάτης SMB</string>
   <string id="1202">Ομάδα Εργασίας</string>
   <string id="1203">Προεπιλεγμένο όνομα χρήστη</string>
   <string id="1204">Προεπιλεγμένος κωδικός πρόσβασης</string>
-  <string id="1207">WINS διακομιστής </string>
+
+  <string id="1207">Διακομιστής WINS</string>
   <string id="1208">Προσάρτηση κοινόχρηστων SMB</string>
+
   <string id="1210">Απομάκρυνση</string>
   <string id="1211">Μουσική</string>
   <string id="1212">Βίντεο</string>
-  <string id="1213">ΦÏ\89Ï\84ογÏ\81αÏ\86ίες</string>
+  <string id="1213">Î\95ικÏ\8cνες</string>
   <string id="1214">Αρχεία</string>
-  <string id="1215">Μουσική &amp; βίντεο</string>
+  <string id="1215">Μουσική &amp; βίντεο </string>
   <string id="1216">Μουσική &amp; εικόνες</string>
   <string id="1217">Μουσική &amp; αρχεία</string>
   <string id="1218">Βίντεο &amp; εικόνες</string>
   <string id="1233">Εφαρμογές &amp; βίντεο &amp; μουσική</string>
   <string id="1234">Εφαρμογές &amp; εικόνες &amp; μουσική</string>
   <string id="1235">Εφαρμογές &amp; εικόνες &amp; βίντεο</string>
+
   <string id="1250">Αυτόματος εντοπισμός</string>
   <string id="1251">Αυτόματος εντοπισμός συστήματος</string>
   <string id="1252">Ψευδώνυμο</string>
-  <string id="1254">Να απαιτείται επιβεβαίωση για να συνδεθεί</string>
-  <string id="1255">Αποστολή ονόματος και κωδικού πρόσβασης χρήστη (FTP) </string>
-  <string id="1256">Διάστημα μεταλλικού θορύβου</string>
-  <string id="1257">Να συνδεθείτε στο συστήμα που εντοπίστηκε;</string>
-  <string id="1260">Αναγγελία αυτών των υπηρεσιών σε άλλα συστήματα διαμέσου του Zeroconf</string>
+
+  <string id="1254">Επιβεβαίωση σύνδεσης</string>
+  <string id="1255">Αποστολή ονόματος και κωδικού πρόσβασης χρήστη (FTP)</string>
+  <string id="1256">Χρονικό διάστημα ping</string>
+  <string id="1257">Επιθυμείτε να συνδεθείτε στο σύστημα που εντοπίστηκε;</string>
+
+  <string id="1260">Αναγγελία αυτών των υπηρεσιών σε άλλα συστήματα μέσω του Zeroconf</string>
+  <string id="1270">Έγκριση στο XBMC να λαμβάνει περιεχόμενο AirPlay</string>
+  <string id="1271">Όνομα συσκευής</string>
+  <string id="1272">- Χρήση προστασίας με κωδικό</string>
+
   <string id="1300">Ειδική συσκευή ήχου</string>
   <string id="1301">Ειδική συσκευή διέλευσης</string>
-  <string id="1396">Πυκνό</string>
+
+  <string id="1396">Μετακινούμενο</string>
   <string id="1397">και</string>
   <string id="1398">Παγωνιά</string>
   <string id="1399">Το βράδυ</string>
   <string id="1408">Πάγος</string>
   <string id="1409">Κρύσταλλοι</string>
   <string id="1410">Άπνοια</string>
-  <string id="1411">και</string>
+  <string id="1411">με</string>
   <string id="1412">θυελλώδης</string>
   <string id="1413">ασθενής βροχή</string>
   <string id="1414">Καταιγίδα</string>
   <string id="1415">Ασθενής βροχή</string>
   <string id="1416">Ομιχλώδης</string>
   <string id="1417">Κόκκοι</string>
-  <string id="1418">Καταιγίδες (με κεραυνούς) </string>
+  <string id="1418">Καταιγίδες (με κεραυνούς)</string>
   <string id="1419">Μπόρες (με κεραυνούς)</string>
-  <string id="1420">Î\9cέÏ\83η</string>
+  <string id="1420">Î\89Ï\80ια</string>
   <string id="1421">Πολύ υψηλή</string>
   <string id="1422">Θυελλώδης</string>
-  <string id="1423">Ομίχλη</string>
-  <string id="1450">Σε κατάσταση ύπνωσης κατά την αναμονή</string>
-  <string id="2050">Εκτέλεση</string>
+  <string id="1423">Υγρά αχλή</string>
+
+  <!-- strings through to 1450 reserved for weather translation -->
+
+  <string id="1450">Απενεργοποίηση οθόνης κατά την αναμονή</string>
+  <!-- strings through to 1470 reserved for power-saving -->
+
+  <string id="2050">Διάρκεια</string>
+
   <string id="2100">Αποτυχία script! : %s</string>
   <string id="2101">Απαιτείται νεώτερη έκδοση - Δείτε το αρχείο καταγραφής</string>
+
   <string id="4501">Ενεργοποίηση LCD/VFD</string>
+
   <string id="10000">Αρχική τοποθεσία</string>
   <string id="10001">Εφαρμογές</string>
-  <string id="10002">ΦÏ\89Ï\84ογÏ\81αÏ\86ίες</string>
-  <string id="10003">Διαχείριση  αρχείων</string>
+  <string id="10002">Î\95ικÏ\8cνες</string>
+  <string id="10003">Διαχείριση αρχείων</string>
   <string id="10004">Ρυθμίσεις</string>
   <string id="10005">Μουσική</string>
   <string id="10006">Βίντεο</string>
   <string id="10007">Πληροφορίες συστήματος</string>
   <string id="10008">Ρυθμίσεις - Γενικά</string>
   <string id="10009">Ρυθμίσεις - Οθόνη</string>
-  <string id="10010">ΡÏ\85θμίÏ\83ειÏ\82 - Î\91ιÏ\83θηÏ\84ικά - Βαθμονόμηση γραφικού περιβάλλοντος (GUI)</string>
-  <string id="10011">ΡÏ\85θμίÏ\83ειÏ\82 - Î\92ίνÏ\84εο - Î\92αθμονÏ\8cμιση Οθόνης</string>
-  <string id="10012">ΡÏ\85θμίÏ\83ειÏ\82 - Î¦Ï\89Ï\84ογÏ\81αÏ\86ίες</string>
+  <string id="10010">ΡÏ\85θμίÏ\83ειÏ\82 - Î\95μÏ\86άνιÏ\83η - Βαθμονόμηση γραφικού περιβάλλοντος (GUI)</string>
+  <string id="10011">ΡÏ\85θμίÏ\83ειÏ\82 - Î\92ίνÏ\84εο - Î\92αθμονÏ\8cμηση Οθόνης</string>
+  <string id="10012">ΡÏ\85θμίÏ\83ειÏ\82 - Î\95ικÏ\8cνες</string>
   <string id="10013">Ρυθμίσεις - Εφαρμογές</string>
   <string id="10014">Ρυθμίσεις - Καιρός</string>
   <string id="10015">Ρυθμίσεις - Μουσική</string>
   <string id="10019">Ρυθμίσεις - Εξατομίκευση</string>
   <string id="10020">Scripts</string>
   <string id="10021">Περιηγητής ιστού</string>
+  <string id="10025">Βίντεο</string>
   <string id="10028">Βίντεο/Λίστα Αναπαραγωγής</string>
+  <string id="10029">Οθόνη σύνδεσης</string>
   <string id="10034">Ρυθμίσεις - Προφίλ</string>
-  <string id="10100">Διάλογος Ναι/Όχι</string>
-  <string id="10101">Διάλογος διαδικασίας</string>
-  <string id="10210">Αναζήτηση για υπότιτλων...</string>
-  <string id="10211">Προσωρινή αποθήκευση υπότιτλων...</string>
+  <string id="10040">Περιηγητής Πρόσθετων</string>
+
+  <string id="10100">Παράθυρο Ναι/Όχι</string>
+  <string id="10101">Παράθυρο διαδικασίας</string>
+
+  <string id="10210">Αναζήτηση για υπότιτλους...</string>
+  <string id="10211">Προσωρινή αποθήκευση υποτίτλων...</string>
   <string id="10212">τερματισμός</string>
   <string id="10213">αποθήκευση</string>
   <string id="10214">Άνοιγμα ροής</string>
+
   <string id="10500">Μουσική/Λίστα αναπαραγωγής</string>
   <string id="10501">Μουσική/Αρχεία</string>
   <string id="10502">Μουσική/Συλλογή</string>
   <string id="10507">Ρυθμίσεις</string>
   <string id="10508">Πρόγνωση καιρού</string>
   <string id="10509">Δικτυακό παιχνίδι</string>
-  <string id="10510">Î\9aαÏ\84αλήξεις</string>
+  <string id="10510">Î\95Ï\80εκÏ\84άÏ\83εις</string>
   <string id="10511">Πληροφορίες συστήματος</string>
+
   <string id="10516">Μουσική - Συλλογή</string>
-  <string id="10517">Μουσική - Παίζεται τώρα</string>
-  <string id="10522">Βίντεο - Παίζεται τώρα</string>
-  <string id="10523">Πληροφορίες</string>
+  <string id="10517">Τώρα Εκτελείται - Μουσική</string>
+
+  <string id="10522">Τώρα Εκτελείται - Βίντεο</string>
+  <string id="10523">Πληροφορίες άλμπουμ</string>
   <string id="10524">Πληροφορίες ταινίας</string>
-  <string id="12000">Επιλογή διαλόγου</string>
+
+  <string id="12000">Παράθυρο επιλογής</string>
   <string id="12001">Μουσική/Πληροφορίες</string>
-  <string id="12002">Î\94ιάλογοÏ\82 OK</string>
+  <string id="12002">ΠαÏ\81άθÏ\85Ï\81ο 'Î\95Ï\80ιλογή'</string>
   <string id="12003">Βίντεο/Πληροφορίες</string>
   <string id="12004">Scripts/Πληροφορίες</string>
   <string id="12005">Βίντεο πλήρους οθόνης</string>
-  <string id="12006">Απεικόνιση μουσικής</string>
-  <string id="12008">Διάλογος στοιβαγμένου αρχείου</string>
+  <string id="12006">Μουσική οπτικοποίηση</string>
+
+  <string id="12008">Παράθυρο στοιβαγμένου αρχείου</string>
   <string id="12009">Ανακατασκευή περιεχομένων...</string>
-  <string id="12010">Επιστροφή στην μουσική</string>
+  <string id="12010">Επιστροφή στη μουσική</string>
   <string id="12011">Επιστροφή στα βίντεο</string>
+
   <string id="12021">Εκκίνηση από την αρχή</string>
-  <string id="12022">Επανεκκίνηση από %s</string>
+  <string id="12022">Συνέχεια από %s</string>
+
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12318">8</string>
   <string id="12319">9</string>
   <string id="12320">c</string>
-  <string id="12321">Εντάξει</string>
+  <string id="12321">Επιλογή</string>
   <string id="12322">*</string>
-  <string id="12325">Î\9aλειδÏ\89μένοÏ\82! Εισαγωγή κωδικού...</string>
+  <string id="12325">Î\9aλειδÏ\8eθηκε! Εισαγωγή κωδικού...</string>
   <string id="12326">Εισαγωγή κωδικού πρόσβασης</string>
   <string id="12327">Εισαγωγή κεντρικού κωδικού</string>
   <string id="12328">Εισάγετε κωδικό ξεκλειδώματος</string>
-  <string id="12329">ή Ï\80αÏ\84ήστε C για ακύρωση</string>
-  <string id="12330">Εισάγετε συνδυασμό πλήκτρων και</string>
-  <string id="12331">Ï\80αÏ\84ήÏ\83Ï\84ε Î\95νÏ\84άξει, Î® Î\95Ï\80ιÏ\83Ï\84Ï\81οÏ\86ή για ακύρωση</string>
-  <string id="12332">ΤοÏ\80οθέÏ\84ηÏ\83η κλειδώματος</string>
+  <string id="12329">ή Ï\80ιέστε C για ακύρωση</string>
+  <string id="12330">Εισάγετε συνδυασμό (combo) πλήκτρων και</string>
+  <string id="12331">Ï\80ιέÏ\83Ï\84ε 'Î\95Ï\80ιλογή', Î® 'Î\95Ï\80ιÏ\83Ï\84Ï\81οÏ\86ή' για ακύρωση</string>
+  <string id="12332">Î\9fÏ\81ιÏ\83μÏ\8cÏ\82 κλειδώματος</string>
   <string id="12333">Ξεκλείδωμα</string>
   <string id="12334">Επανατοποθέτηση κλειδώματος</string>
   <string id="12335">Απομάκρυνση κλειδώματος</string>
   <string id="12337">Αριθμητικός κωδικός πρόσβασης</string>
-  <string id="12338">Συνδυασμός πλήκτρων του μοχλού</string>
+  <string id="12338">Συνδυασμός (combo) πλήκτρων του μοχλού</string>
   <string id="12339">Κωδικός πρόσβασης πλήρους κειμένου</string>
   <string id="12340">Εισαγωγή νέου κωδικού πρόσβασης</string>
   <string id="12341">Επανεισαγωγή νέου κωδικού πρόσβασης</string>
-  <string id="12342">Λάθος κωδικός πρόσβασης.</string>
-  <string id="12343">δοκιμές έμειναν</string>
+  <string id="12342">Λάθος κωδικός πρόσβασης,</string>
+  <string id="12343">δοκιμές έμειναν </string>
   <string id="12344">Ο κωδικός πρόσβασης δεν ταιριάζει.</string>
-  <string id="12345">Î\94εν ÎµÏ\80ιÏ\84Ï\81άÏ\80ηκε η πρόσβαση</string>
+  <string id="12345">Î\94εν ÎµÏ\80ιÏ\84Ï\81έÏ\80εÏ\84αι η πρόσβαση</string>
   <string id="12346">Οι δοκιμές εισαγωγής κωδικού πρόσβασης εξαντλήθηκαν.</string>
-  <string id="12347">Το Ï\83Ï\85Ï\83Ï\84ήμα τώρα θα απενεργοποιηθεί.</string>
+  <string id="12347">Το Ï\83Ï\8dÏ\83Ï\84ημα τώρα θα απενεργοποιηθεί.</string>
   <string id="12348">Το αντικείμενο κλειδώθηκε</string>
   <string id="12353">Επανενεργοποίηση κλειδώματος</string>
   <string id="12356">Αλλαγή κλειδώματος</string>
   <string id="12357">Πηγαίο κλείδωμα</string>
   <string id="12358">Το πεδίο του κωδικού πρόσβασης ήταν κενό. Ξαναπροσπαθήστε.</string>
   <string id="12360">Κεντρικό κλείδωμα</string>
-  <string id="12362">Απενεργοποίηση συστήματος όταν προσπάθειες εισαγωγής εξαντληθούν</string>
+  <string id="12362">Απενεργοποίηση συστήματος όταν εξαντληθούν οι προσπάθειες εισαγωγής</string>
   <string id="12367">Ο κεντρικός κωδικός δεν είναι έγκυρος</string>
-  <string id="12368">Παρακαλώ, εισάγετε έναν έγκυρο κεντρικό κωδικό</string>
-  <string id="12373">Ρυθμίσεις &amp;  διαχείριση αρχείων</string>
+  <string id="12368">Παρακαλώ εισάγετε έναν έγκυρο κεντρικό κωδικό</string>
+  <string id="12373">Ρυθμίσεις &amp; διαχείριση αρχείων</string>
   <string id="12376">Ορισμός ως προεπιλογή για όλες τις ταινίες</string>
   <string id="12377">Διαγράφει όλες τις προηγούμενες αποθηκευμένες τιμές</string>
   <string id="12378">Χρονικό διάστημα προβολής κάθε εικόνας</string>
-  <string id="12379">Εφέ προσαρμογης αναλογιών σήματος (pan &amp; zoom)</string>
-  <string id="12383">Κανονικό ρολόι</string>
-  <string id="12384">Ψηφιακό ρολόι</string>
+  <string id="12379">Εφέ προσαρμογής αναλογιών σήματος (pan &amp; zoom)</string>
+
+  <string id="12383">Ρολόι 12 ωρών</string>
+  <string id="12384">Ρολόι 24 ωρών</string>
   <string id="12385">Μέρα/Μήνας</string>
   <string id="12386">Μήνας/Μέρα</string>
+
   <string id="12390">Χρόνος λειτουργίας συστήματος</string>
   <string id="12391">Λεπτά</string>
   <string id="12392">Ώρες</string>
   <string id="12393">Μέρες</string>
   <string id="12394">Συνολικός χρόνος λειτουργίας</string>
   <string id="12395">Επίπεδο φόρτισης</string>
+
   <string id="12600">Ο καιρός</string>
+
   <string id="12900">Προφύλαξη οθόνης</string>
-  <string id="12901">Πλήρους οθόνης απεικόνισεις (OSD)</string>
+  <string id="12901">Απεικονίσεις πλήρους οθόνης (OSD)</string>
+
   <string id="13000">Σύστημα</string>
   <string id="13001">Άμεση ελάττωση περιστροφής (Spindown)</string>
   <string id="13002">Βίντεο μόνο</string>
   <string id="13003">- Καθυστέρηση</string>
   <string id="13004">- Ελάχιστη διάρκεια αρχείου</string>
   <string id="13005">Παύση λειτουργίας</string>
+
   <string id="13008">Λειτουργία τερματισμού</string>
   <string id="13009">Έξοδος</string>
   <string id="13010">Αδρανοποίηση</string>
-  <string id="13011">Î\8eÏ\80νÏ\89Ï\83η</string>
+  <string id="13011">Î\91ναÏ\83Ï\84ολή</string>
   <string id="13012">Έξοδος</string>
-  <string id="13013">Επανεκκίνηση</string>
+  <string id="13013">Επανεκκίνηση Συστήματος</string>
   <string id="13014">Ελαχιστοποίηση</string>
   <string id="13015">Ενέργεια πλήκτρου λειτουργίας</string>
   <string id="13016">Απενεργοποίηση συστήματος</string>
-  <string id="13020">Είναι ενεργή άλλη συνεδρία (ίσως μέσω ssh);</string>
-  <string id="13021">Προσάρτηση αναιρούμενου δίσκου</string>
-  <string id="13022">Επισφαλής αφαίρεση συσκευής</string>
+
+  <string id="13020">Είναι ενεργή άλλη συνεδρία, ίσως μέσω ssh;</string>
+  <string id="13021">Προσαρτήθηκε αφαιρούμενος δίσκος</string>
+  <string id="13022">Μη ασφαλής αφαίρεση συσκευής</string>
   <string id="13023">Η συσκευή αφαιρέθηκε επιτυχώς</string>
   <string id="13024">Συνδέθηκε χειριστήριο</string>
   <string id="13025">Αποσυνδέθηκε χειριστήριο</string>
+
   <string id="13050">Έχει αποφορτιστεί η μπαταρία</string>
+
   <string id="13100">Φίλτρο Flicker (τρεμόπαιγμα οθόνης)</string>
   <string id="13101">Αφήστε τον οδηγό να επιλέξει (απαιτεί επανεκκίνηση)</string>
+
   <string id="13105">Κατακόρυφος χρονισμός</string>
   <string id="13106">Ανενεργός</string>
   <string id="13107">Ενεργός κατά την αναπαραγωγή βίντεο</string>
   <string id="13108">Πάντα ενεργός</string>
-  <string id="13109">Δοκιμή ανάλυσης</string>
+  <string id="13109">Δοκιμή &amp; εφαρμογή ανάλυσης</string>
   <string id="13110">Αποθήκευση ανάλυσης;</string>
   <string id="13111">Θέλετε να διατηρήσετε αυτή την ανάλυση;</string>
+
   <string id="13112">Υψηλή ποιότητα ανακλιμακοθέτησης</string>
   <string id="13113">Ανενεργό</string>
-  <string id="13114">Ενεργό για περιεχόμενο SD </string>
+  <string id="13114">Ενεργό για περιεχόμενο SD</string>
   <string id="13115">Πάντα ενεργό</string>
-  <string id="13116">Μέθοδος ανακλιμακοθέτησης</string>
-  <string id="13117">Δικυβική</string>
+
+  <string id="13116">Μέθοδος Upscaling</string>
+  <string id="13117">Bicubic</string>
   <string id="13118">Lanczos</string>
   <string id="13119">Sinc</string>
   <string id="13120">VDPAU</string>
-  <string id="13121">VDPAU HQ ανακλιμακοθέτηση</string>
-  <string id="13122">VDPAU Μετατροπή στάθμης χρώματος</string>
-  <string id="13130">Κενό σε άλλες απεικονίσεις</string>
+  <string id="13121">VDPAU HQ Upscaling επίπεδο</string>
+  <string id="13122">VDPAU Μετατροπή χρώματος επιπέδου στούντιο</string>
+
+  <string id="13130">Κενό σε άλλες οθόνες</string>
   <string id="13131">Ανενεργή</string>
-  <string id="13132">Blank displays</string>
-  <string id="13140">Έχουν ανιχνευτεί ενεργές συνδέσεις! </string>
-  <string id="13141">Εάν συνεχίσετε, δεν θα είναι δυνατός πλέον ο έλεγχος του XBMC.</string>
+  <string id="13132">Κενές οθόνες</string>
+
+  <string id="13140">Έχουν ανιχνευτεί ενεργές συνδέσεις!</string>
+  <string id="13141">Αν συνεχίσετε, μπορεί να χάσετε τον έλεγχο του XBMC.</string>
   <string id="13142">Να διακοπεί η λειτουργία του Απομακρυσμένου διακομιστή;</string>
-  <string id="13144">Αλλαγή κατάστασης συσκευής (Apple Remote);</string>
-  <string id="13145">Εάν χρησιμοποιείτε τώρα τη συσκευή (Apple Remote) για να</string>
-  <string id="13146">ελέγξετε το XBMC, η αλλαγή της ρύθμισης αυτής θα επηρεάσει</string>
+
+  <string id="13144">Αλλαγή λειτουργίας συσκευής Apple Remote;</string>
+  <string id="13145">Εάν χρησιμοποιείτε τώρα τη συσκευή Apple Remote για να</string>
+  <string id="13146">ελέγχετε το XBMC, η αλλαγή αυτής της ρύθμισης θα επηρεάσει</string>
   <string id="13147">την ικανότητα ελέγχου του. Θέλετε να συνεχίσετε;</string>
-  <string id="13159">Μάσκα Subnet</string>
+
+  <string id="13159">Μάσκα Υποδικτύου</string>
   <string id="13160">Πύλη</string>
   <string id="13161">Πρωτεύον DNS</string>
   <string id="13162">Η αναγνώριση απέτυχε</string>
+
   <string id="13170">Ποτέ</string>
   <string id="13171">Αμέσως</string>
   <string id="13172">Μετά από %i δευτ.</string>
-  <string id="13173">Ημερομηνία εγκατάστασης</string>
-  <string id="13174">Πλήθος περιστροφών σε ισχύ</string>
+  <string id="13173">Ημερομηνία εγκατάστασης:</string>
+  <string id="13174">Πλήθος περιστροφών σε ισχύ:</string>
+
   <string id="13200">Προφίλ</string>
   <string id="13201">Διαγραφή προφίλ '%s';</string>
+
   <string id="13204">Προηγούμενο προφίλ:</string>
   <string id="13205">Άγνωστο</string>
   <string id="13206">Αντικατάσταση</string>
+
   <string id="13208">Ξυπνητήρι</string>
   <string id="13209">Διάρκεια κουδουνισμού (σε λεπτά)</string>
   <string id="13210">Εκκίνηση ξυπνητηριού σε %im</string>
   <string id="13211">Συναγερμός!</string>
-  <string id="13212">Ακυρώθηκε %im%is απέμειναν</string>
-  <string id="13213">%2.0fm</string>
-  <string id="13214">%2.0fs</string>
-  <string id="13249">Αναζήτηση υποτίτλων στα RARs</string>
+  <string id="13212">Ακυρώθηκε με %im%is να απομένουν</string>
+  <string id="13213">%2.0fm</string> <!--minutes (left from countdown)-->
+  <string id="13214">%2.0fs</string> <!--seconds (left from countdown)-->
+
+  <string id="13249">Αναζήτηση υποτίτλων σε RAR</string>
   <string id="13250">Αναζήτηση για υπότιτλο...</string>
   <string id="13251">Μετακίνηση αντικειμένου</string>
   <string id="13252">Μετακίνηση αντικειμένου εδώ</string>
   <string id="13253">Ακύρωση μετακίνησης</string>
-  <string id="13270">Υλικό</string>
-  <string id="13271">Ταχύτητα CPU</string>
-  <string id="13274">Συνδέθηκε, αλλά η διεύθυνση DNS δεν είναι διαθέσιμη.</string>
+
+  <string id="13270">Υλικό:</string>
+  <string id="13271">Χρήση CPU:</string>
+
+  <string id="13274">Συνδέθηκε, αλλά δεν υπάρχει διαθέσιμη DNS.</string>
   <string id="13275">Σκληρός δίσκος</string>
   <string id="13276">DVD-ROM</string>
   <string id="13277">Μέσα αποθήκευσης</string>
   <string id="13279">Δίκτυο</string>
   <string id="13280">Βίντεο</string>
   <string id="13281">Υλικό</string>
-  <string id="13283">Λειτουργικό σύστημα</string>
-  <string id="13284">Ταχύτητα CPU</string>
-  <string id="13286">Βίντεο κωδικοποιητής</string>
-  <string id="13287">Ανάλυση οθόνης</string>
-  <string id="13292">Καλώδιο A/V</string>
-  <string id="13294">Περιοχή DVD</string>
-  <string id="13295">Internet</string>
+
+  <string id="13283">Λειτουργικό σύστημα:</string>
+  <string id="13284">Ταχύτητα CPU:</string>
+
+  <string id="13286">Κωδικοποιητής βίντεο:</string>
+  <string id="13287">Ανάλυση οθόνης:</string>
+
+  <string id="13292">Καλώδιο A/V:</string>
+
+  <string id="13294">Περιοχή DVD:</string>
+  <string id="13295">Διαδίκτυο:</string>
   <string id="13296">Συνδέθηκε</string>
   <string id="13297">Δε συνδέθηκε. Ελέγξτε τις ρυθμίσεις δικτύου.</string>
-  <string id="13299">Θερμοκρασία στόχος</string>
+
+  <string id="13299">Επιθυμητή θερμοκρασία</string>
   <string id="13300">Ταχύτητα ανεμιστήρα</string>
   <string id="13301">Αυτόματος έλεγχος θερμοκρασίας</string>
-  <string id="13302">Προτεραιότητα στην ταχύτητα του ανεμιστήρα</string>
+  <string id="13302">Παράκαμψη ταχύτητας ανεμιστήρα</string>
   <string id="13303">- Γραμματοσειρές</string>
   <string id="13304">Ενεργοποίηση αμφίδρομης κατεύθυνσης</string>
   <string id="13305">Εμφάνιση ροών τίτλων ειδήσεων (RSS)</string>
-  <string id="13306">Εμφάνιση περιεχομένων φακέλου</string>
-  <string id="13307">Πρότυπο ονομασίας κομματιού</string>
+  <string id="13306">Εμφάνιση περιεχομένων αρχικού φακέλου</string>
+  <string id="13307">Πρότυπο ονομασίας κομματιών</string>
   <string id="13308">Επιθυμείτε επανεκκίνηση του συστήματος</string>
   <string id="13309">και όχι μόνο του XBMC;</string>
   <string id="13310">Εφέ μεγέθυνσης</string>
   <string id="13312">Ελαχιστοποίηση μαύρης μπάρας</string>
   <string id="13313">Επανεκκίνηση</string>
   <string id="13314">Βαθμιαία εξασθένιση μεταξύ των τραγουδιών</string>
-  <string id="13315">Î\95Ï\80αναδημιοÏ\85Ï\81γία Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ίαÏ\82</string>
-  <string id="13316">Î\95Ï\80αναλαμβανÏ\8cμενη Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ία</string>
-  <string id="13317">Προβολή παρουσίασης</string>
-  <string id="13318">Î\95Ï\80αναλαμβανÏ\8cμενη Ï\80αÏ\81οÏ\85Ï\83ίαÏ\83η</string>
+  <string id="13315">Î\95Ï\80αναδημιοÏ\85Ï\81γία Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ιÏ\8eν</string>
+  <string id="13316">Î\9cικÏ\81ογÏ\81αÏ\86ίεÏ\82 ÎºÎ±Î¹ Ï\83ε Ï\85Ï\80οÏ\86ακέλοÏ\85Ï\82</string>
+  <string id="13317">Παρουσίαση διαφανειών</string>
+  <string id="13318">ΠαÏ\81οÏ\85Ï\83ίαÏ\83η Î´Î¹Î±Ï\86ανειÏ\8eν ÎºÎ±Î¹ Ï\84Ï\89ν Ï\85Ï\80οÏ\86ακέλÏ\89ν</string>
   <string id="13319">Τυχαία διάταξη</string>
   <string id="13320">Στερεοφωνικά</string>
   <string id="13321">Αριστερό μόνο</string>
-  <string id="13322">Î\94εξιÏ\8c μόνο</string>
+  <string id="13322">Î\94εξί μόνο</string>
   <string id="13323">Ενεργοποίηση υποστήριξης karaoke</string>
-  <string id="13324">Î\94ιαÏ\86άνεια Ï\83Ï\84ο Ï\85Ï\80Ï\8cβαθÏ\81Ï\8c</string>
-  <string id="13325">Î\94ιαÏ\86άνεια Ï\83ε Ï\80Ï\81Ï\8eÏ\84ο Ï\80λάνο</string>
+  <string id="13324">Î\94ιαÏ\86άνεια Ï\85Ï\80οβάθÏ\81οÏ\85</string>
+  <string id="13325">Î\94ιαÏ\86άνεια Ï\80Ï\81οÏ\83κήνιοÏ\85</string>
   <string id="13326">A/V καθυστέρηση</string>
   <string id="13327">Karaoke</string>
   <string id="13328">%s δεν βρέθηκε</string>
   <string id="13329">Σφάλμα κατά το άνοιγμα %s</string>
   <string id="13330">Αδυναμία φόρτωσης %s</string>
-  <string id="13331">Σφάλμα: Έλλειψη μνήμης.</string>
+  <string id="13331">Σφάλμα: Έλλειψη μνήμης</string>
   <string id="13332">Μετακίνηση πάνω</string>
   <string id="13333">Μετακίνηση κάτω</string>
   <string id="13334">Επεξεργασία ετικέτας</string>
   <string id="13335">Εξ' ορισμού επιλογή</string>
   <string id="13336">Απαλοιφή πλήκτρου</string>
+
   <string id="13340">Παραμένει ως έχει</string>
   <string id="13341">Πράσινο</string>
   <string id="13342">Πορτοκαλί</string>
   <string id="13343">Κόκκινο</string>
   <string id="13344">Κύκλος</string>
-  <string id="13345">ΣβηÏ\83μένη Î· Î»Ï\85Ï\87νία κατά την αναπαραγωγή</string>
+  <string id="13345">Î\91Ï\80ενεÏ\81γοÏ\80οίηÏ\83η Î»Ï\85Ï\87νίαÏ\82 (LED) κατά την αναπαραγωγή</string>
   <string id="13346">Πληροφορίες ταινίας</string>
   <string id="13347">Κομμάτι σε αναμονή</string>
-  <string id="13348">Αναζήτηση IMDb...</string>
+  <string id="13348">Αναζήτηση στο IMDb...</string>
   <string id="13349">Έρευνα για νέο περιεχόμενο</string>
   <string id="13350">Τώρα εκτελείται...</string>
   <string id="13351">Πληροφορίες άλμπουμ</string>
   <string id="13352">Ανίχνευση αντικειμένου στη συλλογή</string>
   <string id="13353">Διακοπή αναζήτησης</string>
   <string id="13354">Μέθοδος απόδοσης</string>
-  <string id="13355">Χαμηλής ποιότητας (Pixel Shader)</string>
+  <string id="13355">Χαμηλής ποιότητας σκίαση pixel</string>
   <string id="13356">Επικαλύψεις υλικού</string>
-  <string id="13357">Υψηλής ποιότητας (Pixel Shader)</string>
+  <string id="13357">Υψηλής ποιότητας σκίαση pixel</string>
   <string id="13358">Αναπαραγωγή αντικειμένου</string>
   <string id="13359">Ορισμός μικρογραφίας καλλιτέχνη</string>
   <string id="13360">Αυτόματη δημιουργία μικρογραφιών</string>
   <string id="13361">Ενεργοποίηση φωνής</string>
+
   <string id="13375">Ενεργοποίηση συσκευής</string>
   <string id="13376">Ένταση</string>
   <string id="13377">Προεπιλεγμένη κατάσταση προβολής</string>
   <string id="13378">Προεπιλεγμένη φωτεινότητα</string>
   <string id="13379">Προεπιλεγμένη αντίθεση</string>
-  <string id="13380">Προεπιλεγμένος συντελεστής γάμα</string>
+  <string id="13380">ΠÏ\81οεÏ\80ιλεγμένοÏ\82 Ï\83Ï\85νÏ\84ελεÏ\83Ï\84ήÏ\82 Î³Î¬Î¼Î¼Î±</string>
   <string id="13381">Συνέχιση βίντεο</string>
   <string id="13382">Μάσκα φωνής - Θύρα 1</string>
   <string id="13383">Μάσκα φωνής - Θύρα 2</string>
   <string id="13384">Μάσκα φωνής - Θύρα 3</string>
   <string id="13385">Μάσκα φωνής - Θύρα 4</string>
-  <string id="13386">Î\91ναζήÏ\84ηÏ\83η Î²Î±Ï\83ιÏ\83μένη Ï\83Ï\84ην Ï\87Ï\81ήÏ\83η χρόνου</string>
+  <string id="13386">Î\91ναζήÏ\84ηÏ\83η Î²Î¬Ï\83ει χρόνου</string>
   <string id="13387">Πρότυπο ονομασίας κομματιού (δεξιά πλευρά)</string>
-  <string id="13388">Προκαθορισμένα</string>
-  <string id="13389">Δεν υπάρχουν διαθέσιμα προκαθορισμένα
-γι' αυτή την απεικόνιση</string>
-  <string id="13390">Δεν υπάρχουν διαθέσιμες ρυθμίσεις
-γι' αυτή την απεικόνιση</string>
+  <string id="13388">Προκαθορισμένο</string>
+  <string id="13389">Δεν υπάρχουν διαθέσιμα προκαθορισμένα&#10;γι' αυτή την οπτικοποίηση</string>
+  <string id="13390">Δεν υπάρχουν διαθέσιμες ρυθμίσεις&#10;γι' αυτή την οπτικοποίηση</string>
   <string id="13391">Εξαγωγή/Εισαγωγή</string>
-  <string id="13392">ΧÏ\81ήÏ\83η Î±Ï\80εικονίÏ\83εÏ\89ν ÎºÎ±Ï\84ά Ï\84ην Î±Î½Î±Ï\80αÏ\81αγÏ\89γή Î®Ï\87οÏ\85</string>
+  <string id="13392">ΧÏ\81ήÏ\83η Î¿Ï\80Ï\84ικοÏ\80οιήÏ\83εÏ\89ν ÎºÎ±Ï\84ά Ï\84ην Î±Î½Î±Ï\80αÏ\81αγÏ\89γή Î¼Î¿Ï\85Ï\83ικήÏ\82</string>
   <string id="13393">Υπολόγισε το μέγεθος</string>
   <string id="13394">Υπολογισμός μεγέθους φακέλου</string>
   <string id="13395">Ρυθμίσεις βίντεο</string>
   <string id="13396">Ρυθμίσεις ήχου και υποτίτλων</string>
   <string id="13397">Ενεργοποίηση υποτίτλων</string>
   <string id="13398">Συντομεύσεις</string>
-  <string id="13399">Î\91γνÏ\8cηÏ\83ε Ï\84ο Î¬Ï\81θÏ\81ο "The" ÎºÎ±Ï\84ά Ï\84ην Ï\84αξινÏ\8cμηÏ\83η</string>
-  <string id="13400">Î\92αθμιαία ÎµÎ¾Î±Ï\83θένιÏ\83η Î¼ÎµÏ\84αξÏ\8d Ï\84Ï\89ν Ï\84Ï\81αγοÏ\85διÏ\8eν Ï\84οÏ\85 Î¯Î´Î¹Î¿Ï\85 Î¬Î»Î¼Ï\80οÏ\85μ</string>
+  <string id="13399">Î\91γνÏ\8cηÏ\83ε Ï\84α Î¬Ï\81θÏ\81α ÎºÎ±Ï\84ά Ï\84ην Ï\84αξινÏ\8cμηÏ\83η (Ï\80\87. Ï\84ο "The")</string>
+  <string id="13400">Βαθμιαία εξασθένιση μεταξύ τραγουδιών του ίδιου άλμπουμ</string>
   <string id="13401">Αναζήτηση για %s</string>
   <string id="13402">Εμφάνιση της θέσης του κομματιού</string>
   <string id="13403">Απαλοιφή προεπιλογών</string>
   <string id="13404">Συνέχεια</string>
-  <string id="13405">Î\9cικÏ\81ογÏ\81αÏ\86ία</string>
+  <string id="13405">Î\9bήÏ\88η Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ίαÏ\82</string>
   <string id="13406">Πληροφορίες εικόνας</string>
   <string id="13407">%s προκαθορισμένα</string>
-  <string id="13408">(Αξιολόγηση χρήστη IMDb)</string>
-  <string id="13409">250 κορυφαία </string>
+  <string id="13408">(Αξιολόγηση IMDb)</string>
+  <string id="13409">250 κορυφαία</string>
   <string id="13410">Συντονισμός στο Last.FM</string>
   <string id="13411">Ελάχιστη ταχύτητα ανεμιστήρα</string>
   <string id="13412">Αναπαραγωγή από εδώ</string>
   <string id="13413">Λήψη</string>
-  <string id="13414">Î\95νÏ\83Ï\89μάÏ\84Ï\89Ï\83η ÎºÎ±Î»Î»Î¹Ï\84εÏ\87νÏ\8eν Ï\80οÏ\85 ÎµÎ¼Ï\86ανίζονÏ\84αι Î¼Ï\8cνο Ï\83Ï\84ιÏ\82 συνθέσεις</string>
+  <string id="13414">ΣÏ\85μÏ\80εÏ\81ίληÏ\88η ÎºÎ±Î»Î»Î¹Ï\84εÏ\87νÏ\8eν Ï\80οÏ\85 ÎµÎ¼Ï\86ανίζονÏ\84αι Î¼Ï\8cνο Ï\83ε συνθέσεις</string>
   <string id="13415">Μέθοδος απόδοσης</string>
   <string id="13416">Αυτόματη ανίχνευση</string>
-  <string id="13417">ΣÏ\84οιÏ\87ειÏ\8eδης (ARB)</string>
-  <string id="13418">Î\95ξειδικεÏ\85μένη (GLSL)</string>
+  <string id="13417">ΣÏ\84οιÏ\87ειÏ\8eδειÏ\82 Ï\83κιαÏ\83Ï\84ές (ARB)</string>
+  <string id="13418">ΠÏ\81οηγμένοι Ï\83κιαÏ\83Ï\84έÏ\82 (GLSL)</string>
   <string id="13419">Λογισμικό</string>
   <string id="13420">Ασφαλής κατάργηση</string>
   <string id="13421">VDPAU</string>
-  <string id="13422">Î\88ναÏ\81ξη Ï\80αÏ\81οÏ\85Ï\83ίαÏ\83ηÏ\82 Î´Î¹Î±Ï\86ανειÏ\8eν εδώ</string>
-  <string id="13423">Î\91Ï\80ομνημÏ\8cνεÏ\85Ï\83η Î±Ï\85Ï\84ήÏ\82 Ï\84ηÏ\82 Î´Î¹Î±Î´Ï\81ομήÏ\82</string>
-  <string id="13424">Χρήση των προσωρινά αποθηκευμένων αντικειμένων</string>
-  <string id="13425">Î\91Ï\80οδοÏ\87ή επιτάχυνσης υλικού (VDPAU)</string>
-  <string id="13426">Î\91Ï\80οδοÏ\87ή επιτάχυνσης υλικού (VAAPI)</string>
-  <string id="13427">Î\91Ï\80οδοÏ\87ή επιτάχυνσης υλικού (DXVA2)</string>
-  <string id="13428">Î\91Ï\80οδοÏ\87ή επιτάχυνσης υλικού (CrystalHD)</string>
-  <string id="13429">Î\91Ï\80οδοÏ\87ή επιτάχυνσης υλικού (VDADecoder)</string>
-  <string id="13430">Î\91Ï\80οδοÏ\87ή επιτάχυνσης υλικού (OpenMax)</string>
-  <string id="13431">Σκιάσεις εικονοστοιχείου</string>
+  <string id="13422">ΠαÏ\81οÏ\85Ï\83ίαÏ\83η Î´Î¹Î±Ï\86ανειÏ\8eν Î±Ï\80Ï\8c εδώ</string>
+  <string id="13423">Î\91Ï\80ομνημÏ\8cνεÏ\85Ï\83η Î³Î¹Î± Î±Ï\85Ï\84ή Ï\84η Î´Î¹Î±Î´Ï\81ομή</string>
+  <string id="13424">Χρήση αντικειμένων προσωρινής μνήμης pixel</string>
+  <string id="13425">Î\88γκÏ\81ιÏ\83η επιτάχυνσης υλικού (VDPAU)</string>
+  <string id="13426">Î\88γκÏ\81ιÏ\83η επιτάχυνσης υλικού (VAAPI)</string>
+  <string id="13427">Î\88γκÏ\81ιÏ\83η επιτάχυνσης υλικού (DXVA2)</string>
+  <string id="13428">Î\88γκÏ\81ιÏ\83η επιτάχυνσης υλικού (CrystalHD)</string>
+  <string id="13429">Î\88γκÏ\81ιÏ\83η επιτάχυνσης υλικού (VDADecoder)</string>
+  <string id="13430">Î\88γκÏ\81ιÏ\83η επιτάχυνσης υλικού (OpenMax)</string>
+  <string id="13431">Σκιάσεις Pixel</string>
   <string id="13432">Έγκριση επιτάχυνσης υλικού (VideoToolbox)</string>
+
   <string id="13500">Μέθοδος συγχρονισμού A/V</string>
   <string id="13501">Χρονισμός ήχου</string>
   <string id="13502">Χρονισµός βίντεο (εις βάρος του ήχου)</string>
   <string id="13507">Μεσαία</string>
   <string id="13508">Υψηλή</string>
   <string id="13509">Πραγματικά υψηλή (αργή!)</string>
-  <string id="13510">Συγχρονισμός αναπαραγωγής ήχου κατά τη προβολή</string>
-  <string id="13550">Παύση κατά τη διάρκεια ανανέωσης του ρυθμού αλλαγής </string>
+  <string id="13510">Συγχρονισμός αναπαραγωγής ήχου με οθόνη</string>
+
+  <string id="13550">Παύση κατά την αλλαγή του ρυθμού ανανέωσης</string>
   <string id="13551">Ανενεργό</string>
   <string id="13552">%.1f Δευτερόλεπτο</string>
   <string id="13553">%.1f Δευτερόλεπτα</string>
+
   <string id="13600">Apple Remote</string>
-  <string id="13602">Έγκριση έναρξης του XBMC μέσου απομακρυσμένου ελέγχου</string>
-  <string id="13603">Ακολουθία χρόνου καθυστέρησης</string>
+
+  <string id="13602">Έγκριση έναρξης του XBMC μέσου του χειριστηρίου</string>
+  <string id="13603">Χρόνος καθυστέρησης ακολουθίας</string>
+
   <string id="13610">Ανενεργή</string>
   <string id="13611">Τυπική</string>
   <string id="13612">Τηλεχειριστήριο γενικής χρήσης</string>
-  <string id="13613">Τηλεχειριστήριο γενικής χρήσης (Harmony)</string>
-  <string id="13620">Σφάλμα συσκευής (Apple Remote)</string>
-  <string id="13621">Αδυναμία υποστήριξης συσκευής (Apple Remote).</string>
+  <string id="13613">Τηλεχειριστήριο Multi (Harmony)</string>
+
+  <string id="13620">Σφάλμα συσκευής Apple Remote</string>
+  <string id="13621">Αδυναμία υποστήριξης συσκευής Apple Remote.</string>
+
   <string id="14000">Στοίβαγμα</string>
   <string id="14001">Σκόρπισμα</string>
   <string id="14003">Λήψη αρχείου λίστας αναπαραγωγής...</string>
   <string id="14005">Ανάλυση λίστας ροής πολυμέσων...</string>
   <string id="14006">Αποτυχία λήψης λίστας ροής πολυμέσων</string>
   <string id="14007">Αποτυχία λήψης αρχείου λίστας αναπαραγωγής</string>
+
   <string id="14009">Κατάλογος παιχνιδιών</string>
-  <string id="14010">Αυτόματη εναλλαγή με βάση τις μικρογραφίες</string>
+  <string id="14010">Αυτόματη εναλλαγή σε μικρογραφίες βάσει</string>
   <string id="14011">Ενεργοποίηση αυτόματης εναλλαγής στην προβολή μικρογραφιών</string>
   <string id="14012">- Χρήση μεγάλων εικονιδίων</string>
-  <string id="14013">- Î\95ναλλαγή Î²Î¬Ï\83η</string>
+  <string id="14013">- Î\95ναλλαγή Î²Î¬Ï\83ει</string>
   <string id="14014">- Ποσοστό</string>
   <string id="14015">Καθόλου αρχεία και τουλάχιστον μία μικρογραφία</string>
-  <string id="14016">ΤοÏ\85λάÏ\87ιÏ\83Ï\84ον Î­Î½Î± Î±Ï\81Ï\87είο ÎºÎ±Î¹ Î¼Î¹α μικρογραφία</string>
+  <string id="14016">ΤοÏ\85λάÏ\87ιÏ\83Ï\84ον Î­Î½Î± Î±Ï\81Ï\87είο ÎºÎ±Î¹ Î¼Î¯α μικρογραφία</string>
   <string id="14017">Ποσοστό μικρογραφιών</string>
   <string id="14018">Επιλογές προβολής</string>
   <string id="14019">Αλλαγή κωδικού 1ης περιοχής</string>
   <string id="14021">Αλλαγή κωδικού 3ης περιοχής</string>
   <string id="14022">Συλλογή</string>
   <string id="14023">Χωρίς τηλεόραση</string>
-  <string id="14024">Εισαγωγή της κοντινότερης μεγάλης πόλης ή ταχυδρομικού κωδικού (US)</string>
+  <string id="14024">Εισαγωγή της κοντινότερης μεγάλης πόλης</string>
   <string id="14025">Συνολική λανθάνουσα μνήμη - Σκληρός δίσκος</string>
-  <string id="14026">Λανθάνουσα μνήμη βίντεο - DVDRom</string>
+  <string id="14026">Λανθάνουσα μνήμη βίντεο - DVD-ROM</string>
   <string id="14027">- Τοπικό δίκτυο</string>
-  <string id="14028">- Internet</string>
-  <string id="14030">Λανθάνουσα μνήμη ήχου - DVDRom</string>
+  <string id="14028">- Διαδίκτυο</string>
+  <string id="14030">Λανθάνουσα μνήμη ήχου - DVD-ROM</string>
   <string id="14031">- Τοπικό δίκτυο</string>
-  <string id="14032">- Internet</string>
-  <string id="14034">Λανθάνουσα μνήμη DVD - DVDRom</string>
+  <string id="14032">- Διαδίκτυο</string>
+  <string id="14034">Λανθάνουσα μνήμη DVD - DVD-ROM</string>
   <string id="14035">- Τοπικό δίκτυο</string>
   <string id="14036">Υπηρεσίες</string>
+
   <string id="14038">Οι ρυθμίσεις του δικτύου άλλαξαν</string>
   <string id="14039">Το XBMC πρέπει να επανεκκινηθεί για να αλλάξουν</string>
   <string id="14040">οι ρυθμίσεις δικτύου. Να γίνει επανεκκίνηση;</string>
-  <string id="14041">Σύνδεση Internet με περιορισμένο εύρος</string>
+  <string id="14041">Σύνδεση Διαδικτύου με περιορισμένο εύρος ζώνης</string>
+
   <string id="14043">- Τερματισμός κατά την αναπαραγωγή</string>
   <string id="14044">%i λεπτ.</string>
   <string id="14045">%i δευτ.</string>
   <string id="14048">%i kbps</string>
   <string id="14049">%i kb</string>
   <string id="14050">%i.0 dB</string>
-  <string id="14051">Î\94ιαμÏ\8cÏ\81Ï\86Ï\89Ï\83η Ώρας</string>
-  <string id="14052">Î\94ιαμÏ\8cÏ\81Ï\86Ï\89Ï\83η Ημ/νίας</string>
+  <string id="14051">Î\9cοÏ\81Ï\86ή Ώρας</string>
+  <string id="14052">Î\9cοÏ\81Ï\86ή Ημ/νίας</string>
   <string id="14053">Φίλτρα γραφικού περιβάλλοντος (GUI)</string>
+
   <string id="14055">Σάρωση στο παρασκήνιο</string>
   <string id="14056">Διακοπή σάρωσης</string>
-  <string id="14057">Δεν είναι εφικτό κατά τη σάρωση πληροφοριών αρχείων</string>
+  <string id="14057">Δεν είναι εφικτό κατά τη σάρωση πληροφοριών πολυμέσων</string>
   <string id="14058">Εφέ Film Grain</string>
-  <string id="14059">Έρευνα στους κοινόχρηστους πόρους για μικρογραφίες </string>
-  <string id="14060">Άγνωστος τύπος λανθάνουσας μνήμης - Internet</string>
+  <string id="14059">Έρευνα στους κοινόχρηστους πόρους για μικρογραφίες</string>
+  <string id="14060">Άγνωστος τύπος λανθάνουσας μνήμης - Διαδίκτυο</string>
   <string id="14061">Αυτόματο/η</string>
   <string id="14062">Εισάγετε όνομα χρήστη για</string>
-  <string id="14063">Ημερομηνία &amp; Ώρα</string>
-  <string id="14064">Ορισμός ημερομηνίας</string>
+  <string id="14063">Ημερομηνία &amp; ώρα</string>
+  <string id="14064">Ορισμός ημ/νίας</string>
   <string id="14065">Ορισμός ώρας</string>
-  <string id="14066">Εισάγετε την ώρα σε ψηφιακή μορφή</string>
-  <string id="14067">Εισάγετε την ημ/νία στο ΗΗ/MM/ΕΤΟΣ</string>
+  <string id="14066">Εισάγετε την ώρα σε 24ωρη μορφή (ΩΩ:ΛΛ)</string>
+  <string id="14067">Εισάγετε την ημ/νία σε μορφή ΗΗ/MM/ΕΤΟΣ</string>
   <string id="14068">Εισάγετε την διεύθυνση ΙP</string>
   <string id="14069">Εφαρμογή αυτών των ρυθμίσεων τώρα;</string>
   <string id="14070">Εφαρμογή ρυθμίσεων τώρα</string>
-  <string id="14071">Επιτρεπτή η μετονομασία και η διαγραφή</string>
+  <string id="14071">Επιτρεπτή η μετονομασία και η διαγραφή αρχείων</string>
+
   <string id="14074">Ορισμός ζώνης ώρας</string>
   <string id="14075">Ενεργοποίηση θερινής ώρας</string>
   <string id="14076">Προσθήκη στα αγαπημένα</string>
   <string id="14082">Εμφάνιση πληροφοριών εικόνας (EXIF)</string>
   <string id="14083">Χρήση του μεγιστοποιημένου παραθύρου αντί της πλήρους οθόνης</string>
   <string id="14084">Επιλεγμένα τραγούδια στη λίστα αναμονής</string>
-  <string id="14085">Αυτόματη αναπαραγωγή CDs ήχου</string>
+  <string id="14085">Αυτόματη αναπαραγωγή CD ήχου</string>
   <string id="14086">Αναπαραγωγή</string>
-  <string id="14087">DVDs</string>
-  <string id="14088">Αυτόματη αναπαραγωγή DVDs βίντεο</string>
+  <string id="14087">DVD</string>
+  <string id="14088">Αυτόματη αναπαραγωγή DVD</string>
   <string id="14089">Χρήση γραμματοσειράς στους υπότιτλους</string>
   <string id="14090">Διεθνοποίηση</string>
   <string id="14091">Κωδικοποίηση χαρακτήρων</string>
-  <string id="14092">Î\91Ï\80οÏ\83Ï\86αλμάÏ\84Ï\89Ï\83η</string>
+  <string id="14092">Î\95νÏ\84οÏ\80ιÏ\83μÏ\8cÏ\82 Ï\83Ï\86αλμάÏ\84Ï\89ν</string>
   <string id="14093">Ασφάλεια</string>
   <string id="14094">Συσκευές εισόδου</string>
   <string id="14095">Εξοικονόμηση ενέργειας</string>
+
   <string id="15015">Απομάκρυνση</string>
   <string id="15016">Παιχνίδια</string>
+
   <string id="15019">Προσθήκη</string>
+
   <string id="15052">Κωδικός πρόσβασης</string>
+
   <string id="15100">Συλλογή</string>
   <string id="15101">Βάση δεδομένων</string>
   <string id="15102">* Όλα τα άλμπουμ</string>
   <string id="15103">* Όλοι οι καλλιτέχνες</string>
   <string id="15104">* Όλα τα τραγούδια</string>
   <string id="15105">* Όλα τα είδη</string>
+
   <string id="15107">Aποθήκευση...</string>
   <string id="15108">Ήχοι πλοήγησης</string>
-  <string id="15109">ΠÏ\81οεÏ\80ιλεγμένο ÎºÎ­Î»Ï\85Ï\86ος</string>
+  <string id="15109">ΠÏ\81οεÏ\80ιλογή ÎºÎµÎ»Ï\8dÏ\86οÏ\85ς</string>
   <string id="15111">- Θέμα</string>
   <string id="15112">Προεπιλεγμένο Θέμα</string>
-  <string id="15200">Last.FM</string>
-  <string id="15201">Αποστολή τραγουδιών στο Last.FM</string>
-  <string id="15202">Όνομα χρήστη Last.FM</string>
-  <string id="15203">Κωδικός πρόσβασης Last.FM</string>
-  <string id="15204">Αδύνατη η χειραψία: σε αδράνεια... </string>
-  <string id="15205">Παρακαλώ, αναβαθμίστε το XBMC</string>
-  <string id="15206">Απέτυχε η εξακρίβωση. Ελέγξτε το όνομα χρήστη και τον κωδικό πρόσβασης</string>
+
+  <string id="15200">Last.fm</string>
+  <string id="15201">Αποστολή τραγουδιών στο Last.fm</string>
+  <string id="15202">Όνομα χρήστη Last.fm</string>
+  <string id="15203">Κωδικός πρόσβασης Last.fm</string>
+  <string id="15204">Αδύνατη η χειραψία: σε αδράνεια...</string>
+  <string id="15205">Παρακαλώ αναβαθμίστε το XBMC</string>
+  <string id="15206">Απέτυχε η εξακρίβωση: Ελέγξτε το όνομα χρήστη και τον κωδικό πρόσβασης</string>
   <string id="15207">Συνδεμένο</string>
   <string id="15208">Αποσυνδεμένο</string>
-  <string id="15209">Î\91Ï\80οÏ\83Ï\84ολή Î´Î¹Î±Ï\83Ï\84ήμαÏ\84ος %i</string>
+  <string id="15209">Î\94ιάÏ\83Ï\84ημα Î±Ï\80οÏ\83Ï\84ολής %i</string>
   <string id="15210">%i τραγούδια στη λανθάνουσα μνήμη</string>
   <string id="15211">Αποστολή...</string>
   <string id="15212">Αποστολή σε %i δευτ.</string>
-  <string id="15213">Î\94οÏ\85λεÏ\8dει Ï\87Ï\81ηÏ\83ιμοÏ\80οιÏ\8eνÏ\84αÏ\82...</string>
+  <string id="15213">Î\86νοιγμα Î¼Îµ...</string>
   <string id="15214">Χρήση συγχρονισμού Smoothed A/V</string>
   <string id="15215">Απόκρυψη ονομάτων αρχείων στην προβολή μικρογραφιών</string>
-  <string id="15216">Î\95κÏ\84ελείÏ\84ε σε Party Mode</string>
-  <string id="15217">Î¥Ï\80οβολή τραγουδιών στο Libre.fm</string>
-  <string id="15218">Όνομα χρήστη (Libre.fm)</string>
-  <string id="15219">Κωδικός πρόσβασης (Libre.fm)</string>
+  <string id="15216">Î\95κÏ\84έλεÏ\83η σε Party Mode</string>
+  <string id="15217">Î\91Ï\80οÏ\83Ï\84ολή τραγουδιών στο Libre.fm</string>
+  <string id="15218">Όνομα χρήστη Libre.fm</string>
+  <string id="15219">Κωδικός πρόσβασης Libre.fm</string>
   <string id="15220">Libre.fm</string>
-  <string id="15221">Υποβολή αιτήματος τραγουδιού</string>
+  <string id="15221">Υποβολή τραγουδιού</string>
+
   <string id="15250">Αποστολή Last.fm radio στο Last.fm</string>
-  <string id="15251">Σύνδεση με Last.FM...</string>
+  <string id="15251">Σύνδεση με Last.fm...</string>
   <string id="15252">Επιλογή σταθμού...</string>
   <string id="15253">Αναζήτηση παρόμοιων καλλιτεχνών...</string>
   <string id="15254">Αναζήτηση παρόμοιων ετικετών...</string>
   <string id="15255">Το προφίλ σας (%name%)</string>
-  <string id="15256">Î\93ενικέÏ\82 κορυφαίες ετικέτες</string>
+  <string id="15256">Î\93ενικά κορυφαίες ετικέτες</string>
   <string id="15257">Κορυφαίοι καλλιτέχνες για την ετικέτα %name%</string>
   <string id="15258">Κορυφαία άλμπουμ για την ετικέτα %name%</string>
   <string id="15259">Κορυφαία κομμάτια για την ετικέτα %name%</string>
-  <string id="15260">Ακρόαση της ετικέτας %name% στο Last.FM radio</string>
+  <string id="15260">Ακρόαση της ετικέτας %name% στο Last.fm radio</string>
   <string id="15261">Παρόμοιοι καλλιτέχνες όπως ο %name%</string>
-  <string id="15262">%name% κορυφαία άλμπουμ</string>
-  <string id="15263">%name% κορυφαία κομμάτια</string>
-  <string id="15264">%name% κορυφαίες ετικέτες</string>
+  <string id="15262">Κορυφαία άλμπουμ %name%</string>
+  <string id="15263">Κορυφαία κομμάτια %name%</string>
+  <string id="15264">Κορυφαίες ετικέτες %name%</string>
   <string id="15265">Οι μεγαλύτεροι θαυμαστές του %name%</string>
-  <string id="15266">Ακρόαση θαυμαστών του %name% στο Last.FM radio</string>
-  <string id="15267">Ακρόαση παρόμοιων καλλιτεχνών με τον %name% στο Last.FM radio</string>
+  <string id="15266">Ακρόαση θαυμαστών του %name% στο Last.fm radio</string>
+  <string id="15267">Ακρόαση καλλιτεχνών παρόμοιων με τον %name% στο Last.fm radio</string>
   <string id="15268">Οι καλύτεροι καλλιτέχνες του χρήστη %name%</string>
   <string id="15269">Τα καλύτερα άλμπουμ του χρήστη %name%</string>
   <string id="15270">Τα καλύτερα κομμάτια του χρήστη %name%</string>
   <string id="15271">Φίλοι του χρήστη %name%</string>
   <string id="15272">Γείτονες του χρήστη %name%</string>
-  <string id="15273">Εβδομαδιαίο chart καλλιτέχνη του %name%</string>
-  <string id="15274">Εβδομαδιαίο chart άλμπουμ του %name%</string>
-  <string id="15275">Εβδομαδιαίο chart κομματιού του %name%</string>
-  <string id="15276">Ακρόαση των γειτόνων του  %name% στο Last.FM radio</string>
-  <string id="15277">Ακρόαση των προσωπικών του %name% στο Last.FM radio</string>
-  <string id="15278">Ακρόαση των  %name%'s mix Last.fm radio</string>
-  <string id="15279">Ανάκτηση λίστας από Last.FM...</string>
-  <string id="15280">Αδύνατη η ανάκτηση λίστας από Last.FM...</string>
-  <string id="15281">Εισάγετε ένα όνομα καλλιτέχνη</string>
-  <string id="15282">Î\95ιÏ\83άγεÏ\84ε Î¼Î¯Î± ÎµÏ\84ικέÏ\84α Î³Î¹Î± Î½Î± Î²Ï\81είÏ\84ε Ï\84α Ï\80αÏ\81Ï\8cμοια</string>
+  <string id="15273">Εβδομαδιαίο chart του καλλιτέχνη %name%</string>
+  <string id="15274">Εβδομαδιαίο chart του άλμπουμ %name%</string>
+  <string id="15275">Εβδομαδιαίο chart του κομματιού %name%</string>
+  <string id="15276">Ακρόαση του Last.fm radio των γειτόνων του %name%</string>
+  <string id="15277">Ακρόαση του προσωπικού Last.fm radio του %name%</string>
+  <string id="15278">Ακρόαση της μίξης Last.fm radio του %name%</string>
+  <string id="15279">Ανάκτηση λίστας από Last.fm...</string>
+  <string id="15280">Αδύνατη η ανάκτηση λίστας από Last.fm...</string>
+  <string id="15281">Εισάγετε ένα όνομα καλλιτέχνη για να βρείτε παρόμοια</string>
+  <string id="15282">Î\95ιÏ\83άγεÏ\84ε Î¼Î¯Î± ÎµÏ\84ικέÏ\84α Î³Î¹Î± Î½Î± Î²Ï\81είÏ\84ε Ï\80αÏ\81Ï\8cμοιεÏ\82</string>
   <string id="15283">Κομμάτια που ακούστηκαν πρόσφατα από τον %name%</string>
-  <string id="15284">Ακρόαση των προτιμήσεων του %name% στο Last.FM radio</string>
+  <string id="15284">Ακρόαση των προτιμήσεων του %name% στο Last.fm radio</string>
   <string id="15285">Κορυφαίες ετικέτες για τον χρήστη %name%</string>
-  <string id="15287">Να προστεθεί το παρόν κομμάτι στα  αγαπημένα σας;</string>
+
+  <string id="15287">Να προστεθεί το παρόν κομμάτι στα αγαπημένα σας;</string>
   <string id="15288">Να αποκλειστεί το παρόν κομμάτι;</string>
   <string id="15289">Προσθήκη στα αγαπημένα σας κομμάτια: '%s'.</string>
-  <string id="15290">Δεν προστέθηκε το '%s' στα Αγαπημένα σας.</string>
+  <string id="15290">Δεν μπορεί να προστεθεί το '%s' στα αγαπημένα σας.</string>
   <string id="15291">Αποκλεισμένα: '%s'.</string>
-  <string id="15292">Î\9dα Î¼Î·Î½ Î±Ï\80οκλειÏ\83Ï\84εί '%s'.</string>
+  <string id="15292">Î\94εν Î¼Ï\80οÏ\81εί Î½Î± Î±Ï\80οκλειÏ\83Ï\84εί Ï\84ο '%s'.</string>
   <string id="15293">Πρόσφατα αγαπημένα κομμάτια από %name%</string>
-  <string id="15294">Πρόσφατες αναγγελίες από %name%</string>
-  <string id="15295">Αφαιρέθηκε από τα αγαπημένα σας</string>
-  <string id="15296">Αποδεκτό</string>
-  <string id="15297">Να αφαιρεθεί το παρόν κομμάτι από τα  αγαπημένα σας;</string>
-  <string id="15298">Να μην αποκλειστεί το παρόν κομμάτι;</string>
-  <string id="15300">H διαδρομή δεν βρέθηκε</string>
+  <string id="15294">Πρόσφατα αποκλεισμένα κομμάτια από %name%</string>
+  <string id="15295">Αφαίρεση από τα αγαπημένα σας</string>
+  <string id="15296">Άρση αποκλεισμού</string>
+  <string id="15297">Να αφαιρεθεί το παρόν κομμάτι από τα αγαπημένα σας;</string>
+  <string id="15298">Να αρθεί ο αποκλεισμός για αυτό το κομμάτι;</string>
+
+  <string id="15300">Η διαδρομή δε βρέθηκε</string>
   <string id="15301">Απέτυχε η σύνδεση με τον διακομιστή δικτύου</string>
   <string id="15302">Δεν βρέθηκαν διακομιστές</string>
-  <string id="15303">Δεν βρέθηκαν ομάδες εργασίας</string>
+  <string id="15303">Δεν βρέθηκε η ομάδα εργασίας</string>
+
   <string id="15310">Άνοιγμα πηγής multi-path</string>
   <string id="15311">Διαδρομή:</string>
+
   <string id="16000">Γενικά</string>
-  <string id="16002">Έρευνα στο Internet</string>
+
+  <string id="16002">Έρευνα στο Διαδίκτυο</string>
   <string id="16003">Αναπαραγωγή</string>
   <string id="16004">Αναπαραγωγή πολυμέσων από το δίσκο</string>
+
   <string id="16008">Εισάγετε νέο τίτλο</string>
   <string id="16009">Εισάγετε το όνομα της ταινίας</string>
   <string id="16010">Εισάγετε το όνομα του προφίλ</string>
   <string id="16014">Εισάγετε όνομα φακέλου</string>
   <string id="16015">Εισάγετε κατάλογο</string>
   <string id="16016">Διαθέσιμες επιλογές: %A, %T, %N, %B, %D, %G, %Y, %F, %S</string>
-  <string id="16017">Εισαγωγή συμβολοσειράς αναζήτησης</string>
+  <string id="16017">Εισαγωγή κειμένου αναζήτησης</string>
   <string id="16018">Καμία</string>
   <string id="16019">Αυτόματη επιλογή</string>
-  <string id="16020">Î\94ιαÏ\83Ï\84Ï\81Ï\89μάÏ\84Ï\89Ï\83η</string>
-  <string id="16021">Επιλεκτική</string>
-  <string id="16022">Επιλεκτική (αντιστροφή)</string>
-  <string id="16023">Μέθοδος περιπλεγμένου χειρισμού</string>
+  <string id="16020">Î\91Ï\80Ï\8cÏ\80λεξη</string>
+  <string id="16021">Bob</string>
+  <string id="16022">Bob (αντιστροφή)</string>
+  <string id="16023"></string>
   <string id="16024">Ακύρωση...</string>
   <string id="16025">Εισάγετε το όνομα του καλλιτέχνη</string>
   <string id="16026">Η αναπαραγωγή απέτυχε</string>
-  <string id="16027">Î\91Ï\80οÏ\84Ï\85Ï\87ία Î±Î½Î±Ï\80αÏ\81αγÏ\89γήÏ\82 ÎµÎ½Ï\8cÏ\82 Î® Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81Ï\89ν Î±Î½Ï\84ικείμενων.</string>
+  <string id="16027">Î\91Ï\80οÏ\84Ï\85Ï\87ία Î±Î½Î±Ï\80αÏ\81αγÏ\89γήÏ\82 ÎµÎ½Ï\8cÏ\82 Î® Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81Ï\89ν Î±Î½Ï\84ικειμένων.</string>
   <string id="16028">Εισαγωγή τιμής</string>
-  <string id="16029">Για περισσότερες λεπτομέρειες ελέγξτε το αρχείο συμβάντων</string>
-  <string id="16030">Το Party Mode ως μέθοδος απορρίφθηκε.</string>
-  <string id="16031">Î\94εν Ï\85Ï\80άÏ\81Ï\87οÏ\85ν Ï\84Ï\81αγοÏ\8dδια Ï\83Ï\84η Ï\83Ï\85λλογή Ï\80οÏ\85 Î½Î± Ï\84αιÏ\81ιάζοÏ\85ν.</string>
+  <string id="16029">Για λεπτομέρειες ελέγξτε το αρχείο καταγραφής.</string>
+  <string id="16030">Το Party Mode απορρίφθηκε.</string>
+  <string id="16031">Î\94εν Ï\85Ï\80άÏ\81Ï\87οÏ\85ν Ï\80αÏ\81Ï\8cμοια Ï\84Ï\81αγοÏ\8dδια Ï\83Ï\84η Ï\83Ï\85λλογή.</string>
   <string id="16032">Δεν είναι δυνατός ο συγχρονισμός με τη βάση δεδομένων.</string>
   <string id="16033">Απέτυχε το άνοιγμα της βάσης δεδομένων.</string>
   <string id="16034">Απέτυχε η λήψη τραγουδιών από τη βάση δεδομένων.</string>
-  <string id="16035">Λίστα αναπαραγωγής σε Party Μode</string>
-  <string id="16036">Απεπλεγμένη (κατά το ήμισυ) </string>
+  <string id="16035">Λίστα αναπαραγωγής σε Party Mode</string>
+  <string id="16036">Απόπλεξη (κατά το ήμισυ)</string>
+  <string id="16037">Απόπλεξη βίντεο (Deinterlace)</string>
+  <string id="16038">Μέθοδος απόπλεξης</string>
+  <string id="16039">Ανενεργή</string>
+  <string id="16040">Αυτόματη</string>
+  <string id="16041">Ενεργή</string>
+
   <string id="16100">Όλα τα βίντεο</string>
-  <string id="16101">Προβληθέντα</string>
-  <string id="16102">Î\9cη Ï\80ροβληθέντα</string>
+  <string id="16101">Î\9cη Ï\80ροβληθέντα</string>
+  <string id="16102">Προβληθέντα</string>
   <string id="16103">Επισήμανση ως προβληθέντα</string>
   <string id="16104">Επισήμανση ως μη προβληθέντα</string>
   <string id="16105">Επεξεργασία τίτλου</string>
+
   <string id="16200">Η διαδικασία ακυρώθηκε</string>
   <string id="16201">Η αντιγραφή απέτυχε</string>
   <string id="16202">Απέτυχε η αντιγραφή τουλάχιστον ενός αρχείου</string>
   <string id="16204">Απέτυχε η μετακίνηση τουλάχιστον ενός αρχείου</string>
   <string id="16205">Η διαγραφή απέτυχε</string>
   <string id="16206">Απέτυχε η διαγραφή τουλάχιστον ενός αρχείου</string>
+
   <string id="16300">Μέθοδος προσαρμογής ανάλυσης βίντεο</string>
   <string id="16301">Εγγύτερη προσέγγιση</string>
-  <string id="16302">Διγραμμική</string>
-  <string id="16303">Δικυβική</string>
+  <string id="16302">Bilinear</string>
+  <string id="16303">Bicubic</string>
   <string id="16304">Lanczos2</string>
   <string id="16305">Lanczos3</string>
   <string id="16306">Sinc8</string>
-  <string id="16307">Δικυβική (με λογισμικό)</string>
-  <string id="16308">Lanczos (με Î»Î¿Î³Î¹Ï\83μικÏ\8c)</string>
-  <string id="16309">Sinc (με Î»Î¿Î³Î¹Ï\83μικÏ\8c)</string>
+  <string id="16307">Bicubic (λογισμικό)</string>
+  <string id="16308">Lanczos (λογισμικό)</string>
+  <string id="16309">Sinc (λογισμικό)</string>
   <string id="16310">Χρονική</string>
   <string id="16311">Χρονική/Χωρική</string>
   <string id="16312">(VDPAU) Μείωση θορύβου</string>
   <string id="16317">Χρονική (κατά το ήμισυ)</string>
   <string id="16318">Χρονική/Χωρική (κατά το ήμισυ)</string>
   <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 βελτιστοποιημένο</string>
+  <string id="16324">Blend λογισμικού</string>
+  
   <string id="16400">Μετα-επεξεργασία</string>
-  <string id="17500">Προβολή λήξης χρόνου αναστόλης</string>
+
+  <string id="17500">Προβολή λήξης χρόνου αναστολής</string>
+
   <string id="19000">Αλλαγή καναλιού</string>
+
   <string id="20000">Φάκελος αποθήκευσης μουσικής</string>
   <string id="20001">Χρήση εξωτερικού αναπαραγωγέα DVD</string>
   <string id="20002">Εξωτερικός αναπαραγωγέας DVD</string>
-  <string id="20003">Φάκελος εκπαιδευτών</string>
-  <string id="20004">Φάκελος στιγμιότυπου</string>
+  <string id="20003">Φάκελος trainer</string>
+  <string id="20004">Φάκελος στιγμιότυπων</string>
+
   <string id="20006">Φάκελος λίστας αναπαραγωγής</string>
   <string id="20007">Εγγραφές</string>
   <string id="20008">Στιγμιότυπα</string>
   <string id="20009">Χρήση XBMC</string>
+
   <string id="20011">Λίστες αναπαραγωγής μουσικής</string>
   <string id="20012">Λίστες αναπαραγωγής βίντεο</string>
   <string id="20013">Να εκτελεστεί το παιχνίδι;</string>
-  <string id="20014">Ταξιν.: Λίστα αναπαραγωγής</string>
+  <string id="20014">Ταξ.: Λίστα αναπαραγωγής</string>
   <string id="20015">Απομακρυσμένη μικρογραφία</string>
   <string id="20016">Τρέχουσα μικρογραφία</string>
   <string id="20017">Τοπική μικρογραφία</string>
   <string id="20018">Χωρίς μικρογραφία</string>
   <string id="20019">Επιλογή μικρογραφίας</string>
+
+  <!-- string id 20022 will always be set to an empty string (LocalizeStrings.cpp)-->
+  <string id="20022"></string>
   <string id="20023">Διένεξη</string>
-  <string id="20024">ΣάÏ\81Ï\89Ï\83η ÎºÎ±Î¹Î½Î¿Ï\8dÏ\81γιων</string>
+  <string id="20024">ΣάÏ\81Ï\89Ï\83η Î½Î­ων</string>
   <string id="20025">Σάρωση όλων</string>
   <string id="20026">Περιοχή</string>
-  <string id="20037">Συνολικές</string>
-  <string id="20038">Κλείδωμα της μουσικής</string>
-  <string id="20039">Κλείδωμα των βίντεο</string>
-  <string id="20040">Κλείδωμα των φωτογραφιών</string>
-  <string id="20041">Κλείδωμα εφαρμογών και scripts windows</string>
+
+  <!-- string id's 20027 thru 20034 are reserved for temperature strings (LocalizeStrings.cpp)-->
+
+  <string id="20037">Συνοπτικά</string>
+  <string id="20038">Κλείδωμα παραθύρου μουσικής</string>
+  <string id="20039">Κλείδωμα παραθύρου βίντεο</string>
+  <string id="20040">Κλείδωμα παραθύρου εικόνων</string>
+  <string id="20041">Κλείδωμα παραθύρου εφαρμογών &amp; script</string>
   <string id="20042">Κλείδωμα της διαχείρισης αρχείων</string>
   <string id="20043">Κλείδωμα των ρυθμίσεων</string>
   <string id="20044">Νέα έναρξη</string>
   <string id="20045">Είσοδος στη γενική διαχείριση</string>
   <string id="20046">Έξοδος από τη γενική διαχείριση</string>
   <string id="20047">Δημιουργία προφίλ '%s';</string>
-  <string id="20048">Î\88ναÏ\81ξη Î¼Îµ ÎºÎ±Î¹Î½Î¿Ï\8dÏ\81γιες ρυθμίσεις</string>
+  <string id="20048">Î\88ναÏ\81ξη Î¼Îµ Î½Î­ες ρυθμίσεις</string>
   <string id="20049">Η καλύτερη δυνατή</string>
   <string id="20050">Αυτόματη εναλλαγή μεταξύ 16:9 και 4:3</string>
   <string id="20051">Μεταχείριση στοιβαγμένων αρχείων σαν ένα</string>
   <string id="20052">Προσοχή</string>
-  <string id="20053">Î\91Ï\81ιÏ\83Ï\84εÏ\81ή Î³ÎµÎ½Î¹ÎºÎ® διαχείριση</string>
-  <string id="20054">Î\9aαÏ\84αÏ\87Ï\89Ï\81ημένη Î³ÎµÎ½Î¹ÎºÎ® διαχείριση</string>
+  <string id="20053">Î\91Ï\80οÏ\87Ï\8eÏ\81ηÏ\83η Î±Ï\80Ï\8c Ï\84η Î³ÎµÎ½. διαχείριση</string>
+  <string id="20054">Î\95ιÏ\83αγÏ\89γή Ï\83Ï\84η Î³ÎµÎ½. διαχείριση</string>
   <string id="20055">Μικρογραφία Allmusic.com</string>
+
   <string id="20057">Απομάκρυνση μικρογραφίας</string>
-  <string id="20058">ΠÏ\81οÏ\83θέÏ\83Ï\84ε προφίλ...</string>
-  <string id="20059">Î\95Ï\81Ï\8eÏ\84ημα για όλα τα άλμπουμ</string>
+  <string id="20058">ΠÏ\81οÏ\83θήκη προφίλ...</string>
+  <string id="20059">Î\95Ï\8dÏ\81εÏ\83η Ï\80ληÏ\81οÏ\86οÏ\81ιÏ\8eν για όλα τα άλμπουμ</string>
   <string id="20060">Πληροφορίες πολυμέσων</string>
   <string id="20061">Ξεχωριστές</string>
-  <string id="20062">Î\9aοινÏ\8cÏ\87Ï\81ηÏ\83Ï\84α Î¼Îµ Ï\80Ï\81οεÏ\80ιλεγμένα</string>
-  <string id="20063">Î\9aοινÏ\8cÏ\87Ï\81ηÏ\83Ï\84α Î¼Îµ Ï\80Ï\81οεÏ\80ιλεγμένα (ανάγνωση μόνο)</string>
-  <string id="20064">Î\91νÏ\84ιγÏ\81αÏ\86ή Ï\80Ï\81οεÏ\80ιλεγμένÏ\89ν</string>
+  <string id="20062">Î\9aοινÏ\8cÏ\87Ï\81ηÏ\83Ï\84α Î¼Îµ Ï\80Ï\81οεÏ\80ιλογέÏ\82</string>
+  <string id="20063">Î\9aοινÏ\8cÏ\87Ï\81ηÏ\83Ï\84α Î¼Îµ Ï\80Ï\81οεÏ\80ιλογέÏ\82 (ανάγνωση μόνο)</string>
+  <string id="20064">Î\91νÏ\84ιγÏ\81αÏ\86ή Ï\80Ï\81οεÏ\80ιλογÏ\8eν</string>
   <string id="20065">Εικόνα προφίλ</string>
-  <string id="20066">Î\95Ï\80ιλογές κλειδώματος</string>
+  <string id="20066">ΠÏ\81οÏ\84ιμήÏ\83εις κλειδώματος</string>
   <string id="20067">Επεξεργασία προφίλ</string>
   <string id="20068">Κλείδωμα προφίλ</string>
   <string id="20069">Αδύνατη η δημιουργία φακέλου</string>
-  <string id="20070">Φάκελος προφίλ</string>
+  <string id="20070">Î\9aαÏ\84άλογος προφίλ</string>
   <string id="20071">Έναρξη με νέες πηγές πολυμέσων</string>
   <string id="20072">Σιγουρευτείτε ότι ο επιλεγμένος φάκελος μπορεί να εγγραφεί</string>
-  <string id="20073">και ότι το όνομα του είναι έγκυρο</string>
+  <string id="20073">και ότι το νέο όνομα είναι έγκυρο</string>
   <string id="20074">Αξιολόγηση MPAA</string>
   <string id="20075">Εισαγωγή κωδικού κεντρικού κλειδώματος</string>
   <string id="20076">Αίτημα για κωδικό κεντρικού κλειδώματος στην εκκίνηση</string>
   <string id="20077">Ρυθμίσεις κελύφους</string>
   <string id="20078">- δεν έχει οριστεί σύνδεση -</string>
-  <string id="20079">Ενεργοποίηση εφέ κίνησης κελύφους</string>
-  <string id="20080">Ανενεργές οι Ροές Τίτλων Ειδήσεων κατά την ακρόαση τραγουδιών</string>
+  <string id="20079">Ενεργοποίηση εφέ κίνησης</string>
+  <string id="20080">Απενεργοποίηση των Ροών Τίτλων Ειδήσεων (RSS) κατά την ακρόαση μουσικής</string>
   <string id="20081">Ενεργοποίηση πλήκτρων συντόμευσης</string>
   <string id="20082">Εμφάνιση των εφαρμογών στο κεντρικό μενού</string>
   <string id="20083">Εμφάνιση πληροφοριών για τη μουσική</string>
   <string id="20095">Εισάγετε κωδικό κλειδώματος προφίλ</string>
   <string id="20096">Οθόνη σύνδεσης</string>
   <string id="20097">Λήψη πληροφοριών άλμπουμ</string>
-  <string id="20098">Î\9bαμβάνει πληροφορίες για το άλμπουμ</string>
-  <string id="20099">Î\91δÏ\85ναμία ÎµÎ³Î³Ï\81αÏ\86ήÏ\82 Ï\84οÏ\85 CD Î® Ï\84οÏ\85 ÎºÎ¿Î¼Î¼Î±Ï\84ιοÏ\8d ÎºÎ±Ï\84ά Ï\84ην Î±Î½Î±Ï\80αÏ\81αγÏ\89γή Î´Î¯Ï\83κοÏ\85</string>
-  <string id="20100">Κεντρικό κλείδωμα και επιλογές</string>
-  <string id="20101">Î\95ιÏ\83αγÏ\89γή ÎºÏ\89δικοÏ\8d Î³Î¹Î± Ï\84ην ÎµÎ½ÎµÏ\81γοÏ\80οίηÏ\83η Ï\84ηÏ\82 Î³ÎµÎ½Î¹ÎºÎ®Ï\82 Î´Î¹Î±Ï\87είÏ\81ιÏ\83ηÏ\82</string>
-  <string id="20102">ή Î±Î½Ï\84ιγÏ\81αÏ\86ή Ï\84οÏ\85 ÎºÏ\89δικοÏ\8d Ï\8cÏ\80Ï\89Ï\82 Î±Ï\85Ï\84Ï\8cÏ\82 Î­Ï\87ει Ï\80Ï\81οκαθοÏ\81ιÏ\83Ï\84εί;</string>
+  <string id="20098">Î\9bαμβάνονÏ\84αι πληροφορίες για το άλμπουμ</string>
+  <string id="20099">Î\91δÏ\85ναμία Î±Î½Ï\84ιγÏ\81αÏ\86ήÏ\82 Ï\84οÏ\85 CD Î® Ï\84οÏ\85 ÎºÎ¿Î¼Î¼Î±Ï\84ιοÏ\8d ÎºÎ±Ï\84ά Ï\84ην Î±Î½Î±Ï\80αÏ\81αγÏ\89γή Ï\84οÏ\85 CD</string>
+  <string id="20100">Κωδικός κεντρικού κλειδώματος και επιλογές</string>
+  <string id="20101">Î\9f ÎºÏ\89δικÏ\8cÏ\82 ÎºÎµÎ½Ï\84Ï\81ικοÏ\8d ÎºÎ»ÎµÎ¹Î´Ï\8eμαÏ\84οÏ\82 Î½Î± ÎµÎ½ÎµÏ\81γοÏ\80οιεί Ï\80άνÏ\84α Ï\84η Î³ÎµÎ½. Î´Î¹Î±Ï\87είÏ\81ιÏ\83η</string>
+  <string id="20102">ή Î½Î± Î±Î½Ï\84ιγÏ\81άÏ\86εÏ\84αι Î¿ Ï\80Ï\81οκαθοÏ\81ιÏ\83μένοÏ\82 ÎºÏ\89δικÏ\8cÏ\82;</string>
   <string id="20103">Αποθήκευση αλλαγών στο προφίλ;</string>
   <string id="20104">Βρέθηκαν παλιές ρυθμίσεις.</string>
   <string id="20105">Θέλετε να τις χρησιμοποιήσετε;</string>
   <string id="20112">Τελευταία σύνδεση: %s</string>
   <string id="20113">Ποτέ δεν συνδέθηκε</string>
   <string id="20114">Προφίλ %i / %i</string>
-  <string id="20115">Î\8cνομα χρήστη / Επιλέξτε ένα προφίλ</string>
+  <string id="20115">ΣÏ\8dνδεÏ\83η χρήστη / Επιλέξτε ένα προφίλ</string>
   <string id="20116">Χρήση κλειδώματος στην οθόνη σύνδεσης</string>
   <string id="20117">Λάθος κωδικός κλειδώματος.</string>
-  <string id="20118">Απαιτεί να ενεργοποιήσετε το κεντρικό κλείδωμα</string>
-  <string id="20119">Θέλετε να το ρυθμίσετε τώρα;</string>
+  <string id="20118">Απαιτείται ορισμός του κεντρικού κλειδώματος.</string>
+  <string id="20119">Θέλετε να το ορίσετε τώρα;</string>
   <string id="20120">Φόρτωση πληροφοριών εφαρμογής</string>
   <string id="20121">Party on!</string>
   <string id="20122">Αληθές</string>
   <string id="20124">Γεμίζοντας τα ποτήρια</string>
   <string id="20125">Συνδεμένος σαν</string>
   <string id="20126">Αποσύνδεση</string>
-  <string id="20128">Πήγαινε Ï\83Ï\84ο root</string>
-  <string id="20129">Ύφανση</string>
-  <string id="20130">Ύφανση (αντιστροφή)</string>
-  <string id="20131">Συνδυασμός </string>
+  <string id="20128">Î\9cεÏ\84άβαÏ\83η Ï\83ε root</string>
+  <string id="20129">Weave</string>
+  <string id="20130">Weave (αντιστροφή)</string>
+  <string id="20131">Blend</string>
   <string id="20132">Επανεκκίνηση βίντεο</string>
   <string id="20133">Επεξεργασία τοποθεσίας δικτύου</string>
   <string id="20134">Απομάκρυνση τοποθεσίας δικτύου</string>
   <string id="20136">Μονάδα μνήμης</string>
   <string id="20137">Προσάρτηση μονάδας μνήμης</string>
   <string id="20138">Αδύνατη η προσάρτηση μονάδας μνήμης</string>
-  <string id="20139">Στη θύρα %i ,υποδοχή %i</string>
+  <string id="20139">Στη θύρα %iυποδοχή %i</string>
   <string id="20140">Κλείδωμα προφύλαξης οθόνης</string>
   <string id="20141">Ορισμός σε</string>
   <string id="20142">Όνομα χρήστη</string>
   <string id="20151">Ακύρωση χρονοδιακόπτη τερματισμού</string>
   <string id="20152">Κλείδωμα ρυθμίσεων για %s</string>
   <string id="20153">Αναζήτηση...</string>
-  <string id="20154">Συνολικές πληροφορίες</string>
+  <string id="20154">Συνοπτικές πληροφορίες</string>
   <string id="20155">Πληροφορίες αποθηκευτικού χώρου</string>
   <string id="20156">Πληροφορίες σκληρού δίσκου</string>
   <string id="20157">Πληροφορίες DVD-ROM</string>
   <string id="20161">Συνολικά</string>
   <string id="20162">Χρησιμοποιημένα</string>
   <string id="20163">από τα</string>
-  <string id="20164">Δεν υποστηρίζει κλείδωμα</string>
-  <string id="20165">Ξεκλείδωτοs</string>
-  <string id="20166">Κλειδωμένοs</string>
-  <string id="20167">Παγωμένοs</string>
+  <string id="20164">Δεν υποστηρίζεται κλείδωμα</string>
+  <string id="20165">Ξεκλείδωτος</string>
+  <string id="20166">Κλειδωμένος</string>
+  <string id="20167">Παγωμένος</string>
   <string id="20168">Απαιτεί επανεκκίνηση</string>
   <string id="20169">Εβδομάδα</string>
   <string id="20170">Γραμμή</string>
   <string id="20181">Διαγραφή</string>
   <string id="20182">Κενό</string>
   <string id="20183">Επαναφόρτωση κελύφους</string>
-  <string id="20184">ΠεÏ\81ιÏ\83Ï\84Ï\81οÏ\86ή ÎµÎ¹ÎºÏ\8cνÏ\89ν Ï\80οÏ\85 Ï\87Ï\81ηÏ\83ιμοÏ\80οιοÏ\8dν Ï\84ιÏ\82 Ï\80ληÏ\81οÏ\86οÏ\81ίεÏ\82 EXIF</string>
-  <string id="20185">ΧÏ\81ήÏ\83η Ï\8cÏ\88ηÏ\82 Î±Ï\86ίÏ\83αÏ\82 για τις τηλεοπτικές σειρές</string>
+  <string id="20184">Περιστροφή εικόνων που χρησιμοποιούν πληροφορίες EXIF</string>
+  <string id="20185">ΧÏ\81ήÏ\83η Ï\83Ï\84Ï\85λ Î±Ï\86ιÏ\83Ï\8eν για τις τηλεοπτικές σειρές</string>
   <string id="20186">Απασχολημένο</string>
-  <string id="20189">Ενεργοποίηση αυτόματης κύλισης στην επισκόπηση πλοκής &amp; κριτικής</string>
+
+  <string id="20189">Ενεργοποίηση αυτόματης κύλισης για πλοκή &amp; κριτική</string>
   <string id="20190">Προσαρμογή</string>
-  <string id="20191">Ενεργοποίηση καταγραφής αποσφαλμάτωσης</string>
+  <string id="20191">Ενεργοποίηση καταγραφής σφαλμάτων (debug log)</string>
   <string id="20192">Λήψη πρόσθετων πληροφοριών κατά τις ενημερώσεις συλλογής</string>
   <string id="20193">Προκαθορισμένη υπηρεσία πληροφοριών άλμπουμ</string>
   <string id="20194">Προκαθορισμένη υπηρεσία πληροφοριών καλλιτέχνη</string>
-  <string id="20195">Αλλαγή καταγραφέα</string>
+  <string id="20195">Αλλαγή scraper</string>
   <string id="20196">Εξαγωγή μουσικής συλλογής</string>
   <string id="20197">Εισαγωγή μουσικής συλλογής</string>
   <string id="20198">Δεν βρέθηκε ο καλλιτέχνης!</string>
-  <string id="20199">Αποτυχία λήψης πληροφοριών για τον καλλιτέχνη</string>
+  <string id="20199">Αποτυχία λήψης πληροφοριών καλλιτέχνη</string>
+
+  <!-- string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)-->
+
   <string id="20250">Party on! (βίντεο)</string>
   <string id="20251">Αναμιγνύοντας τα ποτά (βίντεο)</string>
   <string id="20252">Γεμίζοντας τα ποτήρια (βίντεο)</string>
   <string id="20253">Διακομιστής WebDAV (HTTP)</string>
   <string id="20254">Διακομιστής WebDAV (HTTPS)</string>
   <string id="20255">Πρώτη σύνδεση, επεξεργαστείτε το προφίλ σας</string>
-  <string id="20256">HTS Tvheadend client</string>
-  <string id="20257">VDR Streamdev client</string>
-  <string id="20258">MythTV client</string>
+  <string id="20256">Πελάτης HTS Tvheadend</string>
+  <string id="20257">Πελάτης VDR Streamdev</string>
+  <string id="20258">Πελάτης MythTV</string>
   <string id="20259">Σύστημα Αρχείων Δικτύου (NFS)</string>
   <string id="20260">Κέλυφος Ασφαλείας (SSH/SFTP)</string>
+  <string id="20261">Πρωτόκολλο Αρχειοθέτησης Apple (AFP)</string>
+
   <string id="20300">Κατάλογος διακομιστή ιστού (HTTP)</string>
   <string id="20301">Κατάλογος διακομιστή ιστού (HTTPS)</string>
-  <string id="20302">Î\91δÏ\85ναμία ÎµÎ³Î³Ï\81αÏ\86ήÏ\82 Ï\83Ï\84ο Ï\86άκελλο:</string>
+  <string id="20302">Αδυναμία εγγραφής στο φάκελο:</string>
   <string id="20303">Θέλετε να παραβλεφθεί και να συνεχίσετε;</string>
   <string id="20304">Ροή τίτλων ειδήσεων (RSS)</string>
+
   <string id="20307">Δευτερεύον DNS</string>
-  <string id="20308">DHCP διακομιστή:</string>
+  <string id="20308">Διακομιστής DHCP:</string>
   <string id="20309">Δημιουργία νέου φακέλου</string>
-  <string id="20310">Dim LCD κατα την αναπαραγωγή</string>
+  <string id="20310">Αμαύρωση LCD κατά την αναπαραγωγή</string>
   <string id="20311">Άγνωστο ή πάνω στην μητρική (προστατεύεται)</string>
-  <string id="20312">Dim LCD σε παύση</string>
+  <string id="20312">Αμαύρωση LCD στην παύση</string>
+
   <string id="20314">Βίντεο - Συλλογή</string>
-  <string id="20316">Ταξ. κατά: ID</string>
+
+  <string id="20316">Ταξ.: ID</string>
+
   <string id="20324">Αναπαραγωγή κομματιού...</string>
   <string id="20325">Επαναφορά βαθμονόμησης</string>
   <string id="20326">Επαναφορά των τιμών βαθμονόμησης για %s</string>
   <string id="20327">στις προκαθορισμένες τιμές.</string>
   <string id="20328">Αναζήτηση προορισμού</string>
+  <string id="20329">Οι ταινίες είναι σε διαφορετικούς φακέλους που ταιριάζουν με τον τίτλο της ταινίας</string>
   <string id="20330">Χρήση ονόματος φακέλου για αναζητήσεις</string>
   <string id="20331">Αρχείο</string>
   <string id="20332">Χρήση φακέλων ή ονομάτων αρχείων στις αναζητήσεις;</string>
   <string id="20333">Ορισμός περιεχομένου</string>
   <string id="20334">Φάκελος</string>
-  <string id="20335">Î\9aαÏ\84Ï\8cÏ\80Ï\84εÏ\85Ï\83η ÎºÎ±Ï\84' ÎµÏ\80ανάληÏ\88η Ï\84οÏ\85 Ï\80εÏ\81ιεÏ\87ομένοÏ\85;</string>
-  <string id="20336">Ξεκλείδωτες πηγές</string>
+  <string id="20335">Î\88λεγÏ\87οÏ\82 Ï\80εÏ\81ιεÏ\87ομένοÏ\85 ÎºÎ±Î¹ Ï\84Ï\89ν Ï\85Ï\80οÏ\86ακέλÏ\89ν;</string>
+  <string id="20336">Ξεκλείδωμα πηγών</string>
   <string id="20337">Ηθοποιός</string>
   <string id="20338">Ταινία</string>
-  <string id="20339">ΣκηνοθέÏ\84ηÏ\82</string>
-  <string id="20340">Θέλετε να απομακρύνετε όλα τα αντικείμενα που βρίσκονται</string>
-  <string id="20341">σ΄ αυτή την διαδρομή από τη συλλογή του XBMC;</string>
+  <string id="20339">ΣκηνοθεÏ\83ία</string>
+  <string id="20340">Θέλετε να απομακρύνετε όλα τα αντικείμενα</string>
+  <string id="20341">αυτής της διαδρομής από τη συλλογή του XBMC;</string>
   <string id="20342">Ταινίες</string>
   <string id="20343">Τηλεοπτικές σειρές</string>
   <string id="20344">Αυτός ο φάκελος περιέχει</string>
   <string id="20345">Εκτέλεση αυτόματης σάρωσης</string>
-  <string id="20346">Σάρωση κατ' επανάληψη</string>
-  <string id="20347">Ï\8cÏ\80Ï\89Ï\82</string>
+  <string id="20346">Σάρωση και των υποφακέλων</string>
+  <string id="20347">ως</string>
   <string id="20348">Σκηνοθέτες</string>
   <string id="20349">Δεν βρέθηκαν αρχεία βίντεο σε αυτή τη διαδρομή!</string>
   <string id="20350">ψήφοι</string>
   <string id="20367">Απόκρυψη προβληθέντων</string>
   <string id="20368">Κωδικός παραγωγής</string>
   <string id="20369">Εμφάνιση πλοκής στα μη προβληθέντα</string>
-  <string id="20370">* Απόκρυψη σε περίληψη *</string>
+  <string id="20370">* Απόκρυψη για αποφυγή spoiler *</string>
   <string id="20371">Ορισμός μικρογραφίας κύκλου</string>
   <string id="20372">Εικόνα κύκλου</string>
   <string id="20373">Κύκλος</string>
   <string id="20376">Πρωτότυπος τίτλος</string>
   <string id="20377">Ανανέωση πληροφοριών τηλεοπτικής σειράς</string>
   <string id="20378">Ανανέωση πληροφοριών για όλα τα επεισόδια;</string>
-  <string id="20379">Ο επιλεγμένος φάκελος περιέχει μία ενιαία τηλεοπτική σειρά</string>
+  <string id="20379">Ο επιλεγμένος φάκελος περιέχει μόνο μία τηλεοπτική σειρά</string>
   <string id="20380">Εξαίρεση του επιλεγμένου φακέλου από τυχόν ελέγχους</string>
   <string id="20381">Ιδιαίτερα στοιχεία</string>
-  <string id="20382">Î\91Ï\85Ï\84Ï\8cμαÏ\84η Î±Ï\80Ï\8cÏ\83Ï\80αÏ\83η Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ιÏ\8eν ÎºÏ\8dκλοÏ\85</string>
-  <string id="20383">Î\9f Î\95Ï\80ιλεγμένοÏ\82 Ï\86άκελοÏ\82 Ï\80εÏ\81ιέÏ\87ει Î­Î½Î± ÎµÎ½Î¹Î±Î¯Î¿ βίντεο</string>
-  <string id="20384">Σύνδεσμος στην τηλεοπτική σειρά</string>
-  <string id="20385">Î\91Ï\86αίÏ\81εÏ\83η Ï\83Ï\85νδέÏ\83μοÏ\85 Î±Ï\80Ï\8c Ï\84ην Ï\84ηλεοÏ\80Ï\84ική Ï\83ειÏ\81ά</string>
-  <string id="20386">ΠÏ\81Ï\8cÏ\83Ï\86αÏ\84εÏ\82 ÎµÎ¹Ï\83αÏ\87θένÏ\84ες ταινίες</string>
+  <string id="20382">Î\91Ï\85Ï\84Ï\8cμαÏ\84η Î»Î®Ï\88η Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ιÏ\8eν ÎºÏ\8dκλÏ\89ν</string>
+  <string id="20383">Î\9f ÎµÏ\80ιλεγμένοÏ\82 Ï\86άκελοÏ\82 Ï\80εÏ\81ιέÏ\87ει Î¼Ï\8cνο Î­Î½Î± βίντεο</string>
+  <string id="20384">Σύνδεσμος σε τηλεοπτική σειρά</string>
+  <string id="20385">Αφαίρεση συνδέσμου από τηλεοπτική σειρά</string>
+  <string id="20386">ΠÏ\81Ï\8cÏ\83Ï\86αÏ\84α ÎµÎ¹Ï\83αÏ\87θείÏ\83ες ταινίες</string>
   <string id="20387">Πρόσφατα εισαχθέντα επεισόδια</string>
   <string id="20388">Στούντιο</string>
   <string id="20389">Μουσικά βίντεο</string>
   <string id="20391">Μουσικό βίντεο</string>
   <string id="20392">Αφαίρεση μουσικού βίντεο από τη συλλογή</string>
   <string id="20393">Πληροφορίες μουσικού βίντεο</string>
-  <string id="20394">Î\9bαμβάνονÏ\84αι Ï\80ληÏ\81οÏ\86οÏ\81ίεÏ\82 για το μουσικό βίντεο</string>
-  <string id="20395">ΣÏ\85Ï\81Ï\81αμμένα</string>
+  <string id="20394">ΦÏ\8cÏ\81Ï\84Ï\89Ï\83η Ï\80ληÏ\81οÏ\86οÏ\81ιÏ\8eν για το μουσικό βίντεο</string>
+  <string id="20395">Î\91νάμικÏ\84α</string>
   <string id="20396">Άλμπουμ καλλιτέχνη</string>
   <string id="20397">Άλμπουμ</string>
   <string id="20398">Αναπαραγωγή τραγουδιού</string>
-  <string id="20399">Μουσικά βίντεο από άλμπουμ </string>
+  <string id="20399">Μουσικά βίντεο από άλμπουμ</string>
   <string id="20400">Μουσικά βίντεο ανά καλλιτέχνη</string>
   <string id="20401">Αναπαραγωγή μουσικού βίντεο</string>
-  <string id="20402">Λήψη μικρογραφιών ηθοποιού κατά τη προσθήκη στη συλλογή</string>
+  <string id="20402">Λήψη μικρογραφιών ηθοποιού κατά την προσθήκη στη συλλογή</string>
   <string id="20403">Ορισμός μικρογραφίας ηθοποιού</string>
+
   <string id="20405">Αφαίρεση σελιδοδείκτη επεισοδίου</string>
   <string id="20406">Ορισμός σελιδοδείκτη επεισοδίου</string>
-  <string id="20407">Ρυθμίσεις καταγραφέα</string>
+  <string id="20407">Ρυθμίσεις scraper</string>
   <string id="20408">Λήψη πληροφοριών για το μουσικό βίντεο</string>
-  <string id="20409">Λήψη πληροφοριών για τη τηλεοπτική σειρά </string>
+  <string id="20409">Λήψη πληροφοριών για την τηλεοπτική σειρά</string>
   <string id="20410">Διαφημιστικό</string>
-  <string id="20411">Î\99Ï\83οÏ\80έδÏ\89Ï\83η</string>
-  <string id="20412">Î\99Ï\83οÏ\80έδÏ\89Ï\83η Ï\84ηλεοÏ\80Ï\84ικÏ\8eν Ï\83ειÏ\81Ï\8eν</string>
+  <string id="20411">Î\95νιαία Î»Î¯Ï\83Ï\84α (Flatten)</string>
+  <string id="20412">Î\95νιαία Î»Î¯Ï\83Ï\84α ÎµÏ\80ειÏ\83οδίÏ\89ν Ï\83ειÏ\81άÏ\82 (Flatten)</string>
   <string id="20413">Λήψη Fanart</string>
   <string id="20414">Προβολή Fanart στις συλλογές βίντεο και μουσικής</string>
   <string id="20415">Έλεγχος για νέα περιεχόμενα</string>
-  <string id="20416">Πρώτη ανάρτηση</string>
-  <string id="20417">Σεναριογράφος</string>
-  <string id="20419">Εμφάνιση μεταδεδομένων κατά την προβολή αρχείων</string>
+  <string id="20416">Πρεμιέρα</string>
+  <string id="20417">Σενάριο</string>
+  <string id="20418"></string>
+  <string id="20419">Αντικατάσταση ονομάτων αρχείων με τίτλους συλλογών</string>
+
   <string id="20420">Ποτέ</string>
   <string id="20421">Eάν είναι ενός κύκλου</string>
   <string id="20422">Πάντα</string>
   <string id="20423">Έχει διαφημιστικό</string>
   <string id="20424">Ψευδές</string>
-  <string id="20425">Παρουσίαση Fanart</string>
+  <string id="20425">Παρουσίαση διαφανειών Fanart</string>
   <string id="20426">Εξαγωγή σε ένα αρχείο ή σε πολλαπλά</string>
   <string id="20427">αρχεία ανά εγγραφή;</string>
   <string id="20428">Ένα αρχείο</string>
   <string id="20431">Αντικατάσταση παλιών αρχείων;</string>
   <string id="20432">Εξαίρεση διαδρομής από τις ενημερώσεις συλλογής</string>
   <string id="20433">Εξαγωγή μικρογραφιών και πληροφοριών</string>
-  <string id="20434">Ορίσματα</string>
-  <string id="20435">Î\9fÏ\81ιÏ\83μÏ\8cÏ\82 Î¸Î­Ï\83ηÏ\82 Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ίαÏ\82 Ï\84αινίας</string>
-  <string id="20436">Î\95ξαγÏ\89γή Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ιÏ\8eν ÎºÎ±Î»Î»Î¹Ï\84έÏ\87νη;</string>
-  <string id="20437">Î\95Ï\80ιλεγμένο fanart</string>
+  <string id="20434">Ομάδες Ταινιών</string>
+  <string id="20435">Î\9fÏ\81ιÏ\83μÏ\8cÏ\82 Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ίαÏ\82 Î¿Î¼Î¬Î´ας</string>
+  <string id="20436">Î\95ξαγÏ\89γή Î¼Î¹ÎºÏ\81ογÏ\81αÏ\86ιÏ\8eν Î·Î¸Î¿Ï\80οιοÏ\8d;</string>
+  <string id="20437">Î\95Ï\80ιλογή fanart</string>
   <string id="20438">Τοπικό fanart</string>
   <string id="20439">Χωρίς fanart</string>
-  <string id="20440">Tρέχον fanart</string>
+  <string id="20440">Τρέχον fanart</string>
   <string id="20441">Απομακρυσμένο fanart</string>
   <string id="20442">Αλλαγή περιεχομένου</string>
   <string id="20443">Επιθυμείτε να ανανεώσετε τις πληροφορίες</string>
   <string id="20444">για όλα τα στοιχεία αυτής της διαδρομής;</string>
   <string id="20445">Fanart</string>
   <string id="20446">Βρέθηκαν τοπικά αποθηκευμένες πληροφορίες.</string>
-  <string id="20447">Να αγνοηθούν και να ανανεωθούν από το internet;</string>
-  <string id="20448">Αδυναμία λήψης πληροφοριών </string>
+  <string id="20447">Να αγνοηθούν και να ανανεωθούν από το διαδίκτυο;</string>
+  <string id="20448">Αδυναμία λήψης πληροφοριών</string>
   <string id="20449">Αδυναμία σύνδεσης με τον απομακρυσμένο διακομιστή</string>
-  <string id="20450">Επιθυμείτε, να συνεχίσετε  την αναζήτηση;</string>
+  <string id="20450">Επιθυμείτε να συνεχίσετε την αναζήτηση;</string>
   <string id="20451">Χώρες</string>
   <string id="20452">επεισόδιο</string>
   <string id="20453">επεισόδια</string>
   <string id="20454">Ακροατής</string>
   <string id="20455">Ακροατές</string>
-  <string id="20456">Προσαρμογή ορισμάτων ταινίας fanart</string>
+  <string id="20456">Ορισμός fanart ομάδας ταινιών</string>
+  <string id="20457">Ομάδα Ταινιών</string>
+  <string id="20458">Ομαδοποίηση ταινιών</string>
+  <!-- up to 21329 is reserved for the video db !! !-->
+
   <string id="21330">Προβολή κρυφών αρχείων και φακέλων</string>
+
   <string id="21331">Πελάτης TuxBox</string>
   <string id="21332">ΠΡΟΣΟΧΗ: Η συσκευή TuxBox βρίσκεται σε κατάσταση εγγραφής!</string>
   <string id="21333">Η ροή πολυμέσων θα σταματήσει!</string>
   <string id="21335">Θέλετε να ξεκινήσει η ροή πολυμέσων;</string>
   <string id="21336">Σύνδεση στο: %s</string>
   <string id="21337">Συσκευή TuxBox</string>
+  <!-- up to 21355 is reserved for the TuxBox Client!! !-->
+
   <string id="21359">Προσθήκη κοινόχρηστου πολυμέσου...</string>
-  <string id="21360">Διαμοιρασμός κοινόχρηστων συλλογών μουσικής και βίντεο διαμέσου UPnP</string>
+  <string id="21360">Διαμοιρασμός συλλογών μουσικής και βίντεο μέσω UPnP</string>
+
   <string id="21364">Επεξεργασία κοινόχρηστων πολυμέσων</string>
   <string id="21365">Απομάκρυνση κοινόχρηστων πολυμέσων</string>
-  <string id="21366">Φακέλος υποτίτλων</string>
+  <string id="21366">Φάκελος υποτίτλων</string>
   <string id="21367">Ταινία &amp; εναλλακτικός φάκελος υποτίτλων</string>
-  <string id="21369">Ενεργοποίηση ποντικιού</string>
-  <string id="21370">Ενεργοποίηση ήχων πλοήγησης κατά την εκτέλεση πολυμέσων</string>
+  <string id="21368">Παράκαμψη γραμματοσειρών υποτίτλων ASS/SSA</string>
+
+  <string id="21369">Ενεργοποίηση ποντικιού και υποστήριξης Οθόνης Αφής</string>
+  <string id="21370">Ενεργοποίηση ήχων πλοήγησης κατά την αναπαραγωγή</string>
   <string id="21371">Μικρογραφία</string>
   <string id="21372">Περιοχή αναπαραγωγέα DVD</string>
   <string id="21373">Έξοδος βίντεο</string>
-  <string id="21374">Απεικόνιση οθόνης</string>
+  <string id="21374">Αναλογία οθόνης</string>
   <string id="21375">Κανονική</string>
   <string id="21376">Letterbox</string>
-  <string id="21377">Ευρεία προβολή</string>
+  <string id="21377">Ευρεία οθόνη</string>
   <string id="21378">Ενεργοποίηση 480p</string>
   <string id="21379">Ενεργοποίηση 720p</string>
   <string id="21380">Ενεργοποίηση 1080i</string>
   <string id="21386">Διαχείριση στάθμης θορύβου</string>
   <string id="21387">Θορυβώδες</string>
   <string id="21388">Αθόρυβο</string>
-  <string id="21389">Ενεργοποίηση προσαρμοσμένου υπόβαθρου</string>
+  <string id="21389">Ενεργοποίηση προσαρμοσμένου υποβάθρου</string>
   <string id="21390">Διαχείριση παροχής ενέργειας</string>
   <string id="21391">Υψηλή τροφοδοσία</string>
   <string id="21392">Χαμηλή τροφοδοσία</string>
   <string id="21393">Υψηλή αναμονή</string>
   <string id="21394">Χαμηλή αναμονή</string>
-  <string id="21395">Αδυναμία δημιουργίας προσωρινών αρχείων μεγαλύτερων των 4 gb</string>
+  <string id="21395">Αδυναμία δημιουργίας προσωρινών αρχείων μεγαλύτερων από 4GB</string>
   <string id="21396">Κεφάλαιο</string>
-  <string id="21397">Υψηλή ποιότητα (Pixel Shader V2)</string>
+  <string id="21397">Υψηλή ποιότητα (Σκίαση pixel v2)</string>
   <string id="21398">Ενεργοποίηση λίστας αναπαραγωγής κατά την εκκίνηση</string>
   <string id="21399">Ενεργοποίηση εφέ παλινδρομικής κίνησης</string>
   <string id="21400">περιέχει</string>
   <string id="21409">πριν</string>
   <string id="21410">στο τελευταίο</string>
   <string id="21411">όχι στο τελευταίο</string>
-  <string id="21412">Καταγραφείς</string>
-  <string id="21413">Προεπιλεγμένος καταγραφέας ταινίας</string>
-  <string id="21414">Προεπιλεγμένος καταγραφέας τηλεοπτικής σειράς</string>
-  <string id="21415">Προεπιλεγμένος καταγραφέας μουσικού βίντεο</string>
-  <string id="21416">Ενεργοποίηση επαναφοράς (βάση της γλώσσας του καταγραφέα)</string>
+  <string id="21412">Scraper</string>
+  <string id="21413">Προεπιλεγμένο scraper ταινιών</string>
+  <string id="21414">Προεπιλεγμένο scraper τηλεοπτικών σειρών</string>
+  <string id="21415">Προεπιλεγμένο scraper μουσικών βίντεο</string>
+  <string id="21416">Ενεργοποίηση επαναφοράς (βάση της γλώσσας του scraper)</string>
   <string id="21417">- Ρυθμίσεις</string>
   <string id="21418">Πολύγλωσσο</string>
-  <string id="21419">Δεν υπάρχει διαθέσιμος καταγραφέας</string>
-  <string id="21420">ΤιμέÏ\82 Î³Î¹Î± Î±Î½Ï\84ιÏ\83Ï\84οίÏ\87ηση</string>
-  <string id="21421">Î\8cÏ\81οι έξυπνης λίστας αναπαραγωγής</string>
-  <string id="21422">Î\9aÏ\81ιÏ\84ήÏ\81ια Î±Î½Ï\84ιÏ\83Ï\84οίÏ\87ηÏ\83ηÏ\82 Î±Î½Ï\84ικειμένÏ\89ν</string>
-  <string id="21423">Νέοι κανόνες...</string>
-  <string id="21424">Î\91νÏ\84ικείμενα Î¼Îµ Ï\80ολλέÏ\82 Î±Î½Ï\84ιÏ\83Ï\84οιÏ\87ίεÏ\82</string>
-  <string id="21425">με όλους τους κανόνες</string>
-  <string id="21426">με Î­Î½Î±Î½ Î® Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81οÏ\85Ï\82 ÎºÎ±Î½Ï\8cνεÏ\82</string>
+  <string id="21419">Δεν υπάρχει διαθέσιμο scraper</string>
+  <string id="21420">Τιμή Î³Î¹Î± Î±Î½Ï\84ιÏ\83Ï\84οίÏ\87ιση</string>
+  <string id="21421">Î\9aανÏ\8cναÏ\82 έξυπνης λίστας αναπαραγωγής</string>
+  <string id="21422">Î\91νÏ\84ιÏ\83Ï\84οίÏ\87ιÏ\83η Î±Î½Ï\84ικειμένÏ\89ν Ï\8cÏ\84αν</string>
+  <string id="21423">Νέος κανόνας...</string>
+  <string id="21424">Τα Î±Î½Ï\84ικείμενα Ï\80Ï\81έÏ\80ει Î½Î± Ï\80ληÏ\81οÏ\8dν</string>
+  <string id="21425">όλους τους κανόνες</string>
+  <string id="21426">έναν ή περισσότερους κανόνες</string>
   <string id="21427">Αριθμητικό όριο</string>
   <string id="21428">Χωρίς περιορισμό</string>
-  <string id="21429">Συσχετιζόμενο στοιχείο</string>
+  <string id="21429">Σειρά κατά</string>
   <string id="21430">αύξουσα</string>
   <string id="21431">φθίνουσα</string>
   <string id="21432">Επεξεργασία έξυπνης λίστας αναπαραγωγής</string>
   <string id="21433">Όνομα λίστας αναπαραγωγής</string>
-  <string id="21434">Εύρεση αντιστοιχίας αντικειμένων</string>
+  <string id="21434">Εύρεση αντικειμένων για τα οποία</string>
   <string id="21435">Επεξεργασία</string>
   <string id="21436">%i αντικείμενα</string>
   <string id="21437">Νέα έξυπνη λίστα αναπαραγωγής...</string>
   <string id="21438">%c Δίσκος</string>
-  <string id="21439">Επεξεργασία όρων Party Mode</string>
+  <string id="21439">Επεξεργασία κανόνων Party Mode</string>
   <string id="21440">Αρχικός φάκελος</string>
-  <string id="21441">Πλήθος θεαμάτων</string>
+  <string id="21441">Πλήθος προβληθέντων</string>
   <string id="21442">Τίτλος επεισοδίου</string>
   <string id="21443">Ανάλυση βίντεο</string>
   <string id="21444">Κανάλια ήχου</string>
   <string id="21446">Κωδικοποίηση ήχου</string>
   <string id="21447">Γλώσσα ήχου</string>
   <string id="21448">Γλώσσα υποτίτλων</string>
-  <string id="21449">Το τηλεχειριστήριο στέλνει εντολές πληκτρολογίου </string>
+  <string id="21449">Το τηλεχειριστήριο στέλνει εντολές πληκτρολογίου</string>
   <string id="21450">- Επεξεργασία</string>
-  <string id="21451">Απαιτείται σύνδεση στο Internet.</string>
-  <string id="21452">Λήψη περισσότερων...</string>
+  <string id="21451">Απαιτείται σύνδεση στο Διαδίκτυο.</string>
+  <string id="21452">Λήψη Περισσότερων...</string>
   <string id="21453">Σύστημα αρχείων root</string>
+  <string id="21454">Λανθάνουσα μνήμη πλήρης</string>
+  <string id="21455">Η λανθάνουσα μνήμη γέμισε πριν φθάσει το απαιτούμενο μέγεθος για συνεχόμενη αναπαραγωγή</string>
+
+  <string id="21460">Θέση υποτίτλου</string>
+  <string id="21461">Σταθερή</string>
+  <string id="21462">Κάτω πλευρά του βίντεο</string>
+  <string id="21463">Κάτω από το βίντεο</string>
+  <string id="21464">Πάνω πλευρά του βίντεο</string>
+  <string id="21465">Πάνω από το βίντεο</string>
+
   <string id="21800">Όνομα αρχείου</string>
   <string id="21801">Διαδρομή αρχείου</string>
   <string id="21802">Μέγεθος αρχείου</string>
   <string id="21803">Ημερομηνία αρχείου</string>
-  <string id="21804">Î\95Ï\85Ï\81εÏ\84ήÏ\81ιο διαφάνειας</string>
+  <string id="21804">Î\98έÏ\83η διαφάνειας</string>
   <string id="21805">Ανάλυση</string>
   <string id="21806">Σχόλιο</string>
-  <string id="21807">Απόδοση</string>
-  <string id="21808">Επεξεργασία Jpeg</string>
-  <string id="21820">Ημερομηνία λήψης</string>
+  <string id="21807">Έγχρωμη/Ασπρόμαυρη</string>
+  <string id="21808">Επεξεργασία JPEG</string>
+
+  <string id="21820">Ημερομηνία/Ώρα</string>
   <string id="21821">Περιγραφή</string>
   <string id="21822">Κατασκευαστής κάμερας</string>
   <string id="21823">Μοντέλο κάμερας</string>
   <string id="21837">Ευαισθησία ISO</string>
   <string id="21838">Ψηφιακή μεγέθυνση</string>
   <string id="21839">Πλάτος CCD</string>
-  <string id="21840">GPS γεωγραφικό πλάτος </string>
-  <string id="21841">GPS γεωγραφικό μήκος</string>
+  <string id="21840">GPS γεωγρ. πλάτος</string>
+  <string id="21841">GPS γεωγρ. μήκος</string>
   <string id="21842">GPS υψόμετρο</string>
   <string id="21843">Προσανατολισμός</string>
+
   <string id="21860">Συμπληρωματικές πληροφορίες</string>
   <string id="21861">Λέξεις κλειδιά</string>
   <string id="21862">Λεζάντα</string>
   <string id="21863">Δημιουργός</string>
   <string id="21864">Επικεφαλίδα</string>
-  <string id="21865">Î\95ξειδικεÏ\85μένες πληροφορίες</string>
+  <string id="21865">Î\95ιδικές πληροφορίες</string>
   <string id="21866">Κατηγορία</string>
   <string id="21867">Προέλευση</string>
   <string id="21868">Τίτλος</string>
   <string id="21871">Σημειώσεις πνευματικής ιδιοκτησίας</string>
   <string id="21872">Όνομα αντικειμένου</string>
   <string id="21873">Πόλη</string>
-  <string id="21874">Î\95Ï\80αÏ\81Ï\87εία</string>
+  <string id="21874">ΠολιÏ\84εία</string>
   <string id="21875">Χώρα</string>
   <string id="21876">Νομοθετικές πληροφορίες</string>
   <string id="21877">Ημερομηνία δημιουργίας</string>
   <string id="21878">Πνευματικά δικαιώματα</string>
   <string id="21879">Κωδικός χώρας</string>
   <string id="21880">Υπηρεσία πληροφόρησης</string>
-  <string id="21881">Έγκριση στους ελεγκτές UPnP να ελέγχουν το  XBMC</string>
+  <string id="21881">Έγκριση ελέγχου του XBMC μέσω UPnP</string>
   <string id="21882">Απόπειρα αποφυγής οδηγιών πριν από το μενού DVD</string>
   <string id="21883">Αποθηκευμένη μουσική</string>
-  <string id="21884">Î\95Ï\81Ï\8eÏ\84ημα για όλους τους καλλιτέχνες</string>
-  <string id="21885">Λήψη πληροφοριών για το άλμπουμ </string>
+  <string id="21884">Î\95Ï\8dÏ\81εÏ\83η Ï\80ληÏ\81οÏ\86οÏ\81ιÏ\8eν για όλους τους καλλιτέχνες</string>
+  <string id="21885">Λήψη πληροφοριών για το άλμπουμ</string>
   <string id="21886">Λήψη πληροφοριών για τον καλλιτέχνη</string>
   <string id="21887">Βιογραφικό</string>
   <string id="21888">Δισκογραφία</string>
   <string id="21890">Επιλογή καλλιτέxνη</string>
   <string id="21891">Πληροφορίες καλλιτέχνη</string>
   <string id="21892">Όργανα</string>
-  <string id="21893">Î\93έννηÏ\83η</string>
+  <string id="21893">Î\93εννήθηκε</string>
   <string id="21894">Δημιουργία</string>
   <string id="21895">Θεματολόγιο</string>
-  <string id="21896">Î\94ιάλÏ\85Ï\83η</string>
-  <string id="21897">Î\98άναÏ\84οÏ\82</string>
+  <string id="21896">Î\94ιαλÏ\8dθηκε</string>
+  <string id="21897">Πέθανε</string>
   <string id="21898">Έτη ενεργής σταδιοδρομίας</string>
   <string id="21899">Ετικέτα</string>
   <string id="21900">Γέννηση/Δημιουργία</string>
+
+  <!-- strings 21900 thru 21999 reserved for slideshow info -->
+
   <string id="22000">Ενημέρωση της συλλογής κατά την εκκίνηση</string>
   <string id="22001">Απόκρυψη εξέλιξης ενημερώσεων συλλογής</string>
   <string id="22002">- Κατάληξη DNS</string>
+
   <string id="22003">%2.3fs</string>
   <string id="22004">Καθυστέρηση κατά: %2.3fs</string>
   <string id="22005">Προβάδισμα κατά: %2.3fs</string>
-  <string id="22006">Μετατόπιση υπότιτλων</string>
+  <string id="22006">Μετατόπιση υποτίτλων</string>
   <string id="22007">Κατασκευαστής OpenGL:</string>
   <string id="22008">Αποτυπωτής OpenGL:</string>
-  <string id="22009">Έκδοση OpenGL: </string>
+  <string id="22009">Έκδοση OpenGL:</string>
   <string id="22010">Θερμοκρασία GPU:</string>
   <string id="22011">Θερμοκρασία CPU:</string>
   <string id="22012">Συνολική μνήμη</string>
   <string id="22013">Δεδομένα προφίλ</string>
-  <string id="22014">Χρήση 'Αμυδρού φωτός' κατά τη παύση της αναπαραγωγής βίντεο</string>
+  <string id="22014">Χρήση 'Αμυδρού φωτός' κατά την παύση αναπαραγωγής βίντεο</string>
   <string id="22015">Όλες οι εγγραφές</string>
   <string id="22016">Aνά τίτλο</string>
   <string id="22017">Ανά ομάδα</string>
   <string id="22018">Δικτυακά κανάλια</string>
   <string id="22019">Εγγραφές ανά τίτλο</string>
   <string id="22020">Οδηγός</string>
-  <string id="22021">Î\95Ï\80ιÏ\84Ï\81εÏ\80Ï\8cμενο Ï\83Ï\86άλμα Ï\83Ï\84ο Î»Ï\8cγο Î±Ï\80εικÏ\8cνιÏ\83ηÏ\82 Î³Î¹Î± Î½Î± ÎµÎ»Î±Ï\87ιÏ\83Ï\84οÏ\80οιηθοÏ\8dν Î¿Î¹ Î¼Î±Ï\8dÏ\81εÏ\82 Î¼Ï\80άÏ\81εÏ\82</string>
+  <string id="22021">ΣÏ\86άλμα Î±Î½Î±Î»Î¿Î³Î¯Î±Ï\82 Î¿Î¸Ï\8cνηÏ\82 Î³Î¹Î± Î¼ÎµÎ¯Ï\89Ï\83η Î¼Î±Ï\8dÏ\81Ï\89ν Î¼Ï\80αÏ\81Ï\8eν</string>
   <string id="22022">Εμφάνιση αρχείων βίντεο στις λίστες</string>
   <string id="22023">Κατασκευαστής DirectX:</string>
   <string id="22024">Έκδοση Direct3D:</string>
+
+  <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">Γραμματοσειρά</string>
   <string id="22031">- Μέγεθος</string>
   <string id="22032">- Χρώματα</string>
   <string id="22033">- Κωδικοποίηση χαρακτήρων</string>
   <string id="22034">Εξαγωγή τίτλων karaoke ως HTML</string>
   <string id="22035">Εξαγωγή τίτλων karaoke ως CSV</string>
-  <string id="22036">Εισαγωγή τίτλων karaoke... </string>
+  <string id="22036">Εισαγωγή τίτλων karaoke...</string>
   <string id="22037">Αυτόματη εμφάνιση επιλογέα τραγουδιών</string>
   <string id="22038">Εξαγωγή τίτλων karaoke...</string>
   <string id="22039">Εισαγωγή αριθμού τραγουδιού</string>
   <string id="22041">άσπρο/κόκκινο</string>
   <string id="22042">άσπρο/μπλε</string>
   <string id="22043">μαύρο/άσπρο</string>
+
   <string id="22079">Προεπιλεγμένη ενέργεια</string>
   <string id="22080">Επιλογή</string>
   <string id="22081">Προβολή πληροφοριών</string>
   <string id="22082">Περισσότερα...</string>
   <string id="22083">Αναπαραγωγή όλων</string>
-  <string id="23049">Μη διαθέσιμο Teletext </string>
+
+  <string id="23049">Μη διαθέσιμο Teletext</string>
   <string id="23050">Ενεργοποίηση Teletext</string>
   <string id="23051">Μέρος %i</string>
   <string id="23052">Aποθήκευση %i bytes</string>
   <string id="23053">Διακόπτεται</string>
   <string id="23054">Εκτελείται</string>
+
+  <!-- strings 23100 thru 23150 reserved for external player -->
   <string id="23100">Ενεργός εξωτερικός αναπαραγωγέας</string>
-  <string id="23101">Πιέστε το 'Εντάξει' για να τερματίσετε τον αναπαραγωγέα</string>
-  <string id="23104">Πιέστε το 'Εντάξει' όταν η αναπαραγωγή ολοκληρωθεί</string>
+  <string id="23101">Πιέστε 'Επιλογή' για να τερματίσετε την αναπαραγωγή</string>
+
+  <string id="23104">Πιέστε 'Επιλογή' όταν η αναπαραγωγή ολοκληρωθεί</string>
+
+  <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
   <string id="24000">Πρόσθετο</string>
   <string id="24001">Πρόσθετα</string>
   <string id="24002">Ρυθμίσεις πρόσθετου</string>
   <string id="24003">Πληροφορίες πρόσθετου</string>
+
   <string id="24005">Πηγές πολυμέσων</string>
   <string id="24007">Πληροφορίες ταινίας</string>
   <string id="24008">Προφύλαξη οθόνης</string>
   <string id="24009">Script</string>
-  <string id="24010">Î\91Ï\80εικÏ\8cνιση</string>
-  <string id="24011">ΦÏ\8dλαξη Ï\80Ï\81Ï\8cÏ\83θεÏ\84οÏ\85</string>
+  <string id="24010">Î\9fÏ\80Ï\84ικοÏ\80οίηση</string>
+  <string id="24011">Î\91Ï\80οθεÏ\84ήÏ\81ιο Ï\80Ï\81Ï\8cÏ\83θεÏ\84Ï\89ν</string>
   <string id="24012">Υπότιτλοι</string>
   <string id="24013">Στίχοι</string>
   <string id="24014">Πληροφορίες τηλεόρασης</string>
   <string id="24015">Πληροφορίες μουσικού βίντεο</string>
-  <string id="24016">Πληροφορίες άλμπουμ </string>
+  <string id="24016">Πληροφορίες άλμπουμ</string>
   <string id="24017">Πληροφορίες καλλιτέχνη</string>
   <string id="24018">Υπηρεσίες</string>
+
   <string id="24020">Ρύθμιση</string>
   <string id="24021">Απενεργοποίηση</string>
   <string id="24022">Ενεργοποίηση</string>
   <string id="24032">Όλα τα πρόσθετα</string>
   <string id="24033">Λήψη πρόσθετων</string>
   <string id="24034">Έλεγχος για ενημερώσεις</string>
-  <string id="24035">Î\91ναγκασμένη ανανέωση</string>
+  <string id="24035">Î\95ξαναγκασμένη ανανέωση</string>
   <string id="24036">Καταγραφή αλλαγών</string>
   <string id="24037">Κατάργηση εγκατάστασης</string>
   <string id="24038">Εγκατάσταση</string>
   <string id="24041">Εγκατάσταση από αρχείο zip</string>
   <string id="24042">Λήψη %i%%</string>
   <string id="24043">Διαθέσιμες ενημερώσεις</string>
-  <string id="24044">Δεν πληρούνται οι Εξαρτήσεις</string>
-  <string id="24045">Η Επέκταση δεν έχει τη σωστή δομή</string>
-  <string id="24046">%s χρησιμοποιείται από την εγκατεστημένη(νες) Επέκταση(εις)</string>
-  <string id="24047">Αδυναμία απεγκατάστασης αυτής της Επέκτασης</string>
-  <string id="24048">Επαναφορά </string>
+  <string id="24044">Δεν πληρούνται οι εξαρτήσεις</string>
+  <string id="24045">Το Πρόσθετο δεν έχει τη σωστή δομή</string>
+  <string id="24046">Το %s χρησιμοποιείται από τα εγκατεστημένα Πρόσθετα</string>
+  <string id="24047">Αδυναμία απεγκατάστασης αυτού του Πρόσθετου</string>
+  <string id="24048">Επαναφορά</string>
+
   <string id="24050">Διαθέσιμα πρόσθετα</string>
   <string id="24051">Έκδοση:</string>
   <string id="24052">Αποποίηση ευθυνών</string>
   <string id="24053">Άδεια χρήσης:</string>
   <string id="24054">Αρχείο καταγραφής αλλαγών</string>
-  <string id="24059">Î\95Ï\80ιθÏ\85μηÏ\84έ να ενεργοποιηθεί αυτό το πρόσθετο;</string>
-  <string id="24060">Î\95Ï\80ιθÏ\85μηÏ\84έ να απενεργοποιηθεί αυτό το πρόσθετο;</string>
+  <string id="24059">Î\95Ï\80ιθÏ\85μείÏ\84ε να ενεργοποιηθεί αυτό το πρόσθετο;</string>
+  <string id="24060">Î\95Ï\80ιθÏ\85μείÏ\84ε να απενεργοποιηθεί αυτό το πρόσθετο;</string>
   <string id="24061">Διαθέσιμη ενημέρωση πρόσθετου!</string>
   <string id="24062">Ενεργοποιημένα πρόσθετα</string>
   <string id="24063">Αυτόματη ενημέρωση</string>
   <string id="24067">Γίνεται λήψη πρόσθετων</string>
   <string id="24068">Διαθέσιμη ενημέρωση</string>
   <string id="24069">Ενημέρωση</string>
+
   <string id="24070">Αδυναμία χρήσης πρόσθετου.</string>
   <string id="24071">Παρουσιάστηκε άγνωστο σφάλμα.</string>
   <string id="24072">Απαιτούνται ρυθμίσεις</string>
   <string id="24073">Δεν ήταν δυνατή η σύνδεση</string>
   <string id="24074">Απαιτείται επανεκκίνηση</string>
   <string id="24075">Απενεργοποίηση</string>
+  <string id="24076">Απαιτείται Πρόσθετο</string>
   <string id="24080">Νέα προσπάθεια επανασύνδεσης;</string>
   <string id="24089">Επανεκκινήσεις πρόσθετου</string>
   <string id="24090">Κλείδωμα διαχειριστή πρόσθετων</string>
+
   <string id="24094">(τρέχων)</string>
-  <string id="24095">(ανεπιθύμητο) </string>
+  <string id="24095">(ανεπιθύμητο)</string>
   <string id="24096">Το πρόσθετο έχει επισημανθεί ως κατεστραμμένο στο αποθετήριο.</string>
-  <string id="24097">Î\95Ï\80ιθÏ\85μηÏ\84έ να απενεργοποιηθεί από το σύστημά σας;</string>
+  <string id="24097">Î\95Ï\80ιθÏ\85μείÏ\84ε να απενεργοποιηθεί από το σύστημά σας;</string>
   <string id="24098">Κατεστραμμένο</string>
-  <string id="24099">Επιθυμητέ να εφαρμοστεί αυτό το κέλυφος;</string>
+  <string id="24099">Επιθυμείτε να εφαρμοστεί αυτό το κέλυφος;</string>
+  <string id="24100">Για να χρησιμοποιήσετε αυτή τη λειτουργία πρέπει να κατεβάσετε ένα Πρόσθετο:</string>
+  <string id="24101">Επιθυμείτε να κατεβάσετε αυτό το Πρόσθετο;</string>
   <string id="25000">Ειδοποιήσεις</string>
-  <string id="29800">Λειτουργία συλλογής</string>
+
+  <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
+  <string id="29800">Λειτουργία Συλλογής</string>
   <string id="29801">Διάταξη πληκτρολογίου QWERTY</string>
   <string id="29802">Σε λειτουργία η διέλευση ήχου</string>
+
+  <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
+  <!-- strings 31000 thru 31999 reserved for skins -->
+  <!-- strings 32000 thru 32999 reserved for scripts -->
+  <!-- strings 33000 thru 33999 reserved for common strings used in addons -->
   <string id="33001">Ποιότητα διαφημιστικού</string>
   <string id="33002">Ροή πολυμέσων</string>
   <string id="33003">Λήψη</string>
-  <string id="33004">Λήψη και εκτέλεση</string>
-  <string id="33005">Λήψη και αποθήκευση</string>
+  <string id="33004">Λήψη &amp; εκτέλεση</string>
+  <string id="33005">Λήψη &amp; αποθήκευση</string>
   <string id="33006">Σήμερα</string>
   <string id="33007">Αύριο</string>
   <string id="33008">Αποθήκευση</string>
   <string id="33013">Εκτεταμένος</string>
   <string id="33014">Ορισμός αναπαραγωγέα DVD αντί του κανονικού</string>
   <string id="33015">Επιβεβαίωση λήψης πριν την αναπαραγωγή του βίντεο</string>
-  <string id="33016">Clips</string>
-  <string id="33017">Î\95Ï\80ανεκκίνηÏ\83η plugin Î³Î¹Î± Ï\84ην ÎµÎ½ÎµÏ\81γοÏ\80οίηÏ\83η του</string>
-  <string id="33018">ΣήμεÏ\81α Ï\84ο Î²Ï\81άδÏ\85</string>
-  <string id="33019">Αύριο το βράδυ</string>
+  <string id="33016">Clip</string>
+  <string id="33017">Î\95Ï\80ανεκκίνηÏ\83η plugin Î³Î¹Î± Ï\84ην ÎµÎ½ÎµÏ\81γοÏ\80οίηÏ\83ή του</string>
+  <string id="33018">Î\91Ï\80Ï\8cÏ\88ε</string>
+  <string id="33019">Αύριο βράδυ</string>
   <string id="33020">Kατάσταση καιρού</string>
   <string id="33021">Υετός</string>
   <string id="33022">Βροχή</string>
   <string id="33023">Υγρασία</string>
   <string id="33024">Αίσθηση</string>
   <string id="33025">Παρατηρούμενη</string>
-  <string id="33026">Î\95κÏ\86Ï\85γή από το κανονικό</string>
+  <string id="33026">ΠαÏ\81έκκλιÏ\83η από το κανονικό</string>
   <string id="33027">Ανατολή ηλίου</string>
   <string id="33028">Δύση ηλίου</string>
   <string id="33029">Λεπτομέρειες</string>
-  <string id="33030">Î\95ξέλιξη</string>
+  <string id="33030">ΠÏ\81Ï\8cγνÏ\89Ï\83η</string>
   <string id="33031">Ροή εξώφυλλων</string>
   <string id="33032">Μετάφραση κειμένου</string>
   <string id="33033">Κατηγορία λίστας χαρτών %s</string>
-  <string id="33034">Τριήμερη</string>
-  <string id="33035">Χάρτες καιρού</string>
+  <string id="33034">36ωρο</string>
+  <string id="33035">Χάρτες</string>
   <string id="33036">Ωριαία</string>
   <string id="33037">Σαββατοκύριακο</string>
   <string id="33038">%sη ημέρα</string>
   <string id="33049">Προειδοποίηση</string>
   <string id="33050">Προειδοποιήσεις</string>
   <string id="33051">Επιλογή</string>
-  <string id="33052">ΠÏ\81Ï\8cγνÏ\89Ï\83η</string>
+  <string id="33052">Î\88λεγÏ\87οÏ\82</string>
   <string id="33053">Ρύθμιση</string>
-  <string id="33054">Î\9aÏ\8dκλοι</string>
+  <string id="33054">Î\95Ï\80οÏ\87έÏ\82</string>
   <string id="33055">Εκτέλεση</string>
   <string id="33056">Παρακολούθηση</string>
   <string id="33057">Ακρόαση</string>
   <string id="33072">Σημειώσεις έκδοσης</string>
   <string id="33073">Αλλαγές έκδοσης</string>
   <string id="33074">Για να εκτελεστεί η έκδοση %s απαιτείται</string>
-  <string id="33075">η %s Î±Î½Î±Î¸ÎµÏ\89Ï\81ημένη Î­ÎºÎ´Î¿Ï\83η Ï\84οÏ\85 XBMC Î® ÎºÎ±Î¹ Î½ÎµÏ\8eÏ\84εÏ\81η.</string>
-  <string id="33076">Παρακαλώ, αναβαθμίστε άμεσα το XBMC.</string>
+  <string id="33075">η %s αναθεωρημένη έκδοση του XBMC ή νεώτερη.</string>
+  <string id="33076">Παρακαλώ αναβαθμίστε το XBMC.</string>
   <string id="33077">Δεν βρέθηκαν δεδομένα!</string>
   <string id="33078">Επόμενη σελίδα</string>
   <string id="33079">Αγαπητό</string>
   <string id="33080">Απεχθές</string>
-  <string id="33081">Αυτό το αρχείο είναι στοιβαγμένο, επιλέξτε το μέρος αυτού που επιθυμείτε να αναπαραχθεί.</string>
+  <string id="33081">Αυτό το αρχείο είναι στοιβαγμένο, επιλέξτε από που να γίνει αναπαραγωγή.</string>
   <string id="33082">Διαδρομή για το script</string>
   <string id="33083">Ενεργοποίηση προσαρμοσμένου πλήκτρου script</string>
+
   <string id="33100">Αποτυχία εκκίνησης</string>
-  <string id="33101">Διακομιστής web</string>
+  <string id="33101">Διακομιστής ιστού</string>
   <string id="33102">Διακομιστής Συμβάντων</string>
   <string id="33103">Απομακρυσμένος Διακομιστής Επικοινωνίας</string>
+
+  <string id="33200">Εντοπίστηκε Νέα Σύνδεση</string>
+
+  <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
   <string id="34002">Wav</string>
   <string id="34003">DXVA2</string>
   <string id="34004">VAAPI</string>
   <string id="34005">Flac</string>
+
   <string id="34100">Διάταξη ηχείων</string>
   <string id="34101">2.0</string>
   <string id="34102">2.1</string>
   <string id="34108">5.1</string>
   <string id="34109">7.0</string>
   <string id="34110">7.1</string>
+  <!-- 34112-34200 reserved for future use -->
+
   <string id="34201">Αδυναμία εύρεσης επόμενου αντικειμένου για αναπαραγωγή</string>
   <string id="34202">Αδυναμία εύρεσης προηγούμενου αντικειμένου για αναπαραγωγή</string>
+
+  <string id="34300">Αποτυχία εκκίνησης του zeroconf</string>
+  <string id="34301">Είναι εγκατεστημένη η Υπηρεσία Bonjour της Apple; Δείτε το αρχείο καταγραφής για περισσότερες πληροφορίες.</string>
+  
+  <string id="34400">Απόδοση Βίντεο</string>
+  <string id="34401">Αποτυχία χρήσης φίλτρων/scalers βίντεο, επαναφορά σε bilinear προσαρμογή ανάλυσης</string>
+  <string id="34402">Αποτυχία έναρξης της συσκευής ήχου</string>
+  <string id="34403">Ελέγξτε τις ρυθμίσεις ήχου</string>
+
+  <string id="35000">Περιφερειακά</string>
+
+  <string id="35001">Γενική συσκευή HID</string>
+  <string id="35002">Γενικός προσαρμογέας δικτύου</string>
+  <string id="35003">Γενικός δίσκος</string>
+  <string id="35004">Δεν υπάρχουν διαθέσιμες ρυθμίσεις&#10;για αυτό το περιφερειακό.</string>
+  <string id="35005">Η νέα συσκευή ρυθμίστηκε</string>
+  <string id="35006">Η συσκευή αφαιρέθηκε</string>
+  <string id="35007">Keymap για χρήση με αυτή τη συσκευή</string>
+  <string id="35008">Ενεργοποιημένο Keymap</string>
+
+  <string id="35500">Τοποθεσία</string>
+  <string id="35501">Κλάση</string>
+  <string id="35502">Όνομα</string>
+  <string id="35503">Προμηθευτής</string>
+  <string id="35504">Αναγνωριστικό προϊόντος</string>
+
+  <string id="36000">Προσαρμογέας Pulse-Eight CEC</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Μετάβαση στο πληκτρολόγιο εντολών</string>
+  <string id="36003">Ενεργοποίηση διακόπτη εντολών</string>
+  <string id="36004">Πιέστε το "user" πλήκτρο εντολών</string>
+  <string id="36005">Ενεργοποίηση διακόπτη εντολών</string>
+  <string id="36006">Αδυναμία εκκίνησης του προσαρμογέα</string>
+  <string id="36007">Ενεργοποίηση της τηλεόρασης κατά την εκκίνηση του XBMC</string>
+  <string id="36008">Απενεργοποίηση συσκευών κατά τη διακοπή λειτουργίας του XBMC</string>
+  <string id="36009">Συσκευές σε κατάσταση αναμονής κατά την προφύλαξη οθόνης</string>
+  <string id="36010"></string>
+  <string id="36011">Δεν εντοπίστηκε η θύρα CEC. Ρυθμίστε την χειροκίνητα.</string>
+  <string id="36012">Δεν εντοπίστηκε ο προσαρμογέας CEC.</string>
+  <string id="36013">Μη υποστηριζόμενη έκδοση libcec. Η %d είναι μεγαλύτερη από την έκδοση που το XBMC υποστηρίζει (%d)</string>
+  <string id="36014">Ο υπολογιστής σε κατάσταση αναμονής όταν κλείσει η τηλεόραση</string>
+  <string id="36015">Αριθμός θύρας HDMI</string>
+  <string id="36016">Συνδεδεμένη</string> <!-- max. 13 characters -->
+  <string id="36017">O προσαρμογέας εντοπίσθηκε, αλλά η libcec δεν είναι διαθέσιμη</string>
+  <string id="36018">Χρήση των ρυθμίσεων γλώσσας της τηλεόρασης</string>
 </strings>
index cee9ec5..e160608 100644 (file)
   </dvd>
 
   <regions>
-    <region locale="IL">
+    <region name="ISRAEL (12h)" locale="IL">
+      <dateshort>DD/MM/YYYY</dateshort>
+      <datelong>DDDD DD MMMM YYYY</datelong>
+      <time symbolAM="" symbolPM="">hh:mm:ss</time>
+      <tempunit>C</tempunit>
+      <speedunit>kmh</speedunit>
+    </region>
+
+    <region name="ISRAEL (24h)" locale="US">
       <dateshort>DD/MM/YYYY</dateshort>
       <datelong>DDDD DD MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">HH:mm:ss</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
     </region>
+
   </regions>
 </language>
 
index 77223f6..ba60c85 100644 (file)
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--Language file translated with Team XBMC Translator-->
-<!--Date of translation: 11/24/2009-->
-<!--$Revision$-->
-<!--Based on english strings version 24865-->
+<!--Translator: Idan Bushari-->
+<!--Email: bushari2003@hotmail.com-->
+<!--Date of translation: 02/20/2012-->
+<!--Based on English 0ee1ef09238e4d913cf6c47fa18138c3654cd33e (08.02.2012)-->
 <strings>
-  <string id="0">ת×\95×\9b× ×\99×\95ת</string>
+  <string id="0">תוכנות</string>
   <string id="1">תמונות</string>
   <string id="2">מוסיקה</string>
   <string id="3">וידאו</string>
@@ -12,8 +13,7 @@
   <string id="5">הגדרות</string>
   <string id="7">מנהל קבצים</string>
   <string id="8">מזג האויר</string>
-  <string id="9">xbmc מדיה סנטר</string>
-  
+  <string id="9">XBMC מדיה סנטר</string>
   <string id="11">יום שני</string>
   <string id="12">יום שלישי</string>
   <string id="13">יום רביעי</string>
@@ -21,7 +21,6 @@
   <string id="15">יום שישי</string>
   <string id="16">יום שבת</string>
   <string id="17">יום ראשון</string>
-  
   <string id="21">ינואר</string>
   <string id="22">פברואר</string>
   <string id="23">מרץ</string>
   <string id="30">אוקטובר</string>
   <string id="31">נובמבר</string>
   <string id="32">דצמבר</string>
-  
-  <string id="41">שני</string>
-  <string id="42">שלישי</string>
-  <string id="43">רביעי</string>
-  <string id="44">חמישי</string>
-  <string id="45">שישי</string>
-  <string id="46">שבת</string>
-  <string id="47">ראשון</string>
-  
+  <string id="41"> שני</string>
+  <string id="42"> שלישי</string>
+  <string id="43"> רביעי</string>
+  <string id="44"> חמישי</string>
+  <string id="45"> שישי</string>
+  <string id="46"> שבת</string>
+  <string id="47"> ראשון</string>
   <string id="51">ינו</string>
   <string id="52">פבר</string>
   <string id="53">מרץ</string>
   <string id="60">אוק</string>
   <string id="61">נוב</string>
   <string id="62">דצמ</string>
-  
+  <string id="71">צ</string>
+  <string id="72">צ-צ-מז</string>
+  <string id="73">צ-מז</string>
+  <string id="74">מז-צ-מז</string>
+  <string id="75">מז</string>
+  <string id="76">מז-ד-מז</string>
+  <string id="77">ד-מז</string>
+  <string id="78">ד-ד-מז</string>
+  <string id="79">ד</string>
+  <string id="80">ד-ד-מע</string>
+  <string id="81">ד-מע</string>
+  <string id="82">מע-ד-מע</string>
+  <string id="83">מע</string>
+  <string id="84">מע-צ-מע</string>
+  <string id="85">צ-מע</string>
+  <string id="86">צ-צ-מע</string>
   <string id="98">תצוגה: אוטומטי</string>
   <string id="99">תצוגה: אוטומטי גדול</string>
   <string id="100">תצוגה: צלמיות</string>
   <string id="106">לא</string>
   <string id="107">כן</string>
   <string id="108">מצגת</string>
-  <string id="109">צ×\95ר ×¦×\9c×\9e×\99ות</string>
-  <string id="110">צ×\95ר ×¦×\9c×\9e×\99×\95ת ×ª×¦×\95×\92×\94 ×\9eק×\93×\99×\9e×\94</string>
+  <string id="109">צ×\95ר ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ערות</string>
+  <string id="110">צ×\95ר ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ער×\95ת</string>
   <string id="111">קיצורי דרך</string>
   <string id="112">מושהה</string>
+  <string id="113">עדכון נכשל</string>
+  <string id="114">ההתקנה נכשלה</string>
   <string id="115">העתק</string>
   <string id="116">העבר</string>
   <string id="117">מחק</string>
   <string id="127">אובייקטים</string>
   <string id="128">כללי</string>
   <string id="129">מצגת</string>
-  <string id="130">×\9e×\99×\93×¢ מערכת</string>
+  <string id="130">פר×\98×\99 מערכת</string>
   <string id="131">מסך</string>
   <string id="132">אלבומים</string>
   <string id="133">אמנים</string>
   <string id="134">שירים</string>
-  <string id="135">×\96\90נר×\99×\9d</string>
+  <string id="135">ס×\92× ×\95× ×\95ת</string>
   <string id="136">רשימות ניגון</string>
   <string id="137">חפש</string>
-  <string id="138">×\9e×\99×\93×¢ מערכת</string>
-  <string id="139">:טמפרטורות</string>
-  <string id="140">:מעבד</string>
+  <string id="138">פר×\98×\99 מערכת</string>
+  <string id="139">טמפרטורות:</string>
+  <string id="140">מעבד:</string>
   <string id="141">מעבד גרפי:</string>
-  <string id="142">:זמן</string>
-  <string id="143">:נוכחי</string>
-  <string id="144">:גירסה</string>
-  <string id="145">:רשת</string>
-  <string id="146">:סוג</string>
+  <string id="142">זמן:</string>
+  <string id="143">נוכחי:</string>
+  <string id="144">גירסה:</string>
+  <string id="145">רשת:</string>
+  <string id="146">סוג:</string>
   <string id="147">סטאטי</string>
-  <string id="148">אוטומטי</string>
+  <string id="148">DHCP</string>
   <string id="149">MAC</string>
   <string id="150">IP</string>
-  <string id="151">:קישור</string>
-  <string id="152">חצי דופלקס</string>
-  <string id="153">דופלקס מלא</string>
+  <string id="151">Link:</string>
+  <string id="152">Half duplex</string>
+  <string id="153">Full duplex</string>
   <string id="154">אחסון</string>
   <string id="155">כונן</string>
   <string id="156">פנוי</string>
   <string id="157">וידאו</string>
   <string id="158">זיכרון פנוי</string>
-  <string id="159">אין חיבור רשת</string>
+  <string id="159">אין חיבור</string>
   <string id="160">פנוי</string>
   <string id="161">לא זמין</string>
   <string id="162">מגש פתוח</string>
   <string id="164">אין דיסק</string>
   <string id="165">דיסק נמצא</string>
   <string id="166">סקין</string>
-  <string id="167">FTP הפעל שרת </string>
-  <string id="168">אפשר סינכרון שעון עם שעון אינטרנט</string>
   <string id="169">רזולוציה</string>
   <string id="170">התאם את קצב רענון המסך לוידאו</string>
   <string id="172">תאריך הפצה</string>
-  <string id="175">טונים</string>
+  <string id="173">הצג וידאו 4:3 כמו</string>
+  <string id="175">מצבים</string>
   <string id="176">סגנונות</string>
   <string id="179">שיר</string>
   <string id="180">אורך</string>
   <string id="186">אישור</string>
   <string id="187">!לא נמצאו אלבומים</string>
   <string id="188">בחר הכל</string>
-  <string id="189">ס×\95רק ×\9e×\99×\93×¢ מערכת</string>
+  <string id="189">ס×\95רק ×¤×¨×\98×\99 מערכת</string>
   <string id="190">שמור</string>
   <string id="191">ערבב</string>
   <string id="192">נקה</string>
   <string id="193">סרוק</string>
   <string id="194">...מחפש</string>
-  <string id="195">!×\9c×\90 × ×\99×\9eצ×\90 ×\9e×\99×\93×¢</string>
+  <string id="195">!×\9c×\90 × ×\9eצ×\90×\95 ×¤×¨×\98×\99×\9d</string>
   <string id="196">:בחר סרט</string>
-  <string id="197">%s מחפש מידע</string>
-  <string id="198">טוען מידע אודות הסרט</string>
-  <string id="202">שורת עלילה</string>
+  <string id="197">%s מחפש פרטים</string>
+  <string id="198">טוען פרטים אודות הסרט</string>
+  <string id="199">ממשק אינטרנט</string>
+  <string id="202">מילות מפתח</string>
   <string id="203">תקציר עלילה</string>
   <string id="205">:הצבעות</string>
-  <string id="206">×\9c×\99×\94×\95ק</string>
+  <string id="206">צ×\95×\95ת</string>
   <string id="207">עלילה</string>
   <string id="208">נגן</string>
   <string id="209">הבא</string>
   <string id="210">הקודם</string>
-  <string id="213">×\9b×\95×\95× ×\95×\9f ממשק משתמש</string>
-  <string id="214">×\9b×\95×\95× ×\95×\9f ×\9eס×\9a</string>
+  <string id="213">×\9b×\99×\95×\9c ממשק משתמש</string>
+  <string id="214">×\9b×\99×\95×\9c ×\95×\99×\93×\90×\95...</string>
   <string id="215">רכך</string>
   <string id="216">כמות זום</string>
   <string id="217">יחס פיקסלים</string>
   <string id="221">הרשת אינה מחוברת</string>
   <string id="222">בטל</string>
   <string id="224">מהירות</string>
+  <string id="225">תזוזה אנכי</string>
   <string id="226">בדוק תבניות...</string>
   <string id="227">חפש את שמות רצועות הדיסק ב freedb.org</string>
-  <string id="228">ער×\91×\91 ×¨×©×\99×\9eת ×\94ש×\9e×¢×\94 בעת הטעינה</string>
+  <string id="228">רש×\99×\9eת ×\94ש×\9e×¢×\94 ×\90קר×\90×\99ת בעת הטעינה</string>
   <string id="229">זמן סיבוב כונן קשיח (בדקות)</string>
   <string id="230">פילטרים</string>
   <string id="231">ללא</string>
   <string id="234">אנזיאוטרופי</string>
   <string id="235">מחומש</string>
   <string id="236">קוביה גאוסנית</string>
-  <string id="237">צ×\9eצ×\95×\9d</string>
+  <string id="237">×\94ק×\98× ×\94</string>
   <string id="238">הגדלה</string>
   <string id="239">נקה רשימת השמעה בסיום</string>
-  <string id="240">ס×\92× ×\95×\9f ×\9eס×\9a</string>
+  <string id="240">ס×\92× ×\95×\9f ×ª×¦×\95×\92×\94</string>
   <string id="241">מסך מלא #%d</string>
   <string id="242">חלון</string>
-  <string id="243">רענון</string>
+  <string id="243">קצ×\91 ×¨×¢× ×\95×\9f</string>
   <string id="244">מסך מלא</string>
-  <string id="245">גודל: (%i,%i)->(%i,%i) (זום x%2.2f) AR:%2.2f:1 (פיקסלים: %2.2f:1) (VShift: %2.2f)</string>
-  
+  <string id="245">גודל: (%i,%i)-&gt;(%i,%i) (זום x%2.2f) AR:%2.2f:1 (פיקסלים: %2.2f:1) (VShift: %2.2f)</string>
   <string id="247">סקריפטים</string>
   <string id="248">שפה</string>
   <string id="249">מוסיקה</string>
-  <string id="250">×\95×\99×\96×\95×\90×\9c×\96צ×\99×\94</string>
+  <string id="250">×\97×\99×\96×\95×\99</string>
   <string id="251">בחר ספרית יעד</string>
   <string id="252">- פלט סטריאו לכל הרמקולים</string>
   <string id="253">מספר ערוצים</string>
   <string id="254">DTS רסיבר תומך</string>
   <string id="255">CDDB</string>
-  <string id="256">CDDB ×\9e×\97פש ×\91רשת ×\9e×\99×\93×¢</string>
+  <string id="256">CDDB ×\9e×\97פש ×\91רשת ×¤×¨×\98×\99</string>
   <string id="257">שגיאה</string>
   <string id="258">ID3 אפשר תגיות</string>
   <string id="259">פותח</string>
   <string id="273">פיצוי סריקת יתר מימין למטה</string>
   <string id="274">מיקום הכתוביות</string>
   <string id="275">כיוון יחס הפיקסלים</string>
-  <string id="276">×\94×\96×\96 ×\90ת ×\94×\97×¥ לשינוי רמת סריקת היתר</string>
+  <string id="276">×\94×\96×\96 ×\90ת ×\94ס×\9e×\9f לשינוי רמת סריקת היתר</string>
   <string id="277">הזז את המצביע לשינוי מקום הכתוביות</string>
   <string id="278">כוון את המלבן כך שיהפוך לריבוע מושלם</string>
-  <string id="279">×\98×¢×\99נת ×\94×\92×\93ר×\95ת × ×\9bש×\9c×\94</string>
-  <string id="280">×\9eשת×\9eש ×\91×\91ר×\99ר×\95ת מחדל</string>
+  <string id="279">×\90×\99×\9f ×\90פשר×\95ת ×\9c×\98×¢×\95×\9f ×\94×\92×\93ר×\95ת</string>
+  <string id="280">×\9eשת×\9eש ×\91×\94×\92×\93ר×\95ת ×\91ר×\99רת מחדל</string>
   <string id="281">XML אנא בדוק קבצי</string>
   <string id="282">התאמות %i נמצאו</string>
   <string id="283">תוצאות חיפוש</string>
   <string id="284">לא נמצאו התאמות לחיפוש</string>
-  <string id="286">פילטר לאחר עיבוד</string>
   <string id="287">כתוביות</string>
   <string id="288">פונט</string>
   <string id="289">גודל</string>
-  <string id="290">  (db) הגברת ווליום</string>
+  <string id="290"> (db) הגברת ווליום</string>
   <string id="291">וידאו</string>
   <string id="292">אודיו</string>
-  <string id="293">×\97פש כתוביות</string>
+  <string id="293">×¢×\99×\99×\9f ×\9cכתוביות</string>
   <string id="294">צור סימניה</string>
   <string id="296">נקה סימניות</string>
   <string id="297">השהיית קול הנומתו</string>
   <string id="298">סימניות</string>
+  <string id="299">- AAC רסיבר נתמך</string>
+  <string id="300">- MP1 רסיבר נתמך</string>
+  <string id="301">- MP2 רסיבר נתמך</string>
+  <string id="302">- MP3 רסיבר נתמך</string>
   <string id="303">השהייה</string>
   <string id="304">שפה</string>
   <string id="305">זמין</string>
   <string id="306">ללא-הפרדה</string>
-  <string id="307">- אוטומאטי עיבוד</string>
-  <string id="308">- פילטר הסרת חסימה לגובה</string>
-  <string id="309">- פילטר הסרת חסימה לרוחב</string>
-  <string id="310">- בהירות/ניגודיות אוטומטיים</string>
-  <string id="311">- Dering</string>
   <string id="312">(0=אוטומטי)</string>
-  <string id="313">נקה מסד נתונים</string>
+  <string id="313">×\9eנק×\94 ×\9eס×\93 × ×ª×\95× ×\99×\9d</string>
   <string id="314">...מתכונן</string>
   <string id="315">שגיאת מסד נתונים</string>
   <string id="316">...מחפש שירים</string>
   <string id="330">...פעולה זו עשויה לקחת זמן</string>
   <string id="331">...דוחס נתונים</string>
   <string id="332">שגיאה בדחיסת נתונים</string>
-  <string id="333">?×\94×\90×\9d ×\91רצ×\95× ×\9a ×\9cנק×\95ת ×\90ת ×\9eס×\93 ×\94נת×\95× ×\99×\9d</string>
-  <string id="334">נק×\94 ×\90ת ×\9eס×\93 ×\94נת×\95× ×\99×\9d</string>
+  <string id="333">?×\94×\90×\9d ×\91רצ×\95× ×\9a ×\9cנק×\95ת ×\90ת ×\94ספר×\99×\94</string>
+  <string id="334">נק×\94 ×¡×¤×¨×\99×\94...</string>
   <string id="335">התחל</string>
-  <string id="336">ס×\93ר קצב פריימים</string>
+  <string id="336">×\94×\9eרת קצב פריימים</string>
   <string id="337">פלט אודיו</string>
   <string id="338">אנלוגי</string>
   <string id="339">דיגיטאלי</string>
   <string id="340">אמנים שונים</string>
   <string id="341">נגן דיסק</string>
   <string id="342">סרטים</string>
-  <string id="343">ס×\93ר קצב פריימים</string>
+  <string id="343">×\94ת×\90×\9d קצב פריימים</string>
   <string id="344">שחקנים</string>
   <string id="345">שנה</string>
   <string id="346">הגבר קול ב downmix</string>
   <string id="351">כבה</string>
   <string id="352">עמעם</string>
   <string id="353">מסך שחור</string>
-  <string id="354">מאטריקס</string>
-  <string id="355">×\94×\9eתנ×\94 לשומר מסך</string>
+  <string id="354">Matrix trails</string>
+  <string id="355">×\96×\9e×\9f לשומר מסך</string>
   <string id="356">מצב שומר מסך</string>
-  <string id="357">×\96×\9e×\9f ×\9c×\94×\9eתנ×\94 ×\9cפנ×\99 ×\9b×\99×\91×\95×\99</string>
+  <string id="357">זמן המתנה לפני כיבוי</string>
   <string id="358">כל האלבומים</string>
   <string id="359">אלבומים אחרונים</string>
   <string id="360">שומר מסך</string>
   <string id="404">רוח</string>
   <string id="405">נקודת אידוי</string>
   <string id="406">לחות</string>
-  <string id="407">מ</string>
-  <string id="408">ב</string>
   <string id="409">ברירת מחדל</string>
-  <string id="410">Weather.com ניגש ל</string>
+  <string id="410">ניגש לשירות מזג אויר</string>
   <string id="411">:טוען מזג אויר עבור</string>
-  <string id="412">ש×\92×\99×\90×\94 ×\91×\98×¢×\99נת מזג אויר</string>
+  <string id="412">×\90×\99×\9f ×\90פשר×\95ת ×\9cק×\91×\9c ×¤×¨×\98×\99 מזג אויר</string>
   <string id="413">ידני</string>
-  <string id="414">×\90×\99×\9f ×\91×\99ק×\95רות עבור אלבום זה</string>
-  <string id="415">...×\9e×\95ר×\99×\93 ×¦×\9c×\9e×\99ות</string>
+  <string id="414">×\90×\99×\9f ×¡×§×\99רות עבור אלבום זה</string>
+  <string id="415">...×\9e×\95ר×\99×\93 ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ערות</string>
   <string id="416">לא זמין</string>
   <string id="417">תצוגה : צלמיות גדולות</string>
-  <string id="422">מחק מידע אלבום</string>
-  <string id="423">מידע CDDB מחק</string>
+  <string id="418">נמוך</string>
+  <string id="419">גבוה</string>
+  <string id="420">HDMI</string>
+  <string id="422">מחק פרטי אלבום</string>
+  <string id="423">מחק פרטי CDDB</string>
   <string id="424">בחר</string>
-  <string id="425">.לא נמצא מידע אלבום</string>
-  <string id="426">.לא נמצא מידע אלבום</string>
-  <string id="427">:דיסק</string>
+  <string id="425">לא נמצא פרטי אלבום</string>
+  <string id="426">לא נמצא פרטי דיסק</string>
+  <string id="427">דיסק</string>
   <string id="428">הכנס דיסק נכון</string>
-  <string id="429">אנא הכנס את הדיסק הבא</string>
+  <string id="429">אנא הכנס את הדיסק הבא:</string>
   <string id="430">DVD# : מיין לפי</string>
-  <string id="431">ללא מטמון</string>
-  <string id="432">מחק סרט ממסד הנתונים</string>
-  <string id="433">?'%s'  האם אתה בטוח שברצונך למחוק את</string>
+  <string id="431">אין זכרון מטמון</string>
+  <string id="432">מחק סרט מהספריה</string>
+  <string id="433">?'%s' האם אתה בטוח שברצונך למחוק את</string>
+  <string id="434">מ%s ב%i %s</string>
   <string id="437">כונן נייד</string>
   <string id="438">פותח קובץ</string>
-  <string id="439">מטמון</string>
+  <string id="439">×\96×\9bר×\95×\9f ×\9e×\98×\9e×\95×\9f</string>
   <string id="440">כונן קשיח</string>
   <string id="441">UDF</string>
   <string id="442">רשת מקומית</string>
   <string id="444">וידאו</string>
   <string id="445">אודיו</string>
   <string id="446">DVD</string>
-  <string id="447">× ×\92×\9f ×\90×\95×\98×\95×\9e×\90×\98×\99ת</string>
+  <string id="447">נגן אוטומטית</string>
   <string id="448">LCD</string>
   <string id="449">פעיל</string>
   <string id="450">עמודות</string>
   <string id="456">מצב</string>
   <string id="457">החלף תצוגה</string>
   <string id="459">כתוביות</string>
-  <string id="460">×\96ר×\9d אודיו</string>
+  <string id="460">×\96ר×\99×\9eת אודיו</string>
   <string id="461">[פעיל]</string>
   <string id="462">כתובית</string>
   <string id="463">תאורה אחורית</string>
   <string id="468">הזז את הסמן כדי לשנות את מיקום התפריט</string>
   <string id="469">מיקום תפריט</string>
   <string id="470">תודות</string>
-  <string id="471">מודצ'יפ</string>
+  <string id="471">Modchip</string>
   <string id="474">כבוי</string>
   <string id="475">מוזיקה בלבד</string>
   <string id="476">מוזיקה ווידאו</string>
   <string id="477">לא יכול לטעון רשימת השמעה</string>
   <string id="478">תפריט</string>
   <string id="479">סקין ושפה</string>
-  <string id="480">×\9e×\9eשק ×\9eשת×\9eש</string>
+  <string id="480">×\9eר×\90×\94</string>
   <string id="481">אפשרויות אודיו</string>
   <string id="482"> XBMC אודות</string>
   <string id="485">מחק אלבום</string>
-  <string id="486">×\97×\96×\95ר</string>
+  <string id="486">×\97×\96ר×\94</string>
   <string id="487">חזור פעם אחת</string>
   <string id="488">חזור רשימת השמעה לתיקיה</string>
   <string id="489">נגן את השיר הבא אוטומטית</string>
   <string id="492">הגדל כתוביות</string>
   <string id="493">אפשרויות מתקדמות</string>
   <string id="494">Overall Audio Headroom (dB)</string>
-  <string id="495">×\93×\92×\95×\9d ×\9e×\97×\93ש ×\95×\99×\93×\90×\95 ×\9cרצולוצית תצוגה</string>
+  <string id="495">×\93×\92×\95×\9d ×\9e×\97×\93ש ×\95×\99×\93×\90×\95 ×\9cר×\96ולוצית תצוגה</string>
   <string id="496">כיוונון</string>
   <string id="497">הראה סיומות קבצים</string>
   <string id="498">מיין לפי : סוג</string>
-  <string id="499">×\90×\99×\9f ×\97×\99×\91×\95ר ×\9c www.allmusic.com</string>
+  <string id="499">×\90×\99×\9f ×\90פשר×\95ת ×\9c×\94ת×\97×\91ר ×\9cש×\99ר×\95ת ×\94×\97×\99פ×\95ש</string>
   <string id="500">הורדת פרטי אלבום נכשלה</string>
-  <string id="501">מחפש שמות אלבום</string>
+  <string id="501">מחפש שמות אלבום...</string>
   <string id="502">פתח</string>
   <string id="503">עסוק</string>
   <string id="504">ריק</string>
   <string id="505">טוען פרטי מדיה מהקבצים</string>
   <string id="507">מיין לפי : שימוש</string>
-  <string id="510">×\90פשר ×ª×¦×\95×\92×\95ת</string>
+  <string id="510">×\90פשר ×\97×\99×\96×\95×\99</string>
   <string id="511">אפשר החלפת מצב וידאו</string>
   <string id="512">חלון ראשוני</string>
   <string id="513">חלון הבית</string>
   <string id="514">הגדרות ידניות</string>
-  <string id="515">×\96\90נר</string>
+  <string id="515">ס×\92× ×\95×\9f</string>
   <string id="517">אלבומים שנוגנו לאחרונה</string>
   <string id="518">הפעל</string>
   <string id="519">...הפעל ב</string>
-  <string id="520">XBE ערוך כותרת</string>
   <string id="521">אוספים</string>
   <string id="522">הסר מקור</string>
   <string id="523">החלף מדיה</string>
   <string id="525">רשימת ניגון חדשה</string>
   <string id="526">הוסף לרשימת ניגון</string>
   <string id="527">הוסף ידנית למסד הנתונים</string>
-  <string id="528">×\94×\9bנס כותרת</string>
+  <string id="528">×\94×\96×\9f כותרת</string>
   <string id="529">שגיאה: כותרת כפולה</string>
   <string id="530">בחר סגנון</string>
   <string id="531">סגנון חדש</string>
   <string id="532">הוספה ידנית</string>
-  <string id="533">×\94×\9bנס סגנון</string>
-  <string id="534">×\94צ×\92: %s</string>
+  <string id="533">×\94×\96×\9f סגנון</string>
+  <string id="534">תצ×\95×\92×\94: %s</string>
   <string id="535">רשימה</string>
-  <string id="536">×\90×\99ק×\95× ×\99×\9d</string>
+  <string id="536">צ×\9c×\9e×\99×\95ת</string>
   <string id="537">רשימה גדולה</string>
   <string id="538">צלמיות גדולות</string>
   <string id="539">רחב</string>
   <string id="543">DVD</string>
   <string id="544">פרטי מדיה</string>
   <string id="545">התקן פלט אודיו</string>
-  <string id="547">אין ביוגרפיה לאמןז זה</string>
+  <string id="546">עובר דרך התקן חיצוני</string>
+  <string id="547">אין ביוגרפיה לאמן זה</string>
   <string id="548">התאם אודיו רב-ערוצי לסטריאו</string>
   <string id="550">מיין לפי: %s</string>
   <string id="551">שם</string>
   <string id="563">דירוג</string>
   <string id="564">סוג</string>
   <string id="565">שימוש</string>
-  <string id="566">×\90×\9e×\9f ×\90×\91×\9c×\95×\9d</string>
+  <string id="566">×\90×\9c×\91×\95×\9d ×\90×\9e×\9f</string>
   <string id="567">מספר פעמים שנוגן</string>
   <string id="568">נוגן לאחרונה</string>
   <string id="569">הערות</string>
-  <string id="570">ת×\90ר×\99×\9a ×\94ת×\95×\95ספ×\95ת</string>
+  <string id="570">ת×\90ר×\99×\9a ×\94×\95ספ×\94</string>
   <string id="571">ברירת מחדל</string>
   <string id="572">אולפן</string>
   <string id="573">נתיב</string>
+  <string id="574">ארץ</string>
+  <string id="575">בתהליך</string>
+  <string id="576">פעמים שנוגן</string>
   <string id="580">כיוון מיון</string>
   <string id="581">שיטת מיון</string>
   <string id="582">מצב תצוגה</string>
   <string id="590">אקראי</string>
   <string id="591">כבוי</string>
   <string id="592">אחד</string>
-  <string id="593">כל</string>
+  <string id="593">×\94×\9b×\9c</string>
   <string id="594">כבוי</string>
-  <string id="595">×\97×\96×\95ר: כבוי</string>
-  <string id="596">×\97×\96×\95ר: אחד</string>
-  <string id="597">×\97×\96×\95ר: הכל</string>
+  <string id="595">×\97×\96ר×\94: כבוי</string>
+  <string id="596">×\97×\96ר×\94: אחד</string>
+  <string id="597">×\97×\96ר×\94: הכל</string>
   <string id="600">העתק דיסק</string>
   <string id="601">בינוני</string>
   <string id="602">רגיל</string>
   <string id="605">...מעתיק</string>
   <string id="607">אל:</string>
   <string id="608">לא יכול להעתיק דיסק או רצועה</string>
-  <string id="609">sources.xml אינו מוגדר ב CDDARipPath</string>
+  <string id="609">נתיב CDDARipPath אינו מוגדר</string>
   <string id="610">העתק רצועת דיסק</string>
-  <string id="611">×\94×\9bנס מספר</string>
+  <string id="611">×\94×\96×\9f מספר</string>
   <string id="620">דיסק אודיו</string>
   <string id="621">מקודד</string>
   <string id="622">איכות</string>
   <string id="630">רגיל</string>
   <string id="631">זום</string>
   <string id="632">4:3 מתח</string>
-  <string id="633">14:9 מתח</string>
+  <string id="633">זום רחב</string>
   <string id="634">16:9 מתח</string>
   <string id="635">גודל מקורי</string>
-  <string id="636">×\99×\97×\95×\93י</string>
-  <string id="637">×\94×\92×\91רת × ×\99×\92×\95×\9f ×\97×\95×\96ר</string>
-  <string id="638">×\9eצ×\91 ×\94×\92×\91רת ×\95×\95×\9c×\99×\95×\9d ×\91× ×\99×\92×\95×\9f ×\97×\95×\96ר</string>
-  <string id="639">×¢×\95צ×\9eת רצועה</string>
-  <string id="640">×¢×\95צ×\9eת אלבום</string>
-  <string id="641">ר×\9eת ×§×\93×\9d ×\9e×\92×\91ר - ×§×\91צ×\99×\9d ×\97×\95×\92×\91ר×\99×\9d ×\91× ×\99×\92×\95×\9f ×\97×\95×\96ר</string>
-  <string id="642">ר×\9eת ×§×\93×\9d ×\9e×\92×\91ר - ×§×\91צ×\99×\9d ×\9e×\95×\92×\91ר×\99×\9d ×©×\9c×\90 ×\91× ×\99×\92×\95×\9f ×\97×\95×\96ר</string>
-  <string id="643">×\9e× ×¢ ×\94×\9e×\94ר×\94 ×©×\9c ×§×\91צ×\99×\9d ×\9e×\95×\92×\91ר×\99×\9d ×\91× ×\99×\92×\95×\9f ×\97×\95×\96ר</string>
-  <string id="644">קצץ פסים שחורים</string>
-  <string id="645">?ש×\95×\9eר ×\91×\9e×\98×\9e×\95×\9f קובץ גדול. להמשיך</string>
+  <string id="636">×\9e×\95ת×\90×\9d ×\90×\99שי</string>
+  <string id="637">ת×\99ק×\95×\9f ×¢×\95צ×\9eת ×\94ק×\95×\9c</string>
+  <string id="638">×\9b×\99×\95×\95× ×\95×\9f ×ª×\99ק×\95×\9f ×¢×\95צ×\9eת ×\94ק×\95×\9c</string>
+  <string id="639">×\94שת×\9eש ×\91×¢×\95צ×\9eת ×\94רצועה</string>
+  <string id="640">×\94שת×\9eש ×\91×¢×\95צ×\9eת ×\94אלבום</string>
+  <string id="641">×¢×\95צ×\9eת PreAmp  - ×ª×\99ק×\95×\9f ×¢×\95צ×\9eת ×§×\91צ×\99×\9d</string>
+  <string id="642">×¢×\95צ×\9eת PreAmp - ×\9c×\9c×\90 ×ª×\99ק×\95×\9f ×¢×\95צ×\9eת ×§×\91צ×\99×\9d</string>
+  <string id="643">×\94×\9e× ×¢ ×\9e×\97×\99ת×\95×\9a ×§×\91צ×\99×\9d ×\9eת×\95קנ×\99 ×¢×\95צ×\9e×\94</string>
+  <string id="644">×\97ת×\95×\9a פסים שחורים</string>
+  <string id="645">?צר×\99×\9a ×\9c×\97×\9c×¥ קובץ גדול. להמשיך</string>
   <string id="646">הסר כותרת</string>
   <string id="647">ייצא ספרית וידאו</string>
   <string id="648">ייבא ספרית וידאו</string>
-  <string id="649">מיבא</string>
-  <string id="650">מיצא</string>
-  <string id="651">ספר×\99×\99ת ×\95×\99×\93×\90×\95</string>
+  <string id="649">×\9e×\99×\99×\91×\90</string>
+  <string id="650">×\9e×\99×\99צ×\90</string>
+  <string id="651">×¢×\99×\99×\9f ×\9cספר×\99×\94</string>
   <string id="652">שנים</string>
   <string id="653">עדכן ספריה</string>
-  <string id="654">×\94ר×\90×\94 ×\9e×\99×\93×¢ Debug</string>
-  <string id="655">×\97פש קובץ הפעלה</string>
-  <string id="656">×\97פש רשימת ניגון</string>
-  <string id="657">×\97פש תיקייה</string>
+  <string id="654">×\94צ×\92 ×¤×¨×\98×\99 × ×\99פ×\95×\99 ×©×\92×\99×\90×\95ת</string>
+  <string id="655">×¢×\99×\99×\9f ×\9cקובץ הפעלה</string>
+  <string id="656">×¢×\99×\99×\9f ×\9cרשימת ניגון</string>
+  <string id="657">×¢×\99×\99×\9f ×\9cתיקייה</string>
   <string id="658">פרטי שיר</string>
   <string id="660">הגברת ווליום</string>
-  <string id="661">בחר תיקיית יצוא</string>
+  <string id="661">×\91×\97ר ×ª×\99ק×\99×\99ת ×\99×\99צ×\95×\90</string>
   <string id="662">קובץ זה לא זמין יותר</string>
   <string id="663">?האם תרצה להסיר אותו מהספריה</string>
-  <string id="664">חפש סקריפט</string>
+  <string id="664">עיין לסקריפט</string>
+  <string id="665">רמת דחיסה</string>
   <string id="700">מנקה מסד נתונים</string>
   <string id="701">מוחק שירים ישנים ממסד הנתונים</string>
-  <string id="702">×\94ספר×\99×\94 × ×¡×¨×§×\94 ×\91×¢×\91ר.</string>
+  <string id="702">נת×\99×\91 ×\96×\94 × ×¡×¨×§ ×\91×¢×\91ר</string>
   <string id="705">רשת</string>
   <string id="706">- שרת</string>
   <string id="708">השתמש ב HTTP Proxy על מנת להיכנס לאינטרנט</string>
-  <string id="711">Internet Protocol (IP)</string>
+  <string id="711">פרוטוקול תקשורת (IP)</string>
   <string id="712">מספר פורט שגוי. ערך חייב להיות בין 1 ל 65535.</string>
   <string id="713">HTTP פרוקסי</string>
   <string id="715">השמת כתובת</string>
-  <string id="716">אוטומטית )DHCP(</string>
-  <string id="717">ידנית )סטטית(</string>
-  <string id="718">ברירת מחדל )Dashboard(</string>
-  <string id="719">כתובת IP</string>
-  <string id="720">מסיכת רשת</string>
-  <string id="721">מעבר ברירת מחדל</string>
-  <string id="722">שרת DNS</string>
-  <string id="723">שמור ואתחל</string>
-  <string id="724">כתובת שגוייה. הכתובת חייבת להיות במבנה AAA.BBB.CCC.DDD</string>
+  <string id="716">אוטומטית (DHCP)</string>
+  <string id="717">ידנית (סטטית)</string>
+  <string id="719">- IP address</string>
+  <string id="720">- Netmask</string>
+  <string id="721">- Default gateway</string>
+  <string id="722">- DNS server</string>
+  <string id="723">שמור והפעל מחדש</string>
+  <string id="724">כתובת שגויה. הכתובת חייבת להיות במבנה AAA.BBB.CCC.DDD</string>
   <string id="725">עם מספרים בין 0 ל- 255.</string>
   <string id="726">שינויים לא נשמרו. להמשיך בלי לשמור?</string>
   <string id="727">שרת Web</string>
   <string id="728">שרת FTP</string>
-  <string id="729">שעון אינטרנט</string>
   <string id="730">- פורט</string>
-  <string id="731">כתובת שרת זמן</string>
   <string id="732">שמור והפעל</string>
   <string id="733">- סיסמא</string>
   <string id="734">ללא סיסמא</string>
   <string id="742">לבן</string>
   <string id="743">צהוב</string>
   <string id="744">קבצים</string>
-  <string id="745">×\90×\99×\9f ×\9e×\99×\93×¢ ×¡×¨×\95ק ×\9cתצוגה זו</string>
+  <string id="745">×\9c×\90 × ×¡×¨×§×\95 ×¤×¨×\98×\99×\9d ×¢×\91×\95ר תצוגה זו</string>
   <string id="746">שנה לתצוגת קבצים</string>
-  <string id="747">×\90×\99×\9f ×\9eספ×\99ק ×\96×\99×\9bר×\95×\9f ×\9cטעינת התמונה</string>
+  <string id="747">ש×\92×\99×\90×\94 ×\91טעינת התמונה</string>
   <string id="748">ערוך נתיב</string>
-  <string id="749">×\94×\95סף ×\97×\9c×\95קה</string>
+  <string id="749">×\94פ×\95×\9a ×ª×\9e×\95× ה</string>
   <string id="750">האם אתה בטוח?</string>
-  <string id="751">×\9eס×\99ר ×\97×\9c×\95ק×\94</string>
-  <string id="754">×\94×\95סף ×§×\99ש×\95ר ×\9cת×\95×\9b× ×\99ת</string>
-  <string id="755">ער×\95×\9a × ×ª×\99×\91 ×ª×\95×\9b× ×\99ת</string>
-  <string id="756">ער×\95×\9a ×©×\9d ×ª×\95×\9b× ×\99ת</string>
+  <string id="751">×\9eס×\99ר ×\9eק×\95ר</string>
+  <string id="754">×\94×\95סף ×§×\99ש×\95ר ×\9cת×\95×\9b× ×\94</string>
+  <string id="755">ער×\95×\9a × ×ª×\99×\91 ×ª×\95×\9b× ×\94</string>
+  <string id="756">ער×\95×\9a ×©×\9d ×ª×\95×\9b× ×\94</string>
   <string id="757">ערוך עומק נתיב</string>
   <string id="759">תצוגה: רשימה גדולה</string>
   <string id="760">צהוב</string>
   <string id="765">תכלת</string>
   <string id="766">שמור</string>
   <string id="767">שמור</string>
-  <string id="768">שמור</string>
-  <string id="769">שמור</string>
-  <string id="770">חלוקה לא קיימת :%i שגיאה</string>
-  <string id="771">Fatx הגבלה אוטומטית של -</string>
+  <string id="770">שיתוף לא קיים :%i שגיאה</string>
   <string id="772">פלט אודיו</string>
   <string id="773">מחפש</string>
   <string id="774">ספריית מצגת</string>
   <string id="778">- אבטחת רשת אלחוטית</string>
   <string id="779">שמור הגדרות ממשק רשת</string>
   <string id="780">ללא הצפנה</string>
+  <string id="781">WEP</string>
+  <string id="782">WPA</string>
+  <string id="783">WPA2</string>
   <string id="784">מגדיר הגדרות ממשק רשת. אנא המתן.</string>
   <string id="785">ממשק רשת הופעל מחדש בהצלחה</string>
-  <string id="786">ממשק רשת לא הופעל</string>
-  <string id="787">×\9e×\9eשק ×\91×\95×\98ל</string>
-  <string id="788">×\9e×\9eשק ×¨×©×ª ×\91×\95×\98×\9c ×\91×\94צ×\9c×\97×\94</string>
+  <string id="786">ממשק רשת לא הופעל בהצלחה.</string>
+  <string id="787">×\9e×\9eשק ×\9e× ×\95×\98רל</string>
+  <string id="788">×\9e×\9eשק ×¨×©×ª × ×\95×\98ר×\9c ×\91×\94צ×\9c×\97×\94.</string>
   <string id="789">שם רשת אלחוטית (ESSID)</string>
-  <string id="791">×\90פשר ×\9cת×\95×\9b× ×\95ת ×¢×\9c מערכת זו לשלוט על XBMC</string>
+  <string id="791">×\90פשר ×\9cת×\95×\9b× ×\95ת ×\91מערכת זו לשלוט על XBMC</string>
   <string id="792">פורט</string>
   <string id="793">תווך פורטים</string>
   <string id="794">אפשר לתוכנות במערכות אחרות לשלוט על XBMC</string>
+  <string id="795">חוזר על עיכוב ראשוני (ms)</string>
+  <string id="796">חזור על עיקוב מתמשך (ms)</string>
   <string id="797">מספר קליינטים מירבי</string>
   <string id="798">גישת אינטרנט</string>
-  <string id="1000">תצוגה מקדימה של שומר מסך</string>
+  <string id="850">מספר פורט שגוי</string>
+  <string id="851">טווח פורט תקין הוא 1-65535</string>
+  <string id="852">טווח פורט תקין הוא 1024-65535</string>
+  <string id="998">הוסף מוזיקה...</string>
+  <string id="999">הוסף וידאו...</string>
+  <string id="1000">- תצוגה מקדימה</string>
   <string id="1001">חיבור נכשל</string>
-  <string id="1002">חיבור למיקום ברשת נכשל.</string>
-  <string id="1003">×\99ת×\9b×\9f ×\95×\94רשת ×\9e× ×\95תקת.</string>
+  <string id="1002">XBMC נכשל בחיבור לרשת המיקום.</string>
+  <string id="1003">×\96×\94×\95 ×\9bנר×\90×\94 ×¢×§×\91 ×\94רשת ×©×\90×\99× × ×\94 ×\9e×\97×\95×\91רת.</string>
   <string id="1004">האם ברצונך להוסיף בכל זאת?</string>
   <string id="1006">IP כתובת</string>
   <string id="1007">הוסף מיקום ברשת</string>
   <string id="1009">כתובת שרת</string>
   <string id="1010">שם שרת</string>
   <string id="1011">נתיב מרוחק</string>
-  <string id="1012">ספר×\99×\99×\94 ×\9eש×\95תפת</string>
+  <string id="1012">ספריה משותפת</string>
   <string id="1013">פורט</string>
   <string id="1014">שם משתמש</string>
-  <string id="1015">שרת רשת</string>
-  <string id="1016">×\94×\9bנס כתובת רשת של השרת</string>
-  <string id="1017">×\94×\9bנס נתיב של השרת</string>
-  <string id="1018">×\94×\9bנס מספר פורט</string>
-  <string id="1019">×\94×\9bנס שם משתמש</string>
+  <string id="1015">×¢×\99×\99×\9f ×\9c×\97×\99פ×\95ש ×©×¨×ª ×¨×©×ª</string>
+  <string id="1016">×\94×\96×\9f כתובת רשת של השרת</string>
+  <string id="1017">×\94×\96×\9f נתיב של השרת</string>
+  <string id="1018">×\94×\96×\9f מספר פורט</string>
+  <string id="1019">×\94×\96×\9f שם משתמש</string>
   <string id="1020">%s הוסף מקור</string>
-  <string id="1021">×\94×\9bנס × ×ª×\99×\91 ×\90×\95 ×\93פ×\93×£ למיקום המדיה.</string>
-  <string id="1022">×\94×\9bנס ×©×\9d ×\9c×\9e×\99ק×\95×\9d ×\94×\9e×\93×\99ה.</string>
-  <string id="1023">×\93פ×\93×£ ×\9c×\97×\9c×\95ק×\94 ×\97×\93ש×\94</string>
-  <string id="1024">×\93פ×\93×£</string>
-  <string id="1025">×\91×¢×\99×\94 ×\91ש×\9c×\99פת ×¤×¨×\98×\99 ×\94ספר×\99יה.</string>
+  <string id="1021">×\94×\96×\9f × ×ª×\99×\91 ×\90×\95 ×¢×\99×\99×\9f למיקום המדיה.</string>
+  <string id="1022">×\94×\96×\9f ×©×\9d ×\9c×\9eק×\95ר ×\9e×\93×\99×\94 ×\96ה.</string>
+  <string id="1023">×¢×\99×\99×\9f ×\9cש×\99ת×\95×£ ×\97×\93ש</string>
+  <string id="1024">×¢×\99×\95×\9f</string>
+  <string id="1025">×\91×¢×\99×\94 ×\91ק×\91×\9cת ×¤×¨×\98×\99 ×\94ספריה.</string>
   <string id="1026">הוסף מקור</string>
   <string id="1027">ערוך מקור</string>
   <string id="1028">%s ערוך מקור</string>
-  <string id="1029">×\94×\9bנס תווית</string>
-  <string id="1030">תמונה</string>
-  <string id="1031">ת×\9e×\95נת ×¡×¤×¨×\99יה</string>
+  <string id="1029">×\94×\96×\9f תווית</string>
+  <string id="1030">×¢×\99×\99×\9f ×\9cת×\9e×\95× ×\94</string>
+  <string id="1031">×¢×\99×\99×\9f ×\9cת×\9e×\95נת ×ª×\99קיה</string>
   <string id="1032">הוסף מיקום רשת...</string>
-  <string id="1033">×\97פש קובץ</string>
+  <string id="1033">×¢×\99×\99×\9f ×\9cקובץ</string>
   <string id="1034">תת-תפריט</string>
   <string id="1035">אפשר כפתורי תת-תפריט</string>
   <string id="1036">מועדפים</string>
-  <string id="1037">ת×\95ספות וידאו</string>
-  <string id="1038">ת×\95ספות מוזיקה</string>
-  <string id="1039">ת×\95ספות תמונות</string>
+  <string id="1037">×\94ר×\97×\91ות וידאו</string>
+  <string id="1038">×\94ר×\97×\91ות מוזיקה</string>
+  <string id="1039">×\94ר×\97×\91ות תמונות</string>
   <string id="1040">טוען ספריה</string>
   <string id="1041">קיבל %i פריטים</string>
   <string id="1042">קיבל %i מתוך %i פריטים</string>
-  <string id="1043">ת×\95ספ×\95ת ×ª×\95×\9b× ×\99ות</string>
-  <string id="1044">×\94×\92×\93ר ×¦×\9c×\9e×\99ת ×ª×\95ספת</string>
-  <string id="1045">×\94×\92×\93ר×\95ת ×ª×\95ספ×\95ת</string>
+  <string id="1043">×\94ר×\97×\91×\95ת ×ª×\95×\9b× ות</string>
+  <string id="1044">×\94×\92×\93ר ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת ×\9c×\94ר×\97×\91×\94</string>
+  <string id="1045">×\94×\92×\93ר×\95ת ×\94ר×\97×\91×\94</string>
   <string id="1046">נקודת גישה</string>
   <string id="1047">אחר...</string>
-  <string id="1048">- ×©×\9d ×\94×\9eשת×\9eש</string>
+  <string id="1048">- שם משתמש</string>
   <string id="1049">הגדרות סקריפט</string>
   <string id="1050">סינגלים</string>
+  <string id="1051">הזן כתובת אינטרנט</string>
   <string id="1200">SMB חלוקה</string>
   <string id="1202">SMB קבוצת עבודה</string>
   <string id="1203">SMB שם משתמש</string>
   <string id="1226">קבצים, מוסיקה ווידאו</string>
   <string id="1227">קבצים, תמונות ומוסיקה</string>
   <string id="1228">קבצים, תמונות ווידאו</string>
-  <string id="1229">מוסיקה ותוכניות</string>
-  <string id="1230">וידאו ותוכניות</string>
-  <string id="1231">תמונות ותוכניות</string>
-  <string id="1232">מוסיקה, וידאו, תמונות ותוכניות</string>
-  <string id="1233">תוכניות, וידאו ומוסיקה</string>
-  <string id="1234">תוכניות, תמונות ומוסיקה</string>
-  <string id="1235">תוכניות, תמונות ווידאו</string>
-  <string id="1245">FTP שם משתמש</string>
-  <string id="1246">FTP סיסמא</string>
-  <string id="1247">עדוכנו בהצלחה FTP פרטי שרת</string>
+  <string id="1229">מוסיקה ותוכנות</string>
+  <string id="1230">וידאו ותוכנות</string>
+  <string id="1231">תמונות ותוכנות</string>
+  <string id="1232">מוסיקה, וידאו, תמונות ותוכנות</string>
+  <string id="1233">תוכנות, וידאו ומוסיקה</string>
+  <string id="1234">תוכנות, תמונות ומוסיקה</string>
+  <string id="1235">תוכנות, תמונות ווידאו</string>
   <string id="1250">זיהוי אוטומטי</string>
-  <string id="1251">XBOX זיהוי אוטוטמי</string>
+  <string id="1251">זיהוי מערכת אוטומטי</string>
   <string id="1252">כינוי</string>
   <string id="1254">שאל על מנת להתחבר</string>
-  <string id="1255">FTP שלח פרטי משתמש וסיסמא של</string>
-  <string id="1256">Ping השהיית</string>
-  <string id="1257">ש×\96×\95×\94×\94 ×\90×\95×\98×\95×\9e×\98×\99ת XBOX ×\9c×\94ת×\97×\91ר ×\9c?</string>
+  <string id="1255">שלח פרטי FTP משתמש וסיסמא</string>
+  <string id="1256">השהיית פינג</string>
+  <string id="1257">×\94×\90×\9d ×\91רצ×\95× ×\9a ×\9c×\94ת×\97×\91ר ×\9c×\9eער×\9bת ×©×\96×\95×\94ת×\94 ×\90×\95×\98×\95×\9e×\98×\99ת?</string>
   <string id="1260">הכרז על שירותים אלו למערכות אחרות דרך Zeroconf</string>
+  <string id="1270">אפשר ל-XBMC לקבל תכני AirPlay</string>
+  <string id="1271">שם התקן</string>
+  <string id="1272">- השתמש בהגנת סיסמא</string>
   <string id="1300">התקן אודיו מותאם אישית</string>
+  <string id="1301">התקן פלט מותאם אישית</string>
   <string id="1396">זולג</string>
   <string id="1397">ו</string>
   <string id="1398">קופא</string>
   <string id="1414">סערת רעמים</string>
   <string id="1415">טפטוף</string>
   <string id="1416">ערפלי</string>
-  <string id="2050">זמן ריצה:</string>
+  <string id="1417">גרגירים</string>
+  <string id="1420">מתון</string>
+  <string id="1421">גבוה מאוד</string>
+  <string id="1422">סוער</string>
+  <string id="1423">ערפל</string>
+  <string id="1450">הכנס צג למצב שינה כשאין פעילות</string>
+  <string id="2050">זמן ריצה</string>
   <string id="2100">הסקריפט ניכשל!: %s</string>
+  <string id="2101">יש צורך בגרסא חדשה - עיין בלוג</string>
   <string id="4501">הפעל LCD/VFD</string>
-  <string id="10000">×\93×£ ×\94×\91×\99ת</string>
-  <string id="10001">ת×\95×\9b× ×\99×\95ת</string>
+  <string id="10000">בית</string>
+  <string id="10001">תוכנות</string>
   <string id="10002">תמונות</string>
   <string id="10003">מנהל קבצים</string>
   <string id="10004">הגדרות</string>
   <string id="10005">מוסיקה</string>
   <string id="10006">וידאו</string>
-  <string id="10007">×\9e×\99×\93×¢ מערכת</string>
+  <string id="10007">פר×\98×\99 מערכת</string>
   <string id="10008">הגדרות - כללי</string>
   <string id="10009">הגדרות - מסך</string>
-  <string id="10010">×\94×\92×\93ר×\95ת - ×\9e×¢×\98פת - ×\9b×\99×\95×\95× ×\95×\9f ×\9e×¢×\98פת</string>
+  <string id="10010">×\94×\92×\93ר×\95ת - ×\9eר×\90×\94 - ×\9b×\99×\95×\95× ×\95×\9f GUI</string>
   <string id="10011">הגדרות - וידאו - כיוונון מסך</string>
   <string id="10012">הגדרות - תמונות</string>
   <string id="10013">הגדרות - תוכניות</string>
   <string id="10016">הגדרות - מערכת</string>
   <string id="10017">הגדרות - וידאו</string>
   <string id="10018">הגדרות - רשת</string>
-  <string id="10019">×\94×\92×\93ר×\95ת - ×ª×¦×\95×\92ה</string>
+  <string id="10019">×\94×\92×\93ר×\95ת - ×\9eר×\90ה</string>
   <string id="10020">סקריפטים</string>
+  <string id="10021">דפדפן אינטרנט</string>
+  <string id="10025">וידאו</string>
   <string id="10028">וידאו/רשימת ניגון</string>
+  <string id="10029">מסך כניסה</string>
   <string id="10034">הגדרות - פרופילים</string>
+  <string id="10040">דפדפן הרחבות</string>
   <string id="10100">דיאלוג לא/כן</string>
   <string id="10101">דיאלוג התקדמות</string>
   <string id="10210">מחפש כתוביות...</string>
-  <string id="10211">×\91×\95×\93ק ×\9bת×\95×\91×\99×\95ת</string>
+  <string id="10211">×\9e×\97פש ×\90×\95 ×\90×\95×\92ר ×\9bת×\95×\91×\99×\95ת...</string>
   <string id="10212">מבטל</string>
   <string id="10213">אוגר מידע</string>
-  <string id="10214">פת×\95×\97 ×\96ר×\9d ×\9e×\99×\93×¢</string>
+  <string id="10214">פ×\95ת×\97 ×\96ר×\99×\9e×\94</string>
   <string id="10500">מוסיקה/רשימת ניגון</string>
   <string id="10501">מוסיקה/קבצים</string>
   <string id="10502">מוסיקה/ספרייה</string>
   <string id="10503">עורך רשימת ניגון</string>
-  <string id="10504">Top 100 שירים</string>
-  <string id="10505">Top 100 אלבומים</string>
-  <string id="10506">×\90פ×\9c×\99קצ×\99ות</string>
+  <string id="10504">מאה השירים הגדולים</string>
+  <string id="10505">מאה האלבומים הגדולים</string>
+  <string id="10506">ת×\95×\9b× ות</string>
   <string id="10507">הגדרות</string>
   <string id="10508">תחזית מזג אויר</string>
   <string id="10509">משחקי רשת</string>
   <string id="10510">סיומות</string>
-  <string id="10511">×\9e×\99×\93×¢ מערכת</string>
+  <string id="10511">פר×\98×\99 מערכת</string>
   <string id="10516">מוסיקה - ספריה</string>
   <string id="10517">מנגן כעת - מוסיקה</string>
   <string id="10522">מנגן כעת - וידאו</string>
-  <string id="10523">×\9e×\99×¢×\93 אלבום</string>
-  <string id="10524">×\9e×\99×\93×¢ סרט</string>
+  <string id="10523">פר×\98×\99 אלבום</string>
+  <string id="10524">פר×\98×\99 סרט</string>
   <string id="12000">בחר דיאלוג</string>
-  <string id="12001">×\9e×\95ס×\99ק×\94\9e×\99×\93×¢</string>
+  <string id="12001">×\9e×\95ס×\99ק×\94¤×¨×\98×\99×\9d</string>
   <string id="12002">דיאלוג אישור</string>
-  <string id="12003">×\95×\99×\93×\90×\95\9e×\99×\93×¢</string>
-  <string id="12004">סקרפ×\98×\99×\9d\9e×\99×\93×¢</string>
+  <string id="12003">×\95×\99×\93×\90×\95¤×¨×\98×\99×\9d</string>
+  <string id="12004">סקרפ×\98×\99×\9d¤×¨×\98×\99×\9d</string>
   <string id="12005">וידאו במסך מלא</string>
-  <string id="12006">ויזואלזציית אודיו</string>
-  <string id="12008">ערימת קבצים</string>
-  <string id="12009">בנה אינדקס...</string>
-  <string id="12010">חזור למוזיקה שלי</string>
-  <string id="12011">חזור לסרטים שלי</string>
-  <string id="12012">עדכן רשימת מאמנים</string>
-  <string id="12013">מאמן</string>
-  <string id="12014">לא נמצאו מאמנים</string>
-  <string id="12015">הגדות מאמן</string>
-  <string id="12016">כל הקדימונים הרשומים חסרים. עדכן את הרשימה.</string>
-  <string id="12017">המשך אוטומטית מהמיקום האחרון</string>
-  <string id="12018">לא</string>
-  <string id="12019">כן</string>
-  <string id="12020">שאל</string>
-  <string id="12021">התחל בהתחלה</string>
-  <string id="12022">המשך מהמיקום האחרון</string>
-  <string id="12023">מוודא טרינרים קימים</string>
+  <string id="12006">חיזוי אודיו</string>
+  <string id="12008">דיאלוג ערימת קבצים</string>
+  <string id="12009">בונה אינדקס...</string>
+  <string id="12010">חזור לחלון המוזיקה</string>
+  <string id="12011">חזור לחלון הוידאו</string>
+  <string id="12021">התחל מהתחלה</string>
+  <string id="12022">המשך מנקודה %s</string>
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12321">ok</string>
   <string id="12322">*</string>
   <string id="12325">נעול! הקש קוד...</string>
-  <string id="12326">×\94×\9bנס סיסמא</string>
-  <string id="12327">×\94×\9bנס קוד נעילה ראשי</string>
-  <string id="12328">×\94×\9bנס ×§×\95×\93 ×©×\97ר×\95ר ×¨×\90ש×\99</string>
-  <string id="12329">×\9c×\91×\99×\98×\95×\9c C ×\90×\95 ×\94קש</string>
-  <string id="12330">Start לחץ על כפתורי הקומבו ולחץ</string>
-  <string id="12331">×\9c×\91×\99×\98×\95×\9c Back ×\90×\95 Start ×\9c×\97×¥</string>
+  <string id="12326">×\94×\96×\9f סיסמא</string>
+  <string id="12327">×\94×\96×\9f קוד נעילה ראשי</string>
+  <string id="12328">×\94×\96×\9f ×§×\95×\93 ×©×\97ר×\95ר</string>
+  <string id="12329">×\90×\95 ×\94קש C ×\9c×\91×\99×\98×\95×\9c</string>
+  <string id="12330">לחץ על כפתורי קומבו בגיימפד</string>
+  <string id="12331">×\95×\9c×\97×¥ ×\90×\99ש×\95ר ×\90×\95 ×\90×\97×\95ר×\94 ×\9c×\91×\99×\98×\95×\9c</string>
   <string id="12332">נעל</string>
   <string id="12333">שחרר</string>
   <string id="12334">אפס נעילה</string>
   <string id="12335">הסר נעילה</string>
   <string id="12337">סיסמת מספר</string>
-  <string id="12338">ק×\95×\9e×\91×\99נצ×\99ת ×\9bפת×\95ר×\99×\9d ×\91×\91קר</string>
-  <string id="12339">סיסמת טקסט</string>
-  <string id="12340">×\94×\9bנס סיסמא חדשה</string>
-  <string id="12341">×\94×\9bנס סיסמא פעם נוספת</string>
+  <string id="12338">×\9bפת×\95ר ×§×\95×\9e×\91×\95 ×\91×\92×\99×\99×\9eפ×\93</string>
+  <string id="12339">סיסמת טקסט מלא</string>
+  <string id="12340">×\94×\96×\9f סיסמא חדשה</string>
+  <string id="12341">×\94×\96×\9f סיסמא פעם נוספת</string>
   <string id="12342">סיסמא שגויה,</string>
   <string id="12343">נסיונות נותרו </string>
   <string id="12344">סיסמאות לא תואמות.</string>
-  <string id="12345">×\9b× ×\99ס×\94 ×\90ס×\95רה</string>
-  <string id="12346">נס×\99×\95× ×\95ת ×\9b× ×\99ס×\94 ×\9b×\95ש×\9c×\99×\9d ×¨×\91×\99×\9d ×\9e×\99×\93×\99.</string>
-  <string id="12347">×\99×\99×\9b×\91×\94 ×\9bעת XBOX -×\94</string>
+  <string id="12345">×\94×\92×\99ש×\94 × ×\93×\97תה</string>
+  <string id="12346">נסיונות כניסה כושלים רבים מדי.</string>
+  <string id="12347">×\94×\9eער×\9bת ×\9bעת ×ª×\9b×\91×\94.</string>
   <string id="12348">פריט נעול</string>
-  <string id="12353">×\94עפ×\9c ×\9e×\97×\93ש × ×¢×\99×\9c×\94</string>
+  <string id="12353">×\94פע×\9c × ×¢×\99×\9c×\94 ×\9e×\97×\93ש</string>
   <string id="12356">שנה נעילה</string>
-  <string id="12357">× ×¢×\99×\9cת ×©×\99ת×\95×£</string>
-  <string id="12358">×\94ס×\99ס×\9e×\90 ×¨×\99ק×\94. נסה שנית.</string>
+  <string id="12357">× ×¢×\99×\9cת ×\9eק×\95ר</string>
+  <string id="12358">ש×\93×\94 ×\94ס×\99ס×\9e×\90 ×¨×\99ק. נסה שנית.</string>
   <string id="12360">נעילה ראשית</string>
-  <string id="12362">×\90פשר ×\9b×\99×\91×\95י</string>
-  <string id="12367">ק×\95×\93 ×¨×\90ש×\99 ×\90×\99× ×\95 ×\9eת×\90×\99×\9d</string>
-  <string id="12368">×\90× ×\90 ×\94×\9bנס ×§×\95×\93 ×¨×\90ש×\99 ×\9eת×\90×\99×\9d</string>
-  <string id="12373">הגדרות &amp;  הקבצים שלי</string>
+  <string id="12362">×\9b×\91×\94 ×\9eער×\9bת ×\9b×\90שר × ×\99ס×\99×\95× ×\95ת ×\94ק×\95×\93 ×\94ר×\90ש×\99 ×¨×\91×\99×\9d ×\9e×\93י</string>
+  <string id="12367">ק×\95×\93 ×¨×\90ש×\99 ×\90×\99× ×\95 ×ª×§×\99×\9f</string>
+  <string id="12368">×\90× ×\90 ×\94×\96×\9f ×§×\95×\93 ×¨×\90ש×\99 ×ª×§×\99×\9f</string>
+  <string id="12373">הגדרות &amp; הקבצים שלי</string>
   <string id="12376">הגדר כברירת מחדל לכל הסרטים</string>
   <string id="12377">פעולה זו תאתחל כל ערכים קודמים שנשמרו</string>
   <string id="12378">זמן הצגת כל תמונה</string>
   <string id="12379">Pan and Zoom השתמש באפקט</string>
-  <string id="12380">PAL בקצבי רענון NTSC נגן וידאו</string>
-  <string id="12381">NTSC בקצבי רענון PAL נגן וידאו</string>
-  <string id="12382">PAL60 ב NTSC נגן וידאו</string>
   <string id="12383">שעון 12 שעות</string>
   <string id="12384">שעון 24 שעות</string>
   <string id="12385">יום/חודש</string>
   <string id="12392">שעות</string>
   <string id="12393">ימים</string>
   <string id="12394">סה"כ פעילות</string>
+  <string id="12395">רמת סוללה</string>
   <string id="12600">מזג אויר</string>
   <string id="12900">שומר מסך</string>
   <string id="12901">תפריט במסך מלא</string>
   <string id="13000">מערכת</string>
-  <string id="13001">ס×\99×\91×\95×\91 ×\94ר×\93×\99סק ×\9e×\99×\99×\93×\99</string>
+  <string id="13001">×\94×\95ר×\93 ×\9b×\9e×\95ת ×¡×\99×\91×\95×\91×\99×\9d ×\91×\93×\99סק ×\94קש×\99×\97 ×\9e×\99×\99×\93×\99ת</string>
   <string id="13002">וידאו בלבד</string>
   <string id="13003">- השהייה</string>
   <string id="13004">- אורך קובץ מינימאלי</string>
   <string id="13005">כיבוי</string>
   <string id="13008">פעולת כיבוי</string>
-  <string id="13009">תפר×\95ש</string>
+  <string id="13009">צ×\90</string>
   <string id="13010">מצב שינה</string>
   <string id="13011">השהייה</string>
   <string id="13012">יציאה</string>
   <string id="13013">הפעלה מחדש</string>
   <string id="13014">מזער</string>
   <string id="13015">פעולת כפתור הכיבוי</string>
+  <string id="13016">כיבוי מערכת</string>
+  <string id="13020">יש תוכנית אחרת פעילה, יכול להיות SSH?</string>
+  <string id="13021">כונן נייד מחובר</string>
+  <string id="13022">לא בטוח להסיר התקן נייד</string>
+  <string id="13023">התקן הוסר בהצלחה</string>
+  <string id="13024">ג'ויסטיק חובר</string>
+  <string id="13025">ג'ויסטיק נותק</string>
+  <string id="13050">רץ על סוללה חלשה</string>
   <string id="13100">פילטר הבהובים</string>
-  <string id="13106">לא מאופשר</string>
-  <string id="13107">אפשר בזמן ניגון וידאו</string>
-  <string id="13108">אפשר תמיד</string>
-  <string id="13109">בדוק רזולוציה</string>
+  <string id="13101">תן למנהל ההתקן להחליט (הפעלה מחדש)</string>
+  <string id="13106">מנוטרל</string>
+  <string id="13107">הפעל בזמן ניגון וידאו</string>
+  <string id="13108">מופעל תמיד</string>
+  <string id="13109">בדוק והחל רזולוציה</string>
   <string id="13110">לשמור רזולוציה?</string>
   <string id="13111">האם תרצה לשמור את הרזולוציה הזו?</string>
-  <string id="13113">×\9c×\90 ×\9e×\90×\95פשר</string>
-  <string id="13114">SD מופעל רק לתכני</string>
+  <string id="13113">×\9e× ×\95×\98ר×\9c</string>
+  <string id="13114">מופעל רק לתכני SD</string>
   <string id="13115">אפשר תמיד</string>
-  <string id="13116">שיטת הגדלה</string>
-  <string id="13131">לא מאופשר</string>
-  <string id="13150">HDD מפתח:</string>
-  <string id="13151">HDD טמפ:</string>
-  <string id="13152">DVD מודל:</string>
-  <string id="13153">DVD קושחה:</string>
-  <string id="13154">HDD מודל:</string>
-  <string id="13155">HDD סידורי:</string>
-  <string id="13156">HDD קושחה:</string>
-  <string id="13157">HDD סיסמא:</string>
-  <string id="13158">HDD מצב נעילה:</string>
-  <string id="13159">מסיכת רשת</string>
+  <string id="13130">החשך צגים אחרים</string>
+  <string id="13131">מנוטרל</string>
+  <string id="13132">צגים ריקים</string>
+  <string id="13140">חיבורים פעילים זוהו!</string>
+  <string id="13141">אם תמשיך, ייתכן שלא תוכל לשלוט ב-XBMC יותר</string>
+  <string id="13142">אתה בטוח שברצונך להפסיק את EventServer?</string>
+  <string id="13144">שנה מצב שלט Apple?</string>
+  <string id="13145">אם אתה משתמש כרגע בשלט Apple כדי לשלוט</string>
+  <string id="13146">ב- XBMC. שינוי הגדרות אלה כנראה ישפיעו על היכולות שלך</string>
+  <string id="13147">כדי להמשיך לשלוט בזה. האם ברצונך להמשיך?</string>
   <string id="13160">שער</string>
-  <string id="13161">DNS</string>
+  <string id="13161">DNS ראשי</string>
   <string id="13162">אתחול נכשל</string>
-  <string id="13163">בקר בפורט:</string>
-  <string id="13164">מקלדת בפורט:</string>
-  <string id="13165">עכבר בפורט:</string>
-  <string id="13166">מיקרופון בפורט:</string>
-  <string id="13167">זכרון בפורט:</string>
-  <string id="13168">שלט רחוק בפורט:</string>
-  <string id="13170">לעולם</string>
+  <string id="13170">אף פעם</string>
   <string id="13171">מיידי</string>
-  <string id="13172">שניות %i לאחר</string>
+  <string id="13172">לאחר %i שניות</string>
+  <string id="13173">תאריך התקנת כונן קשיח:</string>
+  <string id="13174">HDD ספירת מחזור האנרגיה:</string>
   <string id="13200">פרופילים</string>
   <string id="13201">למחוק פרופיל '%s'?</string>
   <string id="13204">פרופיל אחרון בשימוש:</string>
   <string id="13205">לא ידוע</string>
   <string id="13206">לדרוס</string>
   <string id="13208">שעון מעורר</string>
-  <string id="13209">×\9eר×\95×\97 שעון מעורר (בדקות)</string>
-  <string id="13210">×\93ק×\95ת %i ×\94×\95ת×\97×\9c, ×\99צ×\9cצ×\9c ×\91×¢×\95×\93</string>
+  <string id="13209">×\94ש×\94×\99×\99ת שעון מעורר (בדקות)</string>
+  <string id="13210">×\94ת×\97×\99×\9c. ×¦×\9cצ×\95×\9c ×\91×¢×\95×\93 %i ×\93ק×\95ת</string>
   <string id="13211">צלצול!</string>
-  <string id="13212">Canceled with %im%is left</string>
-  <string id="13249">RAR חפש כתוביות בקצבי</string>
-  <string id="13250">חפש כתוביות...</string>
+  <string id="13212">בוטל עם %i דק' %i שנ' שנשארו</string>
+  <string id="13213">%2.0f דק'</string>
+  <string id="13214">%2.0f שנ'</string>
+  <string id="13249">חפש כתוביות בקבצי RAR</string>
+  <string id="13250">עיין לכתובית...</string>
   <string id="13251">הזז פריט</string>
   <string id="13252">הזז פריט לכאן</string>
   <string id="13253">בטל העברה</string>
   <string id="13270">חומרה:</string>
   <string id="13271">CPU מהירות:</string>
-  <string id="13274">DNS מחובר לרשת ללא הגדרות</string>
+  <string id="13274">מחובר. אבל DNS לא זמין</string>
   <string id="13275">דיסק קשיח</string>
   <string id="13276">DVD-ROM</string>
   <string id="13277">אחסון</string>
   <string id="13279">רשת</string>
   <string id="13280">וידאו</string>
   <string id="13281">חומרה</string>
-  <string id="13282">_</string>
-  <string id="13283">:מערכת הפעלה</string>
+  <string id="13283">מערכת הפעלה:</string>
   <string id="13284">CPU מהירות:</string>
-  <string id="13285">BIOS זוהה:</string>
   <string id="13286">מקודד וידאו:</string>
   <string id="13287">רזולוצית מסך:</string>
-  <string id="13288">Xbox גירסת:</string>
-  <string id="13289">Xbox מספר סידורי:</string>
-  <string id="13290">Xbox יצרן:</string>
-  <string id="13291">מוד ציפ:</string>
   <string id="13292">A/V כבל:</string>
-  <string id="13293">וידאו &amp; XBE איזור:</string>
   <string id="13294">DVD איזור:</string>
   <string id="13295">אינטרנט:</string>
   <string id="13296">מחובר</string>
   <string id="13297">לא מחובר. בדוק הגדרות רשת </string>
-  <string id="13298">XBLIVE מפתח:</string>
   <string id="13299">טמפרטורת יעד</string>
   <string id="13300">מהירות מאורר:</string>
-  <string id="13301">×\91קרת ×\98×\9eפר×\98×\95ר×\94 ×\90×\98×\95×\9e×\90טית</string>
+  <string id="13301">×\91קרת ×\98×\9eפר×\98×\95ר×\94 ×\90×\95×\98×\95×\9eטית</string>
   <string id="13302">בקרת מהירות מאורר</string>
   <string id="13303">- פונטים</string>
-  <string id="13304">אפשר הפיכת תווים</string>
+  <string id="13304">אפשר הפיכת תווים דו-כיווניים</string>
   <string id="13305">הראה RSS לעידכוני חדשות</string>
   <string id="13306">הראה פריטי ספריית אב</string>
-  <string id="13307">×\94סתר ×\9eספר×\99 ×¨×¦×\95×¢×\95ת</string>
-  <string id="13308">האם ברצונך לאתחל את הXBOX</string>
+  <string id="13307">ת×\91× ×\99ת ×©×\9d ×¨×¦×\95×¢×\94</string>
+  <string id="13308">האם ברצונך לאתחל את המערכת</string>
   <string id="13309">במקום רק את XBMC?</string>
   <string id="13310">אפקט זום</string>
   <string id="13311">אפקט ציפה</string>
   <string id="13312">הפחת פסים שחורים</string>
   <string id="13313">הפעלה מחדש</string>
   <string id="13314">זמן חפיפה במעבר בין שירים</string>
-  <string id="13315">צ×\95ר ×¦×\9c×\9e×\99ות</string>
-  <string id="13316">צ×\9c×\9e×\99ות רקורסיביות</string>
+  <string id="13315">×\97×\93ש ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ערות</string>
+  <string id="13316">ת×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ערות רקורסיביות</string>
   <string id="13317">צפה במצגת תמונות</string>
   <string id="13318">מצגת תמונות רקורסיבית</string>
-  <string id="13319">ער×\91×\9c</string>
+  <string id="13319">×\90קר×\90×\99</string>
   <string id="13320">סטריאו</string>
   <string id="13321">שמאל בלבד</string>
   <string id="13322">ימין בלבד</string>
-  <string id="13323">×\90פשר CD+G</string>
+  <string id="13323">×\94פע×\9c ×ª×\9e×\99×\9bת ×§×¨×\99×\95ק×\99</string>
   <string id="13324">שקיפות רקע</string>
-  <string id="13325">שק×\99פ×\95ת ×¤×¨×\99×\98×\99×\9d</string>
+  <string id="13325">שק×\99פ×\95ת ×¨×§×¢ ×§×\93×\9e×\99</string>
   <string id="13326">השהיית A/V</string>
   <string id="13327">קריוקי</string>
-  <string id="13328">%s לא נמצא.</string>
+  <string id="13328">%s לא נמצא</string>
   <string id="13329">שגיאה בפתיחת %s</string>
   <string id="13330">כשלון בטעינת %s</string>
   <string id="13331">שגיאה: הזכרון מלא.</string>
   <string id="13334">ערוך תווית</string>
   <string id="13335">קבע כברירת מחדל</string>
   <string id="13336">הסר כפתור</string>
-  <string id="13338">נורית קידמית</string>
-  <string id="13339">צבע נורית קידמית</string>
-  <string id="13340">ללא שינוי</string>
+  <string id="13340">השאר ללא שינוי</string>
   <string id="13341">ירוק</string>
   <string id="13342">כתום</string>
   <string id="13343">אדום</string>
   <string id="13344">משתנה</string>
   <string id="13345">כבה נורית בזמן ניגון</string>
-  <string id="13346">×\9e×\99×\93×¢ סרט</string>
-  <string id="13347">פר×\99×\98 ×\91תור</string>
-  <string id="13348">IMDb חפש ב...</string>
-  <string id="13349">×\97פש ×\9e×\99×\93×¢ ×\91×\9b×\9c ×\94ק×\91צ×\99×\9d</string>
+  <string id="13346">פר×\98×\99 סרט</string>
+  <string id="13347">×\94×\9bנס ×¤×¨×\99×\98 ×\9cתור</string>
+  <string id="13348">חפש ב- IMDb...</string>
+  <string id="13349">סר×\95ק ×\9cת×\95×\9b×\9f ×\97×\93ש</string>
   <string id="13350">מנגן כעת...</string>
-  <string id="13351">×\9e×\99×\93×¢ אלבום</string>
-  <string id="13352">סר×\95ק ×\90ת ×\9b×\9c ×\94×\93×\98×\90×\91×\99×\99ס</string>
+  <string id="13351">פר×\98×\99 אלבום</string>
+  <string id="13352">סר×\95ק ×¤×¨×\99×\98 ×\9cספר×\99×\94</string>
   <string id="13353">עצור סריקה</string>
-  <string id="13354">Render שיטת</string>
-  <string id="13355">באיכות נמוכהPixel Shader</string>
+  <string id="13354">שיטת Render</string>
+  <string id="13355">באיכות נמוכה Pixel Shader</string>
   <string id="13356">Hardware Overlays</string>
   <string id="13357">באיכות גבוהה Pixel Shader</string>
   <string id="13358">נגן פריט</string>
-  <string id="13359">×\94×\92×\93ר ×¦×\9c×\9e×\99ת ×\90×\95מן</string>
-  <string id="13360">צ×\95ר ×¦×\9c×\9e×\99ות אוטומטית</string>
-  <string id="13361">×\90פשר קול</string>
+  <string id="13359">×\94×\92×\93ר ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת ×\9c×\90מן</string>
+  <string id="13360">צ×\95ר ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ערות אוטומטית</string>
+  <string id="13361">×\94פע×\9c קול</string>
   <string id="13375">הפעל מתקן</string>
   <string id="13376">עוצמה</string>
-  <string id="13377">×\9e×\95×\93 ×\95×\99×\93×\90×\95 ברירת מחדל</string>
+  <string id="13377">×\9eצ×\91 ×ª×¦×\95×\92×\94 ברירת מחדל</string>
   <string id="13378">בהירות ברירת מחדל</string>
   <string id="13379">ניגודיות ברירת מחדל</string>
-  <string id="13380">×\92×\90×\9e×\90 ברירת מחדל</string>
+  <string id="13380">×\92×\90×\9e×\94 ברירת מחדל</string>
   <string id="13381">המשך וידאו</string>
-  <string id="13382">Voice Mask - Port 1</string>
-  <string id="13383">Voice Mask - Port 2</string>
+  <string id="13382">Voice mask - Port 3</string>
+  <string id="13383">Voice mask - Port 3</string>
   <string id="13384">Voice Mask - Port 3</string>
   <string id="13385">Voice Mask - Port 4</string>
   <string id="13386">השתמש בחיפוש מבוסס זמן</string>
-  <string id="13387">ת×\91× ×\99ת ×©×\9e×\95ת ×¨×¦×\95×¢×\95ת - ימין</string>
+  <string id="13387">ת×\91× ×\99ת ×©×\9d ×¨×¦×\95×¢×\94 - ימין</string>
   <string id="13388">ערכים קבועים מראש</string>
-  <string id="13389">×\90×\99×\9f ×¢×¨×\9b×\99×\9d ×§×\91×\95×¢×\99×\9d ×\9eר×\90ש ×\9c×\95×\99×\96×\95×\90×\9c×\99×\96צ×\99×\94 ×\96×\95</string>
-  <string id="13390">×\90×\99×\9f ×¢×¨×\9b×\99×\9d ×§×\91×\95×¢×\99×\9d ×\9eר×\90ש ×\9c×\95×\99×\96×\95×\90×\9c×\99×\96צ×\99×\94 ×\96×\95</string>
+  <string id="13389">×\90×\99×\9f ×¢×¨×\9b×\99×\9d ×§×\91×\95×¢×\99×\9d ×\9eר×\90ש ×\9c×\97×\99×\96×\95×\99 ×\96×\94</string>
+  <string id="13390">×\90×\99×\9f ×\94×\92×\93ר×\95ת ×\9c×\97×\99×\96×\95×\99 ×\96×\94</string>
   <string id="13391">הוצאה/טעינה</string>
-  <string id="13392">×\94שת×\9eש ×\91×\95×\99×\96×\95×\90×\9c×\99×\96צ×\99×\94 בזמן נגינת אודיו</string>
+  <string id="13392">×\94שת×\9eש ×\91×\97×\99×\96×\95×\99 בזמן נגינת אודיו</string>
   <string id="13393">חשב גודל</string>
-  <string id="13394">×\9e×\97ש×\91 ×\92×\95×\93×\9c ×¡×¤×¨יה</string>
+  <string id="13394">×\9e×\97ש×\91 ×\92×\95×\93×\9c ×ª×§×\99יה</string>
   <string id="13395">הגדרות וידאו</string>
   <string id="13396">הגדרות אודיו וכתוביות</string>
   <string id="13397">הפעל כתוביות</string>
-  <string id="13398">ס×\99×\9e× ×\99×\95ת</string>
-  <string id="13399">×\91×\96×\9e×\9f ×\9e×\99×\95×\9f "The" ×\94תע×\9c×\9d ×\9e</string>
+  <string id="13398">ק×\99צ×\95ר×\99×\9d</string>
+  <string id="13399">×\94תע×\9c×\9d ×\9eת×\95×\95×\99×\95ת ×\91×\96×\9e×\9f ×\9e×\99×\95×\9f (×\9c×\9eש×\9c: "The")</string>
   <string id="13400">נגן בחפיפה במעבר שירים באותו אלבום</string>
-  <string id="13401">%s חפש</string>
+  <string id="13401"> עיין ל%s</string>
   <string id="13402">הצג מיקום ברצועה</string>
   <string id="13403">נקה ברירות מחדל</string>
   <string id="13404">המשך</string>
-  <string id="13405">שלוף צלמית</string>
-  <string id="13406">מידע תמונה</string>
+  <string id="13405">קבל תמונה ממוזערת</string>
+  <string id="13406">פרטי תמונה</string>
+  <string id="13407">%s ערכים מוגדרים מראש</string>
   <string id="13408">(דירוג משתמשים IMDB)</string>
-  <string id="13409">250 מובילים</string>
+  <string id="13409">250 ×\94×\9e×\95×\91×\99×\9c×\99×\9d</string>
   <string id="13410">התחבר ל LAST.FM</string>
+  <string id="13411">מהירות מאוורר מינימאלית</string>
+  <string id="13412">נגן מכאן</string>
   <string id="13413">מוריד</string>
+  <string id="13414">הוסף אמנים שמופיעים רק באוספים</string>
+  <string id="13415">שיטת Render</string>
   <string id="13416">זהה אוטומטית</string>
   <string id="13419">תוכנתי</string>
+  <string id="13420">הסר בבטחה</string>
+  <string id="13422">התחל מצגת תמונות כאן</string>
+  <string id="13423">זכור לנתיב זה</string>
+  <string id="13425">אפשר תאוצת חומרה (VDPAU)</string>
+  <string id="13426">אפשר תאוצת חומרה (VAAPI)</string>
+  <string id="13427">אפשר תאוצת חומרה (DXVA2)</string>
+  <string id="13428">אפשר תאוצת חומרה (CrystalHD)</string>
+  <string id="13429">אפשר תאוצת חומרה (VDADecoder)</string>
+  <string id="13430">אפשרת תאוצת חומרה (OpenMax)</string>
+  <string id="13432">אפשר תאוצת חומרה (VideoToolbox)</string>
   <string id="13500">שיטת סינכרון ניגון למסך</string>
+  <string id="13501">שעון שמע</string>
+  <string id="13502">שעון וידאו (Drop/Dupe audio)</string>
+  <string id="13503">שעון וידאו</string>
+  <string id="13506">נמוך (מהיר)</string>
+  <string id="13507">בינוני</string>
+  <string id="13508">גבוה</string>
+  <string id="13509">ממש גבוה (איטי!)</string>
   <string id="13510">סנכרן ניגון למסך</string>
+  <string id="13550">עצור בזמן שינוי קצב רענון</string>
+  <string id="13551">כבוי</string>
+  <string id="13552">%.1f שניה</string>
+  <string id="13553">%.1f שניות</string>
   <string id="13600">APPLE שלט</string>
   <string id="13602">אפשר הפעלת XBMC בעזרת השלט</string>
-  <string id="13610">לא מאופשר</string>
+  <string id="13603">זמן השהייה ברצף</string>
+  <string id="13610">מנוטרל</string>
   <string id="13611">סטנדרטי</string>
-  <string id="14000">תערום</string>
-  <string id="14001">בטל ערימה</string>
+  <string id="13612">שלט אוניברסלי</string>
+  <string id="13613">רב שלט (הרמוני)</string>
+  <string id="13620">שגיאת שלט Apple</string>
+  <string id="13621">יש אפשרות להפעיל תמיכה בשלט Apple</string>
+  <string id="14000">לערום</string>
+  <string id="14001">לפזר</string>
   <string id="14003">מוריד קובץ רשימת השמעה...</string>
-  <string id="14004">×\9e×\95ר×\99×\93 ×¨×©×\99×\9eת ×\9e×\93×\99×\94 ×\96×\95ר×\9eת...</string>
-  <string id="14005">×\9eפענ×\97 ×¨×©×\99×\9eת ×\9e×\93×\99×\94 ×\96×\95ר×\9eת...</string>
-  <string id="14006">×\94×\95ר×\93ת ×¨×©×\99×\9eת ×\9e×\93×\99×\94 ×\96×\95ר×\9eת נכשלה</string>
+  <string id="14004">×\9e×\95ר×\99×\93 ×¨×©×\99×\9eת ×\96ר×\99×\9e×\94...</string>
+  <string id="14005">×\9eפענ×\97 ×¨×©×\99×\9eת ×\96ר×\99×\9e×\94...</string>
+  <string id="14006">×\94×\95ר×\93ת ×¨×©×\99×\9eת ×\96ר×\99×\9e×\94 נכשלה</string>
   <string id="14007">הורדת קובץ רשימת שמע נכשלה</string>
   <string id="14009">ספריית משחקים</string>
-  <string id="14010">×\90פשר×\95×\99×\95ת ×\94×¢×\91ר×\94 ×\90×\95×\98×\95×\9e×\90×\98×\99ת</string>
-  <string id="14011">×\90פשר ×\94×¢×\91ר×\94 ×\90×\95×\98×\95×\9e×\90×\98×\99ת</string>
+  <string id="14010">×\94×¢×\91ר ×\90×\95×\98×\95×\9e×\98×\99 ×\9cת×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ער×\95ת ×©×\9e×\91×\95סס×\95ת ×¢×\9c</string>
+  <string id="14011">×\94פע×\9c ×\94×¢×\91ר×\94 ×\90×\95×\98×\95×\9e×\98×\99ת ×\9cתצ×\95×\92ת ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ער×\95ת</string>
   <string id="14012">- השתמש בצלמיות גדולות</string>
-  <string id="14013">- ×©×\99×\98×\94</string>
+  <string id="14013">- ×\94×\97×\9cפ×\94 ×\9e×\91×\95ססת ×¢×\9c</string>
   <string id="14014">- אחוזים</string>
-  <string id="14015">פנ×\9c ×¦×\9c×\9e×\99×\95ת ×\9bש×\90×\99×\9f ×§×\91צ×\99×\9d</string>
-  <string id="14016">פנ×\9c ×¨×©×\99×\9e×\94 ×\9bש×\90×\99×\9f ×¡×¤×¨×\99×\95ת</string>
-  <string id="14017">×\90×\97×\95×\96×\99 ×\94צ×\9c×\9e×\99ות</string>
+  <string id="14015">×\90×\99×\9f ×§×\91צ×\99×\9d ×\95×\9cפ×\97×\95ת ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת ×\90×\97ת</string>
+  <string id="14016">×\9cפ×\97×\95ת ×§×\95×\91×¥ ×\90×\97×\93 ×\95ת×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת</string>
+  <string id="14017">×\90×\97×\95×\96×\99 ×\94ת×\9e×\95× ×\95ת ×\94×\9e×\9e×\95×\96ערות</string>
   <string id="14018">צפה באפשריות</string>
   <string id="14019">שנה קוד אזור 1</string>
   <string id="14020">שנה קוד אזור 2</string>
   <string id="14021">שנה קוד אזור 3</string>
   <string id="14022">ספריה</string>
   <string id="14023">אין טלויזיה</string>
-  <string id="14024">×\94×\9bנס ×\90ת ×\94×¢×\99ר ×\94×\92×\93×\95×\9c×\94 ×\94קר×\95×\91×\94 ×\90×\95 ×\9e×\99ק×\95×\93 ×\91×\90רצ×\95ת ×\94×\91ר×\99ת</string>
-  <string id="14025">×\95×\99×\93×\90×\95 ×\9e×\94×\9b×\95× ×\9f ×\94קשיח</string>
-  <string id="14026">×\95×\99×\93×\90×\95 ×\9e×\9b×\95× ×\9f DVD</string>
-  <string id="14027">וידאו מרשת מקומית</string>
-  <string id="14028">וידאו מהאינטרנט</string>
-  <string id="14030">×\90×\95×\93×\99×\95 ×\9e×\9b×\95× ×\9f DVD</string>
-  <string id="14031">אודיו מרשת מקומית</string>
-  <string id="14032">אודיו מהאינטרנט</string>
-  <string id="14034">DVD מכונן DVD</string>
-  <string id="14035">DVD מרשת מקומית</string>
+  <string id="14024">×\94×\96×\9f ×\90ת ×\94×¢×\99ר ×\94×\92×\93×\95×\9c×\94 ×\94קר×\95×\91×\94</string>
+  <string id="14025">×\9e×\98×\9e×\95×\9f ×\95×\99×\93×\90×\95\90×\95×\93×\99×\95/DVD - ×\93×\99סק קשיח</string>
+  <string id="14026">×\9e×\98×\9e×\95×\9f ×\95×\99×\93×\90×\95 - DVD-ROM</string>
+  <string id="14027">רשת מקומית</string>
+  <string id="14028">אינטרנט</string>
+  <string id="14030">×\9e×\98×\9e×\95×\9f ×\90×\95×\93×\99×\95 - DVD-ROM</string>
+  <string id="14031">- רשמת מקומית</string>
+  <string id="14032">אינטרנט</string>
+  <string id="14034">מטמון DVD - DVD-ROM</string>
+  <string id="14035">רשת מקומית</string>
   <string id="14036">שרותים</string>
   <string id="14038">הגדרות רשת שונו</string>
-  <string id="14039">XBMC דורש אתחול כדי לשנות את</string>
-  <string id="14040">הגדרות הרשת. האם לאתחל כעת?</string>
-  <string id="14041">לאחר עיבוד</string>
-  <string id="14042">כתובת IP של המנוע</string>
+  <string id="14039">XBMC דורש הפעלה מחדש כדי לשנות את</string>
+  <string id="14040">הגדרות הרשת. האם ברצונך להפעיל מחדש כעת?</string>
+  <string id="14041">הגבלת חיבור אינטרנט</string>
   <string id="14043">- כבה תוך כדי ניגון</string>
   <string id="14044">%i דקות</string>
   <string id="14045">%i שניות</string>
   <string id="14053">GUI פילטרים ב</string>
   <string id="14055">השתמש בסריקה ברקע</string>
   <string id="14056">הפסק סריקה</string>
-  <string id="14057">לא אפשרי בזמן סריקת מדיה</string>
+  <string id="14057">×\9c×\90 ×\90פשר×\99 ×\91×\96×\9e×\9f ×¡×¨×\99קת ×¤×¨×\98×\99 ×\9e×\93×\99×\94</string>
   <string id="14058">אפקט גרעיניות סרטים</string>
-  <string id="14059">×\97פש ×¦×\9c×\9e×\99ות בשיתוף מרוחק</string>
+  <string id="14059">×\97פש ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ערות בשיתוף מרוחק</string>
   <string id="14060">סוג מטמון לא מוכר - אינטרנט</string>
   <string id="14061">אוטומטי</string>
-  <string id="14062">×\94×\9bנס שם משתמש עבור</string>
+  <string id="14062">×\94×\96×\9f שם משתמש עבור</string>
   <string id="14063">תאריך &amp; שעה</string>
   <string id="14064">קבע תאריך</string>
   <string id="14065">קבע שעה</string>
-  <string id="14066">HH:MM הכנס זמן בפורמט 24 שעות</string>
-  <string id="14067">DD/MM/YYYY הכנס תאריך בפורמט</string>
-  <string id="14068">IP ×\94×\9bנס כתובת</string>
-  <string id="14069">×\9cשנ×\95ת ×\90ת ×\94×\94×\92×\93ר×\95ת כעת?</string>
-  <string id="14070">×\91צע שינויים כעת</string>
-  <string id="14071">אפשר שינוי שמות קבצים ומחיקתם</string>
+  <string id="14066">הזן זמן 24 שעות במבנה HH:MM</string>
+  <string id="14067">הזן תאריך במבנה DD/MM/YYYY</string>
+  <string id="14068">IP ×\94×\96×\9f כתובת</string>
+  <string id="14069">×\94×\97×\9c ×\94×\92×\93ר×\95ת ×\90×\9c×\94 כעת?</string>
+  <string id="14070">×\94×\97×\9c שינויים כעת</string>
+  <string id="14071">אפשר שינויי שמות ומחיקת קבצים</string>
   <string id="14074">הגדר איזור זמן</string>
   <string id="14075">השתמש בשעון קיץ</string>
   <string id="14076">הוסף למועדפים</string>
   <string id="14077">הסר ממועדפים</string>
-  <string id="14078">צבעי מעטפת</string>
+  <string id="14078">- צבעים</string>
   <string id="14079">מדינת איזור זמן</string>
   <string id="14080">איזור זמן</string>
   <string id="14081">רשימות קבצים</string>
+  <string id="14082">הצג פרטי EXIF מתמונה</string>
+  <string id="14083">השתמש בחלון מסך מלא במקום מסך מלא אמיתי</string>
+  <string id="14084">הכנס שירים לתור בבחירה</string>
+  <string id="14085">ניגון דיסק שמע אוטומטי</string>
   <string id="14086">ניגון</string>
-  <string id="14088">נגן דיוידי אוטומטית</string>
+  <string id="14088">נגן DVD אוטומטית</string>
   <string id="14089">פונט לשימוש עבור כתוביות טקסט</string>
   <string id="14090">בינלאומי</string>
-  <string id="14091">ערכת התווים</string>
+  <string id="14091">ערכת תווים</string>
+  <string id="14092">ניפוי שגיאות</string>
   <string id="14093">אבטחה</string>
+  <string id="14094">התקני קלט</string>
+  <string id="14095">חסכון באנרגיה</string>
   <string id="15015">הסר</string>
   <string id="15016">משחקים</string>
   <string id="15019">הוסף</string>
   <string id="15100">ספריה</string>
   <string id="15101">מסד נתונים</string>
   <string id="15102">* כל האלבומים</string>
-  <string id="15103">* ×\9b×\9c ×\94×\90×\95×\9e× ×\99×\9d</string>
+  <string id="15103">* כל האמנים</string>
   <string id="15104">* כל השירים</string>
-  <string id="15105">* ×\9b×\9c ×\94×\96\90נר×\99×\9d</string>
-  <string id="15107">צ×\95×\91ר...</string>
+  <string id="15105">* ×\9b×\9c ×\94ס×\92× ×\95× ×\95ת</string>
+  <string id="15107">×\90×\95×\92ר...</string>
   <string id="15108">צלילי ניווט</string>
   <string id="15109">ברירת מחדל של הסקין</string>
-  <string id="15111">- נושא</string>
-  <string id="15112">נושא ברירת מחדל</string>
+  <string id="15111">- ×¢×¨×\9bת × ×\95ש×\90</string>
+  <string id="15112">ער×\9bת × ×\95ש×\90 ×\91ר×\99רת ×\9e×\97×\93×\9c</string>
   <string id="15200">LastFM</string>
-  <string id="15201">LastFM שלח שם ל</string>
+  <string id="15201">שלח שירים לשירות LastFM</string>
   <string id="15202">LastFM משתמש</string>
   <string id="15203">LastFM סיסמא</string>
-  <string id="15204">לחיצת ידיים נכשלה...</string>
+  <string id="15204">לחיצת ידיים נכשלה: שינה...</string>
   <string id="15205">XBMC אנא עדכן</string>
-  <string id="15206">ש×\9c×\99×\97×\94 × ×\9bש×\9c×\94: ×\96×\99×\94×\95×\99 ×©×\92×\95×\99.</string>
+  <string id="15206">×\94רש×\90×\94 ×©×\92×\95×\99×\94: ×\91×\93×\95ק ×©×\9d ×\95×\9eשת×\9eש ×\95ס×\99ס×\9e×\90</string>
   <string id="15207">מחובר</string>
   <string id="15208">לא מחובר</string>
-  <string id="15209">%i השהיית שליחה</string>
-  <string id="15210">ש×\99ר×\99×\9d %i ×\94×\98×\9e×\99×\9f</string>
+  <string id="15209">השהיית שליחה %i</string>
+  <string id="15210">×\90×\92ר %i ×©×\99ר×\99×\9d</string>
   <string id="15211">שולח...</string>
-  <string id="15212">שנ×\99×\95ת %i ×©×\95×\9c×\97 ×\91×¢×\95×\93</string>
+  <string id="15212">ש×\95×\9c×\97 ×\91×¢×\95×\93 %i ×©× ×\99×\95ת</string>
   <string id="15213">נגן באמצעות...</string>
-  <string id="15214">×\9e×\95×\97×\9cק ×\95×\9eס×\95× ×\9bר×\9f A/V ×\94שת×\9eש ×\91</string>
-  <string id="15215">×\94סתר ×©×\9e×\95ת ×§×\91צ×\99×\9d ×\91תצ×\95×\92ת ×¦×\9c×\99×\9e×\99ות</string>
+  <string id="15214">×\94שת×\9eש ×\91סנ×\9bר×\95×\9f A/V ×\97×\9cק</string>
+  <string id="15215">×\94סתר ×©×\9e×\95ת ×§×\91צ×\99×\9d ×\91תצ×\95×\92ת ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ערות</string>
   <string id="15216">נגן במצב מסיבה</string>
-  <string id="15250">LastFM אל Last.fm Radio שלח</string>
-  <string id="15251">Last.fm מתחבר אל...</string>
+  <string id="15217">שלח שירים לשירות Libre.fm</string>
+  <string id="15218">Libre.fm משתמש</string>
+  <string id="15219">Libre.fm סיסמא</string>
+  <string id="15221">הגשת שיר</string>
+  <string id="15250">שלח Last.fm אל Last.fm</string>
+  <string id="15251">מתחבר אל Last.fm...</string>
   <string id="15252">בחירת תחנה...</string>
-  <string id="15253">×\97פש ×\90×\95×\9e× ×\99×\9d ×\93×\95×\9e×\99×\9d...</string>
+  <string id="15253">חפש אמנים דומים...</string>
   <string id="15254">חפש תגיות דומות...</string>
-  <string id="15255">(%name%) הפרופיל שלך</string>
+  <string id="15255">הפרופיל שלך (%name%)</string>
   <string id="15256">תגיות במקומות הראשונים</string>
-  <string id="15257">%name% אומנים ראשונים עבור תגית</string>
-  <string id="15258">%name% אלבומים ראשונים עבור תגית</string>
-  <string id="15259">%name% רצועות ראשונות עבור תגית</string>
-  <string id="15260">last.fm radio %name% האזן לתגית</string>
-  <string id="15261">%name% אומנים דומים ל</string>
-  <string id="15262">הנבחרים %name% אלבומי</string>
-  <string id="15263">הנבחרות %name% רצועות</string>
-  <string id="15264">הנבחרים %name% תגי</string>
-  <string id="15265">%name% המעריצים הגדולים של</string>
-  <string id="15266">last.fm %name% האזן למעריצי</string>
-  <string id="15267">last.fm %name% האזן לאומנים דומים</string>
-  <string id="15268">%name% האומנים הנבחרים של משתמש</string>
-  <string id="15269">%name% האלבונים הנבחרים של משתמש </string>
-  <string id="15270">%name% הרצועות הנבחרות של משתמש</string>
-  <string id="15271">%name% חברים של משתמש</string>
-  <string id="15272">%name% שכנים של משתמש</string>
-  <string id="15273">%name% המצעד השבועי של אומן</string>
-  <string id="15274">%name% המצעד השבועי של אלבום</string>
-  <string id="15275">%name% המצעד השבועי של רצועת</string>
-  <string id="15276">last.fm radio %name% האזן לשכנים של</string>
-  <string id="15277">last.fm radio %name% האזן להעדפות האישיות של</string>
-  <string id="15278">last.fm radio %name% האזן לרצועות האהובות של</string>
-  <string id="15279">last.fm שולף רשימה מ...</string>
-  <string id="15280">last.fm בעיה בקבלת רשימה מ...</string>
-  <string id="15281">הכנס שם אומן למציאת אומנים דומים</string>
-  <string id="15282">הכנס תגית למציאת שירים דומים</string>
-  <string id="15283">%name% רצועות שנשמעו לאחרונה ע"י</string>
-  <string id="15284">האזן להמלצות %name%'s  רדיו  Last.FM</string>
-  <string id="15287">האם אתה רוצה להוסיף את השיר הנוכחי לרשימת האהובים?</string>
+  <string id="15257">%name% אמנים מובילים עבור תגית %name%</string>
+  <string id="15258">אלבומים מובילים עבור תגית %name%</string>
+  <string id="15259">רצועות מובילות עבור תגית %name% </string>
+  <string id="15260">האזן לתגית %name% Last.fm</string>
+  <string id="15261">אמנים דומים ל%name%</string>
+  <string id="15262">%name% האלבומים המובילים</string>
+  <string id="15263">%name% הרצועות המובילות</string>
+  <string id="15264">%name% התגיות המובילות</string>
+  <string id="15265">המעריצים הגדולים של %name%</string>
+  <string id="15266">האזן למעריצי %name% רדיו Last.fm</string>
+  <string id="15267">האזן לאמנים דומים last.fm %name%</string>
+  <string id="15268">האמנים הנבחרים של משתמש %name%</string>
+  <string id="15269">האלבומים הנבחרים של משתמש %name%</string>
+  <string id="15270">הרצועות הנבחרות של משתמש %name%</string>
+  <string id="15271">חברים של משתמש %name%</string>
+  <string id="15272">שכנים של משתמש %name%</string>
+  <string id="15273">המצעד השבועי של אמן %name%</string>
+  <string id="15274">המצעד השבועי של אלבום %name%</string>
+  <string id="15275">המצעד השבועי של רצועת %name%</string>
+  <string id="15276">האזן לשכנים של %name% רדיו Last.fm</string>
+  <string id="15277">האזן להעדפות האישיות של %name% רדיו Last.fm</string>
+  <string id="15278">האזן לרצועות האהובות של %name% רדיו Last.fm</string>
+  <string id="15279">שולף רשימה מ last.fm...</string>
+  <string id="15280">בעיה בקבלת רשימה מ last.fm...</string>
+  <string id="15281">הזן שם אמן למציאת אמנים דומים</string>
+  <string id="15282">הזן תגית למציאת שירים דומים</string>
+  <string id="15283">רצועות שנשמעו לאחרונה ע"י %name%</string>
+  <string id="15284">האזן להמלצות %name%'s רדיו Last.FM</string>
+  <string id="15285">התגיות המובילות למשתמש %name%</string>
+  <string id="15287">האם ברצונך להוסיף את השיר הנוכחי לרשימת האהובים?</string>
   <string id="15288">האם אתה רוצה להחרים את השיר הנוכחי?</string>
-  <string id="15289">×\94×\95סף ×\9cרש×\99×\9eת ×©×\99ר×\99×\9d אהובים: '%s'.</string>
-  <string id="15290">×\9cרש×\99×\9eת ×©×\99ר×\99×\9d ×\90×\94×\95×\91×\99×\9d '%s' ×\9c×\90 ×\99×\9b×\95×\9c ×\9c×\94×\95ס×\99×£</string>
+  <string id="15289">×\94×\95סף ×\9cרש×\99×\9eת ×\94ש×\99ר×\99×\9d ×\94אהובים: '%s'.</string>
+  <string id="15290">×\9c×\90 ×\99×\9b×\95×\9c ×\9c×\94×\95ס×\99×£ ×\90ת '%s'  ×\9cרש×\99×\9eת ×©×\99ר×\99×\9d ×\90×\94×\95×\91×\99×\9d</string>
   <string id="15291">החרם '%s'.</string>
   <string id="15292">לא יכול להחרים '%s'.</string>
   <string id="15293">שירים אהובים שנוספו לאחרונה לפי %name%</string>
   <string id="15301">חיבור לשרת נכשל</string>
   <string id="15302">שרתים לא נמצאו</string>
   <string id="15303">קבוצת עבודה לא נמצאה</string>
-  <string id="15310">פ×\95ת×\97 ×¡×\99×\9e× ×\99×\94 עם מספר נתיבים</string>
+  <string id="15310">פ×\95ת×\97 ×\9eק×\95ר עם מספר נתיבים</string>
   <string id="15311">נתיב:</string>
   <string id="16000">כללי</string>
   <string id="16002">חיפוש באינטרנט</string>
   <string id="16003">נגן</string>
-  <string id="16004">× ×\92×\9f ×\9e×\93×\99×\94 ×\9e×\94×\93×\99סק</string>
-  <string id="16008">×\94×\9bנס כותרת חדשה</string>
-  <string id="16009">×\94×\9bנס שם סרט</string>
-  <string id="16010">×\94×\9bנס שם פרופיל</string>
-  <string id="16011">×\94×\9bנס שם אלבום</string>
-  <string id="16012">×\94×\9bנס שם רשימת ניגון</string>
-  <string id="16013">×\94×\9bנס שם קובץ חדש</string>
-  <string id="16014">×\94×\9bנס שם ספריה חדשה</string>
-  <string id="16015">×\94×\9bנס ספריה</string>
-  <string id="16016">×\90×\95פצ×\99×\95ת ×\90פשר×\99ות: %A, %T, %N, %B, %D, %G, %Y, %F, %S</string>
-  <string id="16017">×\94×\9bנס מחרוזת חיפוש</string>
+  <string id="16004">נגן מדיה מדיסק</string>
+  <string id="16008">×\94×\96×\9f כותרת חדשה</string>
+  <string id="16009">×\94×\96×\9f שם סרט</string>
+  <string id="16010">×\94×\96×\9f שם פרופיל</string>
+  <string id="16011">×\94×\96×\9f שם אלבום</string>
+  <string id="16012">×\94×\96×\9f שם רשימת ניגון</string>
+  <string id="16013">×\94×\96×\9f שם קובץ חדש</string>
+  <string id="16014">×\94×\96×\9f שם ספריה חדשה</string>
+  <string id="16015">×\94×\96×\9f ספריה</string>
+  <string id="16016">×\90פשר×\95×\99×\95ת ×\96×\9e×\99× ות: %A, %T, %N, %B, %D, %G, %Y, %F, %S</string>
+  <string id="16017">×\94×\96×\9f מחרוזת חיפוש</string>
   <string id="16018">ללא</string>
   <string id="16019">חיפוש אוטומטי</string>
-  <string id="16020">בטל שזירה</string>
-  <string id="16021">שזור אי זוגי</string>
-  <string id="16022">שזור זוגי</string>
-  <string id="16023">טיפול בשזירה</string>
   <string id="16024">מבטל...</string>
-  <string id="16025">×\94×\9bנס ×©×\9d ×\94×\90×\95מן</string>
+  <string id="16025">×\94×\96×\9f ×©×\9d ×\94×\90מן</string>
   <string id="16026">ניגון רשימת השמעה בוטל</string>
   <string id="16027">יותר מידי פריטים שנכשלו</string>
-  <string id="16028">×\94×\9bנס ערך</string>
+  <string id="16028">×\94×\96×\9f ערך</string>
   <string id="16029">בדוק לוג לפרטים</string>
-  <string id="16030">×\9e×\95×\93 מסיבה בוטל.</string>
+  <string id="16030">×\9eצ×\91 מסיבה בוטל.</string>
   <string id="16031">לא נמצאו שירים מתאימים במסד הנתונים.</string>
   <string id="16032">אתחול מסד הנתונים נכשל.</string>
   <string id="16033">פתיחת מסד נתונים נכשלה.</string>
   <string id="16034">בעיה בשליפת השירים ממסד הנתונים.</string>
   <string id="16035">רשימת השמעה מצב מסיבה</string>
+  <string id="16039">כבוי</string>
+  <string id="16040">אוטומטי</string>
+  <string id="16041">פעיל</string>
   <string id="16100">כל הוידאו</string>
   <string id="16101">לא נראו</string>
   <string id="16102">נראו</string>
   <string id="16103">סמן כנראו</string>
   <string id="16104">סמן כלא נראו</string>
   <string id="16105">ערוך כותרת</string>
-  <string id="16106">NTSC-M &amp; NTSC-J השתמש רק ב</string>
-  <string id="16107">NTSC-M השתמש רק ב</string>
-  <string id="16108">NTSC-J השתמש רק ב</string>
-  <string id="16109">PAL-60 השתמש רק ב</string>
-  <string id="16110">60hz למשחקי</string>
-  <string id="16200">פעולה נכשלה</string>
+  <string id="16200">פעולה בוטלה</string>
   <string id="16201">העתקה נכשלה</string>
   <string id="16202">נכשל בהעתקת קובץ אחד לפחות</string>
   <string id="16203">העברה נכשלה</string>
   <string id="16204">נכשל בהעברת קובץ אחד לפחות</string>
   <string id="16205">מחיקה נכשלה</string>
   <string id="16206">נכשל במחיקת קובץ אחד לפחות</string>
-  <string id="20000">תיקית העתקה למוסיקה</string>
+  <string id="16301">השכן הקרוב</string>
+  <string id="16316">אוטומטי</string>
+  <string id="17500">מסך פרק זמן שינה</string>
+  <string id="19000">החלף לערוץ</string>
+  <string id="20000">תיקיית שמירת מוזיקה</string>
   <string id="20001">השתמש בנגן DVD חיצוני</string>
   <string id="20002">נגן DVD חיצוני</string>
-  <string id="20003">תיקית מאמנים</string>
-  <string id="20004">תיקית תמונות מסך</string>
-  <string id="20006">תיקית רשימות ניגון</string>
+  <string id="20003">ת×\99ק×\99×\99ת ×\9e×\90×\9e× ×\99×\9d</string>
+  <string id="20004">ת×\99ק×\99×\99ת ×ª×\9e×\95× ×\95ת ×\9eס×\9a</string>
+  <string id="20006">ת×\99ק×\99×\99ת ×¨×©×\99×\9e×\95ת × ×\99×\92×\95×\9f</string>
   <string id="20007">הקלטות</string>
   <string id="20008">תמונות מסך</string>
   <string id="20009">השתמש ב XBMC</string>
   <string id="20012">רשימות השמעה לוידאו</string>
   <string id="20013">האם ברצונך להריץ את המשחק?</string>
   <string id="20014">מיין לפי: רשימת השמעה</string>
-  <string id="20015">צ×\9c×\9e×\99ת IMDb</string>
-  <string id="20016">צ×\9c×\9e×\99ת נוכחית</string>
-  <string id="20017">צ×\9c×\9e×\99ת מקומית</string>
-  <string id="20018">×\90×\99×\9f ×¦×\9c×\9e×\99ת</string>
-  <string id="20019">×\91×\97ר ×¦×\9c×\9e×\99ת</string>
-  <string id="20023">סת×\99ר×\94</string>
+  <string id="20015">ת×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת ×\91שרת ×\9eר×\95×\97ק</string>
+  <string id="20016">ת×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת נוכחית</string>
+  <string id="20017">ת×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת מקומית</string>
+  <string id="20018">×\9c×\9c×\90 ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת</string>
+  <string id="20019">×\91×\97ר ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת</string>
+  <string id="20023">ק×\95נפ×\9c×\99ק×\98</string>
   <string id="20024">סרוק חדש</string>
   <string id="20025">סרוק הכול</string>
   <string id="20026">אזור</string>
   <string id="20037">סיכום</string>
-  <string id="20038">× ×¢×\9c ×\90×\96×\95ר מוסיקה</string>
-  <string id="20039">× ×¢×\9c ×\90×\96×\95ר וידאו</string>
-  <string id="20040">× ×¢×\9c ×\90×\96×\95ר תמונות</string>
-  <string id="20041">× ×¢×\9c ×\90×\96×\95ר תוכנות וסקריפטים</string>
+  <string id="20038">× ×¢×\9c ×\97×\9c×\95×\9f מוסיקה</string>
+  <string id="20039">× ×¢×\9c ×\97×\9c×\95×\9f וידאו</string>
+  <string id="20040">× ×¢×\9c ×\97×\9c×\95×\9f תמונות</string>
+  <string id="20041">× ×¢×\9c ×\97×\9c×\95× ×\95ת תוכנות וסקריפטים</string>
   <string id="20042">נעל מנהל קבצים</string>
   <string id="20043">נעל הגדרות</string>
   <string id="20044">התחל מחדש</string>
-  <string id="20045">×\94×\99×\9bנס ×\9c×\9eצ×\91 ×\9e×\95×\9e×\97×\94</string>
-  <string id="20046">צ×\90 ×\9e×\9eצ×\91 ×\9e×\95×\9e×\97×\94</string>
+  <string id="20045">×\94×\99×\9bנס ×\9c×\9eצ×\91 ×¨×\90ש×\99</string>
+  <string id="20046">צ×\90 ×\9e×\9eצ×\91 ×¨×\90ש×\99</string>
   <string id="20047">צור פרופיל '%s' ?</string>
   <string id="20048">התחל עם הגדרות חדשות</string>
   <string id="20049">הזמין הטוב ביותר</string>
   <string id="20050">החלף אוטומטית בין 16x9 ו 4x3</string>
-  <string id="20051">×\94ת×\99×\99×\97ס ×\9cק×\91צ×\99×\9d ×¢×¨×\95×\9eים כקובץ אחד</string>
+  <string id="20051">×\94ת×\99×\99×\97ס ×\9cער×\99×\9eת ×§×\91צים כקובץ אחד</string>
   <string id="20052">זהירות</string>
-  <string id="20053">×¢×\96×\91 ×\9eצ×\91 ×\9e×\95×\9e×\97×\94</string>
-  <string id="20054">× ×\9bנס ×\9c×\9eצ×\91 ×\9e×\95×\9e×\97×\94</string>
-  <string id="20055">צ×\9c×\9e×\99ת Allmusic.com</string>
-  <string id="20057">×\94סר ×¦×\9c×\9e×\99×\95ת</string>
+  <string id="20053">×¢×\96×\91 ×\9eצ×\91 ×¨×\90ש×\99</string>
+  <string id="20054">× ×\9bנס ×\9c×\9eצ×\91 ×¨×\90ש×\99</string>
+  <string id="20055">ת×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת Allmusic.com</string>
+  <string id="20057">×\94סר ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת</string>
   <string id="20058">הוסף פרופיל...</string>
-  <string id="20059">×\91קש ×\90×\97×\96×\95ר ×\9e×\99×\93×¢ עבור כל האלבומים</string>
+  <string id="20059">×\91קש ×\90×\97×\96×\95ר ×¤×¨×\98×\99×\9d עבור כל האלבומים</string>
   <string id="20060">פרטי מדיה</string>
   <string id="20061">הפרד</string>
   <string id="20062">משתף עם ברירת מחדל</string>
   <string id="20072">ודא כי התיקיה הנבחרת ניתנת לכתיבה</string>
   <string id="20073">וכי שם התיקיה החדשה תקף</string>
   <string id="20074">דירוג MPAA:</string>
-  <string id="20075">×\94×\9bנס קוד נעיל ראשי</string>
+  <string id="20075">×\94×\96×\9f קוד נעיל ראשי</string>
   <string id="20076">בקש קוד נעילה ראשי בזמן אתחול</string>
-  <string id="20077">×\94×\92×\93ר×\95ת ×\9e×¢×\98פת</string>
+  <string id="20077">×\94×\92×\93ר×\95ת ×¡×§×\99×\9f</string>
   <string id="20078">- קישור לא נקבע -</string>
-  <string id="20079">×\90פשר ×\90× ×\99×\9eצ×\99×\95ת</string>
-  <string id="20080">×\91עת ×\9e×\95×\96×\99ק×\94 ×\94פסק RSS</string>
-  <string id="20081">×\90פשר ×\9bפת×\95ר×\99 ×¡×\99×\9e× ×\99×\94</string>
-  <string id="20082">×\94צ×\92 ×\9e×\99×\93×¢ ×\90×\95×\93×\95ת XLink Kai</string>
-  <string id="20083">×\94צ×\92 ×\9e×\99×\93×¢ אודות המוסיקה</string>
-  <string id="20084">×\94צ×\92 ×\9e×\99×\93×¢ אודות מזג האויר</string>
-  <string id="20085">×\94צ×\92 ×\9e×\99×\93×¢ אודות המערכת</string>
+  <string id="20079">×\90פשר ×\94נפש×\94</string>
+  <string id="20080">× ×\98ר×\9c RSS ×\91עת ×\9e×\95×\96×\99ק×\94</string>
+  <string id="20081">×\90פשר ×\9bפת×\95ר×\99 ×§×\99צ×\95ר×\99×\9d</string>
+  <string id="20082">×\94צ×\92 ×ª×\95×\9b× ×\95ת ×\91תפר×\99×\98 ×¨×\90ש×\99</string>
+  <string id="20083">×\94צ×\92 ×¤×¨×\98×\99×\9d אודות המוסיקה</string>
+  <string id="20084">×\94צ×\92 ×¤×¨×\98×\99×\9d אודות מזג האויר</string>
+  <string id="20085">×\94צ×\92 ×¤×¨×\98×\99×\9d אודות המערכת</string>
   <string id="20086">הצג מקום פנוי בכונן C: E: F:</string>
   <string id="20087">הצג מקום פנוי בכונן E: F: G:</string>
-  <string id="20088">×\9e×\99×\93×¢ מזג האויר</string>
+  <string id="20088">פר×\98×\99 מזג האויר</string>
   <string id="20089">מקום פנוי בכונן</string>
-  <string id="20090">×\94×\9bנס את השם של שיתוף קיים</string>
+  <string id="20090">×\94×\96×\9f את השם של שיתוף קיים</string>
   <string id="20091">קוד נעילה</string>
   <string id="20092">טען פרופיל</string>
   <string id="20093">שם הפרופיל</string>
   <string id="20094">מקורות מדיה</string>
-  <string id="20095">×\94×\9bנס קוד נעילת פרופיל</string>
+  <string id="20095">×\94×\96×\9f קוד נעילת פרופיל</string>
   <string id="20096">מסך התחברות</string>
   <string id="20097">משיג פרטי אלבום</string>
-  <string id="20098">×\9eש×\99×\92 ×\9e×\99×\93×¢ עבור האלבום</string>
+  <string id="20098">×\9eש×\99×\92 ×¤×¨×\98×\99×\9d עבור האלבום</string>
   <string id="20099">לא יכול להעתיק דיסק או רצועה בזמן ניגון מהדיסק</string>
   <string id="20100">קוד נעילה ראשי והגדרות</string>
-  <string id="20101">×\94×\9bנסת ×§×\95×\93 × ×¢×\99×\9c×\94 ×¨×\90ש×\99 ×ª×\9e×\99×\93 ×\9e×\90פשרת ×\9eצ×\91 ×\9e×\95×\9e×\97×\94</string>
+  <string id="20101">×\94×\96נת ×§×\95×\93 × ×¢×\99×\9c×\94 ×¨×\90ש×\99 ×ª×\9e×\99×\93 ×\9e×\90פשרת ×\9eצ×\91 ×¨×\90ש×\99</string>
   <string id="20102">או העתק מברירת מחדל?</string>
   <string id="20103">שמור שינויים לפרופיל?</string>
   <string id="20104">הגדרות ישנות נמצאו</string>
   <string id="20105">האם ברצונך להשתמש בהן?</string>
-  <string id="20106">מקור מדיה ישן נמצא.</string>
+  <string id="20106">מקורות מדיה ישנות נמצאו.</string>
   <string id="20107">הפרד (נעול)</string>
-  <string id="20108">ש×\95רש</string>
+  <string id="20108">ר×\90ש×\99</string>
   <string id="20109">- הגדלה</string>
   <string id="20110">הגדרות UPnP</string>
   <string id="20111">הפעלה אוטומטית</string>
   <string id="20112">התחברות אחרונה: %s</string>
-  <string id="20113">×\9c×¢×\95×\9cם לא התחבר</string>
+  <string id="20113">×\90×£ ×¤×¢ם לא התחבר</string>
   <string id="20114">פרופיל %i / %i</string>
   <string id="20115">חיבור משתמש / בחר פרופיל</string>
   <string id="20116">במסך ההתחברות השתמש בנעילה</string>
   <string id="20117">קוד נעילה שגוי</string>
   <string id="20118">זה מצריך קביעה של קוד נעילה ראשי</string>
-  <string id="20119">×\94×\90×\9d ×\91רצ×\95× ×\9a ×\9cק×\91×\95×¢ ×\96×\90ת ×\9b×¢×\98?</string>
+  <string id="20119">×\94×\90×\9d ×\91רצ×\95× ×\9a ×\9cק×\91×\95×¢ ×\96×\90ת ×\9bעת?</string>
   <string id="20120">טוען פרטי התוכנה</string>
   <string id="20121">מסיבה!</string>
   <string id="20122">אמת</string>
   <string id="20124">ממלא כוסות</string>
   <string id="20125">מחובר בתור</string>
   <string id="20126">ניתוק</string>
-  <string id="20128">×\9c×\9a ×\9cש×\95רש</string>
+  <string id="20128">×\9c×\9a ×\9cר×\90ש×\99</string>
   <string id="20129">ארוג</string>
   <string id="20130">ארוג (הפוך)</string>
   <string id="20131">מזג</string>
   <string id="20134">הסר מיקום רשת</string>
   <string id="20135">האם ברצונך לסרוק את התיקייה?</string>
   <string id="20136">יחידת זיכרון</string>
-  <string id="20137">×\99×\97×\99×\93ת ×\96×\99×\9bר×\95×\9f ×\9e×\95×\9b× ×\94 ×\9cש×\99×\9e×\95ש</string>
-  <string id="20138">×\9c×\90 ×\9eס×\95×\92×\9c ×\9cש×\99×\9d יחידת זיכרון</string>
+  <string id="20137">×\99×\97×\99×\93ת ×\96×\99×\9bר×\95×\9f ×\9e×\97×\95×\91רת</string>
+  <string id="20138">×\9c×\90 ×\9eס×\95×\92×\9c ×\9c×\97×\91ר יחידת זיכרון</string>
   <string id="20139">ביציאה %i, חריץ %i</string>
   <string id="20140">נעל שומר מסך</string>
   <string id="20141">קבע</string>
   <string id="20142">שם משתמש</string>
-  <string id="20143">×\94×\9bנס סיסמא עבור</string>
+  <string id="20143">×\94×\96×\9f סיסמא עבור</string>
   <string id="20144">תזמון כיבוי</string>
-  <string id="20145">×\9eר×\95×\95×\97 זמן כיבוי (בדקות)</string>
+  <string id="20145">×\94ש×\94×\99×\99ת זמן כיבוי (בדקות)</string>
   <string id="20146">הוחל, כיבוי ב %im</string>
   <string id="20147">כיבוי תוך 30 דקות</string>
   <string id="20148">כיבוי תוך 60 דקות</string>
   <string id="20150">תזמן כיבוי מותאם אישית</string>
   <string id="20151">בטל תזמון כיבוי</string>
   <string id="20152">נעל העדפות עבור %s</string>
-  <string id="20153">×\93פ×\93×£...</string>
-  <string id="20154">×\9e×\99×\93×¢ ×\91ס×\99ס×\99</string>
-  <string id="20155">×\9e×\99×\93×¢ אודות מקום האיכסון</string>
-  <string id="20156">×\9e×\99×\93×¢ ×\90×\95×\93×\95ת הכונן הקשיח</string>
-  <string id="20157">×\9e×\99×\93×¢ ×\90×\95×\93×\95ת כונן ה DVD</string>
-  <string id="20158">×\9e×\99×\93×¢ ×\90×\95×\93×\95ת הרשת</string>
-  <string id="20159">×\9e×\99×\93×¢ ×\90×\95×\93×\95ת הוידאו</string>
-  <string id="20160">×\9e×\99×\93×¢ ×\90×\95×\93×\95ת החומרה</string>
+  <string id="20153">×¢×\99×\95×\9f...</string>
+  <string id="20154">פר×\98×\99×\9d ×\91ס×\99ס×\99×\99×\9d</string>
+  <string id="20155">פר×\98×\99×\9d אודות מקום האיכסון</string>
+  <string id="20156">פר×\98×\99 הכונן הקשיח</string>
+  <string id="20157">פר×\98×\99 כונן ה DVD</string>
+  <string id="20158">פר×\98×\99 הרשת</string>
+  <string id="20159">פר×\98×\99 הוידאו</string>
+  <string id="20160">פר×\98×\99 החומרה</string>
   <string id="20161">סך הכל</string>
   <string id="20162">בשימוש</string>
   <string id="20163">מתוך</string>
   <string id="20180">סמלים</string>
   <string id="20181">Backspace</string>
   <string id="20182">רווח</string>
-  <string id="20183">×\98×¢×\9f ×\9e×\97×\93ש ×\9e×¢×\98פת</string>
-  <string id="20184">ס×\95×\91×\91 ×\91×¢×\96רת ×\9e×\99×\93×¢ EXIF</string>
-  <string id="20185">×\94שת×\9eש ×\91פ×\95ס×\98ר×\99×\9d ×\9cס×\93רות טלויזיה</string>
+  <string id="20183">×\98×¢×\9f ×¡×§×\99×\9f ×\9e×\97×\93ש</string>
+  <string id="20184">ס×\95×\91×\91 ×ª×\9e×\95× ×\95ת ×\91×¢×\96רת ×¤×¨×\98×\99 EXIF</string>
+  <string id="20185">×\94שת×\9eש ×\91פ×\95ס×\98ר×\99×\9d ×\9cת×\95×\9b× ×\99ות טלויזיה</string>
   <string id="20186">אנא המתן</string>
-  <string id="20187">מגבה EEPROM</string>
-  <string id="20188">מגבה BIOS</string>
   <string id="20189">אפשר גלילה אוטומטית לעלילות וסקירות</string>
   <string id="20190">מותאם אישית</string>
   <string id="20191">הפעל לוג מורחב</string>
-  <string id="20192">הורד מידע נוסף בזמן עידכון</string>
-  <string id="20194">שירות ברירת מיחדל למידע על מוסיקה</string>
+  <string id="20192">הורד פרטים נוספים בזמן עדכון</string>
+  <string id="20193">שירות ברירת מחדל לפרטי אלבום</string>
+  <string id="20194">שירות ברירת מחדל לפרטי אמן</string>
   <string id="20195">החלף סקרייפר</string>
   <string id="20196">ייצא ספרית המוסיקה</string>
   <string id="20197">ייבא ספרית המוסיקה</string>
-  <string id="20198">×\9c×\90 × ×\99×\9eצ×\90 ×\90×\95×\9e×\9f!</string>
-  <string id="20199">×\94×\95ר×\92ת ×\9e×\99×\93×¢ ×\90×\95×\9e×\9f × ×\99×\9bש×\9c</string>
+  <string id="20198">לא נימצא אמן!</string>
+  <string id="20199">×\94×\95ר×\93ת ×¤×¨×\98×\99 ×\90×\9e×\9f × ×\9bש×\9c×\94</string>
   <string id="20250">יש מסיבה! (וידאו)</string>
   <string id="20251">מערבב משקאות (וידאו)</string>
   <string id="20252">ממלא כוסות (וידאו)</string>
-  <string id="20300">נתיב שרת הווב (HTTP)</string>
-  <string id="20301">נתיב שרת הווב (HTTPS)</string>
+  <string id="20255">ראשית התחבר, ערוך את הפרופיל שלך</string>
+  <string id="20258">קליינט MythTV </string>
+  <string id="20300">נתיב שרת האינטרנט (HTTP)</string>
+  <string id="20301">נתיב שרת האינטרנט (HTTPS)</string>
   <string id="20302">לא יכול לרשום לתיקייה:</string>
-  <string id="20303">×\94×\90×\9d ×ª×¨×¦×\94 ×\9c×\95×\95תר ולהמשיך?</string>
-  <string id="20306">לא ידוע, אנא הוסף MD5 מ xbmc.log ל BiosDs.ini.</string>
+  <string id="20303">×\94×\90×\9d ×ª×¨×¦×\94 ×\9c×\93×\9c×\92 ולהמשיך?</string>
+  <string id="20304">הזנת RSS</string>
   <string id="20307">DNS משני</string>
-  <string id="20308">שרת DHCP:</string>
+  <string id="20308">DHCP שרת:</string>
   <string id="20309">צור תיקיה חדשה</string>
-  <string id="20310">×\90מעם LCD בזמן ניגון</string>
+  <string id="20310">×¢מעם LCD בזמן ניגון</string>
   <string id="20311">לא ידוע או על הלוח (מוגן)</string>
-  <string id="20312">אמעם LCD בזמן הפסקה</string>
-  <string id="20313">אם בהפסקה הפעל LED בחזרה</string>
+  <string id="20312">עמעם LCD בזמן הפסקה</string>
   <string id="20314">וידאו - ספריה</string>
-  <string id="20315">שמירות משחקים</string>
   <string id="20316">מיין לפי: ID</string>
-  <string id="20317">הורד שמירות</string>
-  <string id="20318">שמירת משחק הותקנה על ה HDD</string>
-  <string id="20319">נכשל בהורדת שמירת משחק</string>
-  <string id="20320">בחר שמירת משחק להורדה והתקנה</string>
-  <string id="20321">לא נמצא שמירת משחק למשחק הספציפי</string>
-  <string id="20322">לך לשמירת משחק</string>
-  <string id="20323">שמירות משחק</string>
   <string id="20324">נגן חלק...</string>
   <string id="20325">אפס כיול</string>
   <string id="20326">זה יאפס את ערכי הכיול ל %s</string>
   <string id="20327">לערכי ברירת המחדל שלו</string>
-  <string id="20328">מיקום להעתקת השמירה</string>
+  <string id="20328">עיין לנתיב יעד</string>
+  <string id="20329">סרטים נמצאים בתיקיות נפרדות עם כותרת הסרט</string>
   <string id="20330">השתמש בשמות תיקיות לחיפוש</string>
   <string id="20331">קובץ</string>
   <string id="20332">השתמש בשמות תיקיה או קובץ בחיפוש?</string>
   <string id="20333">קבע תוכן</string>
   <string id="20334">תיקיה</string>
   <string id="20335">לחפש תוכן בצורה רקורסיבית?</string>
-  <string id="20336">×\91×\98×\9c × ×¢×\99×\9cת מקורות</string>
+  <string id="20336">ש×\97רר מקורות</string>
   <string id="20337">שחקן</string>
   <string id="20338">סרט</string>
   <string id="20339">במאי</string>
-  <string id="20340">×\94×\90×\9d ×\91רצ×\95× ×\9a ×\9c×\94ס×\99ר ×\90ת ×\9b×\9c ×\94פר×\98×\99×\9d ×\91תוך</string>
-  <string id="20341">×\94נת×\99×\91 ×\94זה ממסד הנתונים?</string>
+  <string id="20340">×\94×\90×\9d ×\91רצ×\95× ×\9a ×\9c×\94ס×\99ר ×\90ת ×\9b×\9c ×\94פר×\98×\99×\9d ×\9eתוך</string>
+  <string id="20341">נת×\99×\91 זה ממסד הנתונים?</string>
   <string id="20342">סרטים</string>
   <string id="20343">תוכניות טלוויזיה</string>
   <string id="20344">ספריה זו מכילה</string>
   <string id="20346">סרוק בצורה רקורסיבית</string>
   <string id="20347">בתור</string>
   <string id="20348">במאים</string>
-  <string id="20349">×\9c×\90 × ×\9eצ×\90×\95 ×§×\95×\91צ×\99 ×\95×\99×\93×\90×\95 ×\91נת×\99×\91 ×\96×\94!</string>
-  <string id="20350">ק×\95×\9cות</string>
-  <string id="20351">פרטי תוכנית טלויזיה</string>
-  <string id="20352">×\9e×\99×\93×¢ פרק</string>
-  <string id="20353">טוען פרטי תוכנית טלויזיה</string>
+  <string id="20349">לא נמצאו קבצי וידאו בנתיב זה!</string>
+  <string id="20350">×\94צ×\91×¢ות</string>
+  <string id="20351">פר×\98×\99 ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\95×\99×\96×\99×\94</string>
+  <string id="20352">פר×\98×\99 פרק</string>
+  <string id="20353">×\98×\95×¢×\9f ×¤×¨×\98×\99 ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\95×\99×\96×\99×\94</string>
   <string id="20354">מייבא מדריך פרקים</string>
-  <string id="20355">×\98×\95×¢×\9f ×\9e×\99×\93×¢ עבור פרקים בתיקייה</string>
-  <string id="20356">בחר תוכנית טלויזיה:</string>
-  <string id="20357">×\94×\9bנס שם תוכנית טלויזיה</string>
+  <string id="20355">×\98×\95×¢×\9f ×¤×¨×\98×\99×\9d עבור פרקים בתיקייה</string>
+  <string id="20356">×\91×\97ר ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\95×\99×\96×\99×\94:</string>
+  <string id="20357">×\94×\96×\9f שם תוכנית טלויזיה</string>
   <string id="20358">עונה %i</string>
   <string id="20359">פרק</string>
   <string id="20360">פרקים</string>
   <string id="20364">תוכנית טלויזיה</string>
   <string id="20365">עלילת פרק</string>
   <string id="20366">* כל העונות</string>
-  <string id="20367">×\94סתר ×©× ×¦×¤ו</string>
+  <string id="20367">×\94סתר ×©× ×¨×\90ו</string>
   <string id="20368">קוד הפקה</string>
-  <string id="20369">×\94ר×\90×\94 ×¢×\9c×\99×\9c×\94 ×\9cפר×\99×\98×\99×\9d ×©×¢×\95×\93 ×\9c×\90 × ×¦×¤ו</string>
-  <string id="20370">"הסתר למניעת ספוילרים"</string>
-  <string id="20371">×\91×\97ר ×¦×\9c×\9e×\99ת עונה</string>
+  <string id="20369">×\94ר×\90×\94 ×¢×\9c×\99×\9c×\94 ×\9cפר×\99×\98×\99×\9d ×©×¢×\95×\93 ×\9c×\90 × ×¨×\90ו</string>
+  <string id="20370">* הסתר למניעת ספוילרים *</string>
+  <string id="20371">×\91×\97ר ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת ×\9cעונה</string>
   <string id="20372">תמונת עונה</string>
   <string id="20373">עונה</string>
   <string id="20374">מוריד פרטי סרט</string>
   <string id="20375">תוכן לא מוקצה</string>
-  <string id="20377">רענן מידע תוכנית טלויזיה</string>
-  <string id="20378">רענן מידע לכל הפרקים?</string>
-  <string id="20379">תיקיה מכילה תוכנית טלוזיה בודדת</string>
+  <string id="20376">כותרת מקורית</string>
+  <string id="20377">רענן פרטי תוכנית טלויזיה</string>
+  <string id="20378">רענן פרטים לכל הפרקים?</string>
+  <string id="20379">תיקיה מכילה תוכנית טלויזיה בודדת</string>
   <string id="20380">מנע תיקייה מסריקות</string>
   <string id="20381">ספיישלים</string>
-  <string id="20382">×\94×\95ר×\93 ×ª×\9e×\95נת ×¢×\95× ×\94 ×\90×\95×\98×\95×\9e×\98×\99ת</string>
+  <string id="20382">×\94×\95ר×\93 ×\90×\95×\98×\95×\9e×\98×\99 ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת ×\9c×¢×\95× ×\94</string>
   <string id="20383">תיקייה מכילה וידאו בודד</string>
-  <string id="20384">קשרר לתוכנית טלויזיה</string>
+  <string id="20384">קשר לתוכנית טלויזיה</string>
   <string id="20385">הסר קישור לתוכנית טלויזיה</string>
   <string id="20386">סרטים שנוספו לאחרונה</string>
   <string id="20387">פרקים שנוספו לאחרונה</string>
   <string id="20390">קליפים שנוספו לאחרונה</string>
   <string id="20391">קליפ</string>
   <string id="20392">הסר קליפ מספרית הוידאו</string>
-  <string id="20393">×\9e×\99×\93×¢ קליפ</string>
-  <string id="20394">×\98×\95×¢×\9f ×\9e×\99×\93×¢ קליפ</string>
+  <string id="20393">פר×\98×\99 קליפ</string>
+  <string id="20394">×\98×\95×¢×\9f ×¤×¨×\98×\99 קליפ</string>
   <string id="20395">מעורבב</string>
   <string id="20396">עבור לאלבומים לפי אמנים</string>
   <string id="20397">עבור לאלבומים</string>
   <string id="20398">נגן שיר</string>
   <string id="20399">לך לקליפים מהאלבום</string>
-  <string id="20400">×\9c×\9a ×\9cק×\9c×\99פ×\99×\9d ×\9cפ×\99 ×\90×\95×\9e×\9f</string>
+  <string id="20400">לך לקליפים לפי אמן</string>
   <string id="20401">נגן קליפ</string>
-  <string id="20402">הורד תמונות שחקנים בהוספה לספריה</string>
-  <string id="20403">×\91×\97ר ×ª×\9e×\95נת שחקן</string>
+  <string id="20402">×\94×\95ר×\93 ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ער×\95ת ×\9cש×\97קנ×\99×\9d ×\91×\94×\95ספ×\94 ×\9cספר×\99×\94</string>
+  <string id="20403">×\91×\97ר ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת ×\9cשחקן</string>
   <string id="20405">הסר סימניית פרק</string>
   <string id="20406">הוסף סימניית פרק</string>
-  <string id="20407">Scraper הגדרות</string>
-  <string id="20408">×\9e×\95ר×\99×\93 ×\9e×\99×\93×¢ קליפ</string>
+  <string id="20407">הגדרות סקרייפר</string>
+  <string id="20408">×\9e×\95ר×\99×\93 ×¤×¨×\98×\99 קליפ</string>
   <string id="20409">מוריד פרטי תוכנית טלויזיה</string>
   <string id="20410">קדימון</string>
   <string id="20411">שטח</string>
-  <string id="20412">ש×\98×\97 ×¡×\93רות טלויזיה</string>
-  <string id="20413">קבל FanArt</string>
-  <string id="20414">×\91ספר×\99×\95ת ×\95×\99×\93×\90×\95 FanArt ×\94ר×\90ה</string>
+  <string id="20412">ש×\98×\97 ×ª×\95×\9b× ×\99ות טלויזיה</string>
+  <string id="20413">קבל פאנארט</string>
+  <string id="20414">×\94צ×\92 ×¤×\90× ×\90ר×\98 ×\91ספר×\99×\95ת ×\95×\99×\93×\90×\95 ×\95×\9e×\95×\96×\99קה</string>
   <string id="20415">סורק עבור תוכן חדש</string>
   <string id="20416">שודר לראשונה</string>
   <string id="20417">כותב</string>
-  <string id="20418">נקה שמות קבצים</string>
+  <string id="20419">החלף שמות קבצים עם כותרות ספריה</string>
   <string id="20420">אף פעם</string>
   <string id="20421">אם רק עונה אחת</string>
   <string id="20422">תמיד</string>
   <string id="20423">יש קדימון</string>
   <string id="20424">שקר</string>
-  <string id="20425">מצגת רקעים</string>
-  <string id="20426">?ליצא לקובץ בודד או קבצים ניפרדים</string>
+  <string id="20425">מצגת פאנארט</string>
+  <string id="20426">?לייצא לקובץ בודד או קבצים ניפרדים</string>
+  <string id="20427">קבצים לכל ערך?</string>
   <string id="20428">קובץ בודד</string>
   <string id="20429">ניפרדים</string>
-  <string id="20430">?×\9c×\99צ×\90 ×¦×\9c×\9e×\99×\95ת ×\95רקע×\99×\9d</string>
+  <string id="20430">?×\9c×\99×\99צ×\90 ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ער×\95ת ×\95פ×\90× ×\90ר×\98</string>
   <string id="20431">?לדרוס קבצים קיימים</string>
   <string id="20432">אל תכלול נתיב זה בעידכוני ספריה</string>
-  <string id="20433">ת×\97×\9c×\95×¥ ×¦×\9c×\9e×\99×\95ת ×\95×\9e×\99×\93×¢ וידאו</string>
-  <string id="20434">ס×\98ים</string>
-  <string id="20435">ק×\91×¢ ×¦×\9c×\9e×\99ת ×\9cס×\98×\99×\9d ×©×\9c סרטים</string>
-  <string id="20436">×\9c×\99צ×\90 ×ª×\9e×\95× ×\95ת שחקנים</string>
-  <string id="20437">×\91×\97ר ×¨×§×¢</string>
-  <string id="20438">רקע מקומי</string>
-  <string id="20439">×\9c×\9c×\90 ×¨×§×¢</string>
-  <string id="20440">רקע נוכחי</string>
-  <string id="20441">רקע מרוחק</string>
+  <string id="20433">×\97×\9c×¥ ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ער×\95ת ×\95פר×\98×\99 וידאו</string>
+  <string id="20434">×\9e×\90ר×\96ים</string>
+  <string id="20435">ק×\91×¢ ×ª×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת ×\9c×\9e×\90ר×\96 סרטים</string>
+  <string id="20436">×\9c×\99×\99צ×\90 ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ער×\95ת ×\9cשחקנים</string>
+  <string id="20437">×\91×\97ר ×¤×\90× ×\90ר×\98</string>
+  <string id="20438">פ×\90× ×\90ר×\98 מקומי</string>
+  <string id="20439">×\9c×\9c×\90 ×¤×\90× ×\90ר×\98</string>
+  <string id="20440">פ×\90× ×\90ר×\98 נוכחי</string>
+  <string id="20441">פ×\90× ×\90ר×\98 מרוחק</string>
   <string id="20442">שנה תוכן</string>
-  <string id="20443">האם ברצונך לרענן את כל המידע</string>
+  <string id="20443">האם ברצונך לרענן את כל הפרטים</string>
+  <string id="20444">פריטים בתוך נתיב זה?</string>
+  <string id="20445">פאנארט</string>
+  <string id="20446">מידע מקומי נמצא.</string>
+  <string id="20447">התעלם ולעדכן מהאינטרנט?</string>
+  <string id="20448">אין אפשרות להוריד פרטים</string>
+  <string id="20449">אין אפשרות להתחבר לשרת מרוחק</string>
+  <string id="20450">האם ברצונך להמשיך בסריקה?</string>
+  <string id="20451">ארצות</string>
+  <string id="20452">פרק</string>
+  <string id="20453">פרקים</string>
+  <string id="20454">מאזין</string>
+  <string id="20455">מאזינים</string>
+  <string id="20456">הגדר פאנארט למארז סרטים</string>
+  <string id="20457">מארז סרטים</string>
+  <string id="20458">קבוצות סרטים במארזים</string>
   <string id="21330">הצג קבצים וספריות מוחבאים</string>
   <string id="21331">קליינט TuxBox</string>
-  <string id="21332">×\90×\96×\94ר×\94: ×\9e×\9bש×\99ר ×\94 TuxBox ×\91×\9e×\98ר×\94 × ×\9eצ×\90 במצב הקלטה</string>
-  <string id="21333">×\94×\96ר×\9d ×\99ופסק!</string>
+  <string id="21332">×\90×\96×\94ר×\94: ×\94צ×\91 ×\90ת ×\9e×\9bש×\99ר ×\94 TuxBox במצב הקלטה</string>
+  <string id="21333">×\94×\96ר×\99×\9e×\94 ×ªופסק!</string>
   <string id="21334">זפזופ לערוץ: %s נכשל</string>
-  <string id="21335">×\94×\90×\9d ×\90ת×\94 ×\91×\98×\95×\97 ×\9c×\94ת×\97×\99×\9c ×\90ת ×\94×\96ר×\9d?</string>
+  <string id="21335">×\94×\90×\9d ×\90ת×\94 ×\91×\98×\95×\97 ×\9c×\94ת×\97×\99×\9c ×\90ת ×\94×\96ר×\99×\9e×\94?</string>
   <string id="21336">מתחבר אל: %s</string>
   <string id="21337">מכשיר TuxBox</string>
-  <string id="21359">הוסף שיתוף מדיה</string>
+  <string id="21359">הוסף שיתוף מדיה...</string>
   <string id="21360">שתף את ספריות הוידאו והמוסיקה דרך UPnP</string>
   <string id="21364">ערוך שיתוף מדיה</string>
   <string id="21365">הסר סיתוף מדיה</string>
   <string id="21366">תיקיית כתוביות</string>
-  <string id="21367">ספרית סרט ותרגום חלופי</string>
-  <string id="21369">אפשר עכבר</string>
+  <string id="21367">ספריית סרט ותרגום חלופי</string>
+  <string id="21368">דלג על גופני כתוביות ASS/SSA</string>
+  <string id="21369">אפשר תמיכה בעכבר ומסך מגע</string>
   <string id="21370">בזמן ניגון המדיה נגן צלילי ניווט</string>
-  <string id="21371">צ×\9c×\9e×\99ת</string>
+  <string id="21371">ת×\9e×\95× ×\94 ×\9e×\9e×\95×\96ערת</string>
   <string id="21372">קביעת איזור נגן דיוידי</string>
   <string id="21373">פלט וידאו</string>
-  <string id="21381">הכנס שם רשימת השמעה חדשה</string>
-  <string id="21382">הראה כפתור הוספת מקור ברשימות קבצים</string>
-  <string id="21383">אפשר תפריטי גלילה</string>
-  <string id="21384">אפשר פילטר נצפו בספריית וידאו</string>
+  <string id="21374">גודל וידאו</string>
+  <string id="21375">רגיל</string>
+  <string id="21376">תיבת מכתבים</string>
+  <string id="21377">מסך רחב</string>
+  <string id="21378">הפעל 480p</string>
+  <string id="21379">הפעל 720p</string>
+  <string id="21380">הפעל 1080i</string>
+  <string id="21381">הזן שם רשימת השמעה חדשה</string>
+  <string id="21382">הראה כפתור "הוסף מקור" ברשימות קבצים</string>
+  <string id="21383">אפשר פסי גלילה</string>
+  <string id="21384">אפשר פילטר נראו בספריית וידאו</string>
   <string id="21385">פתח</string>
   <string id="21386">רמת ניהול אקוסטי</string>
   <string id="21387">מהר</string>
   <string id="21395">לא יכול להכניס למטמון קבצים גדולים מ 4 גיגה</string>
   <string id="21396">פרק</string>
   <string id="21398">אפר רשימת ניגון בהפעלה</string>
+  <string id="21399">השתמש בתאוצת (tween) אנימציות</string>
   <string id="21400">מכיל</string>
   <string id="21401">לא מכיל</string>
   <string id="21402">הוא</string>
   <string id="21409">לפני</string>
   <string id="21410">באחרון</string>
   <string id="21411">לא באחרון</string>
-  <string id="21412">סקרייפר</string>
-  <string id="21413">סקר×\99×\99פר ×\91ר×\99רת ×\9e×\99×\97×\93×\9c ×\9cסר×\98×\99×\9d</string>
-  <string id="21414">סקר×\99×\99פר ×\91ר×\99רת ×\9e×\99×\97×\93×\9c ×\9cס×\93רות</string>
-  <string id="21415">סקר×\99×\99פר ×\91ר×\99רת ×\9e×\99×\97×\93×\9c ×\9c×\9e×\95ס×\99ק×\94</string>
+  <string id="21412">סקרייפרים</string>
+  <string id="21413">סקרייפר ברירת מחדל לסרטים</string>
+  <string id="21414">סקר×\99×\99פר ×\91ר×\99רת ×\9e×\97×\93×\9c ×\9cת×\95×\9b× ×\99ות</string>
+  <string id="21415">סקרייפר ברירת מחדל למוסיקה</string>
   <string id="21416">אפשר גיבוי על פי שפת הסקרייפר</string>
   <string id="21417">- הגדרות</string>
   <string id="21418">רב-לשוני</string>
+  <string id="21419">אין סקרייפרים</string>
   <string id="21420">ערך להתאמה</string>
   <string id="21421">חוקי רשימת השמעה חכמה</string>
   <string id="21422">התאם פריטים בהם</string>
   <string id="21424">הפריטים חייבים להתאים</string>
   <string id="21425">כל החוקים</string>
   <string id="21426">חוק אחד או יותר</string>
-  <string id="21427">הגבל ל</string>
+  <string id="21427">הגבלה</string>
   <string id="21428">אין הגבלה</string>
   <string id="21429">סדר לפי</string>
   <string id="21430">עולה</string>
   <string id="21438">כונן %c</string>
   <string id="21439">ערוך חוקי מצב מסיבה</string>
   <string id="21440">תיקיית בית</string>
-  <string id="21441">ספ×\99רת ×©× ×¦×¤ו</string>
+  <string id="21441">ספ×\99רת ×©× ×¨×\90ו</string>
   <string id="21442">שם פרק</string>
   <string id="21443">רזולוצית וידאו</string>
   <string id="21444">ערוצי שמע</string>
   <string id="21447">שפת שמע</string>
   <string id="21448">שפת כתובית</string>
   <string id="21449">שלט רחוק שולח לחיצות מקלדת</string>
+  <string id="21450">- עריכה</string>
+  <string id="21451">נחוץ חיבור לאינטרנט.</string>
+  <string id="21452">קבל עוד...</string>
+  <string id="21453">שורש מערכת הקבצים</string>
+  <string id="21454">מטמון מלא</string>
+  <string id="21455">המטמון התמלא לפני שהגיע לכמות הנחוצה לניגון רציף</string>
+  <string id="21460">מיקום הכתובית</string>
+  <string id="21461">מקובע</string>
+  <string id="21462">תחתית הוידאו</string>
+  <string id="21463">מתחת לוידאו</string>
+  <string id="21464">בראש הוידאו</string>
+  <string id="21465">מעל הוידאו</string>
   <string id="21800">שם קובץ</string>
   <string id="21801">נתיב קובץ</string>
   <string id="21802">גודל קובץ</string>
   <string id="21803">תאריך/שעה קובץ</string>
+  <string id="21804">שקופית אינדקס</string>
   <string id="21805">רזולוציה</string>
   <string id="21806">הערות</string>
   <string id="21807">צבעוני/שחור-לבן</string>
+  <string id="21808">תהליך JPEG</string>
   <string id="21820">תאריך/שעה</string>
-  <string id="21821">תאור</string>
+  <string id="21821">ת×\99×\90×\95ר</string>
   <string id="21822">יצרן המצלמה</string>
   <string id="21823">דגם המצלמה</string>
+  <string id="21824">EXIF תגובה</string>
   <string id="21825">קושחה</string>
+  <string id="21826">צמצם</string>
+  <string id="21827">מוקד אורך</string>
   <string id="21828">מרחק הפוקוס</string>
+  <string id="21829">חשיפה</string>
+  <string id="21830">זמן חשיפה</string>
+  <string id="21831">הטיית חשיפה</string>
+  <string id="21832">מצב חשיפה</string>
   <string id="21833">פלאש בשימוש</string>
+  <string id="21834">איזון לבן</string>
   <string id="21835">מקור האור</string>
+  <string id="21836">מצב מדידה</string>
   <string id="21837">ISO</string>
   <string id="21838">זום דיגיטלי</string>
-  <string id="21882">נסה לדלג על הקדמות לפני תרפיט DVD</string>
+  <string id="21839">CCD רוחב</string>
+  <string id="21840">GPS קו-רוחב</string>
+  <string id="21841">GPS קו-אורך</string>
+  <string id="21842">GPS גובה</string>
+  <string id="21843">התמצאות</string>
+  <string id="21860">קטגוריות נוספות</string>
+  <string id="21861">מילות מפתח</string>
+  <string id="21862">מלות הסבר</string>
+  <string id="21863">מחבר</string>
+  <string id="21864">כותרת</string>
+  <string id="21865">הוראות מיוחדות</string>
+  <string id="21866">קטגוריה</string>
+  <string id="21867">כותרת-משנה</string>
+  <string id="21868">כותרת-משנה</string>
+  <string id="21869">קרדיט</string>
+  <string id="21870">מקור</string>
+  <string id="21871">הערת זכויות יוצרים</string>
+  <string id="21872">שם אובייקט</string>
+  <string id="21873">עיר</string>
+  <string id="21874">מדינה</string>
+  <string id="21875">ארץ</string>
+  <string id="21877">תאריך יצירה</string>
+  <string id="21878">דגל זכויות יוצרים</string>
+  <string id="21879">קוד מדינה</string>
+  <string id="21881">אפשר שליטה על XBMC דרך UPnP</string>
+  <string id="21882">נסה לדלג על הקדמות לפני תפריט DVD</string>
   <string id="21883">מוסיקה שמורה</string>
-  <string id="21884">×\91×\93×\95ק ×\9e×\99×\93×¢ של כל האמנים</string>
+  <string id="21884">×\91×\93×\95ק ×¤×¨×\98×\99×\9d של כל האמנים</string>
   <string id="21885">מוריד פרטי אלבום</string>
   <string id="21886">מוריד פרטי אמן</string>
   <string id="21887">ביוגרפיה</string>
-  <string id="21888">×\93×\99סק×\95×\92פריה</string>
+  <string id="21888">×\93×\99סק×\95×\92רפיה</string>
   <string id="21889">מחפש אמן</string>
   <string id="21890">בחר אמן</string>
   <string id="21891">פרטי אמן</string>
   <string id="21900">נולד / הוקם</string>
   <string id="22000">עדכן את הספריה בהפעלה</string>
   <string id="22001">תמיד עדכן ספרייה ברקע</string>
+  <string id="22002">- DNS סיומת</string>
+  <string id="22004">%2.3f שניות עוכבו</string>
+  <string id="22005">%2.3f שניות הוקדמו</string>
   <string id="22006">השהיית כתוביות</string>
+  <string id="22007">OpenGL ספק:</string>
+  <string id="22009">OpenGL גרסה:</string>
+  <string id="22010">GPU טמפרטורה:</string>
+  <string id="22011">CPU טמפרטורה:</string>
   <string id="22012">סה"כ זיכרון</string>
   <string id="22013">נתוני פרופיל</string>
-  <string id="22014">×\94שת×\9eש ×\91×¢×\99×\9e×¢×\95×\9d ×\9bש×\9e×\95ש×\94×\94 ×\91×\96×\9e×\9f × ×\99×\92×\95×\9f ×\95×\99×\93×\90×\95</string>
+  <string id="22014">השתמש בעמעום כשמושהה בזמן ניגון וידאו</string>
   <string id="22015">כל ההקלטות</string>
   <string id="22016">לפי כותרת</string>
   <string id="22017">לפי קבוצה</string>
   <string id="22018">ערוצים חיים</string>
   <string id="22019">הקלטות לפי כותרת</string>
   <string id="22020">מדריך</string>
+  <string id="22021">אפשר שגיאות ביחס גודל כדי להקטין פסים שחורים</string>
+  <string id="22022">הצג קיבצי וידאו ברשימה</string>
+  <string id="22023">DirectX ספק:</string>
+  <string id="22024">Direct3D גרסה:</string>
   <string id="22030">פונט</string>
-  <string id="22036">... יבא כותרות קריוקי</string>
-  <string id="22037">הראה אוטומטית את בחרן השירים</string>
-  <string id="22038">... יצא כותרות קריוקי</string>
-  <string id="22039">הכנס מספר שיר</string>
-  <string id="23000">תוסף מזג האויר</string>
-  <string id="23001">- הגדרות תוסף</string>
+  <string id="22031">- גודל</string>
+  <string id="22032">- צבעים</string>
+  <string id="22033">- מערך תוים</string>
+  <string id="22034">ייצא כותרות קריוקי כקובץ HTML</string>
+  <string id="22035">ייצא כותרות קריוקי כקובץ CSV</string>
+  <string id="22036">ייבא כותרות קריוקי...</string>
+  <string id="22037">הראה אוטומטית את בורר השירים</string>
+  <string id="22038">ייצא כותרות קריוקי...</string>
+  <string id="22039">הזן מספר שיר</string>
+  <string id="22040">לבן/ירוק</string>
+  <string id="22041">לבן/אדום</string>
+  <string id="22042">לבן/כחול</string>
+  <string id="22043">שחור/לבן</string>
+  <string id="22079">פעולת בחירה ברירת מחדל</string>
+  <string id="22080">בחר</string>
+  <string id="22081">הצג פרטים</string>
+  <string id="22082">עוד...</string>
+  <string id="22083">נגן הכל</string>
+  <string id="23049">טלטקסט לא זמין</string>
   <string id="23050">הפעל טלטקסט</string>
-  
-  <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
+  <string id="23051">חלק %i</string>
+  <string id="23052">אוגר %i בייטים</string>
+  <string id="23053">עוצר</string>
+  <string id="23054">רץ</string>
+  <string id="23100">נגן חיצוני פעיל</string>
+  <string id="23101">לחץ על אישור כדי לנטרל את הנגן</string>
+  <string id="23104">לחץ אישור כאשר ההשמעה הסתיימה</string>
   <string id="24000">תוסף</string>
-  <string id="24001">תוספים</string>
-  <string id="24002">אפשרויות תוספים</string>
-  <string id="24003">מידע תוסף</string>
-
+  <string id="24001">הרחבות</string>
+  <string id="24002">אפשרויות הרחבות</string>
+  <string id="24003">פרטי תוסף</string>
   <string id="24005">מקורות מדיה</string>
-  <string id="24007">×\9e×\99×\93×¢ סרט</string>
+  <string id="24007">פר×\98×\99 סרט</string>
   <string id="24008">שומר מסך</string>
-  <string id="24009">Script</string>
-  <string id="24010">Visualization</string>
-  <string id="24011">×\9e×\90×\92ר ×ª×\95ספ×\99×\9d</string>
+  <string id="24009">סקריפט</string>
+  <string id="24010">חיזוי</string>
+  <string id="24011">×\9e×\90×\92ר ×\94ר×\97×\91×\95ת</string>
   <string id="24012">כתוביות</string>
   <string id="24013">מילות שירים</string>
-  <string id="24014">×\9e×\99×\93×¢ טלויזיה</string>
-  <string id="24015">×\9e×\99×\93×¢ קליפים</string>
-  <string id="24016">×\9e×\99×\93×¢ אלבומים</string>
-  <string id="24017">×\9e×\99×\93×¢ ×\90×\95מנים</string>
+  <string id="24014">פר×\98×\99 טלויזיה</string>
+  <string id="24015">פר×\98×\99 קליפים</string>
+  <string id="24016">פר×\98×\99 אלבומים</string>
+  <string id="24017">פר×\98×\99 ×\90מנים</string>
   <string id="24018">שירותים</string>
-
   <string id="24020">הגדר</string>
   <string id="24021">נטרל</string>
   <string id="24022">הפעל</string>
   <string id="24023">תוסף מנוטרל</string>
   <string id="24027">מזג אויר</string>
-  <string id="24028">Weather.com (standard)</string>
-  <string id="24030">ת×\95סף ×\96×\94 ×\90×\99× ×\95 × ×\99ת×\9f להגדרה</string>
+  <string id="24028">Weather.com (רגיל)</string>
+  <string id="24030">×\94ר×\97×\91×\94 ×\96×\95 ×\90×\99× ×\94 × ×\99תנת להגדרה</string>
   <string id="24031">תקלה בעת טעינת הגדרות</string>
-  <string id="24032">×\9b×\9c ×\94ת×\95ספ×\99×\9d</string>
-  <string id="24033">ק×\91×\9c ×ª×\95ספ×\99×\9d</string>
+  <string id="24032">×\9b×\9c ×\94×\94ר×\97×\91×\95ת</string>
+  <string id="24033">ק×\91×\9c ×\94ר×\97×\91×\95ת</string>
   <string id="24034">חפש עדכונים</string>
   <string id="24035">רענן בכוח</string>
   <string id="24036">שינויים</string>
-  <string id="24037">×\94סר ×ª×\95סף</string>
-  <string id="24038">×\94תק×\9f ×ª×\95סף</string>
-  <string id="24039">ת×\95ספ×\99×\9d ×\9e× ×\95×\98ר×\9c×\99×\9d</string>
+  <string id="24037">×\94סר ×\94ר×\97×\91×\94</string>
+  <string id="24038">×\94תק×\9f ×\94ר×\97×\91×\94</string>
+  <string id="24039">×\94ר×\97×\91×\95ת ×\9e× ×\95×\98ר×\9c×\95ת</string>
   <string id="24040">(נקה הגדרות קיימות)</string>
   <string id="24041">התקן מקובץ zip</string>
   <string id="24042">מוריד %i%%</string>
-  <string id="24043">ש×\93ר×\95×\92ים קיימים</string>
+  <string id="24043">×¢×\93×\9b×\95× ים קיימים</string>
   <string id="24044">אין התאמה בתלויות</string>
-  <string id="24045">×\9cת×\95סף אין את המבנה הנכון</string>
-  <string id="24046">%s ×\91ש×\99×\9e×\95ש ×¢"×\99 ×\94ת×\95סף/×\99×\9d ×\94×\9e×\95תקנ×\99×\9d ×\94×\91×\90×\99×\9d</string>
+  <string id="24045">×\9c×\94ר×\97×\91×\94 אין את המבנה הנכון</string>
+  <string id="24046">%s ×\91ש×\99×\9e×\95ש ×¢"×\99 ×\94×\94ר×\97×\91×\94\95ת ×\94×\9e×\95תקנ×\95ת ×\94×\91×\90×\95ת</string>
   <string id="24047">התקן זה אינו ניתן להסרה</string>
   <string id="24048">חזור לאחור</string>
-
-  <string id="24050">תוספים אפשריים</string>
+  <string id="24050">הרחבות קיימות</string>
   <string id="24051">גרסה:</string>
   <string id="24052">הצהרת אחריות</string>
   <string id="24053">רישיון:</string>
   <string id="24054">רשימת שינויים</string>
-  <string id="24059">×\94×\90×\9d ×ª×¨×¦×\94\99 ×\9c×\94פע×\99×\9c ×ª×\95סף ×\96×\94?</string>
-  <string id="24060">×\94×\90×\9d ×ª×¨×¦×\94\99 ×\9c× ×\98ר×\9c ×ª×\95סף ×\96×\94?</string>
-  <string id="24061">×\99ש ×¢×\93×\9b×\95×\9f ×\9cת×\95סף ×\96×\94!</string>
-  <string id="24062">ת×\95ספ×\99×\9d ×\9e×\95פע×\9c×\99×\9d</string>
+  <string id="24059">×\94×\90×\9d ×ª×¨×¦×\94\99 ×\9c×\94פע×\99×\9c ×\94ר×\97×\91×\94 ×\96×\95?</string>
+  <string id="24060">×\94×\90×\9d ×ª×¨×¦×\94\99 ×\9c× ×\98ר×\9c ×\94ר×\97×\91×\94 ×\96×\95?</string>
+  <string id="24061">×\99ש ×¢×\93×\9b×\95×\9f ×\9c×\94ר×\97×\91×\94 ×\96×\95!</string>
+  <string id="24062">×\94ר×\97×\91×\95ת ×\9e×\95פע×\9c×\95ת</string>
   <string id="24063">עדכון אוטומטי</string>
-  <string id="24064">ת×\95סף ×\9e×\95פע×\9c</string>
-  <string id="24065">ת×\95סף ×\9e×¢×\95×\93×\9b×\9f</string>
-  <string id="24066">×\91×\98×\9c ×\94×\95ר×\93ת ×ª×\95סף?</string>
-  <string id="24067">×\91ת×\94×\9c×\99×\9a ×\94×\95ר×\93ת ×ª×\95ספ×\99×\9d</string>
+  <string id="24064">×\94ר×\97×\91×\94 ×\9e×\95פע×\9cת</string>
+  <string id="24065">×\94ר×\97×\91×\94 ×¢×\95×\93×\9b× ×\94</string>
+  <string id="24066">×\91×\98×\9c ×\94×\95ר×\93ת ×\94ר×\97×\91×\94?</string>
+  <string id="24067">×\91ת×\94×\9c×\99×\9a ×\94×\95ר×\93ת ×\94ר×\97×\91×\95ת</string>
   <string id="24068">קיים עדכון</string>
   <string id="24069">עדכן</string>
-
-  <string id="24070">לא ניתן לטעון את התוסף</string>
+  <string id="24070">לא ניתן לטעון את ההרחבה</string>
   <string id="24071">ארעה תקלה בלתי ידועה</string>
   <string id="24072">דרושות הגדרות</string>
   <string id="24073">לא מצליח להתחבר</string>
-  <string id="24074">צר×\99×\9a ×\9c×\91צע ×\90ת×\97×\95×\9c</string>
+  <string id="24074">צר×\99×\9a ×\9c×\91צע ×\94פע×\9c×\94 ×\9e×\97×\93ש</string>
   <string id="24075">נטרל</string>
-  <string id="24076">דרוש תוסף מתאים</string>
+  <string id="24076">דרושה הרחבה</string>
   <string id="24080">לנסות להתחבר מחדש?</string>
-  <string id="24089">התוסף מאותחל מחדש</string>
-  <string id="24090">נעל מנהל תוסף!</string>
-
-  <string id="24094">(עדכני)</string>
+  <string id="24089">ההרחבה מופעלת מחדש</string>
+  <string id="24090">נעל מנהל הרחבות</string>
+  <string id="24094">(נוכחי)</string>
   <string id="24095">(רשימה שחורה)</string>
-  <string id="24096">×\94ת×\95סף ×\9eס×\95×\9e×\9f ×\9b×\9c×\90 ×ª×§×\99×\9f במאגר</string>
-  <string id="24097">תרצ×\94 ×\9c× ×\98ר×\9c ×\90×\95ת×\95 אצלך במערכת?</string>
+  <string id="24096">×\94×\94ר×\97×\91×\94 ×\9eס×\95×\9eנת ×\9b×\9c×\90 ×ª×§×\99× ×\94 במאגר</string>
+  <string id="24097">תרצ×\94 ×\9c× ×\98ר×\9c ×\90×\95ת×\94 אצלך במערכת?</string>
   <string id="24098">לא תקין</string>
   <string id="24099">תרצה להחליף לסקין זה?</string>
-  <string id="24100">×\9cש×\99×\9e×\95ש ×\91×\99×\9b×\95×\9cת ×\96×\95 ×¢×\9c×\99×\9a ×\9c×\94תק×\99×\9f ×ª×\95סף ×\9eת×\90×\99×\9d</string>
-  <string id="24101">תרצ×\94\99 ×\9c×\94×\95ר×\99×\93 ×ª×\95סף ×\96×\94?</string>
+  <string id="24100">×\9cש×\99×\9e×\95ש ×\91×\99×\9b×\95×\9cת ×\96×\95 ×¢×\9c×\99×\9a ×\9c×\94×\95ר×\99×\93 ×\94ר×\97×\91×\94:</string>
+  <string id="24101">×\91רצ×\95× ×\9a ×\9c×\94×\95ר×\99×\93 ×\94ר×\97×\91×\94 ×\96×\95?</string>
   <string id="25000">הודעות</string>
-  
   <string id="29800">מצב ספריה</string>
   <string id="29801">מקלדת QWERTY</string>
   <string id="29802">שימוש בהעברת קול ישירה (passthrough)</string>
-  
-  <string id="29999">Auto Flicker Filter Patch</string>
   <string id="33001">איכות הקדימון</string>
-  <string id="33002">×\94×\96ר×\9d</string>
+  <string id="33002">×\96ר×\99×\9e×\94</string>
   <string id="33003">הורד</string>
   <string id="33004">הורד ונגן</string>
   <string id="33005">הורד ושמור</string>
-  <string id="33006">×\9d×\95×\99×\94</string>
-  <string id="33007">ר×\97×\9e</string>
+  <string id="33006">×\94×\99×\95×\9d</string>
+  <string id="33007">×\9e×\97ר</string>
   <string id="33008">שומר</string>
   <string id="33009">מעתיק</string>
   <string id="33010">הגדר תיקיית הורדות</string>
+  <string id="33011">חפש אורך</string>
   <string id="33012">קצר</string>
   <string id="33013">ארוך</string>
   <string id="33014">השתמש בנגן DVD במקום הנגן הרגיל</string>
   <string id="33015">בקש לשמור לפני נגינת הוידאו</string>
   <string id="33016">קליפים</string>
-  <string id="33017">×¢×\9c ×\9eנת ×\9c×\90פשר, ×\94פע×\9c ×ª×\95סף ×\9e×\97×\93ש</string>
+  <string id="33017">×\94פע×\9c ×ª×\95סף ×\9e×\97×\93ש ×\9b×\93×\99 ×\9c×\94פע×\99×\9c</string>
   <string id="33018">הלילה</string>
-  <string id="33019">×\94×\9c×\99×\9c×\91 ×¨×\97×\9e</string>
+  <string id="33019">×\9e×\97ר ×\91×\9c×\99×\9c×\94</string>
   <string id="33020">תנאי</string>
   <string id="33021">משקעים</string>
   <string id="33022">משקעים</string>
   <string id="33031">Coverflow</string>
   <string id="33032">תרגם טקסט</string>
   <string id="33033">קטגוריה %s מרשימת המפות</string>
-  <string id="33034">שעות 36</string>
+  <string id="33034">36 שעות</string>
   <string id="33035">מפות</string>
   <string id="33036">לפי שעה</string>
   <string id="33037">סוף שבוע</string>
   <string id="33073">צפה בקובץ שינויים</string>
   <string id="33074">גרסה זו של %s דורשת</string>
   <string id="33075">דרושה גרסה %s של XBMC או יותר כדי לרוץ</string>
-  <string id="33076">אנא עדכן את xbmc.</string>
-  <string id="33077">לא נמצא מידע!</string>
+  <string id="33076">אנא עדכן את XBMC.</string>
+  <string id="33077">לא נמצאו פרטים!</string>
   <string id="33078">עמוד הבא</string>
   <string id="33079">אוהב</string>
-  <string id="33080">×\9c×\90 ×\90×\95×\94×\91</string>
+  <string id="33080">ש×\95× ×\90</string>
   <string id="33081">קובץ זה שייך לערמה. בחר נקודת התחלה</string>
-
+  <string id="33082">נתיב לסקריפט</string>
+  <string id="33083">הפעל כפתור סקריפט מותאם אישית</string>
   <string id="33100">אתחול נכשל</string>
-  <string id="33101">שרת www</string>
-  <string id="33102">שרת הודעות</string>
+  <string id="33101">שרת</string>
+  <string id="33102">Event Server</string>
   <string id="33103">שרת התחברות מרחוק</string>
-</strings>
\ No newline at end of file
+  <string id="33200">זוהה חיבור חדש</string>
+  <string id="34100">תצורת רמקול</string>
+  <string id="34201">לא נמצא פריט הבא לניגון</string>
+  <string id="34202">לא נמצא הפריט הקודם לניגון</string>
+  <string id="34300">נכשל בהפעלת zeroconf</string>
+  <string id="34301">האם שירות Apple's Bonjour מותקן? ראה לוג למידע נוסף</string>
+  <string id="34400">עיבוד וידאו</string>
+  <string id="34402">נכשל בהפעלת התקן האודיו</string>
+  <string id="34403">בדוק הגדרות אודיו</string>
+  <string id="35000">ציוד היקפי</string>
+  <string id="35001">התקן HID כללי</string>
+  <string id="35002">מתאם רשת כללי</string>
+  <string id="35003">דיסק כללי</string>
+  <string id="35004">אין הגדרות להתקן זה</string>
+  <string id="35005">התקן חדש הוגדר</string>
+  <string id="35006">התקן הוסר</string>
+  <string id="35500">מיקום</string>
+  <string id="35501">מחלקה</string>
+  <string id="35502">שם</string>
+  <string id="35503">ספק</string>
+  <string id="35504">מוצר ID</string>
+  <string id="36006">אין אפשרות לפתוח מתאם</string>
+  <string id="36007">הדלק טלוויזיה כאשר מפעילים את XBMC</string>
+  <string id="36008">כבה את ההתקנים כאשר מפסיקים את XBMC</string>
+  <string id="36009">הכנס את ההתקנים למצב שינה כאשר מפעילים שומר מסך</string>
+  <string id="36011">אין אפשרות לזהות פורט CEC. הגדר זאת ידנית.</string>
+  <string id="36012">אין אפשרות לזהות מתאם CEC.</string>
+  <string id="36013">ממשק libcec  לא נתמך. %d גדול יותר מאשר הגרסא ש- XBMC תומך (%d)</string>
+  <string id="36014">הכנס את המחשב למצב המתנה כאשר הטלוויזיה נכבית</string>
+  <string id="36015">מספר פורט HDMI</string>
+  <string id="36016">מחובר</string>
+  <string id="36017">מתאם נמצא. אבל libcec לא זמין</string>
+  <string id="36018">השתמש בהגדרות שפה של הטלוויזיה</string>
+</strings>
index ea54b0e..6d3f8b5 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--Translator: Bence Nádas and Attila Jakosa-->
+<!--Translator: Bence Nádas and Attila Jakosa with a help of Zsolt Malecz-->
 <!--Email: attila.jakosa@gmail.com-->
-<!--Based on English e8661128e59fd7add19180f56410dbd01df584b9 (21.09.2011)-->
+<!--Based on English 0ee1ef09238e4d913cf6c47fa18138c3654cd33e (08.02.2012)-->
 <strings>
   <string id="0">Programok</string>
   <string id="1">Képek</string>
   <string id="135">Műfajok</string>
   <string id="136">Lejátszáslisták</string>
   <string id="137">Keresés</string>
-  <string id="138">Rendszerinfó</string>
+  <string id="138">Rendszerinformáció</string>
   <string id="139">Hőmérsékletek:</string>
   <string id="140">CPU:</string>
   <string id="141">GPU:</string>
   <string id="151">Kapcsolat: </string>
   <string id="152">Fél-duplex</string>
   <string id="153">Teljes-duplex</string>
-  <string id="154">Tároló</string>
+  <string id="154">Háttértár</string>
   <string id="155">Meghajtó</string>
   <string id="156">Szabad</string>
   <string id="157">Videó</string>
   <string id="163">Beolvasás</string>
   <string id="164">Nincs lemez</string>
   <string id="165">Lemezt találtam</string>
-  <string id="166">Arculat</string>
+  <string id="166">Felszín</string>
 
   <string id="169">Felbontás</string>
   <string id="170">Képfrissítésfrekvencia igazítása a film-képkockasebességhez</string>
   <string id="210">Előző</string>
   <string id="213">Felhasználói felület kalibrálása...</string>
   <string id="214">Képernyő kalibrálása</string>
-  <string id="215">Mérsékel</string>
+  <string id="215">Lágyítás</string>
   <string id="216">Nagyítási arány</string>
   <string id="217">Képpontarány</string>
   <string id="218">DVD meghajtó</string>
   <string id="225">Függőleges eltolás</string>
   <string id="226">Teszt minták...</string>
   <string id="227">Zenei CD-k keresése a freedb.org-on</string>
-  <string id="228">Lejátszáslista keverése betöltéskor</string>
+  <string id="228">Véletlenszerû lejátszáslista betöltéskor</string>
   <string id="229">Merevlemez kikapcsolási ideje</string>
   <string id="230">Képszűrők</string>
   <string id="231">Nincs</string>
   <string id="332">Hiba az adatbázis tömörítése közben</string>
   <string id="333">Médiatár tisztítása?</string>
   <string id="334">Médiatár tisztítása...</string>
-  <string id="335">Start</string>
+  <string id="335">Indítás</string>
   <string id="336">Képkockasebesség konvertálás</string>
   <string id="337">Hangkimenet</string>
   <string id="338">Analóg</string>
   <string id="339">Optikai/Coax</string>
   <string id="340">Különböző előadók</string>
-  <string id="341">Lemez lejátszása</string>
+  <string id="341">Lemezek</string>
   <string id="342">Filmek</string>
   <string id="343">Képkockasebesség igazítás</string>
   <string id="344">Színészek</string>
   <string id="358">Minden album</string>
   <string id="359">Új albumok</string>
   <string id="360">Képernyőkímélő</string>
-  <string id="361">Ford. Diavetítés</string>
+  <string id="361">Rekurzív diavetítés</string>
   <string id="362">Képernyőkímélő elhalványodási szintje</string>
   <string id="363">Fájlnév szerint</string>
   <string id="364">- Dolby Digital (AC3) képes erősítő</string>
   <string id="399">Sebesség mértékegysége</string>
   <string id="400">Időjárás</string>
   <string id="401">Hőmérséklet</string>
-  <string id="402">Érzet</string>
+  <string id="402">Hőérzet</string>
   <string id="403">UV index</string>
   <string id="404">Szél</string>
   <string id="405">Harmatpont</string>
   <string id="414">Nincs ismertető ehhez az albumhoz</string>
   <string id="415">Bélyegkép letöltése...</string>
   <string id="416">Nem elérhető</string>
-  <string id="417">Nézet: N. Ikon</string>
+  <string id="417">Nézet: Nagy ikon</string>
   <string id="418">Min</string>
   <string id="419">Max</string>
   <string id="420">HDMI</string>
   <string id="427">Lemez</string>
   <string id="428">Hibás CD/DVD</string>
   <string id="429">Helyezze be a következő lemezt:</string>
-  <string id="430">DVD# szerint</string>
+  <string id="430">Rendezés: DVD alapján</string>
   <string id="431">Nincs gyorsítótár</string>
   <string id="432">Film eltávolítása a médiatárból</string>
   <string id="433">Biztos el akarod távolítani a '%s'-t?</string>
   <string id="476">Zene és Videó</string>
   <string id="477">Lejátszáslista nem tölthető be</string>
   <string id="478">Navigációs tálca</string>
-  <string id="479">Arculat és Nyelv</string>
+  <string id="479">Felszín és Nyelv</string>
   <string id="480">Megjelenés</string>
   <string id="481">Hangbeállítások</string>
   <string id="482">Az XBMC-ről</string>
   <string id="503">Foglalt</string>
   <string id="504">Üres</string>
   <string id="505">Médiainformáció betöltése fájlokból...</string>
-  <string id="507">Haszn. szerint</string>
+  <string id="507">Rendezés: Használat alapján</string>
   <string id="510">Vizualizációk engedélyezése</string>
   <string id="511">Automatikus képmód váltás</string>
   <string id="512">Kezdőablak</string>
   <string id="524">Lejátszáslista választása</string>
   <string id="525">Új lejátszáslista</string>
   <string id="526">Hozzáadás a lejátszáslistához</string>
-  <string id="527">Médiatárba kézileg</string>
+  <string id="527">Kézi hozzáadás a Médiatárhoz</string>
   <string id="528">Cím</string>
   <string id="529">Hiba: már létező cím</string>
   <string id="530">Műfaj választása</string>
   <string id="556">Cím</string>
   <string id="557">Előadó</string>
   <string id="558">Album</string>
-  <string id="559">Lej.lista</string>
+  <string id="559">Lejátszási lista</string>
   <string id="560">Azonosító</string>
   <string id="561">Fájl</string>
   <string id="562">Év</string>
   <string id="567">Lejátszás-számláló</string>
   <string id="568">Utoljára játszott</string>
   <string id="569">Leírás</string>
-  <string id="570">Hozzáadás-dátum</string>
+  <string id="570">Hozzáadás</string>
   <string id="571">Eredeti</string>
   <string id="572">Stúdió</string>
   <string id="573">Elérési út</string>
   <string id="574">Ország</string>
   <string id="575">Folyamatban</string>
-  <string id="576">Ennyiszer játszva</string>
+  <string id="576">Lejátszás</string>
 
   <string id="580">Rendezés iránya</string>
   <string id="581">Rendezés módja</string>
   <string id="582">Nézetmód</string>
-  <string id="583">Mappák nézetének megjegyzése</string>
+  <string id="583">Mappanézet megjegyzése</string>
   <string id="584">Növekvő</string>
   <string id="585">Csökkenő</string>
   <string id="586">Lejátszáslista szerkesztése</string>
   <string id="658">Dal információ</string>
   <string id="659">Nemlineáris széthúzás</string>
 
-  <string id="660">Hangerő erősítés</string>
+  <string id="660">Hang előerősítés</string>
   <string id="661">Export mappa választása</string>
   <string id="662">A fájl már nem elérhető.</string>
   <string id="663">Eltávolítás a médiatárból?</string>
 
   <string id="772">Hangkimenet</string>
   <string id="773">POZÍCIÓKERESÉS</string>
-  <string id="774">Diavetítő mappa</string>
-  <string id="775">Hálózati csatoló</string>
+  <string id="774">Diavetítés mappa</string>
+  <string id="775">Hálózati eszköz</string>
   <string id="776">- Vezetéknélküli hálózat neve (ESSID)</string>
   <string id="777">- Vezetéknélküli hálózat jelszava</string>
   <string id="778">- Vezetéknélküli biztonság</string>
-  <string id="779">Hálózati csatoló beállításainak mentése</string>
+  <string id="779">Hálózati eszköz beállításainak mentése</string>
   <string id="780">Nincs titkosítás</string>
   <string id="781">WEP</string>
   <string id="782">WPA</string>
   <string id="783">WPA2</string>
-  <string id="784">Hálózati csatoló beállításainak mentése. Kérlek várj.</string>
-  <string id="785">Hálózati csatoló sikeresen újraindult.</string>
-  <string id="786">Hálózati csatoló nem indult el.</string>
-  <string id="787">Csatoló letiltva</string>
-  <string id="788">Hálózati csatoló letiltva.</string>
+  <string id="784">Hálózati eszköz beállításainak mentése. Kérlek várj.</string>
+  <string id="785">Hálózati eszköz sikeresen újraindult.</string>
+  <string id="786">Hálózati eszköz nem indult el.</string>
+  <string id="787">Eszköz letiltva</string>
+  <string id="788">Hálózati eszköz letiltva.</string>
   <string id="789">Vezetéknélküli hálózat neve (ESSID)</string>
 
   <string id="791">XBMC irányítható az ezen a rendszeren futó programokkal</string>
   <string id="1300">Egyedi hanglejátszó eszköz megadása</string>
   <string id="1301">Egyedi hangtovábbító eszköz megadása</string>
 
-  <string id="1396">hófúvásos</string>
+  <string id="1396">viharos</string>
   <string id="1397">és</string>
   <string id="1398">fagyos</string>
   <string id="1399">éjjel</string>
   <string id="1403">napos</string>
   <string id="1404">erős</string>
   <string id="1405">-</string>
-  <string id="1406">a</string>
+  <string id="1406">-</string>
   <string id="1407">környéken</string>
-  <string id="1408">jeges</string>
-  <string id="1409">kristályos</string>
+  <string id="1408">jég</string>
+  <string id="1409">kristályok</string>
   <string id="1410">nyugodt</string>
   <string id="1411">-val/-vel</string>
   <string id="1412">szeles</string>
   <string id="1421">nagyon magas</string>
   <string id="1422">szeles</string>
   <string id="1423">köd</string>
+  <string id="1424">várható</string>
+  <string id="1425">-</string>
+  <string id="1426">dél</string>
+  <string id="1427">észak</string>
+  <string id="1428">nyugat</string>
+  <string id="1429">kelet</string>
+  <string id="1430">borús</string>
+  <string id="1431">eső</string>
+  <string id="1432">jégeső</string>
+  <string id="1433">füst</string>
+  <string id="1434">vulkanikus</string>
+  <string id="1435">hamu</string>
+  <string id="1436">elterülő</string>
+  <string id="1437">por</string>
+  <string id="1438">homok</string>
+  <string id="1439">szitálás</string>
+  <string id="1440">örvénylés</string>
+  <string id="1441">homokvihar</string>
+  <string id="1442">széllel érkező</string>
+  <string id="1443">golyó</string>
+  <string id="1444">kis</string>
+  <string id="1445">és</string>
+  <string id="1446">dara</string>
+  <string id="1447">és</string>
 
   <!-- 1450-ig időjárás fordítására fenntartva -->
 
   <string id="10020">Programok</string>
   <string id="10021">Internet böngésző</string>
 
+  <string id="10025">Videók</string>
+
   <string id="10028">Videók/lejátszáslista</string>
+  <string id="10029">Bejelentkezési képernyő</string>
   <string id="10034">Beállítások - Profilok</string>
+  <string id="10040">Kiegészítő böngésző</string>
 
   <string id="10100">Igen/nem párbeszédpanel</string>
   <string id="10101">Folyamatjelző párbeszédpanel</string>
   <string id="13016">Gép kikapcsolása</string>
 
   <string id="13020">Lehet hogy egy másik bejelentkezés aktív (ssh)?</string>
-  <string id="13021">Külső meghajtó csatlakozott</string>
+  <string id="13021">Külső meghajtó csatlakoztatva</string>
   <string id="13022">Nem biztonságos eltávolítás</string>
   <string id="13023">Eszköz sikeresen eltávolítva</string>
   <string id="13024">Joystick csatlakoztatva</string>
   <string id="13170">Soha</string>
   <string id="13171">Azonnal</string>
   <string id="13172">%i másodperc után</string>
-  <string id="13173">HDD beszerelés dátuma:</string>
-  <string id="13174">HDD elindulások száma:</string>
+  <string id="13173">HDD telepítés dátuma:</string>
+  <string id="13174">HDD indítások száma:</string>
 
   <string id="13200">Profilok</string>
   <string id="13201">Törlöd ezt a profilt: '%s'?</string>
   <string id="13274">Csatlakoztatva, de nincs elérhető DNS</string>
   <string id="13275">Merevlemez</string>
   <string id="13276">DVD-ROM</string>
-  <string id="13277">Tárolók</string>
+  <string id="13277">Háttértárak</string>
   <string id="13278">Alapértelmezett</string>
   <string id="13279">Hálózat</string>
   <string id="13280">Videó</string>
   <string id="13283">Operációs rendszer:</string>
   <string id="13284">CPU sebesség:</string>
 
-  <string id="13286">Videó bekódoló:</string>
+  <string id="13286">Videó kódoló:</string>
   <string id="13287">Képernyő felbontása:</string>
 
   <string id="13292">Hang/Kép kábel:</string>
   <string id="13312">Fekete sáv csökkentés</string>
   <string id="13313">Újraindítás</string>
   <string id="13314">Zeneszámok egymásbakeverése</string>
-  <string id="13315">Bélyegek újragenerálása</string>
+  <string id="13315">Bélyegképek újragenerálása</string>
   <string id="13316">Rekurzív bélyegképek</string>
   <string id="13317">Diavetítés</string>
   <string id="13318">Rekurzív diavetítés</string>
   <string id="13407">%s előbeállítás</string>
   <string id="13408">(IMDb nézői értékelés)</string>
   <string id="13409">Top 250</string>
-  <string id="13410">Hangolás a Last.fm-en</string>
+  <string id="13410">Keresés a Last.fm-en</string>
   <string id="13411">Minimum ventilátor-sebesség</string>
   <string id="13412">Lejátszás innen</string>
   <string id="13413">Letöltés folyamatban</string>
 
   <string id="15107">Előtöltés...</string>
   <string id="15108">Navigációs hangok</string>
-  <string id="15109">Arculat alapértelmezése</string>
+  <string id="15109">Felszín alapértelmezése</string>
   <string id="15111">- Téma</string>
   <string id="15112">Alapértelmezett téma</string>
 
   <string id="20000">Bemásolt (rip-elt) zene mappája</string>
   <string id="20001">Külső DVD-lejátszó használata</string>
   <string id="20002">Külső DVD-lejátszó</string>
-  <string id="20003">Trainerek mappája</string>
-  <string id="20004">Pillanatképek mappája</string>
+  <string id="20003">Bemutatók (Trailerek) mappája</string>
+  <string id="20004">Képernyőmentések mappája</string>
 
   <string id="20006">Lejátszáslisták mappája</string>
   <string id="20007">Felvételek</string>
-  <string id="20008">Pillanatképek </string>
+  <string id="20008">Képernyőmentések </string>
   <string id="20009">XBMC használata</string>
 
   <string id="20011">Zenei lejátszáslista</string>
   <string id="20074">MPAA</string>
   <string id="20075">Mesterkód</string>
   <string id="20076">Mesterkód bekérése induláskor</string>
-  <string id="20077">Arculat beállítások</string>
+  <string id="20077">Felszín beállítások</string>
   <string id="20078">- nincs beállított hivatkozás -</string>
   <string id="20079">Animációk engedélyezése</string>
   <string id="20080">RSS tiltása zene közben</string>
   <string id="20159">Videó információk</string>
   <string id="20160">Hardver információk</string>
   <string id="20161">Teljes</string>
-  <string id="20162">Foglalt</string>
+  <string id="20162">Használatban</string>
   <string id="20163">per</string>
   <string id="20164">Zárolás nem támogatott</string>
   <string id="20165">Nincs zárolva</string>
   <string id="20182">Szóköz</string>
   <string id="20183">Felhasználói felület újraindítása</string>
   <string id="20184">Forgatás EXIF információ alapján</string>
-  <string id="20185">Poszter nézet használata TV műsoroknál</string>
+  <string id="20185">Poszter nézet használata sorozatoknál</string>
   <string id="20186">Kérem várjon</string>
 
   <string id="20189">Automatikus sorgörgetés a filmtartalom megjelenítésekor</string>
   <string id="20326">Kalibrációs értékek törlése %s számára</string>
   <string id="20327">az alapértelmezett értékekere.</string>
   <string id="20328">Tallózás</string>
-
+  <string id="20329">A filmcímnek megfelelő találatok külön mappákban találhatók</string>
   <string id="20330">Használja a mappanevet a keresésekhez</string>
   <string id="20331">Fájl</string>
   <string id="20332">Mappa- vagy fájlnevek használata kereséskor?</string>
   <string id="20340">A megadott elérési út minden elemének</string>
   <string id="20341">eltávolítása az XBMC médiatárból?</string>
   <string id="20342">Filmek</string>
-  <string id="20343">TV műsorok</string>
+  <string id="20343">Sorozatok</string>
   <string id="20344">A könyvtár tartalma</string>
   <string id="20345">Automatikus átvizsgálás</string>
   <string id="20346">Rekurzív átvizsgálás</string>
   <string id="20348">Rendezők</string>
   <string id="20349">Nem található videófájl a megadott elérésiúton!</string>
   <string id="20350">szavazat</string>
-  <string id="20351">TV műsor információ</string>
+  <string id="20351">Sorozat információ</string>
   <string id="20352">Epizód információ</string>
-  <string id="20353">TV műsor információ betöltése</string>
+  <string id="20353">Sorozat információ betöltése</string>
   <string id="20354">Epizódkalauz letöltése</string>
   <string id="20355">Információ betöltése a könyvtárban található epizódokhoz</string>
-  <string id="20356">TV műsor választása:</string>
-  <string id="20357">TV műsor neve</string>
+  <string id="20356">Sorozat választása:</string>
+  <string id="20357">Sorozat neve</string>
   <string id="20358">Évad %i</string>
   <string id="20359">Epizód</string>
   <string id="20360">Epizód</string>
   <string id="20361">Epizódrészletek betöltése</string>
   <string id="20362">Epizód eltávolítása a médiatárból</string>
-  <string id="20363">TV műsor eltávolítása a médiatárból</string>
-  <string id="20364">TV műsor</string>
+  <string id="20363">Sorozat eltávolítása a médiatárból</string>
+  <string id="20364">Sorozat</string>
   <string id="20365">Epizód tartalma</string>
   <string id="20366">* Összes évad</string>
   <string id="20367">Látottak rejtve</string>
   <string id="20368">Prod kód</string>
-  <string id="20369">Tartalom elrejtése nem látott filmek esetén</string>
+  <string id="20369">Tartalom megjelenítése nem látott filmek esetén</string>
   <string id="20370">* Elrejtve, spoiler-védelem miatt *</string>
   <string id="20371">Évad bélyegkép beállítása</string>
   <string id="20372">Évad kép</string>
   <string id="20374">Film információ letöltése</string>
   <string id="20375">Tartalom hozzárendelés megszüntetése</string>
   <string id="20376">Eredeti cím</string>
-  <string id="20377">TV műsor információ frissítése</string>
+  <string id="20377">Sorozat információ frissítése</string>
   <string id="20378">Minden epizód frissítése?</string>
-  <string id="20379">A kiválasztott mappa egyetlen TV műsort tartalmaz</string>
+  <string id="20379">A kiválasztott mappa egyetlen sorozatot tartalmaz</string>
   <string id="20380">A kiválasztott mappa kihagyása az átvizsgálásokból</string>
   <string id="20381">Egyediek</string>
   <string id="20382">Évad bélyegképek automatikus letöltése</string>
   <string id="20383">A kiválasztott mappa egyetlen videót tartalmaz</string>
-  <string id="20384">Hivatkozás TV műsorhoz</string>
-  <string id="20385">TV műsor hivatkozás törlése</string>
-  <string id="20386">Új filmek</string>
-  <string id="20387">Új epizódok</string>
+  <string id="20384">Hivatkozás a sorozathoz</string>
+  <string id="20385">Sorozat hivatkozás törlése</string>
+  <string id="20386">Nemrég bekerült filmek</string>
+  <string id="20387">Nemrég bekerült epizódok</string>
   <string id="20388">Stúdiók</string>
   <string id="20389">Videóklipek</string>
-  <string id="20390">Mostanában hozzáadott videóklipek</string>
+  <string id="20390">Nemrég bekerült videóklipek</string>
   <string id="20391">Videóklip</string>
   <string id="20392">Videóklip eltávolítása a médiatárból</string>
   <string id="20393">Videóklip információ</string>
   <string id="20406">Epizód-könyvjelző</string>
   <string id="20407">Leolvasó beállításai</string>
   <string id="20408">Videóklip információ letöltése</string>
-  <string id="20409">TV műsor információ letöltése</string>
+  <string id="20409">Sorozat információ letöltése</string>
   <string id="20410">Filmajánló</string>
   <string id="20411">Listák szűkítése</string>
-  <string id="20412">TV műsor listaszűkítés</string>
+  <string id="20412">Sorozat listaszűkítés</string>
   <string id="20413">Fanartkép</string>
   <string id="20414">Fanartkép megjelenítése a médiatárban</string>
   <string id="20415">Új tartalom keresése</string>
   <string id="20416">Első adás</string>
   <string id="20417">Írta</string>
   <string id="20418"></string>
-  <string id="20419">Metaadatok mutatása a fájlnézetben</string>
+  <string id="20419">Fájlnevek helyett a médiatár címek mutatása</string>
 
   <string id="20420">Soha</string>
   <string id="20421">Csak, ha egy évad van</string>
   <string id="20431">Korábbi fájlok felülírása?</string>
   <string id="20432">Elérési út kihagyása a médiatár-frissítésekor</string>
   <string id="20433">Média információk és bélyegképek kinyerése</string>
-  <string id="20434">BOXSET</string>
-  <string id="20435">BOXSET bélyegkép</string>
+  <string id="20434">Lemezgyűjtemény</string>
+  <string id="20435">Lemezgyűjtemény bélyegkép</string>
   <string id="20436">Színész-bélyegképek exportálása?</string>
   <string id="20437">Fanartkép választás</string>
   <string id="20438">Helyi fanartkép</string>
   <string id="20453">epizód</string>
   <string id="20454">Hallgató</string>
   <string id="20455">Hallgató</string>
-  <string id="20456">Filmkészlet fanart beállítása</string>
-  <string id="20457">Filmkészlet</string>
+  <string id="20456">Filmgyűjtemény fanart beállítása</string>
+  <string id="20457">Filmgyűjtemény</string>
+  <string id="20458">Filmek csoportosítása készletekbe</string>
   <!-- 21329-ig videó-adatbázisra fenntartva  !! !-->
 
   <string id="21330">Rejtett fájlok és mappák megjelenítése</string>
   <string id="21365">Médiamegosztás eltávolítása</string>
   <string id="21366">Felirat mappa</string>
   <string id="21367">Film és alternatív felirat mappa</string>
-
-  <string id="21369">Egér engedélyezése</string>
+  <string id="21368">Az ASS/SSA betűtípusok figyelmen kívül hagyása</string>
+  <string id="21369">Egér- és érintőképernyő támogatás engedélyezése</string>
   <string id="21370">Navigációs hangok lejátszás közben</string>
   <string id="21371">Bélyegkép</string>
   <string id="21372">Kényszerített DVD régiókód használata</string>
   <string id="21411">nincs az utolsó X-ben</string>
   <string id="21412">Leolvasók</string>
   <string id="21413">Alapértelmezett film leolvasó</string>
-  <string id="21414">Alapértelmezett TV műsor leolvasó</string>
+  <string id="21414">Alapértelmezett sorozat leolvasó</string>
   <string id="21415">Alapértelmezett videóklip leolvasó</string>
   <string id="21416">Helyettesítés engedélyezése a leolvasó nyelve alapján</string>
   <string id="21417">- Beállítások</string>
   <string id="21451">Internet kapcsolat szükséges.</string>
   <string id="21452">Több beszerzése...</string>
   <string id="21453">Fájlrendszer</string>
-  <string id="21454">Hallgató</string>
-  <string id="21455">Hallgató</string>
+  <string id="21454">Gyorsítótár megtelt</string>
+  <string id="21455">A gyorsítótár még azelőtt megtelt, hogy elegendő lett volna a folyamatos lejátszáshoz</string>
 
   <string id="21460">Felirat helye</string>
   <string id="21461">Rögzített</string>
   <string id="24011">Kiegészítő tárolóhely</string>
   <string id="24012">Feliratok</string>
   <string id="24013">Dalszöveg</string>
-  <string id="24014">TV műsor információ</string>
+  <string id="24014">Sorozat információ</string>
   <string id="24015">Zenei videóklip információ</string>
   <string id="24016">Album információ</string>
   <string id="24017">Előadó információ</string>
   <string id="24034">Frissítések keresése</string>
   <string id="24035">Frissítés kényszerítése</string>
   <string id="24036">Változáslista</string>
-  <string id="24037">Letelepítés</string>
+  <string id="24037">Törlés</string>
   <string id="24038">Telepítés</string>
   <string id="24039">Kikapcsolt kiegészítők</string>
   <string id="24040">(A jelenlegi beállítás törlése)</string>
   <string id="24045">A kiegészítőnek nem megfelelő a felépítése</string>
   <string id="24046">%s haszálatban van az alábbi kiegészítő(k) által</string>
   <string id="24047">Ez a kiegészítő nem törölhető</string>
-  <string id="24048">Visszacsinálás</string>
+  <string id="24048">Előző verzió</string>
 
   <string id="24050">Elérhető kiegészítők</string>
   <string id="24051">Verzió:</string>
   <string id="24096">A kiegészítőt működésképtelennek jelölték a tárhelyen.</string>
   <string id="24097">Akarod letiltani a számítógépeden?</string>
   <string id="24098">Működésképtelen</string>
-  <string id="24099">Átváltasz erre az arculatra ?</string>
+  <string id="24099">Átváltasz erre a felszínre ?</string>
   <string id="24100">A funkció használatához le kell töltened egy kiegészítőt:</string>
   <string id="24101">Szeretnéd letölteni ezt a kiegészítőt?</string>
   <string id="25000">Értesítések</string>
 
-  <!-- 29800-tól 29998 a default PM3 arculat-hoz foglalva -->
+  <!-- 29800-tól 29998 a default PM3 felszín-hez foglalva -->
   <string id="29800">Médiatár mód</string>
   <string id="29801">QWERTY billentyűzet</string>
   <string id="29802">Hangtovábbítás-módban tiltva</string>
 
   <!-- 30000-től 30999-ig kiegészítők számára fenntartva -->
-  <!-- 31000-tól 31999-ig a arculatok számára fenntartva -->
+  <!-- 31000-tól 31999-ig a felszínek számára fenntartva -->
   <!-- 32000-tól 32999-ig programok számára fenntartva -->
   <!-- 33000-tól 33999-ig bővítmények számára fenntartva -->
   <string id="33001">Filmelőzetes minőség</string>
   <string id="33051">Válaszd ki a saját</string>
   <string id="33052">Ellenőrzés</string>
   <string id="33053">Állítsd be a(z)</string>
-  <string id="33054">Évszakok</string>
+  <string id="33054">Évad</string>
   <string id="33055">Használd</string>
   <string id="33056">Nézd</string>
   <string id="33057">Hallgasd</string>
   <string id="33069">Hátterek</string>
   <string id="33070">Testreszabott háttér</string>
   <string id="33071">Testreszabott hátterek</string>
-  <string id="33072">Readme megtekintése</string>
+  <string id="33072">Az 'Olvass el' megtekintése</string>
   <string id="33073">Változási napló megtekintése</string>
   <string id="33074">A(z) %s ezen verziójához</string>
   <string id="33075">%s vagy magasabb XBMC verzió szükséges.</string>
   <string id="33102">Eseménykiszolgáló</string>
   <string id="33103">Távoli kommunikációs kiszolgáló</string>
 
+  <string id="33200">Új kapcsolatot észleltem</string>
+
   <string id="34100">Hangfalkiépítés</string>
 
-  <string id="34201">Nem található következő lejátszandó elem</string>
-  <string id="34202">Nem található előző lejátszandó elem</string>
+  <string id="34201">Nincs következő lejátszandó elem</string>
+  <string id="34202">Nincs előző lejátszandó elem</string>
+
+  <string id="34300">A zeroconf elindítása nem sikerült</string>
+  <string id="34301">Biztos, hogy az Apple Bonjour Service telepítve van? (Részletes információ a naplóban)</string>
+
+  <string id="34400">Video leképező rendszer hiba</string>
+  <string id="34401">Az átméretező (scaler) nem használható, visszaállva a bilinear eljárásra</string>
+  <string id="34402">A beállított hangeszköz nem használható</string>
+  <string id="34403">Ellenőrizd a hangbeállításokat</string>
+
+  <string id="35000">Perifériák</string>
+  <string id="35001">Szabványos HID eszköz</string>
+  <string id="35002">Szabványos hálózati adapter</string>
+  <string id="35003">Szabványos lemez</string>
+  <string id="35004">Ehez a perifériához&#10;nem tartozik beállítás.</string>
+  <string id="35005">Új eszköz lett beállítva</string>
+  <string id="35006">Az eszközt eltávolították</string>
+  <string id="35007">Használt billentyűzetkiosztás ehhez az eszközhöz</string>
+  <string id="35008">Billentyűzetkiosztás engedélyezve</string>
+
+  <string id="35500">Hely</string>
+  <string id="35501">Osztály</string>
+  <string id="35502">Név</string>
+  <string id="35503">Gyártó</string>
+  <string id="35504">Gyári szám</string>
+
+  <string id="36000">Pulse-Eight CEC adapter</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Váltás billentyû parancsra</string>
+  <string id="36003">Váltás távirányító parancsra</string>
+  <string id="36004">Nyomd meg a "felhasználó" gomb parancsot</string>
+  <string id="36005">Kapcsoló parancsok engedélyezése</string>
+  <string id="36006">Adapter megnyitása sikertelen</string>
+  <string id="36007">TV bekapcsolása XBMC elindításával</string>
+  <string id="36008">TV kikapcsolása XBMC leállításával</string>
+  <string id="36009">Képernyővédő bekapcsolásával az eszközöket készenléti módba helyezni</string>
+  <string id="36010"></string>
+  <string id="36011">A CEC csatlakozó nem található. Állítsd be manuálisan.</string>
+  <string id="36012">A CEC adapter nem található.</string>
+  <string id="36013">Nem támogatott libcec csatoló verzió. %d nagyobb mint amit az XBMC támogat (%d)</string>
+  <string id="36014">A Média Center készenléti módba helyezése, a TV kikapcsolásával</string>
+  <string id="36015">HDMI csatlakozó száma</string>
+  <string id="36016">Csatlakozva</string> <!-- max. 13 characters -->
+  <string id="36017">Az adaptert megtaláltam, de a libcec nem elérhető</string>
+  <string id="36018">A TV nyelvi beállításainak használata</string>
 </strings>
index 013d85d..b2bcb61 100644 (file)
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--Translator: Kristján Bjarni Guðmundsson-->
 <!--Email: kristjanbjarni@gmail.com-->
-<!--Date of translation: 2011-06-08-->
+<!--Date of translation: 2012-02-01-->
 <!--$Revision$-->
-<!--Based on english strings version 35715-->
 <strings>
   <string id="0">Forrit</string>
   <string id="1">Ljósmyndir</string>
   <string id="221">Netkerfi ótengt</string>
   <string id="222">Hætta við</string>
   <string id="224">Hraði</string>
-
+  <string id="225">Lóðrétt hliðrun</string>
   <string id="226">Prufumynstur...</string>
   <string id="227">Sækja upplýsingar um tónlistardiska frá freedb.org</string>
   <string id="228">Endurraða spilunarlista í byrjun</string>
   <string id="242">Glugga</string>
   <string id="243">Glæðingartíðni</string>
   <string id="244">Fylla skjá</string>
-  <string id="245">Stærðir: (%i,%i)-&gt;(%i,%i) (Aðdráttur x%2.2f) AR:%2.2f:1 (Punktar: %2.2f:1)</string>
+  <string id="245">Stærðir: (%i,%i)-&gt;(%i,%i) (Aðdráttur x%2.2f) AR:%2.2f:1 (Punktar: %2.2f:1) (Lóð.hliðrun: %2.2f)</string>
 
   <string id="247">Skriftur</string>
   <string id="248">Tungumál</string>
   <string id="426">Engar upplýsingar fundust um geisladisk</string>
   <string id="427">Diskur</string>
   <string id="428">Settu inn réttan CD/DVD</string>
-  <string id="429">Settu inn eftirfarandi CD/DVD</string>
+  <string id="429">Settu inn eftirfarandi disk:</string>
   <string id="430">Raða eftir: DVD#</string>
   <string id="431">Ekkert biðminni</string>
   <string id="432">Eyða kvikmynd úr safni</string>
   <string id="510">Virkja myndskreytingu</string>
   <string id="511">Skipta sjálfvirkt um skjáham eftir svæði leiks</string>
   <string id="512">Ræsi gluggi</string>
-  <string id="513">Heima gluggi</string>
+  <string id="513">Forsíða</string>
   <string id="514">Handvirkar stillingar</string>
   <string id="515">Flokkur</string>
 
   <string id="573">Slóð</string>
   <string id="574">Land</string>
   <string id="575">Í vinnslu</string>
+  <string id="576">Sinnum spilað</string>
 
   <string id="580">Raða í átt</string>
   <string id="581">Röðunaraðferð</string>
   <string id="851">Gild gátt er á bilinu 1-65535</string>
   <string id="852">Gild gátt er á bilinu 1024-65535</string>
 
+  <string id="998">Bæta við tónlist...</string>
+  <string id="999">Bæta við myndefni...</string>
   <string id="1000">- Forsýna</string>
   <string id="1001">Get ekki tengst</string>
   <string id="1002">XBMC getur ekki tengst við netslóð.</string>
   <string id="1257">Viltu tengjast uppgötvuðu kerfi?</string>
 
   <string id="1260">Tilkynna þjónustur til annarra kerfa með Zeroconf</string>
+  <string id="1270">Leyfa XBMC að taka á móti AirPlay efni</string>
+  <string id="1271">Nafn tækis</string>
+  <string id="1272">- Nota lykilorð</string>
 
   <string id="1300">Sérsniðið hljóðtæki</string>
   <string id="1301">Sérsniðið gegnumstreymitæki</string>
   <string id="12392">Klukkustundir</string>
   <string id="12393">Dagar</string>
   <string id="12394">Heildar uppitími</string>
+  <string id="12395">Rafhlaða</string>
 
   <string id="12600">Veður</string>
 
 
   <string id="13100">Flökt sía</string>
   <string id="13101">Láta rekil ráða (þarfnast endurræsingar)</string>
+  
   <string id="13105">Lóðrétt auð samstilling</string>
   <string id="13106">Óvirkt</string>
   <string id="13107">Virkt við afspilun</string>
 
   <string id="13200">Notendur</string>
   <string id="13201">Eyða notanda '%s'?</string>
+  
   <string id="13204">Seinasti notandi:</string>
   <string id="13205">Óþekkt</string>
   <string id="13206">Yfirskrifa</string>
+  
   <string id="13208">Vekjaraklukka</string>
   <string id="13209">Vekjaraklukku tími (í mínútum)</string>
   <string id="13210">Í gangi, vakning eftir %im</string>
   <string id="13359">Setja smámynd á listamann</string>
   <string id="13360">Búa til smámyndir</string>
   <string id="13361">Virkja rödd</string>
+  
   <string id="13375">Virkja Tæki</string>
   <string id="13376">Hljóðstyrkur</string>
   <string id="13377">Sjálfgefinn sjónarhornsháttur</string>
@@ -1204,7 +1214,7 @@ fyrir þessa myndskreytingu</string>
   <string id="13409">Topp 250</string>
   <string id="13410">Stilla inn á Last.fm</string>
   <string id="13411">Lágmarks viftuhraði</string>
-
+  <string id="13412">Spila hér</string>
   <string id="13413">Niðurhala</string>
   <string id="13414">Fela tónlistarmenn sem birtast aðeins á safndiskum</string>
   <string id="13415">Teikni hamur</string>
@@ -1222,8 +1232,9 @@ fyrir þessa myndskreytingu</string>
   <string id="13427">Leyfa vélbúnaðarhröðun (DXVA2)</string>
   <string id="13428">Leyfa vélbúnaðarhröðun (CrystalHD)</string>
   <string id="13429">Leyfa vélbúnaðarhröðun (VDADecoder)</string>
-  <string id="13430">Allow hardware acceleration (OpenMax)</string>
+  <string id="13430">Leyfa vélbúnaðarhröðun (OpenMax)</string>
   <string id="13431">Punktaskyggir</string>
+  <string id="13432">Leyfa vélbúnaðarhröðun (VideoToolbox)</string>
 
   <string id="13500">A/V samstillingaraðferð</string>
   <string id="13501">Hljóðklukka</string>
@@ -1325,7 +1336,7 @@ fyrir þessa myndskreytingu</string>
   <string id="14070">Virkja stillingar núna</string>
   <string id="14071">Leyfa að eyða skrám</string>
 
-  <string id="14074">Setja tímabelti</string>
+  <string id="14074">Velja tímabelti</string>
   <string id="14075">Nota sumartíma</string>
   <string id="14076">Bæta við í uppáhalds</string>
   <string id="14077">Fjarlægja úr uppáhalds</string>
@@ -1470,7 +1481,7 @@ fyrir þessa myndskreytingu</string>
   <string id="16020">De-interlace</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (Umsnúinn)</string>
-  <string id="16023">Interlaced meðhöndlun</string>
+  <string id="16023"/>
   <string id="16024">Hætti við...</string>
   <string id="16025">Sláðu inn nafn listamanns</string>
   <string id="16026">Hætt við spilun spilunarlista</string>
@@ -1483,7 +1494,13 @@ fyrir þessa myndskreytingu</string>
   <string id="16033">Gat ekki opnað gagnagrunn.</string>
   <string id="16034">Gat ekki náð í lög frá gagnagrunni.</string>
   <string id="16035">Partí spilunarlisti</string>
-
+  <string id="16036">De-interlace (Hálft)</string>
+  <string id="16037">Deinterlace mynd</string>
+  <string id="16038">Deinterlace aðferð</string>
+  <string id="16039">Af</string>
+  <string id="16040">Sjálfvirkt</string>
+  <string id="16041">Á</string>
+  
   <string id="16100">Allar Myndir</string>
   <string id="16101">Ekki búið að horfa á</string>
   <string id="16102">Búið að horfa</string>
@@ -1500,8 +1517,8 @@ fyrir þessa myndskreytingu</string>
   <string id="16206">Mistókst að eyða amk einni skrá</string>
 
   <string id="16300">Skjástækkunaraðferð</string>
-  <string id="16301">Næsti nágranni</string>
-  <string id="16302">Tvílínulegt</string>
+  <string id="16301">Nearest neighbour</string>
+  <string id="16302">Bilinear</string>
   <string id="16303">Bicubic</string>
   <string id="16304">Lanczos2</string>
   <string id="16305">Lanczos3</string>
@@ -1509,24 +1526,29 @@ fyrir þessa myndskreytingu</string>
   <string id="16307">Bicubic (hugbúnaður)</string>
   <string id="16308">Lanczos (hugbúnaður)</string>
   <string id="16309">Sinc (hugbúnaður)</string>
-  <string id="16310">Tími</string>
-  <string id="16311">Tími/Rými</string>
+  <string id="16310">Temporal</string>
+  <string id="16311">Temporal/Spatial</string>
   <string id="16312">(VDPAU)Suðhreinsun</string>
   <string id="16313">(VDPAU)Skerpa</string>
-  <string id="16314">Andhverf samfletting</string>
-  <string id="16315">Lanczos3 fínstillt</string>
+  <string id="16314">Inverse Telecine</string>
+  <string id="16315">Lanczos3 optimized</string>
   <string id="16316">Sjálfvirkt</string>
-  <string id="16317">Tími (Hálfur)</string>
-  <string id="16318">Tími/Rými (Hálfur)</string>
+  <string id="16317">Temporal (Half)</string>
+  <string id="16318">Temporal/Spatial (Half)</string>
   <string id="16319">DXVA</string>
-
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 optimized</string>
+  <string id="16324">Software Blend</string>
+  
   <string id="16400">Eftirvinnsla</string>
 
   <string id="17500">Sýna biðtíma</string>
 
   <string id="19000">Skipta yfir á rás</string>
 
-  <string id="20000">CDDA afritunar mappa</string>
+  <string id="20000">Tónlistarmappa fyrir vistun</string>
   <string id="20001">Nota ytri DVD spilara</string>
   <string id="20002">Ytri DVD spilari</string>
   <string id="20003">Svindl mappa</string>
@@ -1710,7 +1732,7 @@ fyrir þessa myndskreytingu</string>
   <string id="20190">Sérsniðið</string>
   <string id="20191">Virkja kembi úttak</string>
   <string id="20192">Ná í viðbótar upplýsingar við uppfærslu</string>
-  <string id="20193">Sjálfgefin þjónustua fyrir hljómplötu upplýsingar</string>
+  <string id="20193">Sjálfgefin þjónusta fyrir hljómplötuupplýsingar</string>
   <string id="20194">Sjálfgefin þjónusta fyrir tónlistarupplýsingar</string>
   <string id="20195">Breyta skrapara</string>
   <string id="20196">Flytja út tónlistarsafn</string>
@@ -1729,6 +1751,9 @@ fyrir þessa myndskreytingu</string>
   <string id="20256">HTS Tvheadend biðlari</string>
   <string id="20257">VDR Streamdev biðlari</string>
   <string id="20258">MythTV biðlari</string>
+  <string id="20259">Network Filesystem (NFS)</string>
+  <string id="20260">Secure Shell (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
 
   <string id="20300">Mappa vefþjóns (HTTP)</string>
   <string id="20301">Mappa vefþjóns (HTTPS)</string>
@@ -1781,22 +1806,23 @@ fyrir þessa myndskreytingu</string>
   <string id="20355">Sæki upplýsingar um þætti í möppu</string>
   <string id="20356">Veldu sjónvarpsþáttaröð:</string>
   <string id="20357">Sláðu inn nafn á sjónvarpsþáttaröðinni</string>
-  <string id="20358">Sería %i</string>
+  <string id="20358">Þáttaröð %i</string>
   <string id="20359">Þáttur</string>
   <string id="20360">Þættir</string>
   <string id="20361">Sæki upplýsingar um þátt</string>
   <string id="20362">Fjarlægja þátt úr safni</string>
   <string id="20363">Fjarlægja sjónvarpsþátt úr safni</string>
-  <string id="20364">Sjónvarpsþáttaröð</string>
+  <string id="20364">Sjónvarpsþáttur</string>
   <string id="20365">Söguþráður þáttar</string>
-  <string id="20366">* Allar seríur</string>
+  <string id="20366">* Allar þáttaraðir</string>
   <string id="20367">Fela búið</string>
   <string id="20368">Framleiðslu kóði</string>
   <string id="20369">Fela söguþráð á því sem ekki er búið að horfa á</string>
   <string id="20370">* Falið til að spilla ekki söguþræði *</string>
-  <string id="20371">Velja smámynd fyrir seríu</string>
-  <string id="20372">Mynd seríu</string>
-  <string id="20373">Sería</string>
+  <string id="20371">Velja smámynd fyrir þáttaröð
+</string>
+  <string id="20372">Mynd þáttaraðar</string>
+  <string id="20373">Þáttaröð</string>
   <string id="20374">Sæki upplýsingar um myndefni</string>
   <string id="20375">Taka af innihald</string>
   <string id="20376">Upprunalegur titill</string>
@@ -1805,7 +1831,7 @@ fyrir þessa myndskreytingu</string>
   <string id="20379">Mappa inniheldur einn sjónvarpsþátt</string>
   <string id="20380">Undanskilja möppu frá leit</string>
   <string id="20381">Sérþættir</string>
-  <string id="20382">Ná sjálfkrafa í seríusmámyndir</string>
+  <string id="20382">Ná sjálfkrafa í þáttaraðarsmámynd</string>
   <string id="20383">Mappa inniheldur eina myndskrá</string>
   <string id="20384">Tengja við sjónvarpsþáttaröð</string>
   <string id="20385">Fjarlægja tengingu við sjónvarpsþáttaröð</string>
@@ -1836,15 +1862,16 @@ fyrir þessa myndskreytingu</string>
   <string id="20410">Sýnishorn</string>
   <string id="20411">Fletja</string>
   <string id="20412">Fletja út sjónvarpsþætti</string>
-  <string id="20413">Ná í aðdáenda grafík</string>
-  <string id="20414">Sýna aðdáenda grafík í tónlistar- og myndabandasafni</string>
+  <string id="20413">Ná í aðdáendamyndir</string>
+  <string id="20414">Sýna aðdáendamyndir í tónlistar- og myndbandasafni</string>
   <string id="20415">Leita að nýju efni</string>
   <string id="20416">Sýnt fyrst</string>
   <string id="20417">Handritshöfundur</string>
-  <string id="20418">Hreinsa skráar- og möppunöfn</string>
+  <string id="20418"/>
+  <string id="20419">Sýna lýsigögn í skráarsýn</string>
 
   <string id="20420">Aldrei</string>
-  <string id="20421">Bara ef ein sería</string>
+  <string id="20421">Bara ef ein þáttaröð</string>
   <string id="20422">Alltaf</string>
   <string id="20423">Er með sýnishorn</string>
   <string id="20424">Ósatt</string>
@@ -1857,8 +1884,8 @@ fyrir þessa myndskreytingu</string>
   <string id="20431">Skrifa yfir eldri skrár?</string>
   <string id="20432">Undanskilja slóð frá uppfærslu á safni</string>
   <string id="20433">Ná í smámyndir og myndbandaupplýsingar</string>
-  <string id="20434">Hópar</string>
-  <string id="20435">Setja táknmynd myndasafns</string>
+  <string id="20434">Sett</string>
+  <string id="20435">Velja smámynd fyrir kvikmyndasett</string>
   <string id="20436">Flytja út leikaramyndir?</string>
   <string id="20437">Velja aðdáendamyndir</string>
   <string id="20438">Staðbundnar aðdáendamyndir</string>
@@ -1879,6 +1906,9 @@ fyrir þessa myndskreytingu</string>
   <string id="20453">þættir</string>
   <string id="20454">Hlustandi</string>
   <string id="20455">Hlustendur</string>
+  <string id="20456">Velja aðdáendamynd fyrir kvikmyndasett</string>
+  <string id="20457">Kvikmyndasett</string>
+  <string id="20458">Hópa saman kvikmyndir í sett</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Sýna faldar skrár og möppur</string>
@@ -1899,8 +1929,9 @@ fyrir þessa myndskreytingu</string>
   <string id="21365">Fjarlægja samnýtingu</string>
   <string id="21366">Sérsniðin mappa fyrir þýðingartexta</string>
   <string id="21367">Kvikmynda og auka mappa fyrir þýðingartexta</string>
-
-  <string id="21369">Virkja mús</string>
+  <string id="21368">Hunsa ASS/SSA skjátexta leturgerð</string>
+  
+  <string id="21369">Virkja stuðning við mús og snertiskjá</string>
   <string id="21370">Leyfa leiðsagnarhljóð á meðan efni er spilað</string>
   <string id="21371">Smámynd</string>
   <string id="21372">Fastsetja svæði DVD spilara</string>
@@ -1985,6 +2016,15 @@ fyrir þessa myndskreytingu</string>
   <string id="21451">Internet tenging er nauðsynleg.</string>
   <string id="21452">Ná í meira...</string>
   <string id="21453">Rótarskráarkerfið</string>
+  <string id="21454">Skyndiminni fullt</string>
+  <string id="21455">Skyndiminni fylltist áður en tókst að ná í nauðsynlegt magn fyrir áframhaldandi spilun</string>
+  
+  <string id="21460">Staðsetning þýðingartexta</string>
+  <string id="21461">Fastur</string>
+  <string id="21462">Neðst á mynd</string>
+  <string id="21463">Fyrir neðan mynd</string>
+  <string id="21464">Efst á mynd</string>
+  <string id="21465">Fyrir ofan mynd</string>
 
   <string id="21800">Skráarnafn</string>
   <string id="21801">Skáarslóð</string>
@@ -2000,7 +2040,7 @@ fyrir þessa myndskreytingu</string>
   <string id="21821">Lýsing</string>
   <string id="21822">Nafn myndavélar</string>
   <string id="21823">Tegund myndavélar</string>
-  <string id="21824">EXIF athugasemd</string>
+  <string id="21824">EXIF upplýsingar</string>
   <string id="21825">Fastbúnaður</string>
   <string id="21826">Ljósop</string>
   <string id="21827">Linsustærð</string>
@@ -2151,12 +2191,12 @@ fyrir þessa myndskreytingu</string>
   <string id="24021">Gera viðbót óvirka</string>
   <string id="24022">Virkja viðbót</string>
   <string id="24023">Viðbót óvirk</string>
-  <string id="24027">Veðurþjónsusta</string>
+  <string id="24027">Veðurþjónusta</string>
   <string id="24028">Weather.com (sjálfgefið)</string>
-  <string id="24030">Ekki ert hægt að stilla þessa viðbót</string>
+  <string id="24030">Ekki er hægt að stilla þessa viðbót</string>
   <string id="24031">Villa við að hlaða inn stillingum</string>
-  <string id="24032">Öll söfn</string>
-  <string id="24033">Söfn</string>
+  <string id="24032">Allar viðbætur</string>
+  <string id="24033">Sækja viðbætur</string>
   <string id="24034">Leita að uppfærslum</string>
   <string id="24035">Þvinga endurnýjun</string>
   <string id="24036">Breytingaskrá</string>
@@ -2165,8 +2205,13 @@ fyrir þessa myndskreytingu</string>
   <string id="24039">Óvirkar viðbætur</string>
   <string id="24040">(Hreinsa núverandi stillingu)</string>
   <string id="24041">Setja inn frá zip skrá</string>
-  <string id="24042">Niðurhala %i%%</string>
+  <string id="24042">Niðurhaa %i%%</string>
   <string id="24043">Fáanlegar uppfærslur</string>
+  <string id="24044">Kröfur voru ekki uppfylltar</string>
+  <string id="24045">Viðbót er ekki rétt uppsett</string>
+  <string id="24046">%s er notað af eftirfarandi viðbótum</string>
+  <string id="24047">Ekki er hægt að taka þessa viðbót út</string>
+  <string id="24048">Niðurfæra útgáfu</string>
 
   <string id="24050">Tiltækar viðbætur</string>
   <string id="24051">Útgáfa:</string>
@@ -2183,7 +2228,7 @@ fyrir þessa myndskreytingu</string>
   <string id="24066">Hætta við að niðurhala viðbót?</string>
   <string id="24067">Er að niðurhala viðbótum</string>
   <string id="24068">Fann uppfærslu</string>
-  <string id="24069">Uppfærslur</string>
+  <string id="24069">Uppfæra</string>
 
   <string id="24070">Ekki tókst að hlaða inn viðbót.</string>
   <string id="24071">Óþekkt villa kom upp.</string>
@@ -2191,14 +2236,19 @@ fyrir þessa myndskreytingu</string>
   <string id="24073">Gat ekki tengst</string>
   <string id="24074">Þarfnast endurræsingar</string>
   <string id="24075">Gera óvirkt</string>
+  <string id="24076">Þarfnast viðbótar</string>
   <string id="24080">Reyna að tengjast aftur?</string>
   <string id="24089">Endurræsingar viðbóta</string>
   <string id="24090">Læsa viðbótarstjóra</string>
 
+  <string id="24094">(núna)</string>
+  <string id="24095">(á bannlista)</string>
   <string id="24096">Viðbót hefur verið merkt sem biluð í safni.</string>
   <string id="24097">Viltu slökkva á henni á þínu kerfi?</string>
   <string id="24098">Biluð</string>
-  <string id="24099">Viltu skipta yfir á þetta skinn?</string>
+  <string id="24099">Viltu skipta yfir á þetta útlit?</string>
+  <string id="24100">Til að nota þetta þarftu að hala niður viðbót:</string>
+  <string id="24101">Viltu hala niður þessari viðbót?</string>
   <string id="25000">Tilkynningar</string>
 
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
@@ -2227,12 +2277,12 @@ fyrir þessa myndskreytingu</string>
   <string id="33015">Spyrja um niðurhal áður en myndband er spilað</string>
   <string id="33016">Úrklippur</string>
   <string id="33017">Endurræstu viðbót til að gera virkt</string>
-  <string id="33018">Ã\9arklippur</string>
+  <string id="33018">Ã\8d kvöld</string>
   <string id="33019">Aðra nótt</string>
   <string id="33020">Staða</string>
   <string id="33021">Úrkoma</string>
   <string id="33022">Úrkoma</string>
-  <string id="33023">Rakur</string>
+  <string id="33023">Raki</string>
   <string id="33024">Skynjast sem</string>
   <string id="33025">Sést sem</string>
   <string id="33026">Frávík frá venjulegu</string>
@@ -2283,6 +2333,13 @@ fyrir þessa myndskreytingu</string>
   <string id="33082">Slóð á skriftu</string>
   <string id="33083">Virkja takka fyrir sérsniðna skriftu</string>
 
+  <string id="33100">Tókst ekki að ræsa</string>
+  <string id="33101">Vefþjónn</string>
+  <string id="33102">Atburðaþjónn</string>
+  <string id="33103">Fjartengdur samskiptaþjónn</string>
+  
+  <string id="33200">Uppgötvaði nýja tengingu</string>
+
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
@@ -2304,4 +2361,52 @@ fyrir þessa myndskreytingu</string>
   <string id="34110">7.1</string>
   <!-- 34112-34200 reserved for future use -->
 
+  <string id="34201">Finn ekki næsta hlut til að spila</string>
+  <string id="34202">Finn ekki fyrri hlut til að spila</string>
+  
+  <string id="34300">Gat ekki ræst zeroconf</string>
+  <string id="34301">Er Apple Bonjour þjónusta uppsett? Athugaðu atburðaskrá fyrir meiri upplýsingar.</string>
+  
+  <string id="34400">Skjábirting</string>
+  <string id="34401">Gat ekki frumstillt skjá síur/kvarða, fer til baka í tvílínulega kvörðun</string>
+  <string id="34402">Gat ekki frumstillt hljóðkerfi</string>
+  <string id="34403">Athugaðu hljóðstillingar</string>
+
+  <string id="35000">Tæki</string>
+
+  <string id="35001">Almennt HID tæki</string>
+  <string id="35002">Almennt netkort</string>
+  <string id="35003">Almennur diskur</string>
+  <string id="35004">Engar stillingar eru tiltækar
+fyrir þetta tæki.</string>
+  <string id="35005">Nýtt tæki skilgreint</string>
+  <string id="35006">Tæki fjarlægt</string>
+  <string id="35007">Lyklavörpun sem á að nota fyrir þetta tæki</string>
+  <string id="35008">Lyklavörpun virk</string>
+
+  <string id="35500">Staðsetning</string>
+  <string id="35501">Klasi</string>
+  <string id="35502">Nafn</string>
+  <string id="35503">Söluaðili</string>
+  <string id="35504">Auðkenni vöru</string>
+  
+  <string id="36000">Pulse-Eight CEC tengispjald</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Skipta yfir í hliðar lyklaborð</string>
+  <string id="36003">Skipta yfir í hliðar fjarstýringu</string>
+  <string id="36004">Ýttu á "user" hnapp</string>
+  <string id="36005">Virkja að skipta á milli hliðarskipana</string>
+  <string id="36006">Gat ekki opnað tengispjald</string>
+  <string id="36007">Kveikja á sjónvarpinu þegar XBMC er ræst</string>
+  <string id="36008">Slökkva á tækjum þegar slökkt er á XBMC</string>
+  <string id="36009">Setja tæki í biðstöðu þegar skjávari er virkur</string>
+  <string id="36010"/>
+  <string id="36011">Fann ekki CEC gátt. Settu það upp handvirkt.</string>
+  <string id="36012">Fann ekki CEC tengispjald.</string>
+  <string id="36013">Þessi útgáfa af libcec er ekki studd. %d er hærri en útgáfan sem XBMC styður (%d)</string>
+  <string id="36014">Setja tölvuna í biðstöðu þegar slökkt er á sjónvarpinu</string>
+  <string id="36015">HDMI gátt</string>
+  <string id="36016">Tengdur</string> <!-- max. 13 characters -->
+  <string id="36017">Fann tengispjald, en libcec er ekki tiltækt</string>
+  <string id="36018">Nota tungumál sjónvarps</string>
 </strings>
index d11c54f..7c1c4e3 100644 (file)
@@ -1,10 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--Language file translated with Team XBMC Translator-->
-<!--Translator: succo-->
-<!--Email: succo69@libero.it-->
-<!--Date of translation: 11/07/2010-->
-<!--$Revision$-->
-<!--Based on english strings version 35193-->
+<!--Translator: Succo, updated by Gulp and Liltee89-->
+<!--Email: succo69@libero.it, http://forum.xbmc.org/member.php?u=42290-->
+<!--Based on English 5c8c939de7422db2427f37d5c26036138a9fe04e (03.02.2012)-->
 <strings>
   <string id="0">Programmi</string>
   <string id="1">Immagini</string>
@@ -16,6 +13,7 @@
   <string id="7">File</string>
   <string id="8">Meteo</string>
   <string id="9">xbmc media center</string>
+
   <string id="11">Lunedì</string>
   <string id="12">Martedì</string>
   <string id="13">Mercoledì</string>
@@ -23,6 +21,7 @@
   <string id="15">Venerdì</string>
   <string id="16">Sabato</string>
   <string id="17">Domenica</string>
+
   <string id="21">Gennaio</string>
   <string id="22">Febbraio</string>
   <string id="23">Marzo</string>
@@ -35,6 +34,7 @@
   <string id="30">Ottobre</string>
   <string id="31">Novembre</string>
   <string id="32">Dicembre</string>
+
   <string id="41">Lun</string>
   <string id="42">Mar</string>
   <string id="43">Mer</string>
@@ -42,6 +42,7 @@
   <string id="45">Ven</string>
   <string id="46">Sab</string>
   <string id="47">Dom</string>
+
   <string id="51">Gen</string>
   <string id="52">Feb</string>
   <string id="53">Mar</string>
   <string id="60">Ott</string>
   <string id="61">Nov</string>
   <string id="62">Dic</string>
+
+  <string id="71">N</string>
+  <string id="72">NNE</string>
+  <string id="73">NE</string>
+  <string id="74">ENE</string>
+  <string id="75">E</string>
+  <string id="76">ESE</string>
+  <string id="77">SE</string>
+  <string id="78">SSE</string>
+  <string id="79">S</string>
   <string id="80">SSO</string>
   <string id="81">SO</string>
   <string id="82">OSO</string>
@@ -61,6 +72,8 @@
   <string id="84">ONO</string>
   <string id="85">NO</string>
   <string id="86">NNO</string>
+  <string id="87">VAR</string>
+
   <string id="98">Vedi: Auto</string>
   <string id="99">Vedi: Auto grande</string>
   <string id="100">Vedi: Icone</string>
@@ -71,7 +84,7 @@
   <string id="105">Ordina per Dim.</string>
   <string id="106">No</string>
   <string id="107">Si</string>
-  <string id="108">Slideshow</string>
+  <string id="108">Presentazione</string>
   <string id="109">Crea le icone</string>
   <string id="110">Crea le icone</string>
   <string id="111">Collegamenti</string>
   <string id="147">Statico</string>
   <string id="148">DHCP</string>
   <string id="149">MAC address</string>
-  <string id="150">IP</string>
+  <string id="150">Indirizzo IP</string>
   <string id="151">Connessione:</string>
   <string id="152">Half duplex</string>
   <string id="153">Full duplex</string>
   <string id="164">Senza disco</string>
   <string id="165">Disco presente</string>
   <string id="166">Skin</string>
-  <string id="167">
-  </string>
+
   <string id="169">Risoluzione</string>
-  <string id="170">Regola la frequenza di aggiornamento </string>
-  <string id="171">
-  </string>
+  <string id="170">Regola la frequenza di aggiornamento</string>
+
   <string id="172">Data di uscita:</string>
   <string id="173">Mostra video 4:3 come</string>
-  <string id="175">Atteggiamenti </string>
+
+  <string id="175">Atteggiamenti</string>
   <string id="176">Stili</string>
+
   <string id="179">Canzone</string>
   <string id="180">Durata</string>
   <string id="181">Seleziona l'album</string>
   <string id="197">Richiesta %s informazioni</string>
   <string id="198">Caricamento dettagli del film</string>
   <string id="199">Interfaccia web</string>
+
   <string id="202">Tema</string>
   <string id="203">Sintesi</string>
+
   <string id="205">Voti</string>
   <string id="206">Attori</string>
   <string id="207">Trama</string>
   <string id="221">Rete non connessa</string>
   <string id="222">Annulla</string>
   <string id="224">Velocità</string>
+  <string id="225">Spostamento Verticale</string>
   <string id="226">Immagine di prova</string>
   <string id="227">Cerca i nomi delle tracce audio su freedb.org</string>
   <string id="228">Mescola playlist all'avvio</string>
   <string id="243">Frequenza di Refresh</string>
   <string id="244">Schermo intero</string>
   <string id="245">Dimensione: (%i,%i)-&gt;(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixel: %2.2f:1)</string>
+
   <string id="247">Scripts</string>
   <string id="248">Lingua</string>
   <string id="249">Musica</string>
   <string id="281">Ricontrolla i file .xml</string>
   <string id="282">Trovato/i %i elemento/i</string>
   <string id="283">Risultati della ricerca</string>
-  <string id="284">Ricerca fallita</string>
-  <string id="286">
-  </string>
+  <string id="284">Nessun risultato</string>
+
   <string id="287">Sottotitoli</string>
   <string id="288">Carattere</string>
   <string id="289">- Dimensione</string>
-  <string id="290">Dynamic range compression</string>
+  <string id="290">Ampiezza compressione dinamica</string>
   <string id="291">Video</string>
   <string id="292">Audio</string>
   <string id="293">Esplora sottotitoli</string>
   <string id="294">Crea segnalibro</string>
   <string id="296">Cancella segnalibri</string>
-  <string id="297">Offset audio</string>
+  <string id="297">Sfasamento audio</string>
   <string id="298">Segnalibri</string>
   <string id="299">- ricevitore compatibile AAC</string>
   <string id="300">- ricevitore compatibile MP1</string>
   <string id="304">Lingua</string>
   <string id="305">Attivo</string>
   <string id="306">Non-interlacciato</string>
-  <string id="307">
-  </string>
-  <string id="308">
-  </string>
-  <string id="309">
-  </string>
-  <string id="310">
-  </string>
-  <string id="311">
-  </string>
+
   <string id="312">(0=auto)</string>
   <string id="313">Riorganizza archivio</string>
   <string id="314">Preparazione...</string>
   <string id="382">Sparsi</string>
   <string id="383">Vento</string>
   <string id="384">Forte</string>
-  <string id="385">Bello</string>
-  <string id="386">Chiaro</string>
+  <string id="385">Sereno</string>
+  <string id="386">Limpido</string>
   <string id="387">Nuvoloso</string>
   <string id="388">Anticipati</string>
   <string id="389">Rovescio</string>
   <string id="390">Turbini</string>
-  <string id="391">Bassa</string>
+  <string id="391">Minima</string>
   <string id="392">Media</string>
-  <string id="393">Alta</string>
+  <string id="393">Massima</string>
   <string id="394">Nebbia</string>
-  <string id="395">Coperto</string>
+  <string id="395">Foschia</string>
   <string id="396">Seleziona località</string>
   <string id="397">Aggiornamento</string>
   <string id="398">Misura di temperatura</string>
   <string id="404">Vento</string>
   <string id="405">P. di rugiada</string>
   <string id="406">Umidità</string>
-  <string id="409">Predefinitio</string>
+
+  <string id="409">Predefinito</string>
   <string id="410">Accesso a servizio meteo</string>
   <string id="411">Aggiorno le previsioni meteo per:</string>
   <string id="412">Impossibile aggiornare le informazioni meteo</string>
   <string id="418">Basso</string>
   <string id="419">Alto</string>
   <string id="420">HDMI</string>
+
   <string id="422">Elimina le info sull'album</string>
   <string id="423">Elimina info CD</string>
   <string id="424">Seleziona</string>
   <string id="432">Eliminare il film dal archivio</string>
   <string id="433">Sicuro di voler cancellare '%s'?</string>
   <string id="434">Da %s a %i %s</string>
+
   <string id="437">Disco rimuovibile</string>
   <string id="438">Apertura file</string>
   <string id="439">Cache</string>
   <string id="480">Aspetto</string>
   <string id="481">Opzioni audio</string>
   <string id="482">Informazioni su XBMC</string>
+
   <string id="485">Elimina album</string>
   <string id="486">Ripeti</string>
   <string id="487">Ripeti una volta</string>
   <string id="496">Calibrazione</string>
   <string id="497">Mostra le estensioni dei file</string>
   <string id="498">Ordina per: Tipo</string>
-  <string id="499">Impossibile collegarsi a servizio di ricerca online</string>
+  <string id="499">Impossibile collegarsi al servizio di ricerca online</string>
   <string id="500">Impossibile scaricare le informazioni sull'album</string>
   <string id="501">Ricerca nome album in corso...</string>
   <string id="502">Aperto</string>
   <string id="513">Schermata Home</string>
   <string id="514">Impostazioni manuali</string>
   <string id="515">Genere</string>
+
   <string id="517">Album riprodotti di recente</string>
   <string id="518">Avvia</string>
   <string id="519">Avvia in...</string>
-  <string id="520">
-  </string>
-  <string id="521">Compilations</string>
+
+  <string id="521">Compilation</string>
   <string id="522">Rimuovi sorgente</string>
   <string id="523">Cambia media</string>
   <string id="524">Seleziona playlist</string>
   <string id="546">Dispositivo d'uscita passtrough</string>
   <string id="547">Nessuna biografia per questo artista</string>
   <string id="548">Converti l'audio multicanale in stereo</string>
+
   <string id="550">Ordina per: %s</string>
   <string id="551">Nome</string>
   <string id="552">Data</string>
   <string id="573">Percorso</string>
   <string id="574">Nazione</string>
   <string id="575">In corso</string>
+  <string id="576">Numero di riproduzioni</string>
+
   <string id="580">Direzione ordinamento</string>
   <string id="581">Metodo di ordinamento</string>
   <string id="582">Modalità di visualizzazione</string>
   <string id="595">Ripeti: Inattivo</string>
   <string id="596">Ripeti: Uno</string>
   <string id="597">Ripeti: Tutto</string>
+
   <string id="600">Rip CD audio</string>
   <string id="601">Medio</string>
   <string id="602">Standard</string>
   <string id="603">Estremo</string>
   <string id="604">Bit rate costante</string>
   <string id="605">Rip in corso...</string>
+
   <string id="607">A:</string>
   <string id="608">Impossibile rip del CD o della traccia</string>
   <string id="609">Il percorso CDDARip non è impostato</string>
   <string id="611">Inserire numero</string>
   <string id="612">Bit/Campionamento</string>
   <string id="613">Frequenza Campionamento</string>
+
   <string id="620">CD Audio</string>
   <string id="621">Codificatore</string>
   <string id="622">Qualità</string>
   <string id="641">Livello PreAmp - file "Replay gained"</string>
   <string id="642">Livello PreAmp - file "non Replay gained"</string>
   <string id="643">Evita clipping nei file "Replay gained"</string>
-  <string id="644">Taglia barre nere</string>
-  <string id="645">Devo scomprimere un file grande. Continuare?</string>
+  <string id="644">Taglia bande nere</string>
+  <string id="645">Devo scompattare un file grande. Continuare?</string>
   <string id="646">Elimina dall'archivio</string>
   <string id="647">Esporta l'archivio video</string>
   <string id="648">Importa l'archivio video</string>
   <string id="657">Cerca cartella</string>
   <string id="658">Informazioni canzone</string>
   <string id="659">Adattamento non lineare</string>
+
   <string id="660">Amplificazione volume</string>
   <string id="661">Selez. cartella esportazione</string>
   <string id="662">Questo file non è più disponibile.</string>
   <string id="663">Vuoi rimuoverlo dall'archivio?</string>
   <string id="664">Cerca Script</string>
   <string id="665">Livello Compressione</string>
+
   <string id="700">Pulisci l'archivio</string>
   <string id="701">Eliminazione vecchie canzoni dall'archivio</string>
   <string id="702">Questo percorso è già stato esaminato in precedenza.</string>
   <string id="705">Rete</string>
   <string id="706">- Server</string>
+
   <string id="708">Usa un server proxy HTTP per accedere a internet</string>
+
   <string id="711">Internet Protocol (IP)</string>
   <string id="712">Porta specificata non valida. Inserire un valore compreso tra 1 and 65535.</string>
   <string id="713">HTTP proxy</string>
+
   <string id="715">- Assegnazione</string>
   <string id="716">Automatico (DHCP)</string>
   <string id="717">Manuale (Static)</string>
-  <string id="718">
-  </string>
+
   <string id="719">- Indirizzo IP</string>
   <string id="720">- Netmask</string>
   <string id="721">- Default gateway</string>
   <string id="726">Modifiche non salvate. Continuare senza salvare?</string>
   <string id="727">Web server</string>
   <string id="728">FTP server</string>
+
   <string id="730">- Porta</string>
+
   <string id="732">Salva e applica</string>
   <string id="733">- Password</string>
   <string id="734">Nessuna password</string>
   <string id="749">Rifletti immagine</string>
   <string id="750">Sei sicuro?</string>
   <string id="751">Rimuovo sorgente</string>
+
   <string id="754">Aggiungi collegamento</string>
   <string id="755">Modifica percorso</string>
   <string id="756">Modifica nome programma</string>
   <string id="757">Modifica profondità percorso</string>
+
   <string id="759">Visualizza: Lista grande</string>
   <string id="760">Giallo</string>
   <string id="761">Bianco</string>
   <string id="765">Azzurro</string>
   <string id="766">Grigio chiaro</string>
   <string id="767">Grigio</string>
+  <!-- strings 768 and 769 reserved for more subtitle colors -->
+
   <string id="770">Errore %i: condivisione non disponibile</string>
-  <string id="771">
-  </string>
+
   <string id="772">Uscita audio</string>
   <string id="773">Cercando</string>
   <string id="774">Cartella per salvaschermo fotografico</string>
   <string id="787">Interfaccia disabilitata</string>
   <string id="788">Disabilitazione dell'interfaccia di rete effettuata con successo.</string>
   <string id="789">Nome della rete wireless (ESSID)</string>
+
   <string id="791">Permetti ai programmi installati di controllare XBMC</string>
   <string id="792">Porta</string>
   <string id="793">Range porte</string>
   <string id="794">Permetti a programmi esterni di controllare XBMC</string>
   <string id="795">Ritardo ripetizione iniziale (ms)</string>
   <string id="796">Ritardo ripetizione continuo (ms)</string>
-  <string id="797">Numero massimo di clients</string>
+  <string id="797">Numero massimo di client</string>
   <string id="798">Accesso a Internet</string>
+
   <string id="850">Inserito un numero di porta non valido</string>
   <string id="851">Il numero di porta deve essere compreso tra 1-65535</string>
   <string id="852">Il numero di porta deve essere compreso tra 1024-65535</string>
+
+  <string id="998">Aggiungi Musica...</string>
+  <string id="999">Aggiungi Video...</string>
   <string id="1000">- Anteprima</string>
   <string id="1001">Impossibile connettersi</string>
   <string id="1002">XBMC non è riuscito a connettersi all'indirizzo di rete.</string>
   <string id="1003">La possibile causa potrebbe essere la rete scollegata.</string>
   <string id="1004">Vuoi aggiungerlo comunque?</string>
+
   <string id="1006">Indirizzo IP</string>
   <string id="1007">Aggiungi indirizzo di rete</string>
   <string id="1008">Protocollo</string>
   <string id="1031">Cerca cartella immagini</string>
   <string id="1032">Aggiungi locazione di rete...</string>
   <string id="1033">Cerca file</string>
-  <string id="1034">Sottomenu</string>
-  <string id="1035">Attiva pulsanti sottomenu</string>
+  <string id="1034">Sottomenù</string>
+  <string id="1035">Attiva pulsanti sottomenù</string>
   <string id="1036">Preferiti</string>
   <string id="1037">Addon Video</string>
   <string id="1038">Addon Musica</string>
   <string id="1049">Impostazioni script</string>
   <string id="1050">Singoli</string>
   <string id="1051">Inserisci l'indirizzo web</string>
-  <string id="1200">SMB client</string>
-  <string id="1202">Workgroup</string>
-  <string id="1203">Default username</string>
-  <string id="1204">Default password</string>
-  <string id="1207">WINS server</string>
+
+  <string id="1200">client SMB</string>
+  <string id="1202">Gruppo di lavoro</string>
+  <string id="1203">Nome utente di default</string>
+  <string id="1204">Password di default</string>
+
+  <string id="1207">server WINS</string>
   <string id="1208">Monta condivisioni SMB</string>
+
   <string id="1210">Rimuovi</string>
   <string id="1211">Musica</string>
   <string id="1212">Video</string>
   <string id="1213">Immagini</string>
-  <string id="1214">File</string>
-  <string id="1215">Musica e video </string>
+  <string id="1214">Files</string>
+  <string id="1215">Musica e video</string>
   <string id="1216">Musica e immagini</string>
   <string id="1217">Musica e file</string>
   <string id="1218">Video e immagini</string>
   <string id="1233">Programmi, video e musica</string>
   <string id="1234">Programmi, immagini e musica</string>
   <string id="1235">Programmi, immagini e video</string>
-  <string id="1245">
-  </string>
-  <string id="1246">
-  </string>
-  <string id="1247">
-  </string>
+
   <string id="1250">Autorilevamento</string>
   <string id="1251">Autorilevamento sistema</string>
   <string id="1252">Nick name</string>
-  <string id="1254">Richiedi di connetersi</string>
+
+  <string id="1254">Richiedi di connettersi</string>
   <string id="1255">Invia user e password FTP</string>
   <string id="1256">Intervallo ping</string>
   <string id="1257">Vuoi connetterti al sistema rilevato?</string>
+
   <string id="1260">Annuncia questi servizi ad altri sistemi via Zeroconf</string>
-  <string id="1300">Dispositipo audio personalizzato</string>
+  <string id="1270">Permetti ad XBMC di ricevere contenuti da AirPlay</string>
+  <string id="1271">Nome periferica</string>
+  <string id="1272">- Proteggi con password</string>
+
+  <string id="1300">Dispositivo audio personalizzato</string>
   <string id="1301">Dispositivo passthrough personalizzato</string>
+
   <string id="1396">Mutevole</string>
   <string id="1397">e</string>
   <string id="1398">Gelata</string>
   <string id="1410">Calmo</string>
   <string id="1411">con</string>
   <string id="1412">ventilato</string>
-  <string id="1413">pioggerella</string>
+  <string id="1413">pioggia leggera</string>
   <string id="1414">Temporale</string>
   <string id="1415">Acquerugiola</string>
   <string id="1416">Nebbie</string>
   <string id="1421">Molto Alto</string>
   <string id="1422">Ventoso</string>
   <string id="1423">Nebbia</string>
+
+  <!-- strings through to 1450 reserved for weather translation -->
+
   <string id="1450">Metti lo schermo in risparmio energetico quando inattivo</string>
+  <!-- strings through to 1470 reserved for power-saving -->
+
   <string id="2050">Durata:</string>
+
   <string id="2100">Esecuzione script non riuscita! : %s</string>
   <string id="2101">Necessaria una versione più recente - Controlla il log</string>
-  <string id="2102">
-  </string>
-  <string id="2103">
-  </string>
+
   <string id="4501">Abilita LCD/VFD</string>
+
   <string id="10000">Home</string>
   <string id="10001">Programmi</string>
   <string id="10002">Immagini</string>
   <string id="10019">Impostazioni - Aspetto</string>
   <string id="10020">Script</string>
   <string id="10021">Browser Web</string>
+
   <string id="10028">Video/Playlist</string>
   <string id="10034">Impostazioni - Profili</string>
+
   <string id="10100">Casella di dialogo si/no</string>
-  <string id="10101">Progressione</string>
+  <string id="10101">Casella di Progresso</string>
+
   <string id="10210">Cerco i sottotitoli...</string>
   <string id="10211">Ricerca o memorizzazione sottotitoli...</string>
   <string id="10212">terminando</string>
   <string id="10213">buffering</string>
   <string id="10214">Apertura stream</string>
+
   <string id="10500">Musica/Playlist</string>
   <string id="10501">Musica/File</string>
   <string id="10502">Musica/Archivio</string>
   <string id="10509">Gioco online</string>
   <string id="10510">Estensioni</string>
   <string id="10511">Info sistema</string>
+
   <string id="10516">Musica - Archivio</string>
   <string id="10517">Musica - In Riproduzione</string>
+
   <string id="10522">Video - In Riproduzione</string>
   <string id="10523">Info album</string>
   <string id="10524">Info film</string>
+
   <string id="12000">Casella di selezione</string>
   <string id="12001">Musica/Info</string>
   <string id="12002">Dialog OK</string>
   <string id="12004">Script/Info</string>
   <string id="12005">Video a schermo intero</string>
   <string id="12006">Effetti grafici</string>
+
   <string id="12008">Casella di unisci</string>
   <string id="12009">Ricostruzione indice...</string>
   <string id="12010">Ritorna in musica</string>
   <string id="12011">Ritorna in video</string>
-  <string id="12012">
-  </string>
-  <string id="12013">
-  </string>
-  <string id="12014">
-  </string>
-  <string id="12015">
-  </string>
-  <string id="12016">
-  </string>
-  <string id="12017">
-  </string>
-  <string id="12018">
-  </string>
-  <string id="12019">
-  </string>
-  <string id="12020">
-  </string>
+
   <string id="12021">Parti dall'inizio</string>
   <string id="12022">Riprendi da %s</string>
-  <string id="12023">
-  </string>
+
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12368">Inserire un master code valido</string>
   <string id="12373">Impostazioni &amp; file</string>
   <string id="12376">Imposta come default per tutti i filmati</string>
-  <string id="12377">Questo resetterà i valori salvati in precendeza</string>
+  <string id="12377">Questo resetterà i valori salvati in precedenza</string>
   <string id="12378">Tempo di visualizzazione di ogni immagine</string>
   <string id="12379">Usa gli effetti pan e zoom</string>
-  <string id="12380">
-  </string>
-  <string id="12381">
-  </string>
-  <string id="12382">
-  </string>
+
   <string id="12383">Orario in 12 ore</string>
   <string id="12384">Orario in 24 ore</string>
   <string id="12385">Giorno/Mese</string>
   <string id="12386">Mese/Giorno</string>
+
   <string id="12390">Tempo di vita del sistema</string>
   <string id="12391">Minuti</string>
   <string id="12392">Ore</string>
   <string id="12393">Giorni</string>
   <string id="12394">Tempo totale d'accensione</string>
+  <string id="12395">Livello Batteria</string>
+
   <string id="12600">Meteo</string>
+
   <string id="12900">Salvaschermo</string>
   <string id="12901">OSD a schermo intero</string>
+
   <string id="13000">Sistema</string>
   <string id="13001">Autospegnimento hard disk immediato</string>
   <string id="13002">Solo video</string>
   <string id="13003">- Ritardo</string>
   <string id="13004">- Durata minima del file</string>
   <string id="13005">Spegni</string>
-  <string id="13006">
-  </string>
-  <string id="13007">
-  </string>
+
   <string id="13008">Funzionalità spegnimento</string>
   <string id="13009">Chiudi</string>
   <string id="13010">Iberna</string>
   <string id="13014">Riduci ad icona</string>
   <string id="13015">Comportamento tasto power</string>
   <string id="13016">Spegni Sistema</string>
+
   <string id="13020">C'è un'altra sessione attiva, forse via SSH?</string>
   <string id="13021">Hard disk rimuovibile montato</string>
   <string id="13022">Rimozione insicura</string>
   <string id="13023">Rimozione periferica effettuata</string>
   <string id="13024">Joystick inserito</string>
   <string id="13025">Joystick disinserito</string>
+
   <string id="13050">Batteria scarica</string>
+
   <string id="13100">Filtro sfarfallio</string>
   <string id="13101">Fai scegliere al driver (riavvio necessario)</string>
+
   <string id="13105">Vertical blank sync</string>
   <string id="13106">Disattivato</string>
   <string id="13107">Attivo durante la riproduzione video</string>
   <string id="13109">Prova e applica risoluzione</string>
   <string id="13110">Salva risoluzione?</string>
   <string id="13111">Vuoi mantenere questa risoluzione?</string>
+
   <string id="13112">Ridimensionamento ad alta qualità</string>
   <string id="13113">Disabilitato</string>
   <string id="13114">Attivo per Contenuto SD</string>
   <string id="13115">Sempre attivo</string>
+
   <string id="13116">Modalità di ridimensionamento</string>
   <string id="13117">Bicubico</string>
   <string id="13118">Lanczos</string>
   <string id="13120">VDPAU</string>
   <string id="13121">Livello VDPAU HQ Upscaling</string>
   <string id="13122">Livello di conversione colore VDPAU Studio</string>
+
   <string id="13130">Svuota gli altri schermi</string>
   <string id="13131">Disabilitato</string>
   <string id="13132">Schermi vuoti</string>
+
   <string id="13140">Rilevata connessione attiva!</string>
   <string id="13141">Se continui, potresti non essere in grado di controllare XBMC.</string>
   <string id="13142">Sei sicuro di voler fermare l'Event server?</string>
+
   <string id="13144">Modifica modalità Apple Remote?</string>
   <string id="13145">Se stai usando un Apple Remote per controllare</string>
   <string id="13146">XBMC, cambiare quest'impostazione potrebbe impedirti</string>
   <string id="13147">di continuare a controllarlo. Vuoi continuare?</string>
-  <string id="13150">
-  </string>
-  <string id="13151">
-  </string>
-  <string id="13152">
-  </string>
-  <string id="13153">
-  </string>
-  <string id="13154">
-  </string>
-  <string id="13155">
-  </string>
-  <string id="13156">
-  </string>
-  <string id="13157">
-  </string>
-  <string id="13158">
-  </string>
+
   <string id="13159">Maschera subnet:</string>
   <string id="13160">Gateway:</string>
   <string id="13161">DNS Primario</string>
   <string id="13162">Inizializzazione fallita</string>
-  <string id="13163">
-  </string>
-  <string id="13164">
-  </string>
-  <string id="13165">
-  </string>
-  <string id="13166">
-  </string>
-  <string id="13167">
-  </string>
-  <string id="13168">
-  </string>
-  <string id="13169">
-  </string>
+
   <string id="13170">Mai</string>
   <string id="13171">Immediatamente</string>
   <string id="13172">Dopo %i secondi</string>
   <string id="13173">Data installazione hard disk:</string>
-  <string id="13174">Conteggio spegnimenti HDD:</string>
+  <string id="13174">Conteggio spegnimento HDD:</string>
+
   <string id="13200">Profili</string>
   <string id="13201">Cancella profilo '%i'?</string>
+
   <string id="13204">Ultimo profilo caricato:</string>
   <string id="13205">Sconosciuto</string>
   <string id="13206">Sovrascrivi</string>
+
   <string id="13208">Allarme sveglia</string>
-  <string id="13209">Intervallo allarme sveglia (in minutes)</string>
+  <string id="13209">Intervallo allarme sveglia (in minuti)</string>
   <string id="13210">Partito, allarme tra %im</string>
   <string id="13211">Allarme!</string>
   <string id="13212">Annullato con ancora %im%is</string>
+  <string id="13213">%2.0fm</string> <!--minutes (left from countdown)-->
+  <string id="13214">%2.0fs</string> <!--seconds (left from countdown)-->
+
   <string id="13249">Cerca sottotili nei file RAR</string>
-  <string id="13250">Mostra sottotili...</string>
+  <string id="13250">Mostra sottotitoli...</string>
   <string id="13251">Sposta l'elemento</string>
   <string id="13252">Sposta l'elemento qui</string>
   <string id="13253">Annulla spostamento</string>
+
   <string id="13270">Hardware:</string>
   <string id="13271">Utilizzo CPU:</string>
+
   <string id="13274">Connesso, ma non c'è nessun DNS disponibile.</string>
   <string id="13275">Hard Disk</string>
   <string id="13276">DVD-ROM</string>
-  <string id="13277">Disp.di memorizz.</string>
+  <string id="13277">Disp. di memoriz.</string>
   <string id="13278">Default</string>
   <string id="13279">Rete</string>
   <string id="13280">Video</string>
   <string id="13281">Hardware</string>
+
   <string id="13283">Sistema operativo:</string>
   <string id="13284">Velocità CPU:</string>
+
   <string id="13286">Codificatore video:</string>
   <string id="13287">Risoluzione schermo:</string>
+
   <string id="13292">Cavo A/V:</string>
+
   <string id="13294">Regione DVD:</string>
   <string id="13295">Internet:</string>
   <string id="13296">Connessa</string>
   <string id="13297">Non connessa. Controlla configurazione rete!</string>
+
   <string id="13299">Temperatura da raggiungere</string>
   <string id="13300">Velocità ventola</string>
   <string id="13301">Controllo automatico temperatura</string>
   <string id="13302">Controllo velocità ventola</string>
-  <string id="13303">- Font</string>
+  <string id="13303">- Carattere</string>
   <string id="13304">Abilita inversione in stringhe bidirezionali</string>
   <string id="13305">Mostra i feed RSS</string>
   <string id="13306">Mostra gli elementi delle cartelle superiori</string>
   <string id="13309">invece di XBMC?</string>
   <string id="13310">Effetto zoom</string>
   <string id="13311">Effetto spostamento</string>
-  <string id="13312">Riduzione barra nera</string>
+  <string id="13312">Riduzione banda nera</string>
   <string id="13313">Riavvia</string>
   <string id="13314">Dissolvenza tra le tracce</string>
   <string id="13315">Ricrea le icone</string>
   <string id="13316">Icone ricorsive</string>
-  <string id="13317">Vedi lo slideshow</string>
-  <string id="13318">Slideshow ricorsivo</string>
+  <string id="13317">Vedi la Presentazione</string>
+  <string id="13318">Presentazione ricorsiva</string>
   <string id="13319">Ordine sparso</string>
   <string id="13320">Stereo</string>
   <string id="13321">Solo sinistra</string>
   <string id="13334">Edit label</string>
   <string id="13335">Imposta predefinito</string>
   <string id="13336">Rimuovi pulsante</string>
+
   <string id="13340">Lascia com'è</string>
   <string id="13341">Verde</string>
   <string id="13342">Arancione</string>
   <string id="13359">Setta icona artista</string>
   <string id="13360">Crea le icone automaticamente</string>
   <string id="13361">Attiva voce</string>
+
   <string id="13375">Attiva dispositivo</string>
   <string id="13376">Volume</string>
   <string id="13377">Modalità di visione predefinita</string>
   <string id="13396">Impostazioni audio e sottotitoli</string>
   <string id="13397">Attiva sottotitoli</string>
   <string id="13398">Scorciatoie</string>
-  <string id="13399">Ignora l'articolo ("il","lo", etc.) davanti al nome nell'ordinamento </string>
+  <string id="13399">Ignora l'articolo ("il","lo", etc.) davanti al nome nell'ordinamento</string>
   <string id="13400">Dissolvenza tra le tracce dello steso album</string>
   <string id="13401">Mostra per %s</string>
   <string id="13402">Mostra posizione traccia</string>
   <string id="13409">Top 250</string>
   <string id="13410">Sintonizzati su Last.FM</string>
   <string id="13411">Minima vel. ventola</string>
+  <string id="13412">Riproduci da qui</string>
   <string id="13413">Download in corso</string>
   <string id="13414">Includi gli artisti presenti solo nelle compilation</string>
   <string id="13415">Metodo di render</string>
   <string id="13419">Software</string>
   <string id="13420">Rimozione sicura</string>
   <string id="13421">VDPAU</string>
-  <string id="13422">Avvia lo slideshow da qui</string>
+  <string id="13422">Avvia la presentazione da qui</string>
   <string id="13423">Ricorda per questo percorso</string>
   <string id="13424">Usa oggetti pixel buffer</string>
   <string id="13425">Abilita accelerazione hardware (VDPAU)</string>
   <string id="13429">Abilita accelerazione hardware (VDADecoder)</string>
   <string id="13430">Abilita accelerazione hardware (OpenMax)</string>
   <string id="13431">Pixel Shaders</string>
+  <string id="13432">Abilita accelerazione hardware (VideoToolbox)</string>
+
   <string id="13500">Metodo di sincronizzazione A/V</string>
   <string id="13501">Clock audio</string>
   <string id="13502">Clock video (Lascia/Aggiungi audio)</string>
   <string id="13508">Alta</string>
   <string id="13509">Molto alta</string>
   <string id="13510">Sincronizza il suono all'immagine</string>
+
   <string id="13550">Pausa durante il cambio di frequenza</string>
   <string id="13551">Spento</string>
   <string id="13552">%.1f Secondo</string>
   <string id="13553">%.1f Secondi</string>
+
   <string id="13600">Telecomando Apple</string>
+
   <string id="13602">Permetti avvio di XBMC da telecomando</string>
   <string id="13603">Ritardo nella sequenza</string>
+
   <string id="13610">Disabilitato</string>
   <string id="13611">Standard</string>
   <string id="13612">Telecomando Universale</string>
   <string id="13613">Telecomando Multi (Harmony)</string>
+
   <string id="13620">Errore Apple Remote</string>
   <string id="13621">Il supporto per Apple Remote non è stato attivato.</string>
+
   <string id="14000">Unisci volumi</string>
   <string id="14001">Dividi volumi</string>
   <string id="14003">Scaricamento file playlist...</string>
   <string id="14005">Esamino lista streams...</string>
   <string id="14006">Scaricamento lista streams fallito</string>
   <string id="14007">Scaricamento file playlist fallito</string>
+
   <string id="14009">Cartella giochi</string>
   <string id="14010">Attivazione vista ad icone per</string>
   <string id="14011">Auto-attivazione vista ad icone</string>
   <string id="14013">- Vista ad icone per</string>
   <string id="14014">- Percentuale</string>
   <string id="14015">Nessun file ed almeno una icona</string>
-  <string id="14016">Almeno un file ed una Icona</string>
+  <string id="14016">Almeno un file ed una icona</string>
   <string id="14017">Percentuale di icone</string>
   <string id="14018">Opzioni di visione</string>
   <string id="14019">Nome o codice città 1</string>
   <string id="14034">cache DVD - DVD-ROM</string>
   <string id="14035">- Rete Locale</string>
   <string id="14036">Servizi</string>
+
   <string id="14038">Impostazioni di rete cambiate</string>
   <string id="14039">XBMC deve essere riavviato per cambiare le</string>
   <string id="14040">tue impostazioni di rete.  Vuoi riavviare adesso?</string>
-  <string id="14041">
-  </string>
+  <string id="14041">Limite di banda connessione Internet</string>
+
   <string id="14043">- Spegnimento durante l'esecuzione</string>
   <string id="14044">%i min</string>
   <string id="14045">%i sec</string>
   <string id="14051">Formato orario</string>
   <string id="14052">Formato data</string>
   <string id="14053">Filtri interfaccia</string>
+
   <string id="14055">Usa scansione in background</string>
   <string id="14056">Ferma scansione</string>
-  <string id="14057">Non si può durante la scansione informazioni media</string>
+  <string id="14057">Non si possono ottenere informazioni durante la scansione</string>
   <string id="14058">Effetto film sgranato</string>
   <string id="14059">Cerca le icone nelle condivisioni remote</string>
   <string id="14060">Cache di tipo sconosciuto - Internet</string>
   <string id="14069">Vuoi salvare queste impostazioni adesso?</string>
   <string id="14070">Salva impostazioni</string>
   <string id="14071">Consenti la rinominazione e la cancellazione dei file</string>
+
   <string id="14074">Imposta il fuso orario</string>
   <string id="14075">Passa all'ora legale</string>
   <string id="14076">Aggiungi ai preferiti</string>
   <string id="14093">Sicurezza</string>
   <string id="14094">Dispositivi di input</string>
   <string id="14095">Risparmio energetico</string>
+
   <string id="15015">Rimuovi</string>
   <string id="15016">Giochi</string>
+
   <string id="15019">Aggiungi</string>
+
   <string id="15052">Password</string>
+
   <string id="15100">Archivio</string>
   <string id="15101">Banca dati</string>
   <string id="15102">* Tutti gli album</string>
   <string id="15103">* Tutti gli artisti</string>
   <string id="15104">* Tutte le canzoni</string>
   <string id="15105">* Tutti i generi</string>
+
   <string id="15107">Caricando...</string>
   <string id="15108">Suoni di navigazione</string>
   <string id="15109">Default della skin</string>
   <string id="15111">- Tema</string>
   <string id="15112">Tema di default</string>
+
   <string id="15200">Last.fm</string>
   <string id="15201">Invia le canzoni a Last.fm</string>
   <string id="15202">Nome utente Last.fm</string>
   <string id="15203">Password Last.fm</string>
   <string id="15204">Inoperabile: disattivo...</string>
-  <string id="15205">Pregasi aggiornare XBMC</string>
+  <string id="15205">Per favore aggiornare XBMC</string>
   <string id="15206">Non autorizzato: controlla nome utente e password</string>
   <string id="15207">Connesso</string>
   <string id="15208">Non connesso</string>
   <string id="15212">Inviato in %i secondi</string>
   <string id="15213">Riproduci con...</string>
   <string id="15214">Perfeziona sincronizzazione A/V</string>
-  <string id="15215">Nascondi nomi dei files in vista ad icone</string>
+  <string id="15215">Nascondi i nomi dei file in vista ad icone</string>
   <string id="15216">Esegui in modalità party</string>
   <string id="15217">Invia le canzoni a Libre.fm</string>
   <string id="15218">Nome utente di Libre.fm</string>
   <string id="15219">Password di Libre.fm</string>
   <string id="15220">Libre.fm</string>
   <string id="15221">Invio canzone</string>
+
   <string id="15250">Invia la radio Last.fm a Last.fm</string>
   <string id="15251">Connessione a Last.fm...</string>
   <string id="15252">Selezione stazione...</string>
   <string id="15278">Ascolta le Last.fm radio canzoni preferite di %name%</string>
   <string id="15279">Ricezione lista da Last.fm...</string>
   <string id="15280">Impossibile ricevere la lista da Last.fm...</string>
-  <string id="15281">Inserire il nome di un artista per trovarne i relazionati</string>
+  <string id="15281">Inserire il nome di un artista per trovarne i correlati</string>
   <string id="15282">Inserire il nome di un etichetta per trovarne di simili</string>
-  <string id="15283">Traccce recentemente ascoltate da %name%</string>
+  <string id="15283">Tracce recentemente ascoltate da %name%</string>
   <string id="15284">Ascolta le %name%'s raccomandazioni Last.fm radio</string>
   <string id="15285">Etichette preferite per l'utente %name%</string>
-  <string id="15286">Ascolta la playlist Last.fm radio di %name%</string>
+
   <string id="15287">Vuoi aggiungere la traccia corrente alle tue preferite?</string>
   <string id="15288">Vuoi vietare la traccia corrente?</string>
   <string id="15289">Aggiunta alle tue traccie preferite: '%s'.</string>
   <string id="15296">Riammetti</string>
   <string id="15297">Vuoi rimuovere questa traccia dalle tracce preferite?</string>
   <string id="15298">Vuoi togliere il divieto a questa traccia?</string>
+
   <string id="15300">Percorso non trovato o invalido</string>
   <string id="15301">Non è stato possibile connettersi al server</string>
   <string id="15302">Nessun server trovato</string>
   <string id="15303">Nessun workgroup trovato</string>
+
   <string id="15310">Apertura sorgente multipercorso</string>
   <string id="15311">Percorso:</string>
+
   <string id="16000">Generale</string>
+
   <string id="16002">Ricerca Internet</string>
   <string id="16003">Lettore</string>
   <string id="16004">Riproduci i media dal disco</string>
+
   <string id="16008">Inserire nuovo titolo</string>
   <string id="16009">Inserire nome del film</string>
   <string id="16010">Inserire nome del profilo</string>
   <string id="16020">DeInterlaccia</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (invertito)</string>
-  <string id="16023">Modifiche interlacciate</string>
+  <string id="16023"></string>
   <string id="16024">Annullando...</string>
   <string id="16025">Inserire nome artista</string>
   <string id="16026">Riproduzione fallita</string>
   <string id="16032">Impossibile inizializzare il database.</string>
   <string id="16033">Impossibile aprire il database.</string>
   <string id="16034">Impossibile ricavare canzoni dal database.</string>
-  <string id="16035">Party mode playlist</string>
+  <string id="16035">Playlist modalità party</string>
+  <string id="16036">Deinterlaccia (metà)</string>
+  <string id="16037">Deinterlaccia il video</string>
+  <string id="16038">Metodo di deinterlacciamento</string>
+  <string id="16039">Off</string>
+  <string id="16040">Auto</string>
+  <string id="16041">On</string>
+
   <string id="16100">Tutti i video</string>
   <string id="16101">Non visti</string>
   <string id="16102">Già visti</string>
   <string id="16103">Segna come già visto</string>
   <string id="16104">Segna come non visto</string>
   <string id="16105">Modifica titolo</string>
+
   <string id="16200">L'operazione è stata annullata</string>
   <string id="16201">Copia non riuscita</string>
   <string id="16202">Almeno un file non è stato copiato</string>
   <string id="16204">Almeno un file non è stato spostato</string>
   <string id="16205">Cancellazione non riuscita</string>
   <string id="16206">Almeno un file non è stato cancellato</string>
+
   <string id="16300">Metodo di ridimensionamento</string>
   <string id="16301">Più vicino</string>
   <string id="16302">Bilineare</string>
   <string id="16317">Temporale (mezzo)</string>
   <string id="16318">Temporale/Spaziale (mezzo)</string>
   <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 ottimizzato</string>
+  <string id="16324">Software Blend</string>
+
   <string id="16400">Video post-processing</string>
-  <string id="16401">Disattivato</string>
-  <string id="16402">Attivato per contenuto SD</string>
-  <string id="16403">Sempre Attivato</string>
+
   <string id="17500">Tempo di spegnimento display</string>
+
   <string id="19000">Cambia al canale</string>
+
   <string id="20000">Cartella per il salvataggio della musica</string>
   <string id="20001">Usa un player DVD esterno</string>
   <string id="20002">Player DVD esterno</string>
   <string id="20003">Cartella dei trainer</string>
   <string id="20004">Cartella per gli screenshot</string>
-  <string id="20006">Cartella playlists</string>
+
+  <string id="20006">Cartella playlist</string>
   <string id="20007">Registrazioni</string>
-  <string id="20008">Screenshots</string>
+  <string id="20008">Screenshot</string>
   <string id="20009">Usa XBMC</string>
-  <string id="20011">Playlists musica</string>
-  <string id="20012">Playlists video</string>
+
+  <string id="20011">Playlist musica</string>
+  <string id="20012">Playlist video</string>
   <string id="20013">Vuoi lanciare il gioco?</string>
   <string id="20014">Ordina per: Playlist</string>
   <string id="20015">Icona remota</string>
   <string id="20017">Icona locale</string>
   <string id="20018">Nessuna icona</string>
   <string id="20019">Seleziona icona</string>
-  <string id="20022">
-  </string>
+
+  <!-- string id 20022 will always be set to an empty string (LocalizeStrings.cpp)-->
+  <string id="20022"></string>
   <string id="20023">Conflitto</string>
   <string id="20024">Scansiona nuovo</string>
   <string id="20025">Scansiona tutto</string>
   <string id="20026">Regione</string>
+
+  <!-- string id's 20027 thru 20034 are reserved for temperature strings (LocalizeStrings.cpp)-->
+
   <string id="20037">Sommario</string>
   <string id="20038">Blocca sezione musica</string>
   <string id="20039">Blocca sezione video</string>
   <string id="20053">Uscito da master mode</string>
   <string id="20054">Entrato in master mode</string>
   <string id="20055">Icona Allmusic.com</string>
+
   <string id="20057">Rimuovi icona</string>
   <string id="20058">Aggiungi profilo...</string>
   <string id="20059">Cerca info per tutti gli album</string>
   <string id="20108">Root</string>
   <string id="20109">- Zoom</string>
   <string id="20110">UPnP client</string>
-  <string id="20111">Autostart client UPnP </string>
+  <string id="20111">Autostart client UPnP</string>
   <string id="20112">Ultimo login: %s</string>
   <string id="20113">Mai loggato</string>
   <string id="20114">Profilo %i / %i</string>
   <string id="20184">Ruota le immagini usando le informazioni EXIF</string>
   <string id="20185">Usa la vista a poster per le serie TV</string>
   <string id="20186">Attendere Prego</string>
+
   <string id="20189">Attiva lo scorrimento automatico per la trama e la recensione</string>
   <string id="20190">Custom</string>
   <string id="20191">Attiva il debug logging</string>
   <string id="20197">Importa archivio musicale</string>
   <string id="20198">Nessun artista trovato!</string>
   <string id="20199">Scaricamento info artista fallito</string>
-  <string id="20250">Party attivo! (videos)</string>
-  <string id="20251">Mixando bevande (videos)</string>
-  <string id="20252">Riempiendo bicchieri (videos)</string>
+
+  <!-- string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)-->
+
+  <string id="20250">Party attivo! (video)</string>
+  <string id="20251">Mixando bevande (video)</string>
+  <string id="20252">Riempiendo bicchieri (video)</string>
   <string id="20253">WebDAV server (HTTP)</string>
   <string id="20254">WebDAV server (HTTPS)</string>
   <string id="20255">Primo login, edita il tuo profilo</string>
   <string id="20256">HTS Tvheadend client</string>
   <string id="20257">VDR Streamdev client</string>
   <string id="20258">Client Myth TV</string>
+  <string id="20259">Network Filesystem (NFS)</string>
+  <string id="20260">Shell sicura(SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
+
   <string id="20300">Web server directory (HTTP)</string>
   <string id="20301">Web server directory (HTTPS)</string>
   <string id="20302">Impossibile scrivere nella cartella:</string>
   <string id="20303">Vuoi ignorare e procedere?</string>
   <string id="20304">RSS Feed</string>
-  <string id="20306">
-  </string>
+
   <string id="20307">DNS secondario</string>
-  <string id="20308">DHCP server:</string>
+  <string id="20308">server DHCP:</string>
   <string id="20309">Crea nuova cartella</string>
   <string id="20310">Oscura LCD se in riproduzione</string>
   <string id="20311">Sconosciuto o installato (protetto)</string>
   <string id="20312">Oscura LCD se in pausa</string>
-  <string id="20313">
-  </string>
+
   <string id="20314">Video - Archivio</string>
+
   <string id="20316">Ordina per: ID</string>
-  <string id="20320">
-  </string>
-  <string id="20321">
-  </string>
-  <string id="20322">
-  </string>
-  <string id="20323">
-  </string>
+
   <string id="20324">Play part...</string>
   <string id="20325">Reset calibrazione</string>
   <string id="20326">Questo resetterà il valore di calibrazione per %s</string>
   <string id="20327">al suo valore originale.</string>
   <string id="20328">Cerca la destinazione</string>
+  <string id="20329">I film sono in cartelle separate rinominate con il titolo del film</string>
   <string id="20330">Usa i nomi delle cartelle per le ricerche</string>
   <string id="20331">File</string>
-  <string id="20332">Uso i nomi dei files o delle cartelle per le ricerche?</string>
+  <string id="20332">Uso i nomi dei file o delle cartelle per le ricerche?</string>
   <string id="20333">Imposta il contenuto</string>
   <string id="20334">Cartella</string>
   <string id="20335">Cerco il contenuto in modo ricorsivo?</string>
   <string id="20385">Rimuovi collegamento a serie TV</string>
   <string id="20386">Film aggiunti di recente</string>
   <string id="20387">Episodi aggiunti di recente</string>
-  <string id="20388">Studios</string>
+  <string id="20388">Studio</string>
   <string id="20389">Video musicali</string>
   <string id="20390">Video musicali recenti</string>
   <string id="20391">Video musicale</string>
   <string id="20393">Informazioni video musicale</string>
   <string id="20394">Caricamento informazioni video musicale</string>
   <string id="20395">Mixed</string>
-  <string id="20396">Vai a albums per artista</string>
+  <string id="20396">Vai a album per artista</string>
   <string id="20397">Vai a album</string>
   <string id="20398">Riproduci brano</string>
   <string id="20399">Vai a video musicali dall'album</string>
   <string id="20401">Riproduci video musicale</string>
   <string id="20402">Scarica le icone degli attori all'aggiunta in archivio</string>
   <string id="20403">Imposta icona attore</string>
+
   <string id="20405">Rimuovi segnalibro episodio</string>
   <string id="20406">Imposta segnalibro episodio</string>
   <string id="20407">Impostazioni scraper</string>
   <string id="20408">Scaricamento informazioni video musicale</string>
-  <string id="20409">Scaricamento informazioni serie TV </string>
+  <string id="20409">Scaricamento informazioni serie TV</string>
   <string id="20410">Trailer</string>
   <string id="20411">Spiana</string>
   <string id="20412">Spiana serie TV</string>
   <string id="20415">Scansione nuovo contenuto</string>
   <string id="20416">Prima visione</string>
   <string id="20417">Scrittore</string>
-  <string id="20418">Pulisci i nomi dei files e delle cartelle</string>
+  <string id="20418">Pulisci i nomi dei file e delle cartelle</string>
+  <string id="20419">Mostra i metadati nella vista file</string>
+
   <string id="20420">Mai</string>
   <string id="20421">Se solo una stagione</string>
   <string id="20422">Sempre</string>
   <string id="20453">episodi</string>
   <string id="20454">In Ascolto</string>
   <string id="20455">In Ascolto</string>
+  <string id="20456">Imposta l'immagine fanart per un set di filmati</string>
+  <string id="20457">imposta filmato</string>
+  <string id="20458">Raggruppa film in antologie</string>
+  <!-- up to 21329 is reserved for the video db !! !-->
+
   <string id="21330">Mostra i files e le cartelle nascoste</string>
+
   <string id="21331">TuxBox client</string>
   <string id="21332">ATTENZIONE: il dispositivo TuxBox è in modalità registrazione!</string>
   <string id="21333">Lo stream verrà fermato!</string>
   <string id="21335">Sicuro di fare partire lo stream ?</string>
   <string id="21336">Connessione a: %s</string>
   <string id="21337">Dispositivo TuxBox</string>
+  <!-- up to 21355 is reserved for the TuxBox Client!! !-->
+
   <string id="21359">Aggiungi condivisione media...</string>
   <string id="21360">Condividi gli archivi musicali e video attraverso UPnP</string>
+
   <string id="21364">Modifica condivisioni media</string>
   <string id="21365">Rimuovi condivisioni media</string>
   <string id="21366">Cartella sottotitoli</string>
   <string id="21367">Film &amp; cartella sottotitoli alternativa</string>
+  <string id="21368">Override ASS/SSA subtitles fonts</string>
+
   <string id="21369">Abilita il mouse</string>
   <string id="21370">Suoni di navigazione attivi durante la riproduzione</string>
   <string id="21371">Icone</string>
   <string id="21423">Nuova regola...</string>
   <string id="21424">Gli elementi devono combaciare</string>
   <string id="21425">tutte le regole</string>
-  <string id="21426">ona o più delle regole</string>
+  <string id="21426">una o più delle regole</string>
   <string id="21427">Limita a</string>
   <string id="21428">Nessun limite</string>
   <string id="21429">Ordina per</string>
-  <string id="21430">ascendente</string>
-  <string id="21431">discendente</string>
+  <string id="21430">crescente</string>
+  <string id="21431">descrescente</string>
   <string id="21432">Modifica smart playlist</string>
   <string id="21433">Nome della playlist</string>
   <string id="21434">Trova gli elementi che combaciano</string>
   <string id="21451">Richiesta connessione Internet.</string>
   <string id="21452">Altro...</string>
   <string id="21453">Root filesystem</string>
+  <string id="21454">Cache piena</string>
+  <string id="21455">Cache saturata prima di raggiungere il livello richiesto per una riproduzione fluida</string>
+
+  <string id="21460">Cartella dei sottotitoli</string>
+  <string id="21461">Fissa</string>
+  <string id="21462">Bordo inferiore del video</string>
+  <string id="21463">Sotto il video</string>
+  <string id="21464">Bordo superiore del video</string>
+  <string id="21465">Sopra il video</string>
+
   <string id="21800">Nome file</string>
   <string id="21801">Percorso file</string>
   <string id="21802">Dimensione file</string>
   <string id="21806">Commento</string>
   <string id="21807">Colori/bn</string>
   <string id="21808">Processo JPEG</string>
+
   <string id="21820">Data/Ora</string>
   <string id="21821">Descrizione</string>
   <string id="21822">Marca fotocamera</string>
   <string id="21841">Longitudine GPS</string>
   <string id="21842">Altitudine GPS</string>
   <string id="21843">Orientamento</string>
+
   <string id="21860">Categorie supplementari</string>
   <string id="21861">Parole chiave</string>
   <string id="21862">Titolo</string>
   <string id="21898">Anni attività</string>
   <string id="21899">Etichetta</string>
   <string id="21900">Nato/Formato</string>
+
+  <!-- strings 21900 thru 21999 reserved for slideshow info -->
+
   <string id="22000">Aggiorna l'archivio all'avvio</string>
   <string id="22001">Nascondi avanzamento aggiornamento archivio</string>
   <string id="22002">- Suffisso DNS</string>
+
+  <string id="22003">%2.3fs</string>
   <string id="22004">In ritardo di: %2.3fs</string>
   <string id="22005">In anticipo di: %2.3fs</string>
   <string id="22006">Offset sottotitoli</string>
   <string id="22020">Guida</string>
   <string id="22021">Errore proporzioni permesso per ridurre le barre nere</string>
   <string id="22022">Mostra i file video nelle liste</string>
-  <string id="22023">DirectX Vendor:</string>
+  <string id="22023">Fornitore DirectX:</string>
   <string id="22024">Versione Direct3D:</string>
+
+  <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">Carattere</string>
   <string id="22031">- Dimensione</string>
   <string id="22032">- Colore</string>
   <string id="22041">bianco/rosso</string>
   <string id="22042">bianco/blu</string>
   <string id="22043">nero/bianco</string>
+
   <string id="22079">Azione predefinita di selezione</string>
   <string id="22080">Scegli</string>
   <string id="22081">Mostra Informazioni</string>
   <string id="22082">Altro...</string>
   <string id="22083">Riproduci tutto</string>
+
   <string id="23049">Teletext non disponibile</string>
   <string id="23050">Attiva il Teletext</string>
   <string id="23051">Parte %i</string>
   <string id="23052">Buffering %i bytes</string>
   <string id="23053">In arresto</string>
   <string id="23054">In esecuzione</string>
+
+  <!-- strings 23100 thru 23150 reserved for external player -->
   <string id="23100">Player Esterno Attivato</string>
   <string id="23101">Premi OK per chiudere il player</string>
+
   <string id="23104">Premi OK al termine della riproduzione</string>
+
+  <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
   <string id="24000">Add-on</string>
   <string id="24001">Add-ons</string>
   <string id="24002">Opzioni Add-on</string>
   <string id="24003">Informazioni Add-on</string>
-  <string id="24005">Plugin</string>
+
+  <string id="24005">Sorgenti files multimediali</string>
   <string id="24007">Scraper Film</string>
   <string id="24008">Salvaschermo</string>
   <string id="24009">Script</string>
   <string id="24012">Servizio Sottotitoli</string>
   <string id="24013">Servizio Testi</string>
   <string id="24014">Scraper Serie TV</string>
-  <string id="24015">Scraper Videoclip </string>
+  <string id="24015">Scraper Videoclip</string>
   <string id="24016">Scraper Album</string>
   <string id="24017">Scraper Artista</string>
+  <string id="24018">Servizi</string>
+
   <string id="24020">Configura</string>
   <string id="24021">Disabilita</string>
   <string id="24022">Abilita</string>
   <string id="24028">Weather.com (standard)</string>
   <string id="24030">Questo Add-on non può essere configurato</string>
   <string id="24031">Errore nel caricamento delle impostazioni</string>
-  <string id="24032">Tutti gli add-ons</string>
-  <string id="24033">Scarica add-ons</string>
+  <string id="24032">Tutti gli add-on</string>
+  <string id="24033">Scarica add-on</string>
   <string id="24034">Controlla Aggiornamenti</string>
   <string id="24035">Forza refresh</string>
   <string id="24036">Change log</string>
   <string id="24037">Disinstalla</string>
   <string id="24038">Installa</string>
-  <string id="24039">Add-ons disabilitato</string>
+  <string id="24039">Add-on disabilitato</string>
   <string id="24040">(Resetta le impostazioni attuali)</string>
   <string id="24041">Installa da un file zip</string>
   <string id="24042">Scaricando %i%%</string>
   <string id="24043">Aggiornamenti Disponibili</string>
-  <string id="24050">Add-ons disponibili</string>
+  <string id="24044">Dipendenze non soddisfatte</string>
+  <string id="24045">L'Add-on non ha una struttura corretta</string>
+  <string id="24046">%s è usato al momento dai seguenti add-on(s)</string>
+  <string id="24047">Questo add-on non può essere rimosso</string>
+  <string id="24048">Regredire versione</string>
+
+  <string id="24050">Add-on disponibili</string>
   <string id="24051">Versione:</string>
   <string id="24052">Informazioni</string>
   <string id="24053">Licenza:</string>
   <string id="24064">Abilita Add-on</string>
   <string id="24065">Add-on Aggiornato</string>
   <string id="24066">Cancella il download dell'Add-on?</string>
-  <string id="24067">Download dell'Add-ons in corso</string>
+  <string id="24067">Download dell'Add-on in corso</string>
   <string id="24068">Aggiornamento disponibile</string>
   <string id="24069">Aggiorna</string>
-  <string id="24070">L' Add-on non può essere caricato</string>
+
+  <string id="24070">L'Add-on non può essere caricato</string>
   <string id="24071">Si è verificato un errore sconosciuto.</string>
   <string id="24072">Impostazioni richieste</string>
   <string id="24073">Impossibile connettersi</string>
   <string id="24074">Riavvio richiesto</string>
   <string id="24075">Disabilita</string>
+  <string id="24076">Add-on Richiesto</string>
   <string id="24080">Provo a riconnettere?</string>
   <string id="24089">Riavvio dell'Add-on</string>
   <string id="24090">Blocca il manager degli Add-on</string>
-  <string id="24091">
-  </string>
-  <string id="24092">
-  </string>
-  <string id="24093">
-  </string>
-  <string id="24094">
-  </string>
-  <string id="24095">
-  </string>
+
+  <string id="24094">(currente)</string>
+  <string id="24095">(in blacklist)</string>
   <string id="24096">Questo Add-on è segnalato non funzionante nel repository.</string>
   <string id="24097">Vuoi disabilitarlo nel tuo sistema?</string>
   <string id="24098">Non funzionante</string>
   <string id="24099">Vuoi passare a questa skin?</string>
+  <string id="24100">Per usare questa funzione occorre scaricare un Add-on:</string>
+  <string id="24101">Vuoi scaricare questo Add-on?</string>
   <string id="25000">Notifiche</string>
+
+  <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29800">Modo Archivio</string>
   <string id="29801">Tastiera QWERTY</string>
   <string id="29802">Periferica Audio passthrough utilizzata</string>
-  <string id="29999">
-  </string>
+
+  <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
+  <!-- strings 31000 thru 31999 reserved for skins -->
+  <!-- strings 32000 thru 32999 reserved for scripts -->
+  <!-- strings 33000 thru 33999 reserved for common strings used in addons -->
   <string id="33001">Qualità trailer</string>
   <string id="33002">Stream</string>
   <string id="33003">Scarica</string>
   <string id="33030">Vista</string>
   <string id="33031">Coverflow</string>
   <string id="33032">Traduci testo</string>
-  <string id="33033">Lsta mappa %s categoria</string>
+  <string id="33033">Lista mappa %s categoria</string>
   <string id="33034">36 Ore</string>
   <string id="33035">Mappe</string>
   <string id="33036">Orario</string>
   <string id="33081">Questo file è multiplo, seleziona la parte da cui iniziare la riproduzione.</string>
   <string id="33082">Percorso per lo script</string>
   <string id="33083">Abilita il pulsante per lo script personalizzato</string>
-  <string id="34100">Configurazione casse</string>
+
+  <string id="33100">Avvio fallito</string>
+  <string id="33101">Webserver</string>
+  <string id="33102">Server Eventi</string>
+  <string id="33103">Server comunicazione remota</string>
+
+  <string id="33200">Rilevata una nuova connessione</string>
+
+  <!-- translators: no need to add these to your language files -->
+  <string id="34000">Lame</string>
+  <string id="34001">Vorbis</string>
+  <string id="34002">Wav</string>
+  <string id="34003">DXVA2</string>
+  <string id="34004">VAAPI</string>
+  <string id="34005">Flac</string>
+
+  <string id="34100">Configurazione altoparlanti</string>
+  <string id="34101">2.0</string>
+  <string id="34102">2.1</string>
+  <string id="34103">3.0</string>
+  <string id="34104">3.1</string>
+  <string id="34105">4.0</string>
+  <string id="34106">4.1</string>
+  <string id="34107">5.0</string>
+  <string id="34108">5.1</string>
+  <string id="34109">7.0</string>
+  <string id="34110">7.1</string>
+  <!-- 34112-34200 reserved for future use -->
+
+  <string id="34201">Non trovo il successivo elemento da riprodurre</string>
+  <string id="34202">Non trovo il precedente elemento da riprodurre</string>
+
+  <string id="34300">Avvio di zeroconf fallito</string>
+  <string id="34301">Il servizio Apple Bonjour è installato? Controllare i log per maggiori informazioni.</string>
+
+  <string id="34400">Rendering Video</string>
+  <string id="34401">Fallita l'inizializzazione dei filtri/scalers video, ritorno al bilinear scaling</string>
+  <string id="34402">Fallita l'inizializzazione dei dispositivi audio</string>
+  <string id="34403">Controlla le impostazioni audio</string>
+
+  <string id="35000">Periferiche</string>
+  <string id="35001">Periferica HID generica</string>
+  <string id="35002">Adattatore di rete generico</string>
+  <string id="35003">Disco generico</string>
+  <string id="35004">Non ci sono impostazioni disponibili&#10;per questa periferica.</string>
+  <string id="35005">Nuova periferica configurata</string>
+  <string id="35006">Periferica rimossa</string>
+  <string id="35007">Mappa dei caratteri da usare per questa periferica</string>
+  <string id="35008">Mappa dei caratteri abilitata</string>
+
+  <string id="35500">Posizione</string>
+  <string id="35501">Classe</string>
+  <string id="35502">Nome</string>
+  <string id="35503">Fornitore</string>
+  <string id="35504">ID prodotto</string>
+
+  <string id="36000">Adattatore CEC Pulse-Eight</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Passa ai comandi da tastiera</string>
+  <string id="36003">Passa ai controlli al telecomando</string>
+  <string id="36004">Premi il bottone "user"</string>
+  <string id="36005">Enable switch side commands</string>
+  <string id="36006">Non riesco ad accedere all'adattatore</string>
+  <string id="36007">Accendi la TV all'avvio di XBMC</string>
+  <string id="36008">Spegni la TV all'uscita da XBMC</string>
+  <string id="36009">Imposta il dispositivo in stanby all'attivazione dello screensaver</string>
+  <string id="36010"></string>
+  <string id="36011">Impossibile trovare la porta CEC. Impostala manualmente.</string>
+  <string id="36012">Impossibile connettersi all'adattatore CEC.</string>
+  <string id="36013">Versione interfaccia libcec non supportata. %d è maggiore della versione supportata da XBMC (%d)</string>
+  <string id="36014">Metti il pc in standby quando la TV viene spenta</string>
+  <string id="36015">Numero porta HDMI</string>
+  <string id="36016">Connesso</string> <!-- max. 13 characters -->
+  <string id="36017">Adattatore trovato, ma libcec non è disponibile</string>
+  <string id="36018">Usa il linguaggio impostato sulla TV</string>
 </strings>
index d509cfc..3a6044a 100644 (file)
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--Language file translated with Team XBMC Translator-->
-<!--Translator: airplanez-->
-<!--Email: airplanez@gmail.com-->
-<!--Date of translation: 01/20/2011-->
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!--$Revision$-->
 <strings>
   <string id="0">프로그램</string>
@@ -11,9 +7,11 @@
   <string id="3">비디오</string>
   <string id="4">TV-가이드</string>
   <string id="5">설정</string>
+  <string id="6">XBMC SVN</string>
   <string id="7">파일 관리자</string>
   <string id="8">날씨</string>
   <string id="9">XBMC 미디어 센터</string>
+
   <string id="11">월요일</string>
   <string id="12">화요일</string>
   <string id="13">수요일</string>
@@ -21,6 +19,7 @@
   <string id="15">금요일</string>
   <string id="16">토요일</string>
   <string id="17">일요일</string>
+  
   <string id="21">1월</string>
   <string id="22">2월</string>
   <string id="23">3월</string>
@@ -33,6 +32,7 @@
   <string id="30">10월</string>
   <string id="31">11월</string>
   <string id="32">12월</string>
+  
   <string id="41">월</string>
   <string id="42">화</string>
   <string id="43">수</string>
@@ -40,6 +40,7 @@
   <string id="45">금</string>
   <string id="46">토</string>
   <string id="47">일</string>
+  
   <string id="51">1월</string>
   <string id="52">2월</string>
   <string id="53">3월</string>
@@ -52,6 +53,7 @@
   <string id="60">10월</string>
   <string id="61">11월</string>
   <string id="62">12월</string>
+
   <string id="71">북</string>
   <string id="72">북북동</string>
   <string id="73">북동</string>
@@ -69,6 +71,7 @@
   <string id="85">북서</string>
   <string id="86">북북서</string>
   <string id="87">가변</string>
+
   <string id="98">보기: 자동</string>
   <string id="99">보기: 자동(큰)</string>
   <string id="100">보기: 아이콘</string>
   <string id="164">디스크 없음</string>
   <string id="165">디스크 있음</string>
   <string id="166">스킨</string>
+
   <string id="169">해상도</string>
   <string id="170">비디오에 맞게 화면 새로고침 비율 조정</string>
+
   <string id="172">개봉일</string>
   <string id="173">4:3 비디오를 다음으로 표시:</string>
+
   <string id="175">분위기</string>
   <string id="176">스타일</string>
+
   <string id="179">노래</string>
   <string id="180">재생시간</string>
   <string id="181">앨범 선택</string>
   <string id="197">%s 정보 요청</string>
   <string id="198">영화 상세정보 읽기</string>
   <string id="199">웹 인터페이스</string>
+
   <string id="202">태그라인</string>
   <string id="203">줄거리 개요</string>
-  <string id="205">투표</string>
+
+  <string id="205">투표:</string>
   <string id="206">배역</string>
   <string id="207">줄거리</string>
   <string id="208">재생</string>
   <string id="221">네트워크가 연결되지 않음</string>
   <string id="222">취소</string>
   <string id="224">속도</string>
+  <string id="225">수직 이동</string>
   <string id="226">패턴 테스트...</string>
   <string id="227">freedb.org 에서 오디오 CD 트렉 이름 검색</string>
   <string id="228">읽을때 재생목록 섞기</string>
   <string id="243">새로고침 비율</string>
   <string id="244">전체 화면</string>
   <string id="245">크기: (%i,%i)-&gt;(%i,%i) (축소확대 x%2.2f) 가로세로비:%2.2f:1 (픽셀: %2.2f:1)</string>
+
   <string id="247">스크립트</string>
   <string id="248">언어</string>
   <string id="249">음악</string>
   <string id="282">%i 항목 찾음</string>
   <string id="283">검색 결과</string>
   <string id="284">결과 찾지 못함</string>
+
   <string id="287">자막</string>
   <string id="288">글꼴</string>
   <string id="289">- 크기</string>
   <string id="304">언어</string>
   <string id="305">사용함</string>
   <string id="306">논인터리브</string>
+
   <string id="312">(0=자동)</string>
   <string id="313">데이터베이스 정리</string>
   <string id="314">준비중...</string>
   <string id="364">- 돌비 디지털 (AC3) 지원 리시버</string>
   <string id="365">정렬: 이름</string>
   <string id="366">정렬: 연도</string>
-  <string id="367">정렬: 등급</string>
+  <string id="367">정렬: 평점</string>
   <string id="368">평점</string>
   <string id="369">제목</string>
   <string id="370">뇌우</string>
   <string id="404">바람</string>
   <string id="405">이슬점</string>
   <string id="406">습도</string>
+
   <string id="409">기본</string>
   <string id="410">날씨 서비스 접속</string>
   <string id="411">날씨 가져오기:</string>
   <string id="418">최저</string>
   <string id="419">최고</string>
   <string id="420">HDMI</string>
+
   <string id="422">앨범 정보 삭제</string>
   <string id="423">CD 정보 삭제</string>
   <string id="424">선택</string>
   <string id="432">라이브러리에서 영화 제거</string>
   <string id="433"> '%s' 를 제거 하시겠습니까?</string>
   <string id="434">풍향 %s 풍속 %i %s</string>
+
   <string id="437">이동식 디스크</string>
   <string id="438">파일 열기</string>
   <string id="439">캐시</string>
   <string id="480">모양새</string>
   <string id="481">오디오 옵션</string>
   <string id="482">XBMC 정보</string>
+
   <string id="485">앨범 삭제</string>
   <string id="486">반복</string>
   <string id="487">한곡 반복</string>
   <string id="513">홈 윈도우</string>
   <string id="514">수동 설정</string>
   <string id="515">장르</string>
+
   <string id="517">최근 재생 앨범</string>
   <string id="518">실행</string>
   <string id="519">실행...</string>
+
   <string id="521">컴필레이션</string>
   <string id="522">소스 제거</string>
   <string id="523">미디어 변경</string>
   <string id="546">패스스루 출력 장치</string>
   <string id="547">아티스트 약력 없음</string>
   <string id="548">다채널 오디오를 스테레오로 다운믹스</string>
+
   <string id="550">정렬: %s</string>
   <string id="551">이름</string>
   <string id="552">날짜</string>
   <string id="560">ID</string>
   <string id="561">파일</string>
   <string id="562">연도</string>
-  <string id="563">등급</string>
+  <string id="563">평점</string>
   <string id="564">형식</string>
   <string id="565">사용량</string>
   <string id="566">앨범 아티스트</string>
   <string id="573">경로</string>
   <string id="574">국가</string>
   <string id="575">진행중</string>
+  <string id="576">재생 횟수</string>
+
   <string id="580">정렬 방향</string>
   <string id="581">정렬 방법</string>
   <string id="582">보기 모드</string>
   <string id="595">반복: 끔</string>
   <string id="596">반복: 하나</string>
   <string id="597">반복: 전체</string>
+
   <string id="600">오디오 CD 추출</string>
   <string id="601">중간</string>
   <string id="602">표준</string>
   <string id="603">최대</string>
   <string id="604">고정 비트레이트</string>
   <string id="605">추출중...</string>
+
   <string id="607">대상:</string>
   <string id="608">CD나 트랙을 추출 할수 없음</string>
   <string id="609">CDDA 추출 경로가 설정되지 않음.</string>
   <string id="611">번호 입력</string>
   <string id="612">비트/샘플</string>
   <string id="613">샘플 주파수</string>
+
   <string id="620">오디오 CD</string>
   <string id="621">인코더</string>
   <string id="622">음질</string>
   <string id="657">폴더 찾기</string>
   <string id="658">노래 정보</string>
   <string id="659">비-선형 늘림</string>
+
   <string id="660">음량 증폭</string>
   <string id="661">내보내기 폴더 선택</string>
   <string id="662">이 파일은 더 이상 사용할수 없습니다.</string>
   <string id="663">라이브러리에서 제거 하시겠습니까?</string>
   <string id="664">스크립트 찾기</string>
   <string id="665">압축 수준</string>
+
   <string id="700">라이브러리 정리</string>
   <string id="701">라이브러리에서 오래된 노래 제거</string>
   <string id="702">이 경로는 이미 검색 되었습니다</string>
   <string id="705">네트워크</string>
   <string id="706">- 서버</string>
+
   <string id="708">인터넷 접속에 HTTP 프록시 서버 사용</string>
+
   <string id="711">인터텟 프로토콜(IP)</string>
   <string id="712">잘못된 포트를 지정했음. 1 과 65535사이의 값 이어야 합니다.</string>
   <string id="713">HTTP 프록시</string>
+
   <string id="715">- 할당</string>
   <string id="716">자동 (DHCP)</string>
   <string id="717">수동 (고정)</string>
+
   <string id="719">- IP 주소</string>
   <string id="720">- 넷마스크</string>
   <string id="721">- 기본 게이트웨이</string>
   <string id="726">변경이 저장되지 않음. 저장않고 계속 하시겠습니까?</string>
   <string id="727">웹 서버</string>
   <string id="728">FTP 서버</string>
+
   <string id="730">- 포트</string>
+
   <string id="732">저장 &amp;  적용</string>
   <string id="733">- 비밀번호</string>
   <string id="734">암호 없음</string>
   <string id="749">미러 이미지</string>
   <string id="750">확실합니까?</string>
   <string id="751">소스 제거</string>
+
   <string id="754">프로그램 연결 추가</string>
   <string id="755">프로그램 경로 수정</string>
   <string id="756">프로그램 이름 수정</string>
   <string id="757">경로 단계 수정</string>
+
   <string id="759">보기: 큰 목록</string>
   <string id="760">노랑</string>
   <string id="761">하양</string>
   <string id="765">맑은 파랑</string>
   <string id="766">밝은 회색</string>
   <string id="767">회색</string>
+  <!-- strings 768 and 769 reserved for more subtitle colors -->
+
   <string id="770">오류 %i: 공유를 사용할수 없음</string>
+
   <string id="772">오디오 출력</string>
   <string id="773">검색</string>
   <string id="774">슬라이드쇼 폴더</string>
   <string id="787">인터페이스 중지됨</string>
   <string id="788">정상적으로 네트워크 인터페이스가 중지 되었습니다.</string>
   <string id="789">무선 네트워크 이름 (ESSID)</string>
+
   <string id="791">XBMC 를 제어하기 위해 이 시스템의 프로그램 허용</string>
   <string id="792">포트</string>
   <string id="793">포트 범위</string>
   <string id="796">연속 반복 지연(밀리초)</string>
   <string id="797">최대 클라이언트 수</string>
   <string id="798">인터넷 접속</string>
+
   <string id="850">잘못된 포트 번호가 입력됨</string>
   <string id="851">유효한 포트 범위는 1-65535 입니다</string>
   <string id="852">유효한 포트 범위는 1024-65535 입니다</string>
+
+  <string id="998">음악 파일 위치 추가...</string>
+  <string id="999">비디오 추가...</string>
   <string id="1000">- 미리보기</string>
   <string id="1001">연결할수 없음</string>
   <string id="1002">XBMC가 네트워크에 연결할수 없습니다.</string>
   <string id="1003">네트워크가 연결되지 않아 발생했습니다.</string>
   <string id="1004">그래도 추가 하시겠습니까?</string>
+
   <string id="1006">IP 주소</string>
   <string id="1007">네트워크 추가</string>
   <string id="1008">프로토콜</string>
   <string id="1049">스크립트 설정</string>
   <string id="1050">단일</string>
   <string id="1051">웹 주소 입력</string>
+
   <string id="1200">SMB 클라이언트</string>
   <string id="1202">작업그룹</string>
   <string id="1203">기본 사용자명</string>
   <string id="1204">기본 비밀번호</string>
+
   <string id="1207">WINS 서버</string>
   <string id="1208">SMB 공유 장착</string>
+
   <string id="1210">제거</string>
   <string id="1211">음악</string>
   <string id="1212">비디오</string>
   <string id="1233">프로그램 &amp; 비디오 &amp; 음악</string>
   <string id="1234">프로그램 &amp; 사진 &amp; 음악</string>
   <string id="1235">프로그램 &amp; 사진 &amp; 비디오</string>
+
   <string id="1250">자동-감지</string>
   <string id="1251">시스템 자동-감지</string>
   <string id="1252">별명</string>
+
   <string id="1254">연결 요청</string>
   <string id="1255">FTP 사용자 및 비밀번호 전송</string>
   <string id="1256">핑 간격</string>
   <string id="1257">자동감지된 시스템에 연결 하시겠습니까?</string>
+
   <string id="1260">제로컨프를 통해 이 서비스를 다른 시스템에 알림</string>
+  <string id="1270">XBMC가 에어플레이 컨텐츠를 수신하도록 허용</string>
+  <string id="1271">장치 이름</string>
+  <string id="1272">- 비밀번호 사용</string>
+
   <string id="1300">사용자 지정 오디오 장치</string>
   <string id="1301">사용자 지정 패스스루 장치</string>
+
   <string id="1396">뜬</string>
   <string id="1397">및</string>
   <string id="1398">결빙</string>
   <string id="1421">매우 높음</string>
   <string id="1422">센바람</string>
   <string id="1423">안개</string>
+
+  <!-- strings through to 1450 reserved for weather translation -->
+
   <string id="1450">대기일때 화면 끄기</string>
+  <!-- strings through to 1470 reserved for power-saving -->
+
   <string id="2050">상영시간</string>
+
   <string id="2100">스크립트 실패! : %s</string>
   <string id="2101">새 버전이 필요함 - 로그를 보세요</string>
+
   <string id="4501">LCD/VFD 사용</string>
+
   <string id="10000">홈</string>
   <string id="10001">프로그램</string>
   <string id="10002">사진</string>
   <string id="10019">설정 - 모양새</string>
   <string id="10020">스크립트</string>
   <string id="10021">웹 브라우저</string>
+  <string id="10025">비디오</string>
   <string id="10028">비디오/재생목록</string>
+  <string id="10029">로그인 화면</string>
   <string id="10034">설정 - 프로파일</string>
+  <string id="10040">애드온 탐색기</string>
+
   <string id="10100">예/아니오 대화창</string>
   <string id="10101">진행 대화창</string>
+
   <string id="10210">자막 찾는중...</string>
   <string id="10211">자막 찾거나 캐시중...</string>
   <string id="10212">종료</string>
   <string id="10213">버퍼링</string>
   <string id="10214">스트림 열기</string>
+
   <string id="10500">음악/재생목록</string>
   <string id="10501">음악/파일</string>
   <string id="10502">음악/라이브러리</string>
   <string id="10509">네트워크 게이밍</string>
   <string id="10510">확장</string>
   <string id="10511">시스템 정보</string>
+
   <string id="10516">음악 - 라이브러리</string>
   <string id="10517">지금 재생중 - 음악</string>
+
   <string id="10522">지금 재생중 - 비디오</string>
   <string id="10523">앨범 정보</string>
   <string id="10524">영화 정보</string>
+
   <string id="12000">대화창 선택</string>
   <string id="12001">음악/정보</string>
   <string id="12002">확인 대화창</string>
   <string id="12004">스크립트/정보</string>
   <string id="12005">전체화면 비디오</string>
   <string id="12006">오디오 시각화</string>
+
   <string id="12008">연결재생 대화창</string>
   <string id="12009">인텍스 재생성...</string>
   <string id="12010">음악 윈도우로 돌아가기</string>
   <string id="12011">비디오 윈도우로 돌아가기</string>
+
   <string id="12021">처음부터 시작</string>
   <string id="12022">%s 부터 되시작</string>
+
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12377">이전에 저장된 모든 값을 초기화합니다</string>
   <string id="12378">각각의 이미지를 표시할 시간</string>
   <string id="12379">회전 및 축소/확대 효과 사용</string>
+
   <string id="12383">12시간제</string>
   <string id="12384">24시간제</string>
   <string id="12385">일/월</string>
   <string id="12386">월/일</string>
+
   <string id="12390">시스템 가동시간</string>
   <string id="12391">분</string>
   <string id="12392">시간</string>
   <string id="12393">일</string>
   <string id="12394">총 가동시간</string>
+  <string id="12395">배터리 상태</string>
+
   <string id="12600">날씨</string>
+
   <string id="12900">화면보호기</string>
   <string id="12901">전체화면 OSD</string>
+
   <string id="13000">시스템</string>
   <string id="13001">즉시 하드디스크 끄기</string>
   <string id="13002">비디오만</string>
   <string id="13003">- 지연</string>
   <string id="13004">- 최소 파일 재생시간:</string>
   <string id="13005">종료</string>
+
   <string id="13008">종료 기능</string>
   <string id="13009">나가기</string>
   <string id="13010">최대절전</string>
   <string id="13014">최소화</string>
   <string id="13015">전원 버튼 동작</string>
   <string id="13016">시스템 전원 끄기</string>
+
   <string id="13020">혹시 ssh 를 통해 다른 세션이 활성화되어 있습니까?</string>
   <string id="13021">장착된 이동식 하드드라이브</string>
   <string id="13022">장치 제거 안전하지 않음</string>
   <string id="13023">정상적으로 장치 제거됨</string>
   <string id="13024">조이스틱 연결됨</string>
   <string id="13025">조이스틱 연결해제됨</string>
+
   <string id="13050">낮은 배터리에서 실행중</string>
+
   <string id="13100">깜박임 필터</string>
   <string id="13101">드라이버 선택 허용 (재시작 필요)</string>
+
   <string id="13105">수직동기</string>
   <string id="13106">사용안함</string>
   <string id="13107">비디오 재생중 사용함</string>
   <string id="13109">해상도 테스트 &amp; 적용</string>
   <string id="13110">해상도를 저장 하시겠습니까?</string>
   <string id="13111">현재 해상도를 유지 하시겠습니까?</string>
+
   <string id="13112">고품질 업스케일링</string>
   <string id="13113">사용안함</string>
   <string id="13114">SD 컨텐츠 사용함</string>
   <string id="13115">항상 사용함</string>
+
   <string id="13116">업스케일링 방식</string>
   <string id="13117">바이큐빅</string>
   <string id="13118">랑초스</string>
   <string id="13120">VDPAU</string>
   <string id="13121">VDPAU HQ 업스케일링 수준</string>
   <string id="13122">VDPAU 스튜디오 수준 색온도 변환</string>
+
   <string id="13130">다른 화면 비우기</string>
   <string id="13131">사용안함</string>
   <string id="13132">화면 비우기</string>
+
   <string id="13140">활성 연결 감지됨!</string>
   <string id="13141">진행할경우, XBMC 제어를 할수 없음</string>
   <string id="13142">사용안함. 이벤트 서버를 중지 하시겠습니까?</string>
+
   <string id="13144">애플 리모트 모드를 변경 하시겠습니까?</string>
   <string id="13145">만약 현재 XMBC 를 제어하는데 애플 리모트를</string>
   <string id="13146">사용한다면, 이 설정의 변경은  XBMC 를 제어하는데</string>
   <string id="13147">영향을 주게됩니다. 진행 하시겠습니까?</string>
+
   <string id="13159">서브넷 마스크</string>
   <string id="13160">게이트웨이</string>
   <string id="13161">기본 DNS</string>
   <string id="13162">초기화 실패</string>
+
   <string id="13170">안함</string>
   <string id="13171">즉시</string>
   <string id="13172">%i 초 후</string>
   <string id="13173">HDD 설치 날짜:</string>
   <string id="13174">HDD 전원 주기 횟수:</string>
+
   <string id="13200">프로파일</string>
   <string id="13201">'%s' 프로파일을 삭제 하시겠습니까?</string>
+
   <string id="13204">마지막 읽은 프로파일:</string>
   <string id="13205">알수없음</string>
   <string id="13206">덮어쓰기</string>
+
   <string id="13208">알람 시계</string>
   <string id="13209">알람 시계 간격(분)</string>
   <string id="13210">시작됨, %i분 후 알람</string>
   <string id="13212">%i 분 %i 초를 남겨두고 취소됨</string>
   <string id="13213">%2.0f분</string>
   <string id="13214">%2.0f초</string>
+
   <string id="13249">RAR의 자막 찾기</string>
   <string id="13250">자막 찾기...</string>
   <string id="13251">항목 이동</string>
   <string id="13252">여기에 항목 이동</string>
   <string id="13253">이동 취소</string>
+
   <string id="13270">하드웨어:</string>
   <string id="13271">CPU 사용량:</string>
+
   <string id="13274">연결됨, 그러나 DNS 를 사용할수 없습니다.</string>
   <string id="13275">하드디스크</string>
   <string id="13276">DVD-롬</string>
   <string id="13279">네트워크</string>
   <string id="13280">비디오</string>
   <string id="13281">하드웨어</string>
+
   <string id="13283">운영체제:</string>
   <string id="13284">CPU 속도:</string>
+
   <string id="13286">비디오 인코더:</string>
   <string id="13287">화면 해상도:</string>
+
   <string id="13292">A/V 케이블:</string>
+
   <string id="13294">DVD 지역:</string>
   <string id="13295">인터넷:</string>
   <string id="13296">연결됨</string>
   <string id="13297">연결안됨. 네트워크 설정을 확인하세요.</string>
+
   <string id="13299">설정 온도</string>
   <string id="13300">팬 속도</string>
   <string id="13301">자동 온도 조절</string>
   <string id="13334">라벨 수정</string>
   <string id="13335">기본값 사용</string>
   <string id="13336">버튼 제거</string>
+
   <string id="13340">변경안함</string>
   <string id="13341">녹색</string>
   <string id="13342">주황</string>
   <string id="13359">아티스트 미리보기 설정</string>
   <string id="13360">자동 미리보기 생성</string>
   <string id="13361">음성 사용</string>
+
   <string id="13375">장치 사용</string>
   <string id="13376">음량</string>
   <string id="13377">기본 보기 모드</string>
   <string id="13386">시간 기반 검색 사용</string>
   <string id="13387">트랙 이름 템플릿 - 오른쪽</string>
   <string id="13388">사전설정</string>
-  <string id="13389">이 시각화에 사용가능한
-사전설정이 없습니다</string>
-  <string id="13390">이 시각화에 사용가능한
-설정이 없습니다</string>
+  <string id="13389">이 시각화에 사용가능한 사전설정이 없습니다</string>
+  <string id="13390">이 시각화에 사용가능한 설정이 없습니다</string>
   <string id="13391">꺼내기/읽기</string>
   <string id="13392">오디오 재생중이면 시각화 사용</string>
   <string id="13393">크기 계산</string>
   <string id="13409">인기 250</string>
   <string id="13410">Last.fm 에 채널을 맞춤</string>
   <string id="13411">최소 팬 속도</string>
+  <string id="13412">이 항목부터 재생</string>
   <string id="13413">다운로드</string>
   <string id="13414">컴필레이션에만 있는 아티스트 포함</string>
   <string id="13415">렌더링 방식</string>
   <string id="13429">하드웨어 가속 허용 (VDADecoder)</string>
   <string id="13430">하드웨어 가속 허용 (OpenMax)</string>
   <string id="13431">픽셀 셰이더</string>
+  <string id="13432">하드웨어 가속 사용 (VideoToolbox)</string>
+
   <string id="13500">A/V 동기 방식</string>
   <string id="13501">오디오 클럭</string>
   <string id="13502">비디오 클럭 (오디오 버림/반복)</string>
   <string id="13508">높음</string>
   <string id="13509">매우 높음(느림!)</string>
   <string id="13510">화면에 재생 동기</string>
+
   <string id="13550">새로고침 비율 변경시 일시중지</string>
   <string id="13551">끄기</string>
   <string id="13552">%.1f 초</string>
   <string id="13553">%.1f 초</string>
+
   <string id="13600">애플 리모트</string>
+
   <string id="13602">리모트를 사용하여 XBMC 시작 허용</string>
   <string id="13603">순차 지연 시간</string>
+
   <string id="13610">사용안함</string>
   <string id="13611">표준</string>
   <string id="13612">유니버셜 리모트</string>
   <string id="13613">멀티 리모트 (하모니)</string>
+
   <string id="13620">애플 리모트 오류</string>
   <string id="13621">애플 리모트 지원을 사용할수 있습니다.</string>
+
   <string id="14000">연결재생</string>
   <string id="14001">연결재생 해제</string>
   <string id="14003">재생목록 파일 다운로드중...</string>
   <string id="14005">스트림 목록 분석중...</string>
   <string id="14006">스트림 목록 다운로드 실패</string>
   <string id="14007">재생목록 파일 다운로드 실패</string>
+
   <string id="14009">게임 디렉토리</string>
   <string id="14010">미리보기 자동 변경</string>
   <string id="14011">미리보기 자동 변경 사용</string>
   <string id="14034">DVD 캐시 - DVD-롬</string>
   <string id="14035">- 로컬 네트워크</string>
   <string id="14036">서비스</string>
+
   <string id="14038">네트워크 설정이 변경되었습니다</string>
   <string id="14039">네트워크 설정을 변경하려면 XBMC</string>
   <string id="14040">재시작이 필요합니다. 지금 재시작 하시겠습니까?</string>
   <string id="14041">인터넷 연결 대역폭 제한</string>
+
   <string id="14043">- 재생중에도 종료</string>
   <string id="14044">%i 분</string>
   <string id="14045">%i 초</string>
   <string id="14051">시간 형식</string>
   <string id="14052">날짜 형식</string>
   <string id="14053">GUI 필터</string>
+
   <string id="14055">백그라운드 검색 사용</string>
   <string id="14056">검색 중지</string>
   <string id="14057">미디어 정보 검색중에는 사용 불가</string>
   <string id="14069">설정을 지금 적용 하시겠습니까?</string>
   <string id="14070">변경을 지금 적용</string>
   <string id="14071">파일 이름변경 및 삭제 허용</string>
+
   <string id="14074">시간대 설정</string>
   <string id="14075">일광 절약 시간 사용</string>
   <string id="14076">즐겨찾기에 추가</string>
   <string id="14093">보안</string>
   <string id="14094">입력 장치</string>
   <string id="14095">전원 절약</string>
+
   <string id="15015">제거</string>
   <string id="15016">게임</string>
+
   <string id="15019">추가</string>
+
   <string id="15052">비밀번호</string>
+
   <string id="15100">라이브러리</string>
   <string id="15101">데이타베이스</string>
   <string id="15102">* 모든 앨범</string>
   <string id="15103">* 모든 아티스트</string>
   <string id="15104">* 모든 노래</string>
   <string id="15105">* 모든 장르</string>
+
   <string id="15107">버퍼링중...</string>
   <string id="15108">네비게이션 사운드</string>
   <string id="15109">스킨 기본값</string>
   <string id="15111">- 테마</string>
   <string id="15112">기본 테마</string>
+
   <string id="15200">Last.fm</string>
   <string id="15201">노래를 Last.fm 에 전송</string>
   <string id="15202">Last.fm 사용자명</string>
   <string id="15219">Libre.fm 비밀번호</string>
   <string id="15220">Libre.fm</string>
   <string id="15221">노래 전송</string>
+
   <string id="15250">Last.fm 라디오를 Last.fm 에 전송</string>
   <string id="15251">Last.fm 연결중...</string>
   <string id="15252">방송국 선택중...</string>
   <string id="15283">%name% 의 최근 들은 트랙</string>
   <string id="15284">%name 의 추천 Last.fm 라디오 듣기</string>
   <string id="15285">%name% 의 인기 태그</string>
+
   <string id="15287">현재 트랙을 선호 트랙에 추가 하시겠습니까?</string>
   <string id="15288">현재 트랙을 제거 하시겠습니까?</string>
   <string id="15289">선호 트랙에 추가됨: '%s'.</string>
   <string id="15296">제거 취소</string>
   <string id="15297">이 트랙을 선호 트랙에서 제거 하시겠습니까?</string>
   <string id="15298">이 트랙의 제거를 취소 하시겠습니까?</string>
+
   <string id="15300">경로를 찾지 못하거나 잘못됨</string>
   <string id="15301">네트워크 서버에 접속할수 없습니다</string>
   <string id="15302">서버 찾지 못함</string>
   <string id="15303">작업그룹 찾지 못함</string>
+
   <string id="15310">다중경로 소스 열기</string>
   <string id="15311">경로:</string>
+
   <string id="16000">일반</string>
+
   <string id="16002">인터넷 검색</string>
   <string id="16003">플레이어</string>
   <string id="16004">디스크로부터 미디어 재생</string>
+
   <string id="16008">새 제목 입력</string>
   <string id="16009">동영상 이름 입력</string>
   <string id="16010">프로파일 이름 입력</string>
   <string id="16033">데이터이스를 열수 없습니다.</string>
   <string id="16034">데이터베이스에서 노래를 가져오지 못했습니다.</string>
   <string id="16035">파티 모드 재생목록</string>
+  <string id="16036">디인터레이스 (Half)</string>
+  <string id="16037">디인터레이스 비디오</string>
+  <string id="16038">디인터레이스 방법</string>
+  <string id="16039">끔</string>
+  <string id="16040">자동</string>
+  <string id="16041">켬</string>
+
   <string id="16100">모든 비디오</string>
   <string id="16101">미시청</string>
   <string id="16102">시청</string>
   <string id="16103">시청으로 표시</string>
   <string id="16104">미시청으로 표시</string>
   <string id="16105">제목 수정</string>
+
   <string id="16200">동작 중지됨</string>
   <string id="16201">복사 실패</string>
   <string id="16202">최소 한개의 파일 복사 실패</string>
   <string id="16204">최소 한개의 파일 이동 실패</string>
   <string id="16205">삭제 실패</string>
   <string id="16206">최소 한개의 파일 삭제 실패</string>
+
   <string id="16300">비디오 스케일링 방식</string>
   <string id="16301">최근접이웃</string>
   <string id="16302">이중선형</string>
   <string id="16317">시간적 (반)</string>
   <string id="16318">시간적/공간적 (반)</string>
   <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 optimized</string>
+  <string id="16324">Software Blend</string>
+
   <string id="16400">후처리</string>
+
   <string id="17500">종료 시간제한 표시</string>
+
   <string id="19000">채널로 변경</string>
+
   <string id="20000">저장된 음악 폴더</string>
   <string id="20001">외부 DVD 플레이어 사용</string>
   <string id="20002">외부 DVD 플레이어</string>
   <string id="20003">트레이너 폴더</string>
   <string id="20004">스크린샷 폴더</string>
+
   <string id="20006">재생목록 폴더</string>
   <string id="20007">녹음</string>
   <string id="20008">스크린샷</string>
   <string id="20009">XBMC 사용</string>
+
   <string id="20011">음악 재생목록</string>
   <string id="20012">비디오 재생목록</string>
   <string id="20013">이 게임을 실행 하시겠습니까?</string>
   <string id="20017">로컬 미리보기</string>
   <string id="20018">미리보기 없음</string>
   <string id="20019">미리보기 선택</string>
+
+  <!-- string id 20022 will always be set to an empty string (LocalizeStrings.cpp)-->
+  <string id="20022"></string>
   <string id="20023">충돌</string>
   <string id="20024">새로 검색</string>
   <string id="20025">전체 검색</string>
   <string id="20026">지역</string>
+
+  <!-- string id's 20027 thru 20034 are reserved for temperature strings (LocalizeStrings.cpp)-->
+
   <string id="20037">요약</string>
   <string id="20038">음악 윈도우 잠금</string>
   <string id="20039">비디오 윈도우 잠금</string>
   <string id="20053">마스터 모드 나감</string>
   <string id="20054">마스터 모드 들어감</string>
   <string id="20055">Allmusic.com 미리보기</string>
+
   <string id="20057">미리보기 제거</string>
   <string id="20058">프로파일 추가...</string>
   <string id="20059">모든 앨범의 정보 요청</string>
   <string id="20184">EXIF 정보를 이용해 사진 회전</string>
   <string id="20185">TV 쇼에서 포스터 보기 스타일 사용</string>
   <string id="20186">기다려 주세요</string>
+
   <string id="20189">줄거리 &amp; 리뷰에 자동 스크롤 사용</string>
   <string id="20190">사용자 지정</string>
   <string id="20191">디버그 로그인 사용</string>
   <string id="20197">음악 라이브러리 가져오기</string>
   <string id="20198">아티스트 찾지 못함!</string>
   <string id="20199">아티스트 정보 다운로드 실패</string>
+
+  <!-- string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)-->
+
   <string id="20250">파티모드 시작! (비디오)</string>
   <string id="20251">폭탄주 (비디오)</string>
   <string id="20252">컵 채우기 (비디오)</string>
   <string id="20256">HTS Tvheadend 클라이언트</string>
   <string id="20257">VDR Streamdev 클라이언트</string>
   <string id="20258">MythTV 클라이언트</string>
+  <string id="20259">네트워크 파일시스템 (NFS)</string>
+  <string id="20260">Secure Shell (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
+
   <string id="20300">웹 서버 디렉토리 (HTTP)</string>
   <string id="20301">웹 서버 디렉토리 (HTTPS)</string>
   <string id="20302">폴더에 쓸수 없음:</string>
   <string id="20303">건너뛰고 진행 하시겠습니까?</string>
   <string id="20304">RSS 피드</string>
+
   <string id="20307">보조 DNS 서버</string>
   <string id="20308">DHCP 서버:</string>
   <string id="20309">새 폴더 만들기</string>
   <string id="20310">재생때 LCD 흐리게</string>
   <string id="20311">알수없음 또는 온보드(보호됨)</string>
   <string id="20312">일시중지때 LCD 흐리게</string>
+
   <string id="20314">비디오 - 라이브러리</string>
+
   <string id="20316">정렬: 아이디</string>
+
   <string id="20324">부분 재생...</string>
   <string id="20325">조정값 초기화</string>
   <string id="20326">기본값으로 %s 조정값를</string>
   <string id="20327">초기화하게 됩니다.</string>
   <string id="20328">대상 찾기</string>
+  <string id="20329">영화 파일들이 영화 제목과 같은 개별 폴더에 저장됨</string>
   <string id="20330">검색에 폴더 이름 사용</string>
   <string id="20331">파일</string>
   <string id="20332">검색에 파일이나 폴더 이름을 사용 하시겠습니까?</string>
   <string id="20401">뮤직비디오 재생</string>
   <string id="20402">라이브러리에 추가할때 배우 미리보기 다운로드</string>
   <string id="20403">배우 미리보기 설정</string>
+
   <string id="20405">에피소드 북마크 제거</string>
   <string id="20406">에피소드 북마크 설정</string>
   <string id="20407">자료수집기 설정</string>
   <string id="20416">초연</string>
   <string id="20417">각본</string>
   <string id="20418">파일 및 폴더 이름 정리</string>
+  <string id="20419">파일명을 라이브러리 제목으로 표시</string>
+
   <string id="20420">안함</string>
   <string id="20421">한 시즌 일때만</string>
   <string id="20422">항상</string>
   <string id="20453">에피소드</string>
   <string id="20454">청취자</string>
   <string id="20455">청취자</string>
+  <string id="20456">시리즈 영화 팬아트 설정</string>
+  <string id="20457">시리즈 영화</string>
+  <string id="20458">시리즈 영화 묶기</string>
+  <!-- up to 21329 is reserved for the video db !! !-->
+
   <string id="21330">숨김 파일 및 디렉토리 보이기</string>
+
   <string id="21331">TuxBox 클라이언트</string>
   <string id="21332">경고: 대상 TuxBox 장치가 녹음-모드 입니다!</string>
   <string id="21333">스트림이 중지됩니다!</string>
   <string id="21335">스트림을 시작 하시겠습니까?</string>
   <string id="21336">연결: %s</string>
   <string id="21337">TuxBox 장치</string>
+  <!-- up to 21355 is reserved for the TuxBox Client!! !-->
+
   <string id="21359">미디어 공유 추가...</string>
   <string id="21360">UPnP 를 통해 비디오 및 음악 라이브러리 공유</string>
+
   <string id="21364">미디어 공유 수정</string>
   <string id="21365">미디어 공유 제거</string>
   <string id="21366">자막 폴더</string>
   <string id="21367">영화 &amp; 추가 자막 디렉토리</string>
+  <string id="21368">ASS/SSA 자막 글꼴 무시</string>
+
   <string id="21369">마우스 사용</string>
   <string id="21370">미디어 재생중 네비게이션 사운드 사용</string>
   <string id="21371">미리보기</string>
   <string id="21451">인터넷 연결이 필요함.</string>
   <string id="21452">더 가져오기...</string>
   <string id="21453">루트 파일시스템</string>
+  <string id="21454">캐시 가득참</string>
+  <string id="21455">연속 재생에 필요한 양에 도달하기 전에 캐시가 채워짐</string>
+
+  <string id="21460">자막 위치</string>
+  <string id="21461">고정</string>
+  <string id="21462">동영상 하단</string>
+  <string id="21463">동영상 아래</string>
+  <string id="21464">동영상 상단</string>
+  <string id="21465">동영상 위</string>
+
   <string id="21800">파일 이름</string>
   <string id="21801">파일 경로</string>
   <string id="21802">파일 크기</string>
   <string id="21806">설명</string>
   <string id="21807">컬러/흑백</string>
   <string id="21808">JPEG 처리</string>
+
   <string id="21820">날짜/시간</string>
   <string id="21821">설명</string>
   <string id="21822">카메라 제조사</string>
   <string id="21841">GPS 경도</string>
   <string id="21842">GPS 고도</string>
   <string id="21843">방향</string>
+
   <string id="21860">추가 카테고리</string>
   <string id="21861">키워드</string>
   <string id="21862">제목</string>
   <string id="21898">활동기간</string>
   <string id="21899">라벨</string>
   <string id="21900">출생/결성</string>
+
+  <!-- strings 21900 thru 21999 reserved for slideshow info -->
+
   <string id="22000">시작때 라이브러리 업데이트</string>
   <string id="22001">라이브러리 업데이트 진행 숨기기</string>
   <string id="22002">- DNS 접미사</string>
+
   <string id="22003">%2.3f초</string>
   <string id="22004">%2.3f초 느리게</string>
   <string id="22005">%2.3f초 빠르게</string>
   <string id="22022">목록에 비디오 파일 보이기</string>
   <string id="22023">DirectX 공급자:</string>
   <string id="22024">Direct3D 버전:</string>
+
+  <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">글꼴</string>
   <string id="22031">- 크기</string>
   <string id="22032">- 색깔</string>
   <string id="22041">하양/빨강</string>
   <string id="22042">하양/파랑</string>
   <string id="22043">검정/하양</string>
+
   <string id="22079">기본 선택 동작</string>
   <string id="22080">선택</string>
   <string id="22081">정보 보이기</string>
   <string id="22082">더 보기...</string>
   <string id="22083">모두 재생</string>
+
   <string id="23049">문자다중방송 사용할수 없음</string>
   <string id="23050">문자다중방송 활성화</string>
   <string id="23051">파트 %i</string>
   <string id="23052">%i 바이트 버퍼링</string>
   <string id="23053">중지중</string>
   <string id="23054">실행중</string>
+
+  <!-- strings 23100 thru 23150 reserved for external player -->
   <string id="23100">외장 플레이어 활성</string>
   <string id="23101">플레이어를 종료하려면 예를 누르세요</string>
+
   <string id="23104">재생이 끝났으면 예를 누르세요</string>
+
+  <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
   <string id="24000">추가기능</string>
   <string id="24001">추가기능</string>
   <string id="24002">추가기능 옵션</string>
   <string id="24003">추가기능 정보</string>
+
   <string id="24005">미디어 소스</string>
   <string id="24007">영화 정보</string>
   <string id="24008">화면보호기</string>
   <string id="24016">앨범 정보</string>
   <string id="24017">아티스트 정보</string>
   <string id="24018">서비스</string>
+
   <string id="24020">설정</string>
   <string id="24021">사용안함</string>
   <string id="24022">사용함</string>
   <string id="24041">압축 파일에서 설치</string>
   <string id="24042">%i%% 다운로드중</string>
   <string id="24043">사용가능한 업데이트</string>
+  <string id="24044">설치 요구조건을 충족하지 않습니다</string>
+  <string id="24045">애드온의 구조가 바르지 않습니다</string>
+  <string id="24046">%s 을 설치된 애드온이 사용합니다.</string>
+  <string id="24047">이 추가기능은 제거할 수 없습니다</string>
+  <string id="24048">되돌리기</string>
+
   <string id="24050">사용가능한 추가기능</string>
   <string id="24051">버전:</string>
   <string id="24052">권리포기</string>
   <string id="24067">현재 추가기능 다운로드중</string>
   <string id="24068">업데이트 사용가능</string>
   <string id="24069">업데이트</string>
+
   <string id="24070">추가기능을 읽을수 없음.</string>
   <string id="24071">알수없는 오류 발생함.</string>
   <string id="24072">설정이 필요함</string>
   <string id="24073">연결할수 없음</string>
   <string id="24074">재시작 필요함</string>
   <string id="24075">사용안함</string>
+  <string id="24076">추가기능 필요함</string>
   <string id="24080">재연결 하시겠습니까?</string>
   <string id="24089">추가기능 재시작</string>
   <string id="24090">추가기능 관리자 잠금</string>
+
+  <string id="24094">(현재)</string>
+  <string id="24095">(차단됨)</string>
   <string id="24096">추가기능이 저장소에 깨진것으로 표시되어 있습니다.</string>
   <string id="24097">시스템에서 사용안함으로 하시겠습니까?</string>
   <string id="24098">깨짐</string>
   <string id="24099">이 스킨으로 변경 하시겠습니까?</string>
+  <string id="24100">이 기능을 사용하려면 추가기능을 다운로드해야 합니다:</string>
+  <string id="24101">이 추가기능을 다운로드하겠습니까?</string>
   <string id="25000">알림</string>
+
+  <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29800">라이브러리 모드</string>
   <string id="29801">쿼티 키보드</string>
   <string id="29802">패스스루 오디오 사용중</string>
+
+  <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
+  <!-- strings 31000 thru 31999 reserved for skins -->
+  <!-- strings 32000 thru 32999 reserved for scripts -->
+  <!-- strings 33000 thru 33999 reserved for common strings used in addons -->
   <string id="33001">예고편 품질</string>
   <string id="33002">스트림</string>
   <string id="33003">다운로드</string>
   <string id="33080">싫어함</string>
   <string id="33081">이 파일은 연결되었습니다, 재생하고 싶은 부분을 선택하세요.</string>
   <string id="33082">스크립트 경로</string>
-  <string id="33083">사용자 지정 스크립트 버튼 사용</string>
+  <string id="33083">사용자 스크립트 버튼 사용</string>
+
+  <string id="33100">시작할 수 없음</string>
+  <string id="33101">웹서버</string>
+  <string id="33102">이벤트 서버</string>
+  <string id="33103">원격 커뮤니케이션 서버</string>
+
+  <string id="33200">새 연결 검색됨</string>
+
+  <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
   <string id="34002">Wav</string>
   <string id="34003">DXVA2</string>
   <string id="34004">VAAPI</string>
   <string id="34005">Flac</string>
+
   <string id="34100">스피커 설정</string>
   <string id="34101">2.0</string>
   <string id="34102">2.1</string>
   <string id="34108">5.1</string>
   <string id="34109">7.0</string>
   <string id="34110">7.1</string>
+  <!-- 34112-34200 reserved for future use -->
+
+  <string id="34201">재생할 다음 항목이 없습니다</string>
+  <string id="34202">재생할 이전 항목이 없습니다</string>
+
+  <string id="34300">제로컨프 시작 실패</string>
+  <string id="34301">애플 봉주르 서비스가 설치되어 있습니까? 자세한 정보는 로그를 확인하세요.</string>
+  
+  <string id="34400">비디오 렌더링</string>
+  <string id="34401">비디오 필터/스케일러 초기화 실패. 이중선형 스케일링으로 변경합니다</string>
+  <string id="34402">오디오 장치 초기화 실패</string>
+  <string id="34403">오디오 설정을 확인하세요</string>
+
+  <string id="35000">주변장치</string>
+
+  <string id="35001">Generic HID 장치</string>
+  <string id="35002">Generic 네트워크 어댑터</string>
+  <string id="35003">Generic 디스크</string>
+  <string id="35004">이 장치에 대한 설정이 없습니다.</string>
+  <string id="35005">새 장치 설정됨</string>
+  <string id="35006">장치 제거됨</string>
+  <string id="35007">이 장치에 사용할 키맵</string>
+  <string id="35008">키맵 활성화</string>
+
+  <string id="35500">위치</string>
+  <string id="35501">클래스</string>
+  <string id="35502">이름</string>
+  <string id="35503">제조업체</string>
+  <string id="35504">하드웨어 ID</string>
+  
+  <string id="36000">Pulse-Eight CEC 어댑터</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">키보드 사이드 명령으로 전환</string>
+  <string id="36003">리모콘 사이드 명령으로 전환</string>
+  <string id="36004">"user" 버튼 명령 누르기</string>
+  <string id="36005">스위치 사이드 명령 사용</string>
+  <string id="36006">어댑터를 열 수 없습니다</string>
+  <string id="36007">XBMC 시작시 TV 켜기</string>
+  <string id="36008">XBMC 종료시 장치 전원 끄기</string>
+  <string id="36009">화면보호기 작동시 장치를 대기모드로 설정</string>
+  <string id="36010"></string>
+  <string id="36011">CEC 포트를 찾을 수 없습니다. 수동으로 설정하세요.</string>
+  <string id="36012">CEC 어댑터를 찾을 수 없음.</string>
+  <string id="36013">지원하지 않는 libcec 인터페이스 버전입니다. %d 가 XBMC가 지원하는 버전보다 높습니다 (%d)</string>
+  <string id="36014">TV가 꺼지면 PC를 대기모드로 전환</string>
+  <string id="36015">HDMI 포트 번호</string>
+  <string id="36016">연결됨</string>
+  <string id="36017">어댑터가 확인되었으나 libcec를 사용할 수 없습니다</string>
+  <string id="36018">TV의 언어 설정 사용</string>
 </strings>
diff --git a/language/Lithuanian/langinfo.xml b/language/Lithuanian/langinfo.xml
new file mode 100644 (file)
index 0000000..8c5ea3b
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<language>
+  <charsets>
+    <gui unicodefont="true">ISO-8859-13</gui>
+    <subtitle>CP1257</subtitle>
+  </charsets>
+  <dvd>
+    <menu>lt</menu>
+    <audio>lt</audio>
+    <subtitle>lt</subtitle>
+  </dvd>
+  <regions>
+    <region name="Lithuanian">
+      <dateshort>DD.MM.YYYY</dateshort>
+      <datelong>DDDD, D MMMM YYYY</datelong>
+      <time symbolAM="" symbolPM="">HH:mm:ss</time>
+      <tempunit>C</tempunit>
+      <speedunit>kmh</speedunit>
+      <timezone>CEST</timezone>
+    </region>
+  </regions>
+</language>
diff --git a/language/Lithuanian/strings.xml b/language/Lithuanian/strings.xml
new file mode 100644 (file)
index 0000000..46bfca0
--- /dev/null
@@ -0,0 +1,2411 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--Translator: Artūras Griškonis (ArtX38)-->
+<!--Email: info@xbmc.lt-->
+<!--Date of translation: 02/03/2012-->
+<!--Based on english strings version 4a0e4931310c8957d73ffec0cf6fdfa9292bb8d4 (08.02.2012)-->
+<strings>
+  <string id="0">Programos</string>
+  <string id="1">Foto</string>
+  <string id="2">Muzika</string>
+  <string id="3">Video</string>
+  <string id="4">TV-Gidas</string>
+  <string id="5">Nustatymai</string>
+  <string id="6">XBMC SVN</string>
+  <string id="7">Failų menedžeris</string>
+  <string id="8">Orai</string>
+  <string id="9">XBMC media centras</string>
+
+  <string id="11">Pirmadienis</string>
+  <string id="12">Antradienis</string>
+  <string id="13">Trečiadienis</string>
+  <string id="14">Ketvirtadienis</string>
+  <string id="15">Penktadienis</string>
+  <string id="16">Šeštadienis</string>
+  <string id="17">Sekmadienis</string>
+
+  <string id="21">Sausis</string>
+  <string id="22">Vasaris</string>
+  <string id="23">Kovas</string>
+  <string id="24">Balandis</string>
+  <string id="25">Gegužė</string>
+  <string id="26">Birželis</string>
+  <string id="27">Liepa</string>
+  <string id="28">Rugpjūtis</string>
+  <string id="29">Rugsėjis</string>
+  <string id="30">Spalis</string>
+  <string id="31">Lapkritis</string>
+  <string id="32">Gruodis</string>
+
+  <string id="41">Pir</string>
+  <string id="42">Ant</string>
+  <string id="43">Tre</string>
+  <string id="44">Ket</string>
+  <string id="45">Pen</string>
+  <string id="46">Šeš</string>
+  <string id="47">Sek</string>
+
+  <string id="51">Saus</string>
+  <string id="52">Vasa</string>
+  <string id="53">Kova</string>
+  <string id="54">Bala</string>
+  <string id="55">Gegu</string>
+  <string id="56">Birž</string>
+  <string id="57">Liep</string>
+  <string id="58">Rugp</string>
+  <string id="59">Rugs</string>
+  <string id="60">Spal</string>
+  <string id="61">Lapk</string>
+  <string id="62">Gruo</string>
+
+  <string id="71">N</string>
+  <string id="72">NNE</string>
+  <string id="73">NE</string>
+  <string id="74">ENE</string>
+  <string id="75">E</string>
+  <string id="76">ESE</string>
+  <string id="77">SE</string>
+  <string id="78">SSE</string>
+  <string id="79">S</string>
+  <string id="80">SSW</string>
+  <string id="81">SW</string>
+  <string id="82">WSW</string>
+  <string id="83">W</string>
+  <string id="84">WNW</string>
+  <string id="85">NW</string>
+  <string id="86">NNW</string>
+  <string id="87">VAR</string>
+
+  <string id="98">Vaizdas: Auto</string>
+  <string id="99">Vaizdas: Auto didelis</string>
+  <string id="100">Vaizdas: Ikonos</string>
+  <string id="101">Vaizdas: Sąrašas</string>
+  <string id="102">Nuskaityti</string>
+  <string id="103">Rūš. pagal: Vardą</string>
+  <string id="104">Rūš. pagal: Datą</string>
+  <string id="105">Rūš. pagal: Dydį</string>
+  <string id="106">Ne</string>
+  <string id="107">Taip</string>
+  <string id="108">Prezentacija</string>
+  <string id="109">Sukurti miniatiūrą</string>
+  <string id="110">Sukurti miniatiūras</string>
+  <string id="111">Etiketės</string>
+  <string id="112">Laukime</string>
+  <string id="113">Nepavyko atnaujinti</string>
+  <string id="114">Nepavyko įdiegti</string>
+  <string id="115">Kopijuoti</string>
+  <string id="116">Perkelti</string>
+  <string id="117">Ištrynti</string>
+  <string id="118">Pervadinti</string>
+  <string id="119">Naujas aplankas</string>
+  <string id="120">Kopijavimo patvirtinimas</string>
+  <string id="121">Perkėlimo patvirtinimas</string>
+  <string id="122">Išmetimo patvirtinimas?</string>
+  <string id="123">Kopijuoti failus?</string>
+  <string id="124">Perkelti failus?</string>
+  <string id="125">Ištrynti failus? - Atkūrimas neįmanomas</string>
+  <string id="126">Padėtis</string>
+  <string id="127">Objektas(-ai)</string>
+  <string id="128">Pagrindiniai</string>
+  <string id="129">Prezentacija</string>
+  <string id="130">Info apie sistemą</string>
+  <string id="131">Ekranas</string>
+  <string id="132">Albumai</string>
+  <string id="133">Atlikėjai</string>
+  <string id="134">Dainos</string>
+  <string id="135">Žanrai</string>
+  <string id="136">Grojaraščiai</string>
+  <string id="137">Paieška</string>
+  <string id="138">Info apie sistemą</string>
+  <string id="139">Temperatūra:</string>
+  <string id="140">CPU:</string>
+  <string id="141">GPU:</string>
+  <string id="142">Laikas:</string>
+  <string id="143">Aktualus:</string>
+  <string id="144">Versija:</string>
+  <string id="145">Tinklas:</string>
+  <string id="146">Tipas:</string>
+  <string id="147">Statinis</string>
+  <string id="148">DHCP</string>
+  <string id="149">MAC-adresas</string>
+  <string id="150">IP-adresas</string>
+  <string id="151">Sujungimas:</string>
+  <string id="152">Pusiau dvipusis</string>
+  <string id="153">Pilnai dvipusis</string>
+  <string id="154">Laikmenos</string>
+  <string id="155">DVD grotuvo dėtuvė</string>
+  <string id="156">Laisva</string>
+  <string id="157">Video</string>
+  <string id="158">Laisva atminties</string>
+  <string id="159">Nėra jungties</string>
+  <string id="160">Laisva</string>
+  <string id="161">Neprieinama</string>
+  <string id="162">Dėtuvė atidaryta</string>
+  <string id="163">Skaitymas</string>
+  <string id="164">Grotuve nėra disko</string>
+  <string id="165">Diskas grotuve</string>
+  <string id="166">Viršeliai</string>
+
+  <string id="169">Ekrano rezoliucija</string>
+  <string id="170">Nustatyti ekrano atnaujinimo dažnį</string>
+
+  <string id="172">Išleidimo data</string>
+  <string id="173">Rodyti formatą 4:3 kaip</string>
+
+  <string id="175">Nustatymai</string>
+  <string id="176">Stiliai</string>
+
+  <string id="179">Daina</string>
+  <string id="180">Ilgis</string>
+  <string id="181">Pasirinkite albumą</string>
+  <string id="182">Takeliai</string>
+  <string id="183">Peržiūra</string>
+  <string id="184">Atnaujinti</string>
+  <string id="185">Albumų paieška</string>
+  <string id="186">Gerai</string>
+  <string id="187">Albumų nerasta!</string>
+  <string id="188">Rinktis viską</string>
+  <string id="189">Media duomenų skenavimas</string>
+  <string id="190">Išsaugoti</string>
+  <string id="191">Sumaišyti</string>
+  <string id="192">Išvalyti</string>
+  <string id="193">Skenuoti</string>
+  <string id="194">Paieška...</string>
+  <string id="195">Informacija nerasta!</string>
+  <string id="196">Pasirinkite filmą:</string>
+  <string id="197">Informacijos užklausa iš %s</string>
+  <string id="198">Duomenų atsiuntimas apie filmą</string>
+  <string id="199">Interneto sąsajos</string>
+
+  <string id="202">Devizas</string>
+  <string id="203">Siužetas</string>
+
+  <string id="205">Balsų:</string>
+  <string id="206">Artistai</string>
+  <string id="207">Siužetas</string>
+  <string id="208">Atkūrti</string>
+  <string id="209">Sekantis</string>
+  <string id="210">Ankstesnis</string>
+  <string id="213">Kalibravimo sąsaja...</string>
+  <string id="214">Ekrano kalibravimas...</string>
+  <string id="215">Išlyginimas</string>
+  <string id="216">Didinimo laipsnis</string>
+  <string id="217">Vaizdo atitikmuo</string>
+  <string id="218">DVD grotuvas</string>
+  <string id="219">Prašom idėti diską...</string>
+  <string id="220">Nuotoliniai resursai</string>
+  <string id="221">Neprisijungę prie tinklo</string>
+  <string id="222">Atšaukti</string>
+  <string id="224">Prezentacijos rodymo laikas</string>
+  <string id="225">Vertikalus perėjimas</string>
+  <string id="226">Testiniai šablonai...</string>
+  <string id="227">Ieškoti info apie audio CD internete</string>
+  <string id="228">Maišyti grojaraštį paleidimo metu</string>
+  <string id="229">Sustabdyti HDD po (min.)</string>
+  <string id="230">Video filtrai</string>
+  <string id="231">Tuščia</string>
+  <string id="232">Taškas</string>
+  <string id="233">Linijinis</string>
+  <string id="234">Anizotropinis</string>
+  <string id="235">Šachmatinis</string>
+  <string id="236">Kubinis pagal Gaussa</string>
+  <string id="237">Mąžinimas</string>
+  <string id="238">Didinimas</string>
+  <string id="239">Išvalyti grojaraštį po grojimo</string>
+  <string id="240">Ekrano režimas</string>
+  <string id="241">Visas ekranas #%d</string>
+  <string id="242">Lange</string>
+  <string id="243">Atnaujinimo dažnis</string>
+  <string id="244">Visas ekranas</string>
+  <string id="245">Dydis: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1) (VShift: %2.2f)</string>
+
+  <string id="247">Skriptai</string>
+  <string id="248">Kalba</string>
+  <string id="249">Muzika</string>
+  <string id="250">Video efektai</string>
+  <string id="251">Pasirinkite paskirties aplanką</string>
+  <string id="252">- stereo išėjimas į visus garsiakalbius</string>
+  <string id="253">Kanalų kiekis</string>
+  <string id="254">- garso išėjimas formate DTS®</string>
+  <string id="255">CDDB</string>
+  <string id="256">Užklausa apie CD</string>
+  <string id="257">Klaida</string>
+  <string id="258">Skaityti informaciją iš žymės</string>
+  <string id="259">Atidarymas</string>
+  <string id="260">Shoutcast</string>
+  <string id="261">Paleidimo laukimas...</string>
+  <string id="262">Skriptų darbo LOG</string>
+  <string id="263">Įjungti interneto serverį</string>
+  <string id="264">Įrašas</string>
+  <string id="265">Sustabdyti įrašą</string>
+  <string id="266">Rūšiuoti pagal: Takelis</string>
+  <string id="267">Rūšiuoti pagal: Laikas</string>
+  <string id="268">Rūšiuoti pagal: Pavadinimas</string>
+  <string id="269">Rūšiuoti pagal: Atlikėjas</string>
+  <string id="270">Rūšiuoti pagal: Albumas</string>
+  <string id="271">Top 100</string>
+  <string id="272">Ekrano nustatymai (viršutinis kairysis kampas)</string>
+  <string id="273">Ekrano nustatymai (apatinis dešinysis kampas)</string>
+  <string id="274">Subtitrų pozicija</string>
+  <string id="275">Aukščio ir pločio santykio reguliavimas</string>
+  <string id="276">Keiskite rodykles ekrano dydžio koregavimui</string>
+  <string id="277">Keiskite juostelę subtitrų rodymo koregavimui</string>
+  <string id="278">Keiskite stačiakampį taip, kad pasiekti tikslų kvadratą</string>
+  <string id="279">Nepavyko įkelti nustatymų</string>
+  <string id="280">Naudoti numatytus nustatymus</string>
+  <string id="281">Prašome patikrinti XML failus</string>
+  <string id="282">Rasta %i objektas(-ų)</string>
+  <string id="283">Paieškos rezultatai</string>
+  <string id="284">Nieko nerasta</string>
+
+  <string id="287">Subtitrai</string>
+  <string id="288">Šriftas</string>
+  <string id="289">- Dydis</string>
+  <string id="290">Dinaminis diapazono glaudinimas</string>
+  <string id="291">Video</string>
+  <string id="292">Audio</string>
+  <string id="293">Pasirinkti subtitrus</string>
+  <string id="294">Įdėti užsklandą</string>
+  <string id="296">Nuimti užsklandą</string>
+  <string id="297">Garso perėjimas</string>
+  <string id="298">Užsklanda</string>
+  <string id="299">- AAC garso formatas</string>
+  <string id="300">- MP1 garso formatas</string>
+  <string id="301">- MP2 garso formatas</string>
+  <string id="302">- MP3 garso formatas</string>
+  <string id="303">Užlaikymas</string>
+  <string id="304">Kalba</string>
+  <string id="305">Įjungta</string>
+  <string id="306">Ne-formatas</string>
+
+  <string id="312">(0=auto)</string>
+  <string id="313">Duomenų bazės valymas</string>
+  <string id="314">Paruošimas...</string>
+  <string id="315">Duomenų bazės klaida</string>
+  <string id="316">Dainų paieška...</string>
+  <string id="317">Duomenų bazės valymas baigtas</string>
+  <string id="318">Dainų valymas...</string>
+  <string id="319">Dainų valymo klaida</string>
+  <string id="320">Atlikėjų valymas...</string>
+  <string id="321">Atlikėjų valymo klaida</string>
+  <string id="322">Žanro valymas...</string>
+  <string id="323">Žanrų valymo klaida</string>
+  <string id="324">Nuorodos valymas...</string>
+  <string id="325">Nuorodų valymo klaida</string>
+  <string id="326">Albumo valymas...</string>
+  <string id="327">Albumų valymo klaida</string>
+  <string id="328">Įrašo pakeitimai...</string>
+  <string id="329">Įrašų pakeitimų klaida</string>
+  <string id="330">Tai užtruks kelias min...</string>
+  <string id="331">Duomenų bazės glaudinimas...</string>
+  <string id="332">Duomenų bazės glaudinimo klaida</string>
+  <string id="333">Norite valyti biblioteką?</string>
+  <string id="334">Valyti biblioteką...</string>
+  <string id="335">Pradėti</string>
+  <string id="336">Kadrų dažnio konversija</string>
+  <string id="337">Garso formatas</string>
+  <string id="338">Analoginis</string>
+  <string id="339">Optinis/Koaxalinis</string>
+  <string id="340">Įvairūs atlikėjai</string>
+  <string id="341">Paleisti diską</string>
+  <string id="342">Filmai</string>
+  <string id="343">Pritaikyti kadrų dažnį</string>
+  <string id="344">Artistai</string>
+  <string id="345">Metai</string>
+  <string id="346">Padidinti garsą maišant</string>
+  <string id="350">Programos</string>
+  <string id="351">Atjungta</string>
+  <string id="352">Pritemdymas</string>
+  <string id="353">Juodas ekranas</string>
+  <string id="354">Žymės 'Matrica'</string>
+  <string id="355">Paleisti ekrano užsklandą...</string>
+  <string id="356">Užsklanda</string>
+  <string id="357">Baigti darbą po...</string>
+  <string id="358">Visi albumai</string>
+  <string id="359">Nauji albumai</string>
+  <string id="360">Užsklanda</string>
+  <string id="361">Rekurs. Prezentacija</string>
+  <string id="362">Ekrano pritemdymo lygis</string>
+  <string id="363">Rušiuoti pagal: Failą</string>
+  <string id="364">- garso išėjimas formate Dolby Digital® (AC3)</string>
+  <string id="365">Rušiuoti pagal: Vardą</string>
+  <string id="366">Rušiuoti pagal: Metus</string>
+  <string id="367">Rušiuoti pagal: Reitingą</string>
+  <string id="368">IMDb</string>
+  <string id="369">Pavadinimas</string>
+  <string id="370">Dulksna</string>
+  <string id="371">Vietomis</string>
+  <string id="372">Daugiausia</string>
+  <string id="373">Saulėta</string>
+  <string id="374">Debesuota</string>
+  <string id="375">Sniegas</string>
+  <string id="376">Lietus</string>
+  <string id="377">Nedidelis</string>
+  <string id="378">Ryte</string>
+  <string id="379">Dieną</string>
+  <string id="380">Liūtis</string>
+  <string id="381">Nedaug</string>
+  <string id="382">Vietomis</string>
+  <string id="383">Vėjas</string>
+  <string id="384">Stiprus</string>
+  <string id="385">Ryški</string>
+  <string id="386">Giedra</string>
+  <string id="387">Apsiniaukę</string>
+  <string id="388">Anksyvi</string>
+  <string id="389">Gausus</string>
+  <string id="390">Audrotas</string>
+  <string id="391">Žemas</string>
+  <string id="392">Vidutinis</string>
+  <string id="393">Aukštas</string>
+  <string id="394">Rūkas</string>
+  <string id="395">Dunlksna</string>
+  <string id="396">Vietomis</string>
+  <string id="397">Laikas atnaujinti</string>
+  <string id="398">Temperatūros matavimo vienetas</string>
+  <string id="399">Vėjo geičio matavimo vienetas</string>
+  <string id="400">Oras</string>
+  <string id="401">Temperatūra</string>
+  <string id="402">Jaučiasi kaip</string>
+  <string id="403">Uf lygis</string>
+  <string id="404">Vėjas</string>
+  <string id="405">Rasos taškas</string>
+  <string id="406">Drėgnumas</string>
+
+  <string id="409">Pagal nutilėjimą</string>
+  <string id="410">Prijungimas prie Hidrometeocentro</string>
+  <string id="411">Gauti orų prognozę:</string>
+  <string id="412">Neimanoma gauti orų prognozės</string>
+  <string id="413">Rankiniu būdu</string>
+  <string id="414">Nėra šio albumo aprašymo</string>
+  <string id="415">Gauti eskizus...</string>
+  <string id="416">Nėra duomenų</string>
+  <string id="417">Vaizdas: Dideli ženkliukai</string>
+  <string id="418">Min.</string>
+  <string id="419">Maks.</string>
+  <string id="420">HDMI</string>
+
+  <string id="422">Pašalinti albumo duomenis</string>
+  <string id="423">Pašalinti CD duomenis</string>
+  <string id="424">Parinktys</string>
+  <string id="425">Duomenys apie albumą nerasti</string>
+  <string id="426">Duomenys apie CD nerasti</string>
+  <string id="427">Diskas</string>
+  <string id="428">Idėkite gerą CD/DVD diską</string>
+  <string id="429">Idėkite sekantį CD/DVD diską</string>
+  <string id="430">Rušiuoti pagal: №DVD</string>
+  <string id="431">Nėra talpyklos</string>
+  <string id="432">Pašalinti filmą iš bibliotekos</string>
+  <string id="433">Ar tikrai ištrinti '%s'?</string>
+  <string id="434">Iš %s į %i %s</string> <!--From <wind dir.> at <speed> <unit>-->
+
+  <string id="437">Keičiamasis diskas</string>
+  <string id="438">Failo atidarymas</string>
+  <string id="439">Buferizacija</string>
+  <string id="440">HDD diskas</string>
+  <string id="441">UDF</string>
+  <string id="442">Vietinis tinklas</string>
+  <string id="443">Internetas</string>
+  <string id="444">Video</string>
+  <string id="445">Audio</string>
+  <string id="446">DVD</string>
+  <string id="447">Auto paleidimas</string>
+  <string id="448">LCD ekranas</string>
+  <string id="449">Įjungta</string>
+  <string id="450">Ženklų kiekis eilėje</string>
+  <string id="451">1 eilutė adresas</string>
+  <string id="452">2 eilutė adresas</string>
+  <string id="453">3 eilutė adresas</string>
+  <string id="454">4 eilutė adresas</string>
+  <string id="455">Adresų eilių skaičius</string>
+  <string id="456">Režimas</string>
+  <string id="457">Pakeisti išvaizdą</string>
+  <string id="459">Subtitrai</string>
+  <string id="460">Audio srautas</string>
+  <string id="461">[dirba]</string>
+  <string id="462">Subtitrai</string>
+  <string id="463">Foninis ryškumas</string>
+  <string id="464">Ryškumas</string>
+  <string id="465">Kontrastas</string>
+  <string id="466">Gama</string>
+  <string id="467">Tipas</string>
+  <string id="468">Judinkit juostelę pozicijai pakeisti (OSD)</string>
+  <string id="469">Ekrano pozicija (OSD)</string>
+  <string id="470">Kūrėjai</string>
+  <string id="471">МOD-čipas</string>
+  <string id="474">Išjungta</string>
+  <string id="475">Tiktai muzika</string>
+  <string id="476">Muzika ir Video</string>
+  <string id="477">Nepavyko įkelti į grojaraštį</string>
+  <string id="478">Erano meniu (OSD)</string>
+  <string id="479">Kalba ir vaizdas</string>
+  <string id="480">Išvaizda</string>
+  <string id="481">Audio nustatymai</string>
+  <string id="482">Apie XBMC</string>
+
+  <string id="485">Ištrinti albumą</string>
+  <string id="486">Kartoti</string>
+  <string id="487">Kartoti vieną kartą</string>
+  <string id="488">Papkės kartojimas</string>
+  <string id="489">Groti sekantį failą automatiškai</string>
+  <string id="491">- naudoti didelius ženkliukus</string>
+  <string id="492">Subtitrų mastelis</string>
+  <string id="493">Papildomi duomenys (tik ekspertams!)</string>
+  <string id="494">Bendras garso lygis patalpoje</string>
+  <string id="495">Perskaičiuoti vaizdo rezoliuciją iki GUI</string>
+  <string id="496">Kalibravimas</string>
+  <string id="497">Rodyti failų plėtinius</string>
+  <string id="498">Rušiuoti pagal: Tipą</string>
+  <string id="499">Nepavyko prisijungti prie paieškos serverio</string>
+  <string id="500">Nesėkmingai atsiųsti duomenys apie albumą</string>
+  <string id="501">Albumų pavadinimų tikrinimas...</string>
+  <string id="502">Atidarytas</string>
+  <string id="503">Apdorojimas...</string>
+  <string id="504">Tuščia</string>
+  <string id="505">Duomenys iš failų...</string>
+  <string id="507">Rušiuoti pagal dažnį</string>
+  <string id="510">Įjungti vaizdo efektus</string>
+  <string id="511">Auto perjungimas PAL/NTSC</string>
+  <string id="512">Paleidus pereiti į menių:</string>
+  <string id="513">Pagrindinis menių</string>
+  <string id="514">Nustatymai</string>
+  <string id="515">Žanras</string>
+
+  <string id="517">Nesenai perklausyti albumai</string>
+  <string id="518">Paleisti</string>
+  <string id="519">Paleisti režime...</string>
+
+  <string id="520">Pakeisti XBMC pavadinimą</string>
+  <string id="521">Rinkiniai</string>
+  <string id="522">Pašalinti šaltinį</string>
+  <string id="523">Pereiti į skirsnį...</string>
+  <string id="524">Pasirinkite grojaraštį</string>
+  <string id="525">Sukurti naują grojaraštį...</string>
+  <string id="526">Įdėti į grojaraštį</string>
+  <string id="527">Įdėti į biblioteką</string>
+  <string id="528">Įrašykite pavadinimą</string>
+  <string id="529">Klaida: Vienodi pavadinimai</string>
+  <string id="530">Parinkite žanrą</string>
+  <string id="531">Naujas žanras</string>
+  <string id="532">Rankinis įdėjimas</string>
+  <string id="533">Įveskite žanrą</string>
+  <string id="534">Vaizdas: %s</string>
+  <string id="535">Sąrašas</string>
+  <string id="536">Ženkliukai</string>
+  <string id="537">Pilnas sąrašas</string>
+  <string id="538">Dideli ženkliukai</string>
+  <string id="539">Platus</string>
+  <string id="540">Platus rieb.</string>
+  <string id="541">Albumų ženkliukai</string>
+  <string id="542">DVD ženkliukai</string>
+  <string id="543">DVD</string>
+  <string id="544">Duomenys</string>
+  <string id="545">Garso išvesties įrenginys</string>
+  <string id="546">Garso perdavimo įrenginys</string>
+  <string id="547">Šio atlikėjo biografija nerasta</string>
+  <string id="548">Daugiakanalį garsą perdaryti i stereo</string>
+
+  <string id="550">Ruš. pagal: %s</string>
+  <string id="551">Pavadinimas</string>
+  <string id="552">Data</string>
+  <string id="553">Dydis</string>
+  <string id="554">Takelis</string>
+  <string id="555">Laikas</string>
+  <string id="556">Pavadinimas</string>
+  <string id="557">Atlikėjas</string>
+  <string id="558">Albumas</string>
+  <string id="559">Grojaraštis</string>
+  <string id="560">ID</string>
+  <string id="561">Failo vardas</string>
+  <string id="562">Metai</string>
+  <string id="563">Reitingas</string>
+  <string id="564">Tipas</string>
+  <string id="565">Dažnis</string>
+  <string id="566">Albumo atlikėjas</string>
+  <string id="567">Paleidimo kartus(ų)</string>
+  <string id="568">Paskutiniai groti(as)</string>
+  <string id="569">Koment.</string>
+  <string id="570">Įtraukimo data</string>
+  <string id="571">Kaip yra</string>
+  <string id="572">Kinostudija</string>
+  <string id="573">Kelias</string>
+  <string id="574">Šalis</string>
+  <string id="575">Procese</string>
+  <string id="576">Grojo kartus(ų)</string>
+
+  <string id="580">Rūšiavimo kryptis</string>
+  <string id="581">Rūšiavimo metodas</string>
+  <string id="582">Peržiūros režimas</string>
+  <string id="583">Atsiminti kiekvienos papkės nustatymo parametrus</string>
+  <string id="584">Pagal didėjimą</string>
+  <string id="585">Pagal mažėjimą</string>
+  <string id="586">Taisyti grojaraštį</string>
+  <string id="587">Filtras</string>
+  <string id="588">Išjungti režimą 'Party'</string>
+  <string id="589">Režimas 'Party'</string>
+  <string id="590">Atsitiktinai</string>
+  <string id="591">Išjungta</string>
+  <string id="592">Vienas</string>
+  <string id="593">Visi</string>
+  <string id="594">Išjungta</string>
+  <string id="595">Pakartot: Išjungta</string>
+  <string id="596">Pakartot: Vienas</string>
+  <string id="597">Pakartot: Visi</string>
+
+  <string id="600">Nuskaityti audio CD</string>
+  <string id="601">Vidutinis</string>
+  <string id="602">Standartinis</string>
+  <string id="603">Ekstremalus</string>
+  <string id="604">Pastovus duomenų srautas</string>
+  <string id="605">Nuskaitymas...</string>
+
+  <string id="607">V:</string>
+  <string id="608">Nuskaityti CD  takelio negalima</string>
+  <string id="609">Reikšmė CD/DA/RipPath nenurodyta.</string>
+  <string id="610">Nuskaityti audio takelį</string>
+  <string id="611">Įveskite numerį</string>
+  <string id="612">Bit/Sempl</string>
+  <string id="613">Sampling dažnis</string>
+
+  <string id="620">CD nuskaitymas</string>
+  <string id="621">Koduotė</string>
+  <string id="622">Kokybė</string>
+  <string id="623">Dumenų srautas</string>
+  <string id="624">Pridėti takelio numerį</string>
+  <string id="625">Visos dainos</string>
+  <string id="629">Peržiūros režimas</string>
+  <string id="630">Normalus</string>
+  <string id="631">Padidintas</string>
+  <string id="632">Ištemptas 4:3</string>
+  <string id="633">Ištemptas 14:9</string>
+  <string id="634">Ištemptas 16:9</string>
+  <string id="635">Originalus dydis</string>
+  <string id="636">Ypatingas</string>
+  <string id="637">Replay Gain</string>
+  <string id="638">Režimas 'ReplayGain'</string>
+  <string id="639">Pagal takelį</string>
+  <string id="640">Pagal albumą</string>
+  <string id="641">Lygis failams su 'ReplayGain'</string>
+  <string id="642">Lygis failams be 'ReplayGain'</string>
+  <string id="643">Išvengti iškraipymų failuose su 'ReplyGain'</string>
+  <string id="644">Pašalinti juodas juostas</string>
+  <string id="645">Būtina išarchyvuoti didelį failą. Testi?</string>
+  <string id="646">Pašalinti iš bibliotekos</string>
+  <string id="647">Eksportuoti į video biblioteką</string>
+  <string id="648">Importuoti iš video bibliotekos</string>
+  <string id="649">Importas</string>
+  <string id="650">Eksportas</string>
+  <string id="651">Nurodykite biblioteką</string>
+  <string id="652">Metai</string>
+  <string id="653">Atnaujinti biblioteką</string>
+  <string id="654">Rodyti derinimo informaciją</string>
+  <string id="655">Nurodykite programą</string>
+  <string id="656">Nurodykite biblioteką</string>
+  <string id="657">Nurodykite papkę</string>
+  <string id="658">Informacija apie dainą</string>
+  <string id="659">Nelijininis padidinimas</string>
+
+  <string id="660">Garso padidinimas</string>
+  <string id="661">Nurodykite papkę eksportui</string>
+  <string id="662">Šis failas nepasiekiamas.</string>
+  <string id="663">Norite jį pašalinti iš bibliotekos?</string>
+  <string id="664">Pasirinkti skriptą</string>
+  <string id="665">Suspaudimo laipsnis</string>
+
+  <string id="700">Bibliotekos išvalymas</string>
+  <string id="701">Senų dainų šalinimas iš bibliotekos</string>
+  <string id="702">Šis aplankas buvo patikrintas seniau</string>
+  <string id="705">Tinklas</string>
+  <string id="706">- Serveris</string>
+
+  <string id="708">Naudoti HTTP-proxy serverį</string>
+
+  <string id="711">Interneto protokolas (IP)</string>
+  <string id="712">Neteisingas portas. Turi būti nuo 1 iki 65535.</string>
+  <string id="713">HTTP proksi</string>
+
+  <string id="715">- Paskyrimas</string>
+  <string id="716">Automatiškai (DHCP)</string>
+  <string id="717">Manualas (Static)</string>
+
+  <string id="719">- IP adresas</string>
+  <string id="720">- Tinklo kaukė</string>
+  <string id="721">- Numatytas šliuzas</string>
+  <string id="722">- ADNS serveris</string>
+  <string id="723">Išsaugoti ir paleisti</string>
+  <string id="724">Neteisingas adresas. Turėtų būti AAA.BBB.CCC.DDD</string>
+  <string id="725">skaičiai nuo 0 iki 255.</string>
+  <string id="726">Pakeitimai neišsaugoti. Vistiek tęsti?</string>
+  <string id="727">Interneto serveris</string>
+  <string id="728">FTP serveris</string>
+
+  <string id="730">Interneto serverio portas</string>
+
+  <string id="732">Išsaugoti ir pritaikyti</string>
+  <string id="733">Prieigos slaptažodis prie interneto serverio</string>
+  <string id="734">Be slaptažodžio</string>
+  <string id="735">- Simbolių parinkimas</string>
+  <string id="736">- Stilius</string>
+  <string id="737">- Spalvos</string>
+  <string id="738">Paprastas</string>
+  <string id="739">Riebus</string>
+  <string id="740">Italic</string>
+  <string id="741">Riebus Italic</string>
+  <string id="742">Baltas</string>
+  <string id="743">Geltonas</string>
+  <string id="744">Failai</string>
+  <string id="745">Šios rūšies duomenys nenuskaityti</string>
+  <string id="746">Prašome išjungti bibliotekos režimą</string>
+  <string id="747">Klaida įkeliant paveikslėlį</string>
+  <string id="748">Pakeisti nuorodą</string>
+  <string id="749">Atvaizdas</string>
+  <string id="750">Jūs isitikinęs?</string>
+  <string id="751">Šaltinio pašalinimas</string>
+
+  <string id="754">Pridėti nuorodą į programą</string>
+  <string id="755">Pakeisti programos kelią</string>
+  <string id="756">Pakeisti programos pavadinimą</string>
+  <string id="757">Pakeisti kelio dydį</string>
+
+  <string id="759">Vaizdas: Didelis sąrašas</string>
+  <string id="760">Geltonas</string>
+  <string id="761">Baltas</string>
+  <string id="762">Mėlinas</string>
+  <string id="763">Šviesiai-žalias</string>
+  <string id="764">Geltonai-žalias</string>
+  <string id="765">Dangiškas</string>
+  <string id="766">Šviesiai-pilkas</string>
+  <string id="767">Pilkas</string>
+  <!-- strings 768 and 769 reserved for more subtitle colors -->
+
+  <string id="770">Klaida %i: ištekliai nepasiekiami</string>
+
+  <string id="772">Garso išvestis</string>
+  <string id="773">Paieška</string>
+  <string id="774">Papkė prezentacijai</string>
+  <string id="775">Tinko sąsaja</string>
+  <string id="776">- Bevielio tinklo pavadinimas (ESSID)</string>
+  <string id="777">- Bevielio tinklo slaptažodis</string>
+  <string id="778">- Bevielio tinklo saugumas</string>
+  <string id="779">Išsaugoti ir taikyti tinklo sąsają</string>
+  <string id="780">Be šifravimo</string>
+  <string id="781">WEP</string>
+  <string id="782">WPA</string>
+  <string id="783">WPA2</string>
+  <string id="784">Tinklo sąsajos parametrai taikomi, palaukite,...</string>
+  <string id="785">Tinklo sąsajos sėkmingai paleistos iš naujo</string>
+  <string id="786">Tinklo sąsajos paleistos nesėkmingai</string>
+  <string id="787">Sąsaja yra išjungta</string>
+  <string id="788">Tinklo sąsajos sėkmingai atjungtos</string>
+  <string id="789">Bevielio tinklo pavadinimas (ESSID)</string>
+
+  <string id="791">Įjungti serverio įvikius</string>
+  <string id="792">Portas</string>
+  <string id="793">Portų diapazonas</string>
+  <string id="794">Leisti prisijungti prie kitų kompiuterių</string>
+  <string id="795">Pirminio porto užlaikymas (ms)</string>
+  <string id="796">Sekančių portų užlaikymas (ms)</string>
+  <string id="797">Maksimalus klientų skaičius</string>
+  <string id="798">Interneto ryšys</string>
+
+  <string id="850">Neteisingas porto numeris</string>
+  <string id="851">Leidžiamas portų diapazonas: 1-65535</string>
+  <string id="852">Leidžiamas portų diapazonas: 1024-65535</string>
+
+  <string id="998">Pridėti Muzika...</string>
+  <string id="999">Pridėti Video...</string>
+  <string id="1000">- Peržiūra</string>
+  <string id="1001">Neįmanoma prisijungti</string>
+  <string id="1002">XBMC negali prisijungti prie tinklo.</string>
+  <string id="1003">Turbūt tinklas nepajungtas.</string>
+  <string id="1004">Vistiek pridėti?</string>
+
+  <string id="1006">IP adresas</string>
+  <string id="1007">Pridėti tinklo vietą</string>
+  <string id="1008">Protokolas</string>
+  <string id="1009">Serverio adresas</string>
+  <string id="1010">Serverio vardas</string>
+  <string id="1011">Tinklo kelias</string>
+  <string id="1012">Pasiekiamas aplankalas</string>
+  <string id="1013">Portas</string>
+  <string id="1014">Vartotojo vardas</string>
+  <string id="1015">Nurodykite serverio tinklą</string>
+  <string id="1016">Įveskite serverio tinklo adresą</string>
+  <string id="1017">Nurodykite kelią iki serverio</string>
+  <string id="1018">Įveskite porto numrį</string>
+  <string id="1019">Įveskite vartotojo vardą</string>
+  <string id="1020">Pridėti šaltinį %s</string>
+  <string id="1021">Nurodykite kelią arba pasirinkite failo vietą</string>
+  <string id="1022">Įveskite pavadinimą šiai bibliotekai</string>
+  <string id="1023">Nurodykite kitą biblioteką</string>
+  <string id="1024">Peržiūra</string>
+  <string id="1025">Neįmanoma gauti informacijos apie papkę</string>
+  <string id="1026">Pridėti šaltinį</string>
+  <string id="1027">Keisti šaltinį</string>
+  <string id="1028">Keisti šaltinį %s</string>
+  <string id="1029">Įveskite naują žymą</string>
+  <string id="1030">Nurodykite paveikslėlį</string>
+  <string id="1031">Nurodykite papkę su paveikslėlais</string>
+  <string id="1032">Pridėti tinklo vietą...</string>
+  <string id="1033">Nurodykite failą</string>
+  <string id="1034">Submeniu</string>
+  <string id="1035">Įjungti punktus submeniu</string>
+  <string id="1036">Favoritas</string>
+  <string id="1037">Video priedai</string>
+  <string id="1038">Muzikos priedai</string>
+  <string id="1039">Foto priedai</string>
+  <string id="1040">Atsisiųsti katalogą</string>
+  <string id="1041">Atkurta %i objektų(-ai,as)</string>
+  <string id="1042">Atkurta %i iš %i objektų(-ai,as)</string>
+  <string id="1043">Programinės įrangos priedai</string>
+  <string id="1044">Sukurti eskizą priedams</string>
+  <string id="1045">Priedų nustatymai</string>
+  <string id="1046">Prieigos taškai</string>
+  <string id="1047">Kita...</string>
+  <string id="1048">Interneto serverio vartotojo vardas</string>
+  <string id="1049">Skriptų nustatymai</string>
+  <string id="1050">Singlai</string>
+  <string id="1051">Įveskite interneto adresą</string>
+
+  <string id="1200">SMB vartotojas</string>
+  <string id="1202">Darbo grupė</string>
+  <string id="1203">Numatytas vartotojo vardas</string>
+  <string id="1204">Numatytas vartotojo slaptažodis</string>
+
+  <string id="1207">WINS serveris</string>
+  <string id="1208">Montuoti SMB resursus</string>
+
+  <string id="1210">Pašalinti</string>
+  <string id="1211">Muzika</string>
+  <string id="1212">Video</string>
+  <string id="1213">Foto</string>
+  <string id="1214">Failai</string>
+  <string id="1215">Muzika ir video</string>
+  <string id="1216">Muzika ir foto</string>
+  <string id="1217">Muzika ir failai</string>
+  <string id="1218">Video ir foto</string>
+  <string id="1219">Video ir failai</string>
+  <string id="1220">Foto ir failai</string>
+  <string id="1221">Muzika, video ir failai</string>
+  <string id="1222">Muzika, video, foto ir failai</string>
+  <string id="1223">Atjungta</string>
+  <string id="1226">Failai, muzika ir video</string>
+  <string id="1227">Failai, foto ir muzika</string>
+  <string id="1228">Failai, foto ir video</string>
+  <string id="1229">Muzika ir programos</string>
+  <string id="1230">Video ir programos</string>
+  <string id="1231">Foto ir programos</string>
+  <string id="1232">Muzika, video, foto ir programos</string>
+  <string id="1233">Programos, video ir muzika</string>
+  <string id="1234">Programos, foto ir muzika</string>
+  <string id="1235">Programos, foto ir video</string>
+
+  <string id="1250">Auto nustatymas</string>
+  <string id="1251">Auto nustatymas sistemai</string>
+  <string id="1252">Slapyvardis</string>
+
+  <string id="1254">Užklausimas leidimui prisijungti</string>
+  <string id="1255">Siųsti vartotojo vardą ir slaptažodį FTP</string>
+  <string id="1256">Komandos intervalas 'ping'</string>
+  <string id="1257">Ar norite prisijungti prie rastos sistemos?</string>
+
+  <string id="1260">Pranešti kitoms sisitemoms apie serverius per Zeroconf</string>
+  <string id="1270">Leisti XBMC gauti AirPlay turinį</string>
+  <string id="1271">Įrenginio pavadinimas</string>
+  <string id="1272">- Naudoti saugų slaptažodį</string>
+
+  <string id="1300">Kitas audio irenginys</string>
+  <string id="1301">Kitas tiesioginio garso išvesties įrenginys</string>
+
+  <string id="1396">Plikledis</string>
+  <string id="1397">ir</string>
+  <string id="1398">Šalna</string>
+  <string id="1399">Vėlyvas</string>
+  <string id="1400">Vietomis</string>
+  <string id="1401">Lietus su perkūnija</string>
+  <string id="1402">Griaustinis</string>
+  <string id="1403">Saulė</string>
+  <string id="1404">Stiprus</string>
+  <string id="1405">į</string>
+  <string id="1406">...</string>
+  <string id="1407">Aplink</string>
+  <string id="1408">Ledas</string>
+  <string id="1409">Kruša</string>
+  <string id="1410">Ramu</string>
+  <string id="1411">iš</string>
+  <string id="1412">vėjuota</string>
+  <string id="1413">lietus</string>
+  <string id="1414">Audra</string>
+  <string id="1415">Lietus</string>
+  <string id="1416">Rūkas</string>
+  <string id="1417">Speiguota</string>
+  <string id="1418">Perkūnija</string>
+  <string id="1419">Perkūnija su lietumi</string>
+  <string id="1420">Ramus</string>
+  <string id="1421">Labai Aukštas</string>
+  <string id="1422">Vėjuota</string>
+  <string id="1423">Rūkas</string>
+
+  <!-- strings through to 1450 reserved for weather translation -->
+
+  <string id="1450">Prastovos metu taupyti energiją</string>
+  <!-- strings through to 1470 reserved for power-saving -->
+
+  <string id="2050">Trukmė</string>
+
+  <string id="2100">Skriptas nesėkmingas! : %s</string>
+  <string id="2101">Reikalinga naujesnė versija - Žiurėkite žurnalą</string>
+
+  <string id="4501">Įjungti LCD/VFD displėjų</string>
+
+  <string id="10000">Pagrindinis</string>
+  <string id="10001">Programos</string>
+  <string id="10002">Foto</string>
+  <string id="10003">Failų tvarkyklė</string>
+  <string id="10004">Nustatymai</string>
+  <string id="10005">Muzika</string>
+  <string id="10006">Video</string>
+  <string id="10007">Informacija apie sistemą</string>
+  <string id="10008">Nustatymai - Pagrindiniai</string>
+  <string id="10009">Nustatymai - Ekranas</string>
+  <string id="10010">Nustatymai - Išvaizda - GUI kalibruotė</string>
+  <string id="10011">Nustatymai - Video - Ekrano kalibruotė</string>
+  <string id="10012">Nustatymai - Foto</string>
+  <string id="10013">Nustatymai - Programos</string>
+  <string id="10014">Nustatymai - Oras</string>
+  <string id="10015">Nustatymai - Muzika</string>
+  <string id="10016">Nustatymai - Sistema</string>
+  <string id="10017">Nustatymai - Video</string>
+  <string id="10018">Nustatymai - Tinklas</string>
+  <string id="10019">Nustatymai - Išvaizda</string>
+  <string id="10020">Skriptai</string>
+  <string id="10021">Interneto Naršyklė</string>
+
+  <string id="10028">Video/Grojaraštis</string>
+  <string id="10029">Prisijungimo langas</string>
+  <string id="10034">Nustatymai - Profilis</string>
+  <string id="10040">Priedų naršyklė</string>
+
+  <string id="10100">Dialogas 'Taip/Ne'</string>
+  <string id="10101">Dialogas Vykdymas</string>
+
+  <string id="10210">Subtitrų paieška...</string>
+  <string id="10211">Paieška arba subtitrų buferizacija...</string>
+  <string id="10212">užbaigimas</string>
+  <string id="10213">buferizacija</string>
+  <string id="10214">Srauto atidarymas</string>
+
+  <string id="10500">Muzika/Grojaraštis</string>
+  <string id="10501">Muzika/Failai</string>
+  <string id="10502">Muzika/Biblioteka</string>
+  <string id="10503">Bibliotekos redagavimas</string>
+  <string id="10504">Top 100 - Dainos</string>
+  <string id="10505">Top 100 - Albumai</string>
+  <string id="10506">Programos</string>
+  <string id="10507">Profilio nustatymai</string>
+  <string id="10508">Orai</string>
+  <string id="10509">Tinklo žaidimas</string>
+  <string id="10510">Žymos</string>
+  <string id="10511">Informacija apie sistemą</string>
+
+  <string id="10516">Muzika - Biblioteka</string>
+  <string id="10517">Muzika - Dabartinė biblioteka</string>
+
+  <string id="10522">Video - Dabartinė biblioteka</string>
+  <string id="10523">Informacija apie albumą</string>
+  <string id="10524">Informacija apie filmą</string>
+
+  <string id="12000">Pasirinkimo dialogas</string>
+  <string id="12001">Muzika/Duomenys</string>
+  <string id="12002">Dialogas 'Ok'</string>
+  <string id="12003">Video/Duomenys</string>
+  <string id="12004">Skriptai/Duomenys</string>
+  <string id="12005">Pilnaekranis video</string>
+  <string id="12006">Audio vizualūs efektai</string>
+
+  <string id="12008">Dialogas failų sekai</string>
+  <string id="12009">Perindeksavimas...</string>
+  <string id="12010">Gryžti į skirsnį Muzika</string>
+  <string id="12011">Gryžti į skirsnį Video</string>
+
+  <string id="12021">Pradėti nuo pradžios</string>
+  <string id="12022">Tęsti nuo %s</string>
+
+  <string id="12310">0</string>
+  <string id="12311">1</string>
+  <string id="12312">2</string>
+  <string id="12313">3</string>
+  <string id="12314">4</string>
+  <string id="12315">5</string>
+  <string id="12316">6</string>
+  <string id="12317">7</string>
+  <string id="12318">8</string>
+  <string id="12319">9</string>
+  <string id="12320">c</string>
+  <string id="12321">Ok</string>
+  <string id="12322">*</string>
+  <string id="12325">Užblokuota! Įveskite kodą...</string>
+  <string id="12326">Įveskite slaptažodį</string>
+  <string id="12327">Įveskite apsaugos kodą</string>
+  <string id="12328">Įveskite atblokavimo kodą</string>
+  <string id="12329">arba pasirinkite 'C' atšaukimui</string>
+  <string id="12330">Paspauskite reikalingus mygtukus žaidimų svirtyje,</string>
+  <string id="12331">tada 'OK', arba 'Atgal' atšaukimui</string>
+  <string id="12332">Nustatyti apsaugą</string>
+  <string id="12333">Atblokuoti</string>
+  <string id="12334">Atmesti apsaugą</string>
+  <string id="12335">Išvalyti apsaugą</string>
+  <string id="12337">Skaitmeninis slaptažodis</string>
+  <string id="12338">Mygtukų kombinacija žaidimų svirtyje</string>
+  <string id="12339">Tekstinis slaptažodis</string>
+  <string id="12340">Įveskite naują slaptažodį</string>
+  <string id="12341">Pakartokite naują slaptažodį</string>
+  <string id="12342">Netikras slaptažodis,</string>
+  <string id="12343">liko bandymų</string>
+  <string id="12344">Įvesti slaptažodžiai nesutampa.</string>
+  <string id="12345">Priėjimas draudžiamas</string>
+  <string id="12346">Slaptažodžių bandymų skaičius išnaudotas.</string>
+  <string id="12347">Dabar sistema bus išjungta.</string>
+  <string id="12348">Užblokuota</string>
+  <string id="12353">Reaktyvuoti apsaugą</string>
+  <string id="12356">Keisti apsaugą</string>
+  <string id="12357">Apsaugos šaltinis</string>
+  <string id="12358">Slaptažodžio laukas tuščias. Pakartokite.</string>
+  <string id="12360">Bendra apsauga</string>
+  <string id="12362">Išjungite sistemą,jei bandymų skaičius yra išnaudotas</string>
+  <string id="12367">Apsaugos kodas neteisingas!</string>
+  <string id="12368">Įveskite teisingą apsaugos kodą!</string>
+  <string id="12373">Parametrai ir failų tvarkyklė</string>
+  <string id="12376">Nustatyti visiems filmams</string>
+  <string id="12377">Tai pakeis anksčiau nustatytus parametrus.</string>
+  <string id="12378">Kiekvienos prezentacijos rodymo laikas</string>
+  <string id="12379">Panoramos ir didinimo efektai</string>
+
+  <string id="12383">12-kos valandų</string>
+  <string id="12384">24-rių valandų</string>
+  <string id="12385">Diena/Mėnuo</string>
+  <string id="12386">Mėnuo/Diena</string>
+
+  <string id="12390">Sistemos veikimo laikas</string>
+  <string id="12391">Min.</string>
+  <string id="12392">Val.</string>
+  <string id="12393">Dien.</string>
+  <string id="12394">Bendras veikimo laikas</string>
+  <string id="12395">Baterijos lygis</string>
+
+  <string id="12600">Oras</string>
+
+  <string id="12900">Užsklanda</string>
+  <string id="12901">Pilnaekranis OSD</string>
+
+  <string id="13000">Sistema</string>
+  <string id="13001">Greitas HDD sustabdymas</string>
+  <string id="13002">Tiktai video</string>
+  <string id="13003">- Užlaikymas</string>
+  <string id="13004">- Minimali failo trukmė</string>
+  <string id="13005">Išjungimas</string>
+
+  <string id="13008">Išjungimo režimas</string>
+  <string id="13009">Išėjimas</string>
+  <string id="13010">Miego rėžimas</string>
+  <string id="13011">Laukimo rėžimas</string>
+  <string id="13012">Išjungti XBMC</string>
+  <string id="13013">Perkrauti kompiuterį</string>
+  <string id="13014">Suglausti</string>
+  <string id="13015">Jungties veiksmas</string>
+  <string id="13016">Išjungti sistemą</string>
+
+  <string id="13020">Aktyvi kita sesija, gal per SSH?</string>
+  <string id="13021">Prijungtas nešiojamas HDD</string>
+  <string id="13022">Nesaugus įrenginio atjungimas</string>
+  <string id="13023">Prietaisas sėkmingai atjungtas</string>
+  <string id="13024">Žaidimų svirtis prijungta</string>
+  <string id="13025">Žaidimų svirtis atjungta</string>
+
+  <string id="13050">Žemas baterijos lygis</string>
+
+  <string id="13100">Mirgėjimo filtras</string>
+  <string id="13101">Tvarkyklių pasirinkimas (būtinas perkrovimas)</string>
+
+  <string id="13105">Vertikali sinchronizacija</string>
+  <string id="13106">Atjungta</string>
+  <string id="13107">Tik tada, kai video paleista</string>
+  <string id="13108">Visada įjungta</string>
+  <string id="13109">Patikra ir rezoliucijos pritaikymas</string>
+  <string id="13110">Išsaugoti rezoliuciją?</string>
+  <string id="13111">Jūs norite palikti šią rezoliuciją?</string>
+
+  <string id="13112">Aukštos kokybės mastelis</string>
+  <string id="13113">Atjungta</string>
+  <string id="13114">Tiktai dėl SD turinio</string>
+  <string id="13115">Visada įjungta</string>
+
+  <string id="13116">Mastelio metodas</string>
+  <string id="13117">Bicubic</string>
+  <string id="13118">Lanczos</string>
+  <string id="13119">Sinc</string>
+  <string id="13120">VDPAU</string>
+  <string id="13121">VDPAU HQ kokybės mastelis</string>
+  <string id="13122">VDPAU spalvų konvertavimas</string>
+
+  <string id="13130">Ekrano užsklanda</string>
+  <string id="13131">Atjungta</string>
+  <string id="13132">Užtemdyti ekranus</string>
+
+  <string id="13140">Rastos aktyvios jungtys!</string>
+  <string id="13141">Jei tęsite, Jūs prarasite sugebėjimą valdyti</string>
+  <string id="13142">XBMC. Ar tikrai norite sustabdyti serverio įvykius?</string>
+
+  <string id="13144">Redaguoti Apple pultelio režimą?</string>
+  <string id="13145">Jeigu Jūs naudojate Apple pultelį</string>
+  <string id="13146">XBMC valdymui, šių nustatymų pakeitimas gali atjungti</string>
+  <string id="13147">galimybe jais naudotis. Jūs norite tęsti?</string>
+
+  <string id="13159">Potinklio kaukė</string>
+  <string id="13160">Tinklo sąsaja</string>
+  <string id="13161">Pagrindinis DNS</string>
+  <string id="13162">Inicializacijos klaida</string>
+
+  <string id="13170">Niekada</string>
+  <string id="13171">Nedelsiant</string>
+  <string id="13172">Po %i sek.</string>
+  <string id="13173">HDD įjungimo laikas:</string>
+  <string id="13174">HDD įjungimo ciklų skaičius:</string>
+
+  <string id="13200">Profiliai</string>
+  <string id="13201">Pašalinti profilį '%s'?</string>
+
+  <string id="13204">Paskutinis įkeltas profilis:</string>
+  <string id="13205">Nežinoma</string>
+  <string id="13206">Perrašyti</string>
+
+  <string id="13208">Priminimo laikmatis</string>
+  <string id="13209">Laikmačio priminimo intervalas (min.)</string>
+  <string id="13210">Paleistas, suveiks %im</string>
+  <string id="13211">PRIMINIMAS!</string>
+  <string id="13212">Atšaukiama %im%is iki suveikimo</string>
+  <string id="13213">%2.0fm</string> <!--minutes (left from countdown)-->
+  <string id="13214">%2.0fs</string> <!--seconds (left from countdown)-->
+
+  <string id="13249">Ieškoti subtitrų RARe</string>
+  <string id="13250">Nurodykite subtitrus...</string>
+  <string id="13251">Perkelti objektą</string>
+  <string id="13252">Perkelti objektą čia</string>
+  <string id="13253">Atšaukti perkėlimą</string>
+
+  <string id="13270">Įranga:</string>
+  <string id="13271">CPU apkrova:</string>
+
+  <string id="13274">Prijungta, bet DNS severis nepasiekiamas</string>
+  <string id="13275">HDD</string>
+  <string id="13276">DVD grotuvas</string>
+  <string id="13277">Saugykla</string>
+  <string id="13278">Numatytas</string>
+  <string id="13279">Tinklas</string>
+  <string id="13280">Video</string>
+  <string id="13281">Įranga</string>
+
+  <string id="13283">Operacinė sistema:</string>
+  <string id="13284">CPU dažnis:</string>
+
+  <string id="13286">Video dekoderis:</string>
+  <string id="13287">Ekrano raiška:</string>
+
+  <string id="13292">A/V kabelis:</string>
+
+  <string id="13294">DVD regionas:</string>
+  <string id="13295">Internetas:</string>
+  <string id="13296">Prijungta</string>
+  <string id="13297">Neprijungta. Patikrinkite tinklo nustatymus.</string>
+
+  <string id="13299">Išlaikyti temperatūrą</string>
+  <string id="13300">Aušintuvo greitis</string>
+  <string id="13301">Automatinė temperatūros kontrolė</string>
+  <string id="13302">Aušintuvo greitčio konrtolė</string>
+  <string id="13303">- Šrifto apiforminimas</string>
+  <string id="13304">Leisti eilutes priešinga kryptimi</string>
+  <string id="13305">Įjungti RSS naujienas</string>
+  <string id="13306">Slėpti piktogramą į aukštesnio lygio perėjimą</string>
+  <string id="13307">Takelio pavadinimo šablonas</string>
+  <string id="13308">Jūs norite perkrauti sistemą</string>
+  <string id="13309">vietoj XBMC perkrovimo?</string>
+  <string id="13310">Didinimo efektas</string>
+  <string id="13311">Flotacinis efektas</string>
+  <string id="13312">Juodų juostų sumažinimas</string>
+  <string id="13313">Perkrauti sistemą</string>
+  <string id="13314">Takelių perėjimo laikas</string>
+  <string id="13315">Atnaujinti eskizus</string>
+  <string id="13316">Eskizų rekursavimas</string>
+  <string id="13317">Prezentacijos peržiūra</string>
+  <string id="13318">Prezentacijos rekursavimas</string>
+  <string id="13319">Atsitiktiniai</string>
+  <string id="13320">Stereo</string>
+  <string id="13321">Kairys</string>
+  <string id="13322">Dešinys</string>
+  <string id="13323">Leisti karaoke palaikymą (CD+G)</string>
+  <string id="13324">Fono skaidrumas</string>
+  <string id="13325">Teksto skaidrumas</string>
+  <string id="13326">Garso vėlinimas vaizdo atžvilgiu</string>
+  <string id="13327">Karaoke</string>
+  <string id="13328">%s nerastas</string>
+  <string id="13329">Atydarimo klaida %s</string>
+  <string id="13330">Nepavyko įkelti %s</string>
+  <string id="13331">Klaida: neužtenka atminties</string>
+  <string id="13332">Perkelti į viršų</string>
+  <string id="13333">Perkelti į apačią</string>
+  <string id="13334">Pakeisti žymę</string>
+  <string id="13335">Pagal nutilėjimą</string>
+  <string id="13336">Nuimti mygtuką</string>
+
+  <string id="13340">Palikti kaip yra</string>
+  <string id="13341">Žalias</string>
+  <string id="13342">Oranžinis</string>
+  <string id="13343">Raudonas</string>
+  <string id="13344">Ciklinis</string>
+  <string id="13345">Perjungti LED atkūrimo metu</string>
+  <string id="13346">Duomenys apie filmą</string>
+  <string id="13347">Elemento eilė</string>
+  <string id="13348">Rasti IMDb...</string>
+  <string id="13349">Nuskaityti naują turinį</string>
+  <string id="13350">Aktualus grojaraštis...</string>
+  <string id="13351">Duomenys apie albumą</string>
+  <string id="13352">Nuskaityti į biblioteką</string>
+  <string id="13353">Sustabdyti skaitymą</string>
+  <string id="13354">Apdirbimo metodas</string>
+  <string id="13355">Žemos kokybės Pixel Shader</string>
+  <string id="13356">Aparatūros derinimas</string>
+  <string id="13357">Aukštos kokybės Pixel Shader</string>
+  <string id="13358">Atkūrti objektą</string>
+  <string id="13359">Įdiegti atlikėjo eskizą</string>
+  <string id="13360">Kurti eskizus</string>
+  <string id="13361">Įjungti mikrofoną</string>
+
+  <string id="13375">Įjungti prietaisą</string>
+  <string id="13376">Garsas</string>
+  <string id="13377">Pagrindinis peržiūros režimas</string>
+  <string id="13378">Standartinis ryškumas</string>
+  <string id="13379">Standartinis kontrastas</string>
+  <string id="13380">Standartinė gama</string>
+  <string id="13381">Tęsti video</string>
+  <string id="13382">Balso keitimas - 1</string>
+  <string id="13383">Balso keitimas - 2</string>
+  <string id="13384">Balso keitimas - 3</string>
+  <string id="13385">Balso keitimas - 4</string>
+  <string id="13386">Pozicijonavimas laike</string>
+  <string id="13387">Dešnė kolonėlė sąraše</string>
+  <string id="13388">Išankstinis diegimas</string>
+  <string id="13389">Šiai vizualizacijai išankstinių nustatymų nėra&#10;ši vizualizacija</string>
+  <string id="13390">Šiai vizualizacijai parametrų nėra&#10;ši vizualizacija</string>
+  <string id="13391">Atidaryti/Uždaryti</string>
+  <string id="13392">Paleisti vizualizaciją kai groja muzika</string>
+  <string id="13393">Apskaičiuoti dydį</string>
+  <string id="13394">Papkės dydžio apskaičiavimas</string>
+  <string id="13395">Video nustatymai</string>
+  <string id="13396">Subtitrų ir garso nustatymai</string>
+  <string id="13397">Įjungti subtitrus</string>
+  <string id="13398">Etiketės</string>
+  <string id="13399">Ignoruoti (e.g. "the")</string>
+  <string id="13400">Sklandus perėjimas prie kito takelio</string>
+  <string id="13401">Paieška %s</string>
+  <string id="13402">Rodyti takelio poziciją</string>
+  <string id="13403">Skaidrus numatytas</string>
+  <string id="13404">Tęsti</string>
+  <string id="13405">Gauti eskizą</string>
+  <string id="13406">Duomenys apie foto</string>
+  <string id="13407">%s priešnustatymai</string>
+  <string id="13408">(Vartotojų reitingas IMDb)</string>
+  <string id="13409">Top 250</string>
+  <string id="13410">Nustatymai Last.fm</string>
+  <string id="13411">Minimalus aušintuvo greitis</string>
+  <string id="13412">Groti čia</string>
+  <string id="13413">Parsisiuntimas</string>
+  <string id="13414">Nerodyti atlikėjų, rinkinuose</string>
+  <string id="13415">Apdirbimo metodas</string>
+  <string id="13416">Auto nustatymas</string>
+  <string id="13417">Pagrindiniai pikseliniai šešėliai (ARB)</string>
+  <string id="13418">Papildomi pikseliniai šešėliai (GLSL)</string>
+  <string id="13419">Programinis</string>
+  <string id="13420">Atsargus ištrynimas</string>
+  <string id="13421">VDPAU</string>
+  <string id="13422">Pradėti prezentaciją nuo čia</string>
+  <string id="13423">Atsiminti kelią</string>
+  <string id="13424">Naudoti pikselių buferio objektus</string>
+  <string id="13425">Leisti aparatūros spartinimą (VDPAU)</string>
+  <string id="13426">Leisti aparatūros spartinimą (VAAPI)</string>
+  <string id="13427">Leisti aparatūros spartinimą (DXVA2)</string>
+  <string id="13428">Leisti aparatūros spartinimą (CrystalHD)</string>
+  <string id="13429">Leisti aparatūros spartinimą (VDADecoder)</string>
+  <string id="13430">Leisti aparatūros spartinimą (OpenMax)</string>
+  <string id="13431">Pikseliniai šešėliai</string>
+  <string id="13432">Leisti aparatūros spartinimą (VideoToolbox)</string>
+
+  <string id="13500">Sinchr. metodas A/V</string>
+  <string id="13501">Audio laikrodis</string>
+  <string id="13502">Video laikrodis (Drop/Dupe audio)</string>
+  <string id="13503">Video laikrodis (Resample audio)</string>
+  <string id="13504">Maksimalus konvertavimo dydis (%)</string>
+  <string id="13505">Konvertavimo kokybė</string>
+  <string id="13506">Žema</string>
+  <string id="13507">Vidutinė</string>
+  <string id="13508">Aukšta</string>
+  <string id="13509">Labai aukšta</string>
+  <string id="13510">Sinchronizuoti su ekrano dažniu</string>
+
+  <string id="13550">Pristabdyti, kai Jūs keičiate naujinimo dažnį</string>
+  <string id="13551">Išjungti</string>
+  <string id="13552">%.1f Sekundė</string>
+  <string id="13553">%.1f Sekundžių</string>
+
+  <string id="13600">Apple pultelis</string>
+
+  <string id="13602">Paleisti XBMC naudojant nuotolinį pultelį</string>
+  <string id="13603">Vėlinimo laiko seka</string>
+
+  <string id="13610">Atjungta</string>
+  <string id="13611">Standartinis</string>
+  <string id="13612">Universalus pultelis</string>
+  <string id="13613">Multi pultelis (Harmony)</string>
+
+  <string id="13620">Apple pultelio klaida</string>
+  <string id="13621">Įjungti Apple pultelio palaikymą.</string>
+
+  <string id="14000">Sugrupuoti</string>
+  <string id="14001">Išgrupuoti</string>
+  <string id="14003">Kraunasi bibliotekos failas...</string>
+  <string id="14004">Kraunasi sąrašo srautas...</string>
+  <string id="14005">Sąrašo srauto analizė...</string>
+  <string id="14006">Klaida įkeliant sąrašo srautą</string>
+  <string id="14007">Klaida įkeliant bibliotekos failą</string>
+
+  <string id="14009">Žaidimų direktorija</string>
+  <string id="14010">Vaizdo auto perjungimas į eskizus po</string>
+  <string id="14011">Įjungti auto perjungimas į eskizus</string>
+  <string id="14012">- Naudoti didelius ženkliukus</string>
+  <string id="14013">- Perjungi po</string>
+  <string id="14014">- Procentinių santykių</string>
+  <string id="14015">Nėra failų ir nors vienas eskizas</string>
+  <string id="14016">Nors vienas failas ir eskizas</string>
+  <string id="14017">Procentinių santykių eskizų</string>
+  <string id="14018">Peržiūros nustatymai</string>
+  <string id="14019">1-as miestas</string>
+  <string id="14020">2-as miestas</string>
+  <string id="14021">3-as miestas</string>
+  <string id="14022">Biblioteka</string>
+  <string id="14023">Be TV</string>
+  <string id="14024">Įveskite artimiausią miestą</string>
+  <string id="14025">Audio/Video/DVD - iš HDD</string>
+  <string id="14026">Video - iš DVD disko</string>
+  <string id="14027">- iš vietinio tinklo</string>
+  <string id="14028">- iš interneto</string>
+  <string id="14030">Audio - iš CD/DVD disko</string>
+  <string id="14031">- iš vietinio tinklo</string>
+  <string id="14032">- iš interneto</string>
+  <string id="14034">DVD kešas - iš DVD disko</string>
+  <string id="14035">- iš vietinio tinklo</string>
+  <string id="14036">Servisas(paslaugos)</string>
+
+  <string id="14038">Pasikeitė tinklo nustatymai.</string>
+  <string id="14039">Reikia iš naujo pakeisti jūsų tinklo sąranką</string>
+  <string id="14040">Ar norite perkrauti XBMC dabar?</string>
+  <string id="14041">Interneto ryšio spartos apribojimas</string>
+
+  <string id="14043">- Išjungti grojant</string>
+  <string id="14044">%i min</string>
+  <string id="14045">%i sek</string>
+  <string id="14046">%i ms</string>
+  <string id="14047">%i %%</string>
+  <string id="14048">%i Kbps</string>
+  <string id="14049">%i Kb</string>
+  <string id="14050">%i.0 dB</string>
+  <string id="14051">Laiko formatas</string>
+  <string id="14052">Datos formatas</string>
+  <string id="14053">GUI filtrai</string>
+
+  <string id="14055">Nuskaityti fonineme režime</string>
+  <string id="14056">Sustabdyti nuskaitymą</string>
+  <string id="14057">Neimanoma, kol skaitomi failai</string>
+  <string id="14058">Filmo efektai</string>
+  <string id="14059">Ieškoti eskizų išoriniuose resursuose</string>
+  <string id="14060">Nežinomas talpyklos podėlis - Internetas</string>
+  <string id="14061">Auto</string>
+  <string id="14062">Įveskite vartotojo vardą</string>
+  <string id="14063">Data ir laikas</string>
+  <string id="14064">Nustatyti datą</string>
+  <string id="14065">Nustatyti laiką</string>
+  <string id="14066">Įveskite laiką 24 valandų HH:MM</string>
+  <string id="14067">Įveskite datos formatą DD/MM/YYYY</string>
+  <string id="14068">Įveskite IP adresą</string>
+  <string id="14069">Taikyti šiuos parametrus dabar?</string>
+  <string id="14070">Taikyti šiuos parametrus dabar</string>
+  <string id="14071">Leisti pervadinti ir ištrinti failus</string>
+
+  <string id="14074">Nustatyti laiko juostą</string>
+  <string id="14075">Naudokite vasaros laiką</string>
+  <string id="14076">Idėti į 'Favoritas'</string>
+  <string id="14077">Pašalinti iš 'Favoritas'</string>
+  <string id="14078">- Spalvos</string>
+  <string id="14079">Šalis, laiko juostoje</string>
+  <string id="14080">Laiko juosta</string>
+  <string id="14081">Failų sąrašas</string>
+  <string id="14082">Rodyti EXIF vaizdo informaciją</string>
+  <string id="14083">Naudoti per visą ekraną, o ne tikrą vaizdą</string>
+  <string id="14084">Įtraukti takelius į eilę renkantis</string>
+  <string id="14085">CD audio groti automatiškai</string>
+  <string id="14086">Atkūrimas</string>
+  <string id="14087">DVD</string>
+  <string id="14088">Atkūrti DVD automatiškai</string>
+  <string id="14089">Subtitrų tekstų šriftas</string>
+  <string id="14090">Kalbos</string>
+  <string id="14091">Koduotė</string>
+  <string id="14092">Derinimo</string>
+  <string id="14093">Apsaugos</string>
+  <string id="14094">Jungčių</string>
+  <string id="14095">Energijos</string>
+
+  <string id="15015">Pašalinti</string>
+  <string id="15016">Žaidimai</string>
+
+  <string id="15019">Pridėti</string>
+
+  <string id="15052">Slaptažodis</string>
+
+  <string id="15100">Biblioteka</string>
+  <string id="15101">Duomenų bazė</string>
+  <string id="15102">* Visi albumai</string>
+  <string id="15103">* Visi atlikėjai</string>
+  <string id="15104">* Visos dainos</string>
+  <string id="15105">* Visi žanrai</string>
+
+  <string id="15107">Buferizacija...</string>
+  <string id="15108">Garsų sąsaja</string>
+  <string id="15109">Standartinis dizainas</string>
+  <string id="15111">- Tema</string>
+  <string id="15112">Standartinė tema</string>
+
+  <string id="15200">Last.fm</string>
+  <string id="15201">Siųsti statistiką į Last.fm</string>
+  <string id="15202">Vartotojo slapyvardis Last.fm</string>
+  <string id="15203">Slaptažodis Last.fm</string>
+  <string id="15204">Nepavyksta prisijungti: užmiegu...</string>
+  <string id="15205">Prašome atnaujinti XBMC</string>
+  <string id="15206">Neteisingas prisijungimas: Patikrinkite vartotojo slapyvardį ir slaptažodį</string>
+  <string id="15207">Sujungtas</string>
+  <string id="15208">Nesujungtas</string>
+  <string id="15209">Sujungimo intervalas %i</string>
+  <string id="15210">Į talpyklą %i dainų</string>
+  <string id="15211">Sujungimas...</string>
+  <string id="15212">Sujungimas po %i sek.</string>
+  <string id="15213">Naudoti grotuvą...</string>
+  <string id="15214">Naudoti A/V sinchronizavimą</string>
+  <string id="15215">Slėpti failų pavadinimus eskizų režime</string>
+  <string id="15216">Grojimo režimas 'Party'</string>
+  <string id="15217">Siųsti statistiką į Libre.fm</string>
+  <string id="15218">Vartotojo slapyvardis Libre.fm</string>
+  <string id="15219">Slaptažodis Libre.fm</string>
+  <string id="15220">Libre.fm</string>
+  <string id="15221">Dainų  pateikimas</string>
+
+  <string id="15250">Dainų statistikos iš Last.fm</string>
+  <string id="15251">Prisijungti prie Last.fm...</string>
+  <string id="15252">Stoties pasirinkimas...</string>
+  <string id="15253">Rasti panašius atlikėjus...</string>
+  <string id="15254">Rasti panašias žymas...</string>
+  <string id="15255">Jūsų profilis (%name%)</string>
+  <string id="15256">Bendros Top žymos</string>
+  <string id="15257">Top atlikėjų pagal žymę %name%</string>
+  <string id="15258">Top albumų pagal žymę %name%</string>
+  <string id="15259">Top kūriniai pagal žymę %name%</string>
+  <string id="15260">Klausyti(is) takelius pagal žymę %name% Last.fm</string>
+  <string id="15261">Panašius atlikėjus į %name%</string>
+  <string id="15262">Top %name% albumų</string>
+  <string id="15263">Top %name% kompozicijų</string>
+  <string id="15264">Top %name% žymų</string>
+  <string id="15265">Didžiausi gerbėjai %name%</string>
+  <string id="15266">Klausyti(is) gerbėjų pasirinkimą %name% Last.fm</string>
+  <string id="15267">Klausyti(is) panašių %name% atlikėjų Last.fm</string>
+  <string id="15268">Top atlikėjų iš %name%</string>
+  <string id="15269">Top albumų iš %name%</string>
+  <string id="15270">Top kūrinių iš %name%</string>
+  <string id="15271">Draugai %name%</string>
+  <string id="15272">Bendrija %name%</string>
+  <string id="15273">Savaitės dainininkų diagrama %name%</string>
+  <string id="15274">Savaitės albumų diagrama %name%</string>
+  <string id="15275">Savaitės takelių diagrama %name%</string>
+  <string id="15276">Klausyti(is) %name%'s iš žmonių Last.fm</string>
+  <string id="15277">Klausyti(is) %name%'s savo Last.fm</string>
+  <string id="15278">Klausyti(is) %name%'s milymiausi Last.fm</string>
+  <string id="15279">Gaukite sąrašą iš Last.fm...</string>
+  <string id="15280">Negalima gauti sąrašo iš Last.fm...</string>
+  <string id="15281">Įveskite atlikėjo vardą, ieškoti panašių</string>
+  <string id="15282">Įveskite pavadinime žymą, ieškoti panašių</string>
+  <string id="15283">Pastaruoju metu klausomos dainos %name%'</string>
+  <string id="15284">Klausyti(is) rekomenduojamų %name%' Last.fm</string>
+  <string id="15285">Top žymos %name%</string>
+
+  <string id="15287">Ar norite pridėti šį takelį į savo mėgstami kūriniai?</string>
+  <string id="15288">Norite užrakinti šį takelį?</string>
+  <string id="15289">Pridėta prie Jūsų mėgstami kūriniai: '%s'.</string>
+  <string id="15290">Negalima pridėti '%s' prie Jūsų mėgstami kūriniai.</string>
+  <string id="15291">Užblokuota: '%s'.</string>
+  <string id="15292">Neimanoma užblokuoti: '%s'.</string>
+  <string id="15293">Jums patikę kūriniai %name%'а</string>
+  <string id="15294">Jūsų užblokuoti kūriniai %name%'а</string>
+  <string id="15295">Šalinti iš mėgstami kūriniai</string>
+  <string id="15296">Atblokuoti</string>
+  <string id="15297">Jūs norite pašalinti šį kūrinį iš mėgstami kūriniai?</string>
+  <string id="15298">Norite atblokuoti šį takelį?</string>
+
+  <string id="15300">Blogas arba jų visai nėra</string>
+  <string id="15301">Nepavyksta prisijungti prie serverio</string>
+  <string id="15302">Serverio nerasta</string>
+  <string id="15303">Darbo grupės nerasta</string>
+
+  <string id="15310">Atidaryti maršruto šaltinius</string>
+  <string id="15311">Maršrutas:</string>
+
+  <string id="16000">Pagrindinis</string>
+
+  <string id="16002">Paieška internete</string>
+  <string id="16003">Grotuvas</string>
+  <string id="16004">Groti failą iš disko</string>
+
+  <string id="16008">Įveskite naują pavadinimą</string>
+  <string id="16009">Įveskite filmo pavadinimą</string>
+  <string id="16010">Įveskite profilio pavadinimą</string>
+  <string id="16011">Įveskite albumo pavadinimą</string>
+  <string id="16012">Įveskite grojaraščio pavadinimą</string>
+  <string id="16013">Įveskite naują failo pavadinimą</string>
+  <string id="16014">Įveskite aplanko pavadinimą</string>
+  <string id="16015">Įveskite aplanką</string>
+  <string id="16016">Galimos parinktys: %A, %T, %N, %B, %D, %G, %Y, %F, %S</string>
+  <string id="16017">Paieškos eilutė</string>
+  <string id="16018">Nieko</string>
+  <string id="16019">Auto pasirinkimas</string>
+  <string id="16020">De-interlace</string>
+  <string id="16021">Bob</string>
+  <string id="16022">Bob (inverted)</string>
+  <string id="16023"></string>
+  <string id="16024">Atšaukiama...</string>
+  <string id="16025">Įveskite atlikėjo vardą</string>
+  <string id="16026">Grojaraščio veikimas nutraukiamas</string>
+  <string id="16027">Per daug klaidų iš eilės</string>
+  <string id="16028">Įveskite reikšmę</string>
+  <string id="16029">Patikrinkite žurnalo bylą išsamiai informacijai</string>
+  <string id="16030">'Party' atšauktas.</string>
+  <string id="16031">Nėra atitinkamų dainų bibliotekoje.</string>
+  <string id="16032">Nepavyko inicijuoti duomenų bazės.</string>
+  <string id="16033">Nepavyko atidaryti duomenų bazės.</string>
+  <string id="16034">Nepavyko gauti dainų iš duomenų bazės.</string>
+  <string id="16035">Grojaraštis 'Party'</string>
+  <string id="16036">De-interlace (Half)</string>
+  <string id="16037">Deinterlace video</string>
+  <string id="16038">Deinterlace method</string>
+  <string id="16039">Išj.</string>
+  <string id="16040">Auto</string>
+  <string id="16041">Įj.</string>
+
+  <string id="16100">Visi filmai</string>
+  <string id="16101">Neperžiūrėta</string>
+  <string id="16102">Peržiūrėta</string>
+  <string id="16103">Žymėti kaip peržiūrėtą</string>
+  <string id="16104">Žymėti kaip neperžiūrėtą</string>
+  <string id="16105">Pakeisti pavadinimą</string>
+
+  <string id="16200">Operacija nutraukta</string>
+  <string id="16201">Nepavyko nukopijuoti</string>
+  <string id="16202">Nepavyko nukopijuoti jokio failo</string>
+  <string id="16203">Nepavyko perkelti</string>
+  <string id="16204">Nepavyko perkelti jokio failo</string>
+  <string id="16205">Nepavyko pašalinti</string>
+  <string id="16206">Nepavyko pašalinti jokio failo</string>
+
+  <string id="16300">Vaizdo mastelio metodas</string>
+  <string id="16301">Artimiausias kitas</string>
+  <string id="16302">Bilinear</string>
+  <string id="16303">Bicubic</string>
+  <string id="16304">Lanczos2</string>
+  <string id="16305">Lanczos3</string>
+  <string id="16306">Sinc8</string>
+  <string id="16307">Bicubic (programoje)</string>
+  <string id="16308">Lanczos (programoje)</string>
+  <string id="16309">Sinc (programoje)</string>
+  <string id="16310">Laikinas</string>
+  <string id="16311">Laikinas/Erdvinis</string>
+  <string id="16312">(VDPAU) Triukšmo sumažinimas</string>
+  <string id="16313">(VDPAU) Ryškumas</string>
+  <string id="16314">Atvirkštinis Telecine</string>
+  <string id="16315">Lanczos3 optimizuotas(i)</string>
+  <string id="16316">Auto</string>
+  <string id="16317">Laikinas (Half)</string>
+  <string id="16318">Laikinas/Erdvinis (Half)</string>
+  <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 optimizuotas(i)</string>
+  <string id="16324">Programinė Blend</string>
+
+  <string id="16400">Vaizdo pertvarkymas</string>
+
+  <string id="17500">Ekranas miego režime</string>
+
+  <string id="19000">Perjungti į kanalą</string>
+
+  <string id="20000">Išsaugota muzikos kataloge</string>
+  <string id="20001">Naudokite išorinį DVD grotuvą</string>
+  <string id="20002">Išorinis DVD grotuvas</string>
+  <string id="20003">Trainers aplankas</string>
+  <string id="20004">Ekrano vaizdo aplankas</string>
+
+  <string id="20006">Grojaraščių aplankas</string>
+  <string id="20007">Įrašai</string>
+  <string id="20008">Užsklandos</string>
+  <string id="20009">Naudoti XBMC</string>
+
+  <string id="20011">Muzikos grojaraščiai</string>
+  <string id="20012">Video grojaraščiai</string>
+  <string id="20013">Norite pradėti žaidimą?</string>
+  <string id="20014">Ruš. pagal: Grojaraštį</string>
+  <string id="20015">Išorinis dizainas</string>
+  <string id="20016">Aktualus dizainas</string>
+  <string id="20017">Lokalinis dizainas</string>
+  <string id="20018">Be dizaino</string>
+  <string id="20019">Pasirinkti dizainą</string>
+
+  <!-- string id 20022 will always be set to an empty string (LocalizeStrings.cpp)-->
+  <string id="20022"></string>
+  <string id="20023">Konfliktas</string>
+  <string id="20024">Nuskaityti naują</string>
+  <string id="20025">Nuskaityti viską</string>
+  <string id="20026">Regionas</string>
+
+  <!-- string id's 20027 thru 20034 are reserved for temperature strings (LocalizeStrings.cpp)-->
+
+  <string id="20037">Duomenys</string>
+  <string id="20038">Blokuoti 'Muzika'</string>
+  <string id="20039">Blokuoti 'Video'</string>
+  <string id="20040">Blokuoti 'Foto'</string>
+  <string id="20041">Blokuoti 'Programos' ir 'Skriptai'</string>
+  <string id="20042">Blokuoti 'Failų tvarkyklė'</string>
+  <string id="20043">Blokuoti 'Nustatymai'</string>
+  <string id="20044">Švari paleistis</string>
+  <string id="20045">Įjungti režimą 'Visiška prieiga'</string>
+  <string id="20046">Išjungti režimą 'Visiška prieiga'</string>
+  <string id="20047">Sukurti profilį  '%s'?</string>
+  <string id="20048">Pradėti su 'Švarūs parametrai'</string>
+  <string id="20049">Geriausių prieinamų</string>
+  <string id="20050">Automatiškai perjungti 16:9 arba 4:3</string>
+  <string id="20051">Žiūrėti sudėtinius failus kaip vieną failą</string>
+  <string id="20052">Dėmesio</string>
+  <string id="20053">Palikti režimą 'Visiška prieiga'</string>
+  <string id="20054">Įjungtas režimas 'Visiška prieiga'</string>
+  <string id="20055">Allmusic.com eskizas</string>
+
+  <string id="20057">Slėpti eskizą</string>
+  <string id="20058">Pridėti profilį...</string>
+  <string id="20059">Duomenys apie visus albumus</string>
+  <string id="20060">Duomenys apie skaitmeninį failą</string>
+  <string id="20061">Atskirai</string>
+  <string id="20062">Standartiniai ištekliai</string>
+  <string id="20063">Standartiniai ištekliai (tik skaitymas)</string>
+  <string id="20064">Kopijuoti standartinius</string>
+  <string id="20065">Profilio nuotrauka</string>
+  <string id="20066">Blokuoti parinktis</string>
+  <string id="20067">Redaguoti profilį</string>
+  <string id="20068">Blokuoti profilį</string>
+  <string id="20069">Neįmanoma sukurti aplanko</string>
+  <string id="20070">Profilio aplankas</string>
+  <string id="20071">Paleiskite su naujais ištekliais</string>
+  <string id="20072">Įsitikinkite, kad aplankas yra atidarytas</string>
+  <string id="20073">ir jo pavadinimas tikras</string>
+  <string id="20074">Reitingas MPAA</string>
+  <string id="20075">Įveskite saugos kodą</string>
+  <string id="20076">Klausti saugos kodo paleidžiant</string>
+  <string id="20077">Išvaizdos nustatymai</string>
+  <string id="20078"> - nėra ryšio -</string>
+  <string id="20079">Naudoti animaciją</string>
+  <string id="20080">Išjungti RSS muzikos atkūrimo metu</string>
+  <string id="20081">*Įjungti elementus 'Nuorodos'</string>
+  <string id="20082">Rodyti elementą 'Programos' pagrindiniame meniu</string>
+  <string id="20083">Rodyti muzikos informaciją</string>
+  <string id="20084">Rodyti orų informaciją</string>
+  <string id="20085">Rodyti sistemos informaciją</string>
+  <string id="20086">Rodyti laisvą vietą C: E: F:</string>
+  <string id="20087">Rodyti laisvą vietą E: F: G:</string>
+  <string id="20088">Orų informacija</string>
+  <string id="20089">Laisvos vietos diske</string>
+  <string id="20090">Įveskite esamų išteklių pavadinimą</string>
+  <string id="20091">Apsaugos kodas</string>
+  <string id="20092">Įkelti profilį</string>
+  <string id="20093">Profilio pavadinimas</string>
+  <string id="20094">Media failų šaltiniai</string>
+  <string id="20095">Įveskite profilio saugos kodą</string>
+  <string id="20096">Prisijungimo ekranas</string>
+  <string id="20097">Informacijos užklausimas apie albumą</string>
+  <string id="20098">Duomenų užklausimas albumui</string>
+  <string id="20099">Neįmanoma perkelti į skaitmeninį formatą atkūrimo metu</string>
+  <string id="20100">Saugos kodas ir jo nustatymas</string>
+  <string id="20101">Įvestas kodas visada persijungia į režimą 'Visiška prieiga'</string>
+  <string id="20102">ar kopijuoti iš standartinio?</string>
+  <string id="20103">Išsaugoti profilio pakeitimus?</string>
+  <string id="20104">Rasti seni nustatymai.</string>
+  <string id="20105">Jūs norite juos panaudoti?</string>
+  <string id="20106">Rasta senų media išteklių.</string>
+  <string id="20107">Atskirai (uždaryta)</string>
+  <string id="20108">- Šaknis</string>
+  <string id="20109">- Mastelis</string>
+  <string id="20110">UPnP nustatymai</string>
+  <string id="20111">UPnP automatinis kliento paleidimas</string>
+  <string id="20112">Paskutinis prisijungimas: %s</string>
+  <string id="20113">Niekada nebuvo prisijungęs</string>
+  <string id="20114">Profilis %i / %i</string>
+  <string id="20115">Vartotojo prisijungimas / Profilio pasirinkimas</string>
+  <string id="20116">Naudoti apsaugą prisijungimo lange</string>
+  <string id="20117">Neteisingas apsaugos kodas.</string>
+  <string id="20118">Šiam apsaugos kodui  turi būti įdiegta.</string>
+  <string id="20119">Įdiegti jį dabar?</string>
+  <string id="20120">Duomenų įkėlimas apie programą</string>
+  <string id="20121">'Vakarėlis' prasidėjo!</string>
+  <string id="20122">Tiesa</string>
+  <string id="20123">'Gėrimų' maišymas</string>
+  <string id="20124">'Bokalų' pildymas</string>
+  <string id="20125">Prisijungęs kaip</string>
+  <string id="20126">Atjungimas</string>
+  <string id="20128">Eiti į viršų</string>
+  <string id="20129">Laviruoti</string>
+  <string id="20130">Laviruoti (atvirkščiai)</string>
+  <string id="20131">Mišinys</string>
+  <string id="20132">Perkrauti video</string>
+  <string id="20133">Keisti tinklo vietą</string>
+  <string id="20134">Šalinti tinklo vietą</string>
+  <string id="20135">Norite nuskaityti katalogą?</string>
+  <string id="20136">Atminties kortelė</string>
+  <string id="20137">Atminties kortelė pajungta</string>
+  <string id="20138">Neįmanoma pajungti atminties kortelės</string>
+  <string id="20139">Į portą %i, slotą %i</string>
+  <string id="20140">Užrakinti ekrano užsklandą</string>
+  <string id="20141">Įdiegti</string>
+  <string id="20142">Vartotojo slaptavardis</string>
+  <string id="20143">Įveskite slaptažodį dėl</string>
+  <string id="20144">Išjungimo laikmatis</string>
+  <string id="20145">Išjungimo intervalas (min.)</string>
+  <string id="20146">Veikia, išjungti po %im</string>
+  <string id="20147">Išjungti po 30 min.</string>
+  <string id="20148">Išjungti po 1 val.</string>
+  <string id="20149">Išjungti po 2 val.</string>
+  <string id="20150">Išjungti nurodytu laiku</string>
+  <string id="20151">Atjungti išjungimo laikmatį</string>
+  <string id="20152">Blokuoti parinktis dėl %s</string>
+  <string id="20153">Peržiūra...</string>
+  <string id="20154">Pagrindinė informacija</string>
+  <string id="20155">Talpyklos informacija</string>
+  <string id="20156">HDD informacija</string>
+  <string id="20157">DVD grotuvo informacija</string>
+  <string id="20158">Tinklo informacija</string>
+  <string id="20159">Video sistemos informacija</string>
+  <string id="20160">Įrangos informacija</string>
+  <string id="20161">Viso</string>
+  <string id="20162">Užimta</string>
+  <string id="20163">iš</string>
+  <string id="20164">Apsauga nepalaikoma</string>
+  <string id="20165">Neužblokuota</string>
+  <string id="20166">Užblokuota</string>
+  <string id="20167">Įšaldytas</string>
+  <string id="20168">Reikia atstatyti</string>
+  <string id="20169">Savaitė</string>
+  <string id="20170">Linija</string>
+  <string id="20171">Windows tinklas (SMB)</string>
+  <string id="20172">XBMSP serveris</string>
+  <string id="20173">FTP serveris</string>
+  <string id="20174">iTunes dalytis muzika (DAAP)</string>
+  <string id="20175">UPnP serveris</string>
+  <string id="20176">Rodyti video informaciją</string>
+  <string id="20177">Baigti</string>
+  <string id="20178">Perkelti</string>
+  <string id="20179">Didžiosios</string>
+  <string id="20180">Simboliai</string>
+  <string id="20181">Atgal</string>
+  <string id="20182">Tarpas</string>
+  <string id="20183">Atnaujinti išvaizdą</string>
+  <string id="20184">Keisti nuotraukas naudojant EXIF</string>
+  <string id="20185">Naudoti afišos vaizdą serialams</string>
+  <string id="20186">Prašome palaukti</string>
+
+  <string id="20189">Įjungti automatinį slinktį, siužetams ir peržiūroms</string>
+  <string id="20190">Papildomai</string>
+  <string id="20191">Įjungti žurnalo derinimą</string>
+  <string id="20192">Ieškoti albumo info dedant į biblioteką</string>
+  <string id="20193">Numatyta paslauga info apie albumą</string>
+  <string id="20194">Numatyta paslauga info apie atlikėją</string>
+  <string id="20195">Pakeisti info šaltinį</string>
+  <string id="20196">Eksportuoti muzikinę biblioteką</string>
+  <string id="20197">Importuoti muzikinę biblioteką</string>
+  <string id="20198">Atlikėjas nerastas!</string>
+  <string id="20199">Įkėlimas duomenų apie atlikėją</string>
+
+  <!-- string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)-->
+
+  <string id="20250">'Vakarėlis' prasidėjo!(Video)</string>
+  <string id="20251">'Gėrimų' maišymas (Video)</string>
+  <string id="20252">'Bokalų' pildymas (Video)</string>
+  <string id="20253">WebDAV serveris (HTTP)</string>
+  <string id="20254">WebDAV serveris (HTTPS)</string>
+  <string id="20255">Pirmas prisijungimas, redaguoti savo profilį</string>
+  <string id="20256">Klientas HTS Tvheadend</string>
+  <string id="20257">Klientas VDR Streamdev</string>
+  <string id="20258">Klientas MythTV</string>
+  <string id="20259">Tinklo failų sistema (NFS)</string>
+  <string id="20260">Fono apsauga (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
+
+  <string id="20300">Serverio katalogas (HTTP)</string>
+  <string id="20301">Serverio katalogas (HTTPS)</string>
+  <string id="20302">Neįmanoma įrašyti į aplanką:</string>
+  <string id="20303">Norite praleisti ir tęsti?</string>
+  <string id="20304">RSS srautas</string>
+
+  <string id="20307">Antrinis DNS</string>
+  <string id="20308">Serveris DHCP:</string>
+  <string id="20309">Sukurti naują aplanką</string>
+  <string id="20310">Pritemdyti LCD ekraną grojant</string>
+  <string id="20311">Nežinomas arba integruotas (apsaugotas)</string>
+  <string id="20312">Pritemdyti LCD ekraną pauzėje</string>
+
+  <string id="20314">Video - Biblioteka</string>
+
+  <string id="20316">Ruš. pagal: ID</string>
+
+  <string id="20324">Groti dalį...</string>
+  <string id="20325">Kalibravimo atstatymas</string>
+  <string id="20326">Tai atstatys kalibravimą %s</string>
+  <string id="20327">pagal numatytąją reikšmę</string>
+  <string id="20328">Nurodykite tikslą</string>
+  <string id="20329">Filmai atskiruose aplankuose, kurie atitinka filmo pavadinimą</string>
+  <string id="20330">Naudokite aplankų pavadinimus ieškant</string>
+  <string id="20331">Failo</string>
+  <string id="20332">Naudoti failų ar aplankų vardus ieškant?</string>
+  <string id="20333">Turinys</string>
+  <string id="20334">Papkė</string>
+  <string id="20335">Peržiūrėti papkių turinį?</string>
+  <string id="20336">Atblokuoti šaltinius</string>
+  <string id="20337">Aktorius</string>
+  <string id="20338">Filmas</string>
+  <string id="20339">Režisierius</string>
+  <string id="20340">Ar norite panaikinti</string>
+  <string id="20341">visus objektus iš bibliotekos?</string>
+  <string id="20342">Filmai</string>
+  <string id="20343">Serialai</string>
+  <string id="20344">Šiame aplanke yra</string>
+  <string id="20345">Paleisti auto nuskaitymą</string>
+  <string id="20346">Nuskaityti su pokatalogiais</string>
+  <string id="20347">kaip</string>
+  <string id="20348">Režisieriai</string>
+  <string id="20349">Šiuo maršrutu, video failų nerasta!</string>
+  <string id="20350">balsavo</string>
+  <string id="20351">Informacija apie serialą</string>
+  <string id="20352">Informacija apie epizodą</string>
+  <string id="20353">Įkeliama informacija apie serialą</string>
+  <string id="20354">Instrukcija apie epizodo pasirinkimą</string>
+  <string id="20355">Duomenų ikėlimas apie epizodus papkėse</string>
+  <string id="20356">Pasirinkite serijalą:</string>
+  <string id="20357">Įveskite serialo pavadinimą</string>
+  <string id="20358">Sezonas %i</string>
+  <string id="20359">Epizodas</string>
+  <string id="20360">Epizodai</string>
+  <string id="20361">Atsiųsti informaciją apie epizodus</string>
+  <string id="20362">Pašalinti iš bibliotekos epizodą</string>
+  <string id="20363">Pašalinti iš bibliotekos serialą</string>
+  <string id="20364">Serialas</string>
+  <string id="20365">Epizodo siužetas</string>
+  <string id="20366">* Visi sezonai</string>
+  <string id="20367">Be peržiurėtų</string>
+  <string id="20368">Produkto kodas</string>
+  <string id="20369">Rodyti siužetą neperžiurėtiems elementams</string>
+  <string id="20370">* Paslėpta, kad išvengti spoilerių *</string>
+  <string id="20371">Nustatyti sezono eskizus</string>
+  <string id="20372">Sezono paveikslėlis</string>
+  <string id="20373">Sezonas</string>
+  <string id="20374">Atsiųsti informaciją apie filmą</string>
+  <string id="20375">Nenurodyti turinio</string>
+  <string id="20376">Originalus pavadinimas</string>
+  <string id="20377">Atnaujinti informaciją apie serialą</string>
+  <string id="20378">Atnaujinti informaciją apie visus epizodus?</string>
+  <string id="20379">Nurodytas katalogas turi atskirą serialą</string>
+  <string id="20380">Neskaityti pasirinkto aplanko</string>
+  <string id="20381">Ypatingas</string>
+  <string id="20382">Automatiškai sukurti eskizus sezonui</string>
+  <string id="20383">Nurodytas katalogas turi atskirą video</string>
+  <string id="20384">Susieti su serialu</string>
+  <string id="20385">Atsieti nuo serialo</string>
+  <string id="20386">Nauji filmai</string>
+  <string id="20387">Nauji epizodai</string>
+  <string id="20388">Studijos</string>
+  <string id="20389">Vaizdo klipai</string>
+  <string id="20390">Nauji vaizdo klipai</string>
+  <string id="20391">Vaizdo klipai</string>
+  <string id="20392">Pašalinti iš bibliotekos vaizdo klipus</string>
+  <string id="20393">Duomenys apie vaizdo klipus</string>
+  <string id="20394">Duomenų įkėlimas apie vaizdo klipus</string>
+  <string id="20395">Sumaišyti</string>
+  <string id="20396">Pereiti prie albumo pagal atlikėją</string>
+  <string id="20397">Pereiti prie albumo</string>
+  <string id="20398">Groti dainą</string>
+  <string id="20399">Pereiti į vaizdo klipus iš albumo</string>
+  <string id="20400">Pereiti į vaizdo klipus pagal atlikėjus</string>
+  <string id="20401">Groti vaizdo klipą</string>
+  <string id="20402">Automatiškai kurti miniatiūras aktoriams</string>
+  <string id="20403">Nustatyti aktoriaus miniatiūrą</string>
+
+  <string id="20405">Naikinti epizodo žymę</string>
+  <string id="20406">Nustatyti epizodo žymę</string>
+  <string id="20407">Info resurso nustatymas</string>
+  <string id="20408">Atsiųsti duomenis apie vaizdo klipą</string>
+  <string id="20409">Atsiųsti duomenis apie serialą</string>
+  <string id="20410">Treileris</string>
+  <string id="20411">Sujungti</string>
+  <string id="20412">Sujungti TV šou</string>
+  <string id="20413">Gauti Fanart</string>
+  <string id="20414">Rodyti Fanart bibliotekoje</string>
+  <string id="20415">Ieškoma naujo turinio</string>
+  <string id="20416">Pirma eteryje</string>
+  <string id="20417">Autorius(rašytojas)</string>
+  <string id="20418">Valyti failų ir aplankų vardus</string>
+  <string id="20419">Rodyti metaduomenis žiurimiems failams</string>
+
+  <string id="20420">Niekada</string>
+  <string id="20421">Tik jeigu vienas sezonas</string>
+  <string id="20422">Visada</string>
+  <string id="20423">Yra treileris</string>
+  <string id="20424">Klaidingas</string>
+  <string id="20425">Prezentacijos Fanart</string>
+  <string id="20426">Eksportuoti viename faile ar suskaidyti</string>
+  <string id="20427">į atskirus failus kiekvienam įrašui?</string>
+  <string id="20428">Vienu failu</string>
+  <string id="20429">Suskaidyti</string>
+  <string id="20430">Eksportuoti eskizus ir Fanart?</string>
+  <string id="20431">Perrašyti senus failus?</string>
+  <string id="20432">Pašalinti kelią iš atnaujintos bibliotekos</string>
+  <string id="20433">Ištraukti miniatiūras iš vaizdo informacijos</string>
+  <string id="20434">Rinkiniai</string>
+  <string id="20435">Nustatyti miniatiūras filmų rinkiniams</string>
+  <string id="20436">Eksportuoti miniatiūras aktoriams?</string>
+  <string id="20437">Pasirinkti Fanart</string>
+  <string id="20438">Vietinis Fanart</string>
+  <string id="20439">Be Fanart</string>
+  <string id="20440">Aktualus Fanart</string>
+  <string id="20441">Išorinis Fanart</string>
+  <string id="20442">Redaguoti turinį</string>
+  <string id="20443">Norite atnaujinti informaciją visiems</string>
+  <string id="20444">šio aplanko elementams?</string>
+  <string id="20445">Fanart</string>
+  <string id="20446">Rasta vietoje saugoma informacija.</string>
+  <string id="20447">Ignoruoti ir atnaujinti iš interneto?</string>
+  <string id="20448">Nepavyko įkelti informacijos</string>
+  <string id="20449">Serveris nepasiekiamas.</string>
+  <string id="20450">Ar norite tęsti skenavimą?</string>
+  <string id="20451">Šalis</string>
+  <string id="20452">Epizodas</string>
+  <string id="20453">Epizodai</string>
+  <string id="20454">Klausytojas</string>
+  <string id="20455">Klausytojų</string>
+  <string id="20456">Nustatyti rodomo filmo Fanart</string>
+  <string id="20457">Filmų rinkinys</string>
+  <string id="20458">Grupiniai filmų rinkiniai</string>
+  <!-- up to 21329 is reserved for the video db !! !-->
+
+  <string id="21330">Rodyti paslėptus failus ir aplankus</string>
+
+  <string id="21331">TuxBox klientas</string>
+  <string id="21332">DĖMESIO: TuxBox yra įrašymo režime!</string>
+  <string id="21333">Srautas bus sustabdytas!</string>
+  <string id="21334">Nesėkmingas perjungimas į kanalą %s!</string>
+  <string id="21335">Ar esate tikri, kad paleisti srautą?</string>
+  <string id="21336">Prijungimas prie: %s</string>
+  <string id="21337">TuxBox prietaisas</string>
+  <!-- up to 21355 is reserved for the TuxBox Client!! !-->
+
+  <string id="21359">Pridėti medijos resursai...</string>
+  <string id="21360">Prieiga prie medija resursai per UPnP</string>
+
+  <string id="21364">Pakeisti media resursai</string>
+  <string id="21365">Pašalinti media resursai</string>
+  <string id="21366">Ypatingas aplankas subtitrams</string>
+  <string id="21367">Aplankas filmams ir alternatyviems subtitrams</string>
+  <string id="21368">Nepaisyti ASS/SSA subtitrų šriftų</string>
+
+  <string id="21369">Įjungti pelę ir Touch Screen palaikymą</string>
+  <string id="21370">Garsų peržiūros metu sąsaja</string>
+  <string id="21371">Miniatiūros</string>
+  <string id="21372">Nustatyti regioną DVD grotuve</string>
+  <string id="21373">Vaizdo</string>
+  <string id="21374">Vaizdo aspektas</string>
+  <string id="21375">Normalus</string>
+  <string id="21376">Letterbox</string>
+  <string id="21377">Plačiaekranis</string>
+  <string id="21378">Įjungti 480p</string>
+  <string id="21379">Įjungti 720p</string>
+  <string id="21380">Įjungti 1080i</string>
+  <string id="21381">Įveskite naują grojaraščio pavadinimą</string>
+  <string id="21382">Rodyti "Pridėti kodai" failų sąraše</string>
+  <string id="21383">Įjungti slinkties juostas</string>
+  <string id="21384">Žymėti varnele peržiūrėtą vaizdo įrašą bibliotekoje</string>
+  <string id="21385">Atidaryti</string>
+  <string id="21386">Akustikos lygio reguliavimas</string>
+  <string id="21387">Greitas</string>
+  <string id="21388">Lėtas</string>
+  <string id="21389">Leisti savo fono paveikslėlius</string>
+  <string id="21390">Energijos valdymas</string>
+  <string id="21391">Visa energija</string>
+  <string id="21392">Mažiau energijos</string>
+  <string id="21393">Išsamus laukimas</string>
+  <string id="21394">Sumažintas laukimas</string>
+  <string id="21395">Neįmanoma įkelti failo didesnio kaip 4 GB</string>
+  <string id="21396">Skyrius</string>
+  <string id="21397">Aukštos kokybės Pixel Shader v2</string>
+  <string id="21398">Įgalinti grojaraštį paleidimo metu</string>
+  <string id="21399">Naudokite Tween animaciją</string>
+  <string id="21400">sudėtyje yra</string>
+  <string id="21401">sudėtyje nėra</string>
+  <string id="21402">yra</string>
+  <string id="21403">nėra</string>
+  <string id="21404">prasideda nuo</string>
+  <string id="21405">baigiasi</string>
+  <string id="21406">daugiau negu</string>
+  <string id="21407">mažiau negu</string>
+  <string id="21408">po</string>
+  <string id="21409">prieš</string>
+  <string id="21410">gale</string>
+  <string id="21411">pradžioj</string>
+  <string id="21412">'Scrapers'</string>
+  <string id="21413">Numatytasis filmų 'scraper'</string>
+  <string id="21414">Numatytasis serialų 'scraper'</string>
+  <string id="21415">Numatytasis vaizdo klipų 'scraper'</string>
+  <string id="21416">Leisti taisyti 'scraper' kalbą</string>
+  <string id="21417">- Nustatymai</string>
+  <string id="21418">Daugiakalbis</string>
+  <string id="21419">Šaltinių informacija neegzistuoja</string>
+  <string id="21420">Reikšmė per didelė</string>
+  <string id="21421">Išmoningo grojaraštčio taisyklė</string>
+  <string id="21422">Pažymėkite objektus kuriuos</string>
+  <string id="21423">Nauja taisyklė...</string>
+  <string id="21424">Objektai turi atitikti</string>
+  <string id="21425">visas taisykles</string>
+  <string id="21426">vieną ar daugiau taisyklių</string>
+  <string id="21427">Riboti iki</string>
+  <string id="21428">Be apribojimų</string>
+  <string id="21429">Rūšiuoti pagal</string>
+  <string id="21430">didėjimo tvarka</string>
+  <string id="21431">mažėjimo tvarka</string>
+  <string id="21432">Grojaraščio redagavimas</string>
+  <string id="21433">Grojaraščio pavadinimas</string>
+  <string id="21434">Ieškoti objektų, katruose</string>
+  <string id="21435">Redaguoti</string>
+  <string id="21436">%i objektą(-us,ai)</string>
+  <string id="21437">Naujas išmoningas grojaraštis...</string>
+  <string id="21438">%c Diskas</string>
+  <string id="21439">Keisti režimo taisykles 'Party'</string>
+  <string id="21440">Namų papkė</string>
+  <string id="21441">Peržiūros kiekis</string>
+  <string id="21442">Epizodo pavadinimas</string>
+  <string id="21443">Video rezoliucija</string>
+  <string id="21444">Audio kanalai</string>
+  <string id="21445">Vaizdo koduotė</string>
+  <string id="21446">Audio koduotė</string>
+  <string id="21447">Audio kalba</string>
+  <string id="21448">Subtitrų kalbos</string>
+  <string id="21449">Distancinis pultas siunčia klaviatūros kodą</string>
+  <string id="21450">- Redaguoti</string>
+  <string id="21451">Reikalingas interneto ryšys</string>
+  <string id="21452">Dar...</string>
+  <string id="21453">Šakninė FS</string>
+  <string id="21454">Talpykla pilna</string>
+  <string id="21455">Pasiekti reikiamą lygį iki nepertraukiamo grojimo talpyklos užpildymo</string>
+
+  <string id="21460">Subtitrų vieta</string>
+  <string id="21461">Fiksuotas</string>
+  <string id="21462">Apačioje video</string>
+  <string id="21463">Žemiau video</string>
+  <string id="21464">Į viršų video</string>
+  <string id="21465">Aukštai video</string>
+
+  <string id="21800">Failo pavadinimas</string>
+  <string id="21801">Failo maršrutas</string>
+  <string id="21802">Failo dydis</string>
+  <string id="21803">Failo Data/Laikas</string>
+  <string id="21804">Prezentacijos indekas</string>
+  <string id="21805">Išmatavimai</string>
+  <string id="21806">Komentaras</string>
+  <string id="21807">Spalva/B&amp;W</string>
+  <string id="21808">JPEG eiga</string>
+
+  <string id="21820">Data/Laikas</string>
+  <string id="21821">Aprašymas</string>
+  <string id="21822">Gamintojas</string>
+  <string id="21823">Kameros modelis</string>
+  <string id="21824">EXIF komentaras</string>
+  <string id="21825">Atnaujinimas</string>
+  <string id="21826">Diafragma</string>
+  <string id="21827">Fokusavimo nuotolis</string>
+  <string id="21828">Fokusavimo atstumas</string>
+  <string id="21829">Ekspozicijos</string>
+  <string id="21830">Ekspozicijos laikas</string>
+  <string id="21831">Ekspozicijos poslinkis</string>
+  <string id="21832">Ekspozicijos režimas</string>
+  <string id="21833">Su blykste</string>
+  <string id="21834">Baltumo balansas</string>
+  <string id="21835">Šviesos šaltinis</string>
+  <string id="21836">Matavimo režimas</string>
+  <string id="21837">ISO</string>
+  <string id="21838">Skaitmeninis zoom</string>
+  <string id="21839">Plotis CCD</string>
+  <string id="21840">GPS platuma</string>
+  <string id="21841">GPS ilguma</string>
+  <string id="21842">GPS aukštis</string>
+  <string id="21843">Orientacija</string>
+
+  <string id="21860">Daugiau kategorijų</string>
+  <string id="21861">Raktiniai žodžiai</string>
+  <string id="21862">Titras</string>
+  <string id="21863">Autorius</string>
+  <string id="21864">Antraštė</string>
+  <string id="21865">Specialios instrukcijos</string>
+  <string id="21866">Kategorija</string>
+  <string id="21867">Parašas</string>
+  <string id="21868">Parašo pavadinimas</string>
+  <string id="21869">Autorius</string>
+  <string id="21870">Šaltinis</string>
+  <string id="21871">Autorinės teisės</string>
+  <string id="21872">Objekto pavadinimas</string>
+  <string id="21873">Miestas</string>
+  <string id="21874">Valstybė (JAV)</string>
+  <string id="21875">Šalis</string>
+  <string id="21876">Originalus Tx Reference</string>
+  <string id="21877">Sukūrimo data</string>
+  <string id="21878">Autorinės teisės ženklas</string>
+  <string id="21879">Šalies kodas</string>
+  <string id="21880">Nuorodos tarnyba</string>
+  <string id="21881">Vykdyti kontrolę XBMC per UPnP</string>
+  <string id="21882">Bandyti praleisti DVD įrašą</string>
+  <string id="21883">Nuskaityti Audio CD diskai</string>
+  <string id="21884">Užklausa apie visus atlikėjus</string>
+  <string id="21885">Atsisiunčiama albumo informacija</string>
+  <string id="21886">Atsisiunčiama atlikėjo informacija</string>
+  <string id="21887">Biografija</string>
+  <string id="21888">Diskografija</string>
+  <string id="21889">Ieškoti atlikėjo</string>
+  <string id="21890">Pasirinkite atlikėją</string>
+  <string id="21891">Atlikėjo duomenys</string>
+  <string id="21892">Instrumentai</string>
+  <string id="21893">Gimė</string>
+  <string id="21894">Sukūrė</string>
+  <string id="21895">Temos</string>
+  <string id="21896">Iširo</string>
+  <string id="21897">Mirė</string>
+  <string id="21898">Kurybų metai</string>
+  <string id="21899">Etiketė</string>
+  <string id="21900">Susikūrė/Susiformavo</string>
+
+  <!-- strings 21900 thru 21999 reserved for slideshow info -->
+
+  <string id="22000">Atnaujinti biblioteką paleidžiant</string>
+  <string id="22001">Visada atnaujinti biblioteką fone</string>
+  <string id="22002">- DNS suffix</string>
+
+  <string id="22003">%2.3fс</string>
+  <string id="22004">Delsimas: %2.3fс</string>
+  <string id="22005">Į priekį: %2.3fс</string>
+  <string id="22006">Subtitrų poslinkis</string>
+  <string id="22007">OpenGL vendor:</string>
+  <string id="22008">OpenGL renderer:</string>
+  <string id="22009">OpenGL versija:</string>
+  <string id="22010">GPU temperatūra:</string>
+  <string id="22011">CPU temperatūra:</string>
+  <string id="22012">Viso atminties</string>
+  <string id="22013">Profilio duomenys</string>
+  <string id="22014">Pritemdyti, kai peržiuros metu pristabdoma</string>
+  <string id="22015">Visi įrašai</string>
+  <string id="22016">Pagal vardą</string>
+  <string id="22017">Pagal grupę</string>
+  <string id="22018">Tiesioginiai kanalai</string>
+  <string id="22019">Įrašai pagal pavadinimą</string>
+  <string id="22020">Gidas</string>
+  <string id="22021">Leidžiama proporcijos klaida juodų juostų mažinimui</string>
+  <string id="22022">Rodyti vaizdo failų sąrašus</string>
+  <string id="22023">DirectX vendor:</string>
+  <string id="22024">Direct3D version:</string>
+
+  <!-- strings 22030 thru 22060 reserved for karaoke -->
+  <string id="22030">- Šriftas</string>
+  <string id="22031">- Dydis</string>
+  <string id="22032">- Spalva</string>
+  <string id="22033">- Koduotė</string>
+  <string id="22034">Eksportuoti karaoke tekstą HTML formatu</string>
+  <string id="22035">Eksportuoti karaoke tekstą CSV formatu</string>
+  <string id="22036">Importuoti karaoke tekstą...</string>
+  <string id="22037">Automatinis dainų pasirinkimas</string>
+  <string id="22038">Eksportuoti karaoke tekstą...</string>
+  <string id="22039">Įveskite dainos numerį</string>
+  <string id="22040">baltas/žalias</string>
+  <string id="22041">baltas/raudonas</string>
+  <string id="22042">baltas/mėlynas</string>
+  <string id="22043">juodas/baltas</string>
+
+  <string id="22079">Numatytas veiksmas, kai pasirenkate</string>
+  <string id="22080">Pasirinkti</string>
+  <string id="22081">Papildomai</string>
+  <string id="22082">Daugiau...</string>
+  <string id="22083">Groti viską</string>
+
+  <string id="23049">Teletekstas negalimas</string>
+  <string id="23050">Aktyvuoti teletekstą</string>
+  <string id="23051">Dalis %i</string>
+  <string id="23052">Buferizacija %i bait</string>
+  <string id="23053">Sustabdyti</string>
+  <string id="23054">Paleisti</string>
+
+  <!-- strings 23100 thru 23150 reserved for external player -->
+  <string id="23100">Aktyvuotas išorės grotuvas</string>
+  <string id="23101">Paspauskite OK grotuvui atjungti</string>
+
+  <string id="23104">Paspauskite OK baigus groti</string>
+
+  <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
+  <string id="24000">Priedas</string>
+  <string id="24001">Priedai</string>
+  <string id="24002">Priedų parinktys</string>
+  <string id="24003">Priedų informacija</string>
+
+  <string id="24005">Duomenų šaltiniai</string>
+  <string id="24007">Filmų informacija</string>
+  <string id="24008">Užsklanda</string>
+  <string id="24009">Skriptai</string>
+  <string id="24010">Vizualizacija</string>
+  <string id="24011">Priedų saugykla</string>
+  <string id="24012">Subtitrai</string>
+  <string id="24013">Tekstai</string>
+  <string id="24014">TV informacija</string>
+  <string id="24015">Vaizdo klipų informacija</string>
+  <string id="24016">Albumų informacija</string>
+  <string id="24017">Atlikėjų informacija</string>
+  <string id="24018">Servisas</string>
+
+  <string id="24020">Pritaikyti</string>
+  <string id="24021">Išjungti</string>
+  <string id="24022">Įjungti</string>
+  <string id="24023">Priedas atjungtas</string>
+  <string id="24027">Orai</string>
+  <string id="24028">Weather.com (standartinis)</string>
+  <string id="24030">Šis priedas negali būti sukonfigūruotas</string>
+  <string id="24031">Klaida įkeliant nustatymus</string>
+  <string id="24032">Visi priedai</string>
+  <string id="24033">Gauti priedus</string>
+  <string id="24034">Patikrinti atnaujinimus</string>
+  <string id="24035">Priverstinis atnaujinimas</string>
+  <string id="24036">Pakeitimų aprašas</string>
+  <string id="24037">Išdiegti</string>
+  <string id="24038">Nustatyti</string>
+  <string id="24039">Išjungti priedus</string>
+  <string id="24040">(Išvalyti dabartinius nustatymus)</string>
+  <string id="24041">Įdiegti iš failo *.zip</string>
+  <string id="24042">Atsisiųsti %i%%</string>
+  <string id="24043">Prieinami atnaujinimai</string>
+  <string id="24044">Priklausomybės neįvykdytos</string>
+  <string id="24045">Priedai neatitinka teisingos struktūros</string>
+  <string id="24046">%s įdiegti taip kaip yra naudojama priedai(us)</string>
+  <string id="24047">Šis priedas negali būti pašalintas</string>
+  <string id="24048">Gryžti</string>
+
+  <string id="24050">Prieinami priedai</string>
+  <string id="24051">Versija:</string>
+  <string id="24052">Atsisakymas</string>
+  <string id="24053">Licenzija:</string>
+  <string id="24054">Pakeitimų sąrašas</string>
+  <string id="24059">Jūs norite įjungti priedus?</string>
+  <string id="24060">Jūs norite išjungti priedus?</string>
+  <string id="24061">Galimi priedų atnaujinimai!</string>
+  <string id="24062">Įjungti priedus</string>
+  <string id="24063">Auto atnaujinimas</string>
+  <string id="24064">Priedas įtrauktas</string>
+  <string id="24065">Priedas atnaujintas</string>
+  <string id="24066">Atšaukti priedų naujinimą?</string>
+  <string id="24067">Kraunami priedai:</string>
+  <string id="24068">Galimas atnaujinimas</string>
+  <string id="24069">Atnaujinti</string>
+
+  <string id="24070">Priedas negali būti naudojamas</string>
+  <string id="24071">Nežinoma klaida</string>
+  <string id="24072">Reikalinga koregavimas</string>
+  <string id="24073">Neįmanoma prisijungti</string>
+  <string id="24074">Reikia iš naujo paleisti</string>
+  <string id="24075">Išjungti</string>
+  <string id="24076">Priedas Būtinas</string>
+  <string id="24080">Pabandyti iš naujo prisijungti?</string>
+  <string id="24089">Priedas atnaujinamas</string>
+  <string id="24090">Blokuoti Priedų menedžerį</string>
+
+  <string id="24094">(dabar)</string>
+  <string id="24095">(juod.sarašas)</string>
+  <string id="24096">Priedas pažymėtas kaip sugadintas.</string>
+  <string id="24097">Norite atjungti jį savo sistemoje?</string>
+  <string id="24098">Sugadintas</string>
+  <string id="24099">Jūs norite įjungti šį viršelį?</string>
+  <string id="24100">Norėdami naudotis šią funkciją, turite atsisiųsti priedą:</string>
+  <string id="24101">Ar norite atsisiųsti šį Priedą?</string>
+  <string id="25000">Pranešimai</string>
+
+  <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
+  <string id="29800">Bibliotekos režimas</string>
+  <string id="29801">QWERTY komutatorius</string>
+  <string id="29802">Įjungtas Passthrough Audio</string>
+
+  <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
+  <!-- strings 31000 thru 31999 reserved for skins -->
+  <!-- strings 32000 thru 32999 reserved for scripts -->
+  <!-- strings 33000 thru 33999 reserved for common strings used in addons -->
+  <string id="33001">Treilerio kokybė</string>
+  <string id="33002">Srautas</string>
+  <string id="33003">Atsisiųsti</string>
+  <string id="33004">Atsisiųsti ir groti</string>
+  <string id="33005">Atsisiųsti ir išsaugoti</string>
+  <string id="33006">Šiandien</string>
+  <string id="33007">Rytoj</string>
+  <string id="33008">Išsaugojimas</string>
+  <string id="33009">Kopijavimas</string>
+  <string id="33010">Nustatyti parsisiuntimui kelią</string>
+  <string id="33011">Paieškų trukmė</string>
+  <string id="33012">Trumpa</string>
+  <string id="33013">Ilga</string>
+  <string id="33014">Naudokite DVD grotuvą vietoj...</string>
+  <string id="33015">Atsisiųsti video prieš grojant</string>
+  <string id="33016">Vaizdo klipai</string>
+  <string id="33017">Norėdami įjungti modulį, turit iš naujo paleisti</string>
+  <string id="33018">Šį vakarą</string>
+  <string id="33019">Ryt vakare</string>
+  <string id="33020">Sąlygos</string>
+  <string id="33021">Krituliai</string>
+  <string id="33022">Krituliai</string>
+  <string id="33023">Drėgmė</string>
+  <string id="33024">Jaučiasi</string>
+  <string id="33025">Laikomasi</string>
+  <string id="33026">Nukrypimas nuo normos</string>
+  <string id="33027">Saulėtekis</string>
+  <string id="33028">Saulėlydis</string>
+  <string id="33029">Išsamiau</string>
+  <string id="33030">Numatoma</string>
+  <string id="33031">Albumų viršeliai</string>
+  <string id="33032">Išversti tekstą</string>
+  <string id="33033">Žemėlapis %s kategorija</string>
+  <string id="33034">36 val.</string>
+  <string id="33035">Kortelės</string>
+  <string id="33036">Kas valandą</string>
+  <string id="33037">Savaitgalis</string>
+  <string id="33038">%s diena</string>
+  <string id="33049">Signalas</string>
+  <string id="33050">Signalai</string>
+  <string id="33051">Peržiūrėti Jūsų</string>
+  <string id="33052">Patikrinkite</string>
+  <string id="33053">Nustatykite</string>
+  <string id="33054">Sezonai</string>
+  <string id="33055">Naudokite</string>
+  <string id="33056">Žiurėkite</string>
+  <string id="33057">Klausykite</string>
+  <string id="33058">Peržiurėkite</string>
+  <string id="33059">Pritaikykite</string>
+  <string id="33060">Energija</string>
+  <string id="33061">Meniu</string>
+  <string id="33062">Atkūrti</string>
+  <string id="33063">Nustatymai</string>
+  <string id="33065">Redaktorius</string>
+  <string id="33066">Apie Jūsų</string>
+  <string id="33067">Įvertinimas žvaigždutėmis</string>
+  <string id="33068">Fonas</string>
+  <string id="33069">Fono variantai</string>
+  <string id="33070">Jūsų fonas</string>
+  <string id="33071">Jūsų fonai</string>
+  <string id="33072">Peržiurėti Readme</string>
+  <string id="33073">Peržiurėti Changelog</string>
+  <string id="33074">Ši versija %s reikalauja</string>
+  <string id="33075">XBMC versijos %s arba naujesnės.</string>
+  <string id="33076">Prašome atnaujinti XBMC.</string>
+  <string id="33077">Duomenų nerasta!</string>
+  <string id="33078">Sekantis puslapis</string>
+  <string id="33079">Patinka</string>
+  <string id="33080">Nepatinka</string>
+  <string id="33081">Šis failas susideda iš kelių, pasirinkite dalį atkurimui.</string>
+  <string id="33082">Kelias iki skripto</string>
+  <string id="33083">Įtraukti savo skripto mygtuką</string>
+
+  <string id="33100">Nepavyko paleisti</string>
+  <string id="33101">Tinklo serveris</string>
+  <string id="33102">Serverio įvykis</string>
+  <string id="33103">Nuotolinio ryšio serveris</string>
+
+  <string id="33200">Aptiktas Naujas Pajungimas</string>
+
+  <!-- translators: no need to add these to your language files -->
+  <string id="34000">Lame</string>
+  <string id="34001">Vorbis</string>
+  <string id="34002">Wav</string>
+  <string id="34003">DXVA2</string>
+  <string id="34004">VAAPI</string>
+  <string id="34005">Flac</string>
+
+  <string id="34100">Garsiakalbių konfiguracija</string>
+  <string id="34101">2.0</string>
+  <string id="34102">2.1</string>
+  <string id="34103">3.0</string>
+  <string id="34104">3.1</string>
+  <string id="34105">4.0</string>
+  <string id="34106">4.1</string>
+  <string id="34107">5.0</string>
+  <string id="34108">5.1</string>
+  <string id="34109">7.0</string>
+  <string id="34110">7.1</string>
+  <!-- 34112-34200 reserved for future use -->
+
+  <string id="34201">Nerasta kito failo grojimui</string>
+  <string id="34202">Nerasta ankstesnio failo grojimui</string>
+
+  <string id="34300">Nesėkminga paleistis zeroconf</string>
+  <string id="34301">Ar įdiegta "Apple Bonjour" tarnyba? Prisijungti, gauti daugiau info.</string>
+
+  <string id="34400">Vaizdo Rendering</string>
+  <string id="34401">Bilinear mastelio paleidimo klaida, pirminio paleidimo vaizdo filters/scalers</string>
+  <string id="34402">Nepavyko inicijuoti garso prietaiso</string>
+  <string id="34403">Patikrinkite savo garso nustatymus</string>
+
+  <string id="35000">Periferija</string>
+
+  <string id="35001">Bendras HID prietaisas</string>
+  <string id="35002">Bendras tinklo adapteris</string>
+  <string id="35003">Bendras diskas</string>
+  <string id="35004">Nėra jokių prieinamų nustatymų&#10;šiai periferijai.</string>
+  <string id="35005">Naujas prietaiso konfigūravimas</string>
+  <string id="35006">Pašalinti prietaisą</string>
+  <string id="35007">Nuoroda, kaip naudoti šį prietaisą</string>
+  <string id="35008">Nuoroda atidaryta</string>
+
+  <string id="35500">Padėtis</string>
+  <string id="35501">Kategorija</string>
+  <string id="35502">Vieta</string>
+  <string id="35503">Prekyba</string>
+  <string id="35504">Produkto ID</string>
+
+  <string id="36000">Pulse-Eight CEC adpteris</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Perjungti į klaviatūros komandas</string>
+  <string id="36003">Perjungti į pultelio komandas</string>
+  <string id="36004">Paspauskite mygtuką "Vartotojas"</string>
+  <string id="36005">Perjungti šalutinį komandų jungtį</string>
+  <string id="36006">Nepavyko atidaryti adapterio</string>
+  <string id="36007">Įjungti maitinimą įrenginiuose, paleidžiant XBMC</string>
+  <string id="36008">Išjungti maitinimą įrenginiuose, sustabdant XBMC</string>
+  <string id="36009">Patalpinkite prietaisus laukimo režime, kai aktyvi ekrano užsklanda</string>
+  <string id="36010">Nustatyti kaip neaktyvų šaltinį kai sustabdomas XBMC</string>
+  <string id="36011">Nepavyko aptikti CEC prievado. Nustatyti jį rankiniu būdu.</string>
+  <string id="36012">Nepavyko aptikti CEC adapterio.</string>
+  <string id="36013">Nepalaikomas 'libec' sąsajos versija.%d atsisiuskite naujesnę  XBMC versiją (%d)</string>
+  <string id="36014">Kompiuterį budėjimo režimu, kai televizorius yra išjungtas</string>
+  <string id="36015">HDMI prievado numeris</string>
+  <string id="36016">Sujungtas</string> <!-- max. 13 characters -->
+  <string id="36017">Adapteris rastas, bet Libcec nėra</string>
+  <string id="36018">Naudokite TV kalbos nustatymus</string>
+</strings>
\ No newline at end of file
index 413336d..ac07e8e 100644 (file)
@@ -2,7 +2,7 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: Rafał Wójcik-->
 <!--Email: rafal.wojcik@gmail.com-->
-<!--Date of translation: 03/04/2011-->
+<!--Date of translation: 02/21/2012-->
 <!--$Revision$-->
 <strings>
   <string id="0">Programy</string>
   <string id="194">Szukam...</string>
   <string id="195">Nie znaleziono informacji</string>
   <string id="196">Wybierz film:</string>
+  <string id="197">Szukam informacji o %s</string>
   <string id="198">Wczytuję informacje o filmie</string>
   <string id="199">Interfejs WWW</string>
   <string id="202">O filmie</string>
   <string id="226">Wzorce testowe...</string>
   <string id="227">Szukaj tytułów CD na freedb.org</string>
   <string id="228">Losuj utwory podczas wczytywania</string>
-  <string id="229">Wyłącz HDD po upływie</string>
+  <string id="229">Wyłącz dysk po upływie</string>
   <string id="230">Filtry</string>
   <string id="231">Żaden</string>
   <string id="232">Punktowy</string>
   <string id="380">opady</string>
   <string id="381">niewielkie</string>
   <string id="382">sporadyczne</string>
-  <string id="383">wiatr</string>
+  <string id="383">Wiatr</string>
   <string id="384">silny</string>
   <string id="385">pogodnie</string>
   <string id="386">bezchmurnie</string>
   <string id="417">Widok: Duże ikony</string>
   <string id="418">min.</string>
   <string id="419">maks.</string>
-  <string id="420">HDMI</string>
   <string id="422">Usuń informacje o albumach</string>
   <string id="423">Usuń informacje o CD</string>
   <string id="424">Zaznacz</string>
   <string id="438">Otwieram plik</string>
   <string id="439">Pamięć podręczna</string>
   <string id="440">Dysk twardy</string>
-  <string id="441">UDF</string>
-  <string id="442">LAN</string>
+  <string id="442">Sieć lokalna</string>
   <string id="443">Internet</string>
   <string id="444">Wideo</string>
   <string id="445">Dźwięk</string>
-  <string id="446">DVD</string>
   <string id="447">Autoodtwarzanie</string>
-  <string id="448">LCD</string>
   <string id="449">Włączone</string>
   <string id="450">Kolumn</string>
   <string id="451">Adres 1 rzędu</string>
   <string id="540">Duży baner</string>
   <string id="541">Ikony albumów</string>
   <string id="542">Ikony DVD</string>
-  <string id="543">DVD</string>
   <string id="544">O mediach</string>
   <string id="545">Wyjściowe urządzenie audio</string>
   <string id="546">Urządzenie przejścia dźwięku</string>
   <string id="778">- Tryb zabezpieczeń</string>
   <string id="779">Zapisz i zastosuj ustawienia interfejsu sieciowego</string>
   <string id="780">Bez szyfrowania</string>
-  <string id="781">WEP</string>
-  <string id="782">WPA</string>
-  <string id="783">WPA2</string>
   <string id="784">Zmiana ustawień interfejsu sieciowego. Proszę czekać.</string>
   <string id="785">Ponowne uruchomienie interfejsu sieciowego powiodło się.</string>
   <string id="786">Ponowne uruchomienie interfejsu sieciowego nie powiodło się.</string>
   <string id="788">Wyłączenie interfejsu sieciowego powiodło się.</string>
   <string id="789">Nazwa sieci bezprzewodowej (ESSID)</string>
   <string id="791">Zezwalaj lokalnym programom na sterowanie XBMC</string>
-  <string id="792">Port</string>
   <string id="793">Zakres portów</string>
   <string id="794">Zezwalaj na odbiór poleceń z innych programów</string>
   <string id="795">Wstępna przerwa przed powtórzeniem (ms)</string>
   <string id="850">Wprowadzono nieprawidłowy port</string>
   <string id="851">Wartość musi być z przedziału 1-65535</string>
   <string id="852">Wartość musi być z przedziału 1024-65535</string>
+  <string id="998">Dodaj muzykę...</string>
+  <string id="999">Dodaj wideo...</string>
   <string id="1000">- Podgląd</string>
   <string id="1001">Nie można połączyć</string>
   <string id="1002">XBMC nie mógł nawiązać połączenia sieciowego.</string>
   <string id="1010">Nazwa serwera</string>
   <string id="1011">Zdalna ścieżka</string>
   <string id="1012">Folder współdzielony</string>
-  <string id="1013">Port</string>
   <string id="1014">Nazwa użytkownika</string>
   <string id="1015">Wskaż serwer sieciowy</string>
   <string id="1016">Wprowadź adres sieciowy serwera</string>
   <string id="1255">Wysyłaj nazwę użytkownika i hasło FTP</string>
   <string id="1256">Interwał pingu</string>
   <string id="1257">Połączyć z wykrytym systemem?</string>
-  <string id="1260">Rozgłoś te usługi do innych systemów poprzez Zeroconf</string>
+  <string id="1260">Rozgłoś usługi do innych systemów poprzez Zeroconf</string>
+  <string id="1270">Zezwól XBMC na odbiór treści przez AirPlay</string>
+  <string id="1271">Nazwa urządzenia</string>
+  <string id="1272">- Użyj ochrony hasłem</string>
   <string id="1300">Inne urządzenie audio</string>
   <string id="1301">Inne urządzenie przejścia</string>
   <string id="1396">zamiecie</string>
   <string id="10019">Ustawienia - Wygląd</string>
   <string id="10020">Skrypty</string>
   <string id="10021">Przeglądarka</string>
+  <string id="10025">Pliki wideo</string>
   <string id="10028">Wideo/Playlista</string>
+  <string id="10029">Ekran logowania</string>
   <string id="10034">Ustawienia - Profile</string>
+  <string id="10040">Przeglądarka wtyczek</string>
   <string id="10100">Dialog Tak/Nie</string>
   <string id="10101">Okno postępu</string>
   <string id="10210">Szukam napisów...</string>
   <string id="12011">Wróć do okna filmów</string>
   <string id="12021">Zacznij od początku</string>
   <string id="12022">Wznów od %s</string>
-  <string id="12310">0</string>
-  <string id="12311">1</string>
-  <string id="12312">2</string>
-  <string id="12313">3</string>
-  <string id="12314">4</string>
-  <string id="12315">5</string>
-  <string id="12316">6</string>
-  <string id="12317">7</string>
-  <string id="12318">8</string>
-  <string id="12319">9</string>
-  <string id="12320">c</string>
-  <string id="12321">Ok</string>
-  <string id="12322">*</string>
   <string id="12325">Dostęp zablokowany</string>
   <string id="12326">Podaj hasło</string>
   <string id="12327">Wprowadź główne hasło</string>
   <string id="12392">godzin</string>
   <string id="12393">dni</string>
   <string id="12394">Całkowity czas pracy</string>
+  <string id="12395">Poziom baterii</string>
   <string id="12600">Pogoda</string>
   <string id="12900">Wygaszacz ekranu</string>
   <string id="12901">OSD w trybie pełnoekranowym</string>
   <string id="13208">Alarm</string>
   <string id="13209">Interwał alarmu (w minutach)</string>
   <string id="13210">Rozpoczęto, alarm za %im</string>
-  <string id="13211">Alarm!</string>
   <string id="13212">Anulowano na %im%is do końca</string>
   <string id="13213">%2.0fm</string>
   <string id="13214">%2.0fs</string>
   <string id="13271">Użycie procesora:</string>
   <string id="13274">Połączony, ale DNS nie jest ustawiony.</string>
   <string id="13275">Dysk twardy</string>
-  <string id="13276">DVD-ROM</string>
   <string id="13277">Partycje</string>
   <string id="13278">Domyślne</string>
   <string id="13279">Sieć</string>
   <string id="13310">Efekt powiększenia</string>
   <string id="13311">Efekt unoszenia</string>
   <string id="13312">Redukcja czarnego paska</string>
-  <string id="13313">Restart</string>
   <string id="13314">Płynne przejścia między utworami</string>
   <string id="13315">Odśwież miniatury</string>
   <string id="13316">Miniatury rekursywnie</string>
   <string id="13317">Rozpocznij pokaz</string>
   <string id="13318">uwzględniając podkatalogi</string>
   <string id="13319">Wybieraj losowo</string>
-  <string id="13320">Stereo</string>
   <string id="13321">Tylko Lewy</string>
   <string id="13322">Tylko prawy</string>
   <string id="13323">Włącz obsługę karaoke</string>
   <string id="13324">Przezroczystość tła</string>
   <string id="13325">Przezroczystość napisów</string>
   <string id="13326">Opóźnienie A/V</string>
-  <string id="13327">Karaoke</string>
   <string id="13328">Nie znaleziono %s</string>
   <string id="13329">Błąd otwierania %s</string>
   <string id="13330">Błąd wczytywania %s</string>
   <string id="13385">Maskowanie głosu - port 4</string>
   <string id="13386">Przewijanie oparte na czasie</string>
   <string id="13387">Szablon nazewnictwa utworu - prawa strona</string>
-  <string id="13388">Efekt</string>
+  <string id="13388">Ustawienie</string>
   <string id="13389">Nie ma dostępnych efektów dla tej wizualizacji</string>
   <string id="13390">Nie ma dostępnych opcji dla tej wizualizacji</string>
   <string id="13391">Wysuń/Wsuń</string>
   <string id="13418">zaawansowane shadery (GLSL)</string>
   <string id="13419">programowo</string>
   <string id="13420">Usuń bezpiecznie</string>
-  <string id="13421">VDPAU</string>
   <string id="13422">Rozpocznij pokaz slajdów tutaj</string>
   <string id="13423">Zapamiętaj dla tej ścieżki</string>
   <string id="13425">Sprzętowa akceleracja (VDPAU)</string>
   <string id="13429">Sprzętowa akceleracja (VDADecoder)</string>
   <string id="13430">Sprzętowa akceleracja (OpenMax)</string>
   <string id="13431">Pixel shadery</string>
+  <string id="13432">Zezwól na akceleracją sprzętową (Video Toolbox)</string>
   <string id="13500">Metoda synchronizacji A/V</string>
   <string id="13501">Zegar audio</string>
   <string id="13502">Zegar wideo (porzucaj/duplikuj dźwięk)</string>
   <string id="13610">Wyłączony</string>
   <string id="13611">Standardowy</string>
   <string id="13612">Pilot uniwersalny</string>
-  <string id="13613">Pilot do wszystkiego (Harmony)</string>
+  <string id="13613">Multi pilot (Harmony)</string>
   <string id="13620">Błąd Pilota Apple</string>
   <string id="13621">Możliwe włączenie obsługi pilota Apple </string>
   <string id="14000">Złącz części</string>
   <string id="14058">Efekt ziarnistości</string>
   <string id="14059">Szukaj miniaturek w udziałach sieciowych</string>
   <string id="14060">Nieznany - Internet</string>
-  <string id="14061">Auto</string>
   <string id="14062">Podaj użytkownika dla</string>
   <string id="14063">Data i czas</string>
   <string id="14064">Ustaw datę</string>
   <string id="16020">Usuń przeplot</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (odwrócony)</string>
-  <string id="16023">Obsługa przeplotu</string>
   <string id="16024">Anulowanie...</string>
   <string id="16025">Wpisz nazwę artysty</string>
   <string id="16026">Odtwarzanie zakończone błędem</string>
   <string id="16033">Nie można otworzyć bazy danych.</string>
   <string id="16034">Nie można pobrać utworów z bazy danych.</string>
   <string id="16035">Playlista Trybu Imprezy</string>
+  <string id="16036">Usuń przeplot (Half)</string>
+  <string id="16037">Usuń przeplot z wideo</string>
+  <string id="16038">Metoda usuwania przeplotu</string>
+  <string id="16039">Wyłącz</string>
+  <string id="16041">Włącz</string>
   <string id="16100">Wszystkie filmy</string>
   <string id="16101">Nieoglądane</string>
   <string id="16102">Oglądane</string>
   <string id="16205">Usuwanie nie powiodło się</string>
   <string id="16206">Przynajmniej jeden plik nie został usunięty</string>
   <string id="16300">Metody skalowania wideo</string>
-  <string id="16301">Najbliższy sąsiedni</string>
-  <string id="16302">Dwuliniowa</string>
-  <string id="16303">Sześcienna</string>
   <string id="16304">Lanczos2</string>
   <string id="16305">Lanczos3</string>
   <string id="16306">Sinc8</string>
-  <string id="16307">Sześcienna (programowo)</string>
+  <string id="16307">Bicubic (programowo)</string>
   <string id="16308">Lanczosz (programowo)</string>
   <string id="16309">Sinc (programowo)</string>
-  <string id="16310">Czasowy</string>
-  <string id="16311">Czasowy/Przestrzenny</string>
   <string id="16312">(VDPAU)Redukcja szumu</string>
   <string id="16313">(VDPAU)Ostrość</string>
-  <string id="16314">Odwrotny Telecine</string>
   <string id="16315">Lanczos3 (zoptymalizowany)</string>
   <string id="16316">Auto</string>
-  <string id="16317">Czasowy (pół)</string>
-  <string id="16318">Czasowy/Przestrzenny (połowa)</string>
-  <string id="16319">DXVA</string>
-  <string id="16400">Post-processing</string>
   <string id="17500">Wyświetlaj odliczanie czasu uśpienia</string>
   <string id="19000">Wybierz kanał</string>
   <string id="20000">Katalog zapisywanej muzyki</string>
   <string id="20125">Zalogowano jako</string>
   <string id="20126">Wyloguj</string>
   <string id="20128">Powrót na górę</string>
-  <string id="20129">Weave</string>
-  <string id="20130">Weave (odwrócony)</string>
-  <string id="20131">Blend</string>
   <string id="20132">Uruchom ponownie wideo</string>
   <string id="20133">Edytuj miejsce sieciowe</string>
   <string id="20134">Usuń miejsce sieciowe</string>
   <string id="20256">Klient HTS Tvheadend</string>
   <string id="20257">Klient VDR Streamdev</string>
   <string id="20258">Klient MythTV</string>
+  <string id="20259">System plików NFS</string>
+  <string id="20260">SSH/SFTP</string>
+  <string id="20261">Protokół AFP</string>
   <string id="20300">Katalog serwera web (HTTP)</string>
   <string id="20301">Katalog serwera web (HTTPS)</string>
   <string id="20302">Nie powiódł się zapis do folderu:</string>
   <string id="20326">Spowoduje to reset ustawień kalibracji dla %s</string>
   <string id="20327">i zostaną przywrócone wartości domyślne.</string>
   <string id="20328">Wskaż katalog docelowy</string>
+  <string id="20329">Filmy są w oddzielnych katalogach, z nazwami tytułu filmu</string>
   <string id="20330">Nazwa folderu jako podstawa szukania</string>
   <string id="20331">Plik</string>
   <string id="20332">Użyć nazwy pliku lub folderu jako podstawy szukania?</string>
   <string id="20415">Wyszukiwanie nowych pozycji</string>
   <string id="20416">Premiera</string>
   <string id="20417">Scenariusz</string>
-  <string id="20418">Wyczyść nazwę pliku i katalogu</string>
+  <string id="20419">Pokaż metadane w widoku plików</string>
   <string id="20420">nigdy</string>
   <string id="20421">dla jednosezonowych seriali</string>
   <string id="20422">zawsze</string>
   <string id="20453">odcinki</string>
   <string id="20454">Słuchacz</string>
   <string id="20455">Słuchaczy</string>
+  <string id="20456">Ustaw fanart dla kolekcji filmów</string>
+  <string id="20457">Kolekcja filmów</string>
+  <string id="20458">Grupuj filmy w kolekcje</string>
   <string id="21330">Pokazuj ukryte pliki i foldery</string>
   <string id="21331">Klient TuxBox</string>
   <string id="21332">UWAGA: Urządzenie TuxBox jest w trybie nagrywania!</string>
   <string id="21365">Usuń udział</string>
   <string id="21366">Katalog z napisami</string>
   <string id="21367">Filmy i alternatywny katalog dla napisów</string>
+  <string id="21368">Pomiń ustawienia czcionek napisów ASS/SSA</string>
   <string id="21369">Włącz obsługę myszy</string>
   <string id="21370">Dźwięki nawigacyjne podczas odtwarzania mediów</string>
   <string id="21371">Miniaturka</string>
   <string id="21392">niskie zużycie</string>
   <string id="21395">Nie mogę trzymać w pamięci podręcznej plików powyżej 4 GB</string>
   <string id="21396">Rozdział</string>
-  <string id="21397">HQ pixel shader v2</string>
+  <string id="21397">Pixel shader v2 HQ</string>
   <string id="21398">Włącz playlistę na starcie</string>
   <string id="21399">Używaj animacji przejściowych</string>
   <string id="21400">zawiera</string>
   <string id="21451">Wymagane połączenie z Internetem.</string>
   <string id="21452">Pobierz więcej...</string>
   <string id="21453">Główny system plików</string>
+  <string id="21454">Pełny bufor</string>
+  <string id="21455">Bufor wypełniany zanim osiągnie wymagany poziom do ciągłego odtwarzania</string>
+  <string id="21460">Położenie napisów</string>
+  <string id="21461">Stałe</string>
+  <string id="21462">Dół wideo</string>
+  <string id="21463">Poniżej wideo</string>
+  <string id="21464">Góra wideo</string>
+  <string id="21465">Powyżej wideo</string>
   <string id="21800">Nazwa pliku</string>
   <string id="21801">Lokalizacja</string>
   <string id="21802">Rozmiar</string>
   <string id="21900">Data urodzenia/powstania</string>
   <string id="22000">Aktualizuj bibliotekę na starcie</string>
   <string id="22001">Ukryj postęp aktualizacji biblioteki</string>
-  <string id="22002">- DNS suffix</string>
+  <string id="22002">- Sufiks DNS</string>
   <string id="22003">%2.3fs</string>
   <string id="22004">Opóźnij o: %2.3fs</string>
   <string id="22005">Przyspiesz o: %2.3fs</string>
   <string id="24041">Instaluj z pliku zip</string>
   <string id="24042">Pobieram %i%%</string>
   <string id="24043">Dostępne aktualizacje</string>
+  <string id="24044">Zależności nie są spełnione</string>
+  <string id="24045">Wtyczka nie ma właściwej struktury</string>
+  <string id="24046">%s jest używany przez następujące zainstalowane wtyczki</string>
+  <string id="24047">Ta wtyczka nie może zostać usunięta</string>
+  <string id="24048">Przywróć</string>
   <string id="24050">Dostępne wtyczki</string>
   <string id="24051">Wersja:</string>
   <string id="24052">Uwagi</string>
   <string id="24073">Nie mogę się połączyć</string>
   <string id="24074">Potrzebny restart</string>
   <string id="24075">Wyłącz</string>
+  <string id="24076">Wymagany wtyczka</string>
   <string id="24080">Ponowić próbę połączenia?</string>
   <string id="24089">Restart wtyczki</string>
   <string id="24090">Zablokuj menedżer wtyczek</string>
+  <string id="24094">(bieżący)</string>
+  <string id="24095">(zablokowany)</string>
   <string id="24096">Wtyczkę oznaczono jako uszkodzona w repozytorium.</string>
   <string id="24097">Czy chcesz ją wyłączyć?</string>
   <string id="24098">Uszkodzona</string>
   <string id="24099">Chcesz przełączyć się na tę skórę?</string>
+  <string id="24100">Aby użyć tej funkcji musisz pobrać:</string>
+  <string id="24101">Czy chcesz pobrać tę wtyczkę?</string>
   <string id="25000">Powiadomienia</string>
   <string id="29800">Tryb biblioteki</string>
   <string id="29801">Klawiatura QWERTY</string>
   <string id="33027">wschód</string>
   <string id="33028">zachód</string>
   <string id="33029">Szczegóły</string>
-  <string id="33031">Coverflow</string>
+  <string id="33030">Prognoza</string>
   <string id="33032">Przetłumacz tekst</string>
   <string id="33034">36 godzin</string>
   <string id="33035">Mapy</string>
   <string id="33073">Przeglądaj Changelog</string>
   <string id="33074">Ta wersja %s wymaga</string>
   <string id="33075">Wymagany XBMC w wydaniu %s lub wyższym.</string>
-  <string id="33076">Prosimy o zaktualizowanie XBMC.</string>
+  <string id="33076">Zaktualizuj XBMC.</string>
   <string id="33077">Dane niedostępne!</string>
   <string id="33078">Następna strona</string>
   <string id="33079">Lubię</string>
   <string id="33081">Plik znajduje się w stosie, wybierz część którą chcesz odtwarzać.</string>
   <string id="33082">Ścieżka do skryptu</string>
   <string id="33083">Włącz przycisk własnego skryptu</string>
-  <string id="34000">Lame</string>
-  <string id="34001">Vorbis</string>
-  <string id="34002">Wav</string>
-  <string id="34003">DXVA2</string>
-  <string id="34004">VAAPI</string>
-  <string id="34005">Flac</string>
+  <string id="33100">Błąd przy uruchomieniu</string>
+  <string id="33101">Serwer WWW</string>
+  <string id="33102">Serwer zdarzeń</string>
+  <string id="33103">Serwer zdalnej komunikacji</string>
+  <string id="33200">Wykryto nowe połączenie</string>
   <string id="34100">System głośników</string>
-  <string id="34101">2.0</string>
-  <string id="34102">2.1</string>
-  <string id="34103">3.0</string>
-  <string id="34104">3.1</string>
-  <string id="34105">4.0</string>
-  <string id="34106">4.1</string>
-  <string id="34107">5.0</string>
-  <string id="34108">5.1</string>
-  <string id="34109">7.0</string>
-  <string id="34110">7.1</string>
+  <string id="34201">Nie mogę znaleźć następnej pozycji do odtworzenia</string>
+  <string id="34202">Nie mogę znaleźć poprzedniej pozycji do odtworzenia</string>
+  <string id="34300">Błąd podczas startu zeroconf</string>
+  <string id="34301">Usługa Apple Bonjour jest zainstalowana? Sprawdź log.</string>
+  <string id="34400">Rendering wideo</string>
+  <string id="34401">Błąd inicjalizacji filtrów/skalerów wideo, powracam do skalowania bilinearnego</string>
+  <string id="34402">Błąd inicjalizacji urządzenia audio</string>
+  <string id="34403">Sprawdź ustawienia dźwięku</string>
+  <string id="35000">Peryferia</string>
+  <string id="35001">Standardowe urządzenie HID</string>
+  <string id="35002">Standardowy adapter sieciowy</string>
+  <string id="35003">Standardowy dysk</string>
+  <string id="35004">To urządzenie nie ma ustawień.</string>
+  <string id="35005">Skonfigurowano nowe urządzenie</string>
+  <string id="35006">Usunięto urządzenie</string>
+  <string id="35007">Mapa klawiszy do użycia z tym urządzeniem</string>
+  <string id="35008">Mapa klawiszy włączona</string>
+  <string id="35500">Położenie</string>
+  <string id="35501">Klasa</string>
+  <string id="35502">Nazwa</string>
+  <string id="35503">Dostawca</string>
+  <string id="35504">ID produktu</string>
+  <string id="36000">Adapter Pulse-Eight CEC</string>
+  <string id="36006">Nie mogę połączyć się z adapterem</string>
+  <string id="36007">Włącz TV, kiedy uruchomiany jest XBMC</string>
+  <string id="36008">Wyłącz TV, kiedy wyłączany jest XBMC</string>
+  <string id="36009">Włącz tryb czuwania w urządzeniach, kiedy aktywny jest wygaszacz ekranu</string>
+  <string id="36011">Nie mogę wykryć portu CEC. Ustaw go ręcznie.</string>
+  <string id="36012">Nie mogę wykryć adaptera CEC.</string>
+  <string id="36013">Nieaktualna wersja interfejsu libcec. %d jest wyższy niż wersja wspierana przez XBMC (%d)</string>
+  <string id="36014">Włącz tryb czuwania tego PC, kiedy TV jest wyłączony</string>
+  <string id="36015">Numer portu HDMI</string>
+  <string id="36016">Połączono</string>
+  <string id="36017">Znaleziono adapter, ale brak biblioteki libcec</string>
+  <string id="36018">Użyj ustawienia języka z TV</string>
 </strings>
\ No newline at end of file
index 3739a11..d8ec842 100644 (file)
@@ -2,11 +2,10 @@
 <!--Language file translated with Team XBMC Translator[wm] -->
 <!--Translator: Fabiano Santiago (fabianosan), bugre (wm) -->
 <!--Email: fabianosan@hotmail.com, wxxx333-nospam-at-gmail.com -->
-<!--Date of translation: 12/21/2009 -->
+<!--Updated on 28/02/2012 by wcampos -->
 <!--Updated on 28/08/2011 by fabianosan -->
 <!--Updated on 15/11/2010 by bugre -->
-<!--$Revision$-->
-<!--Based on english strings version 35193-->
+<!--Based on English 4a0e4931310c8957d73ffec0cf6fdfa9292bb8d4 (08.02.2012)-->
 <strings>
   <string id="0">Programas</string>
   <string id="1">Imagens</string>
@@ -18,6 +17,7 @@
   <string id="7">Arquivos</string>
   <string id="8">Tempo</string>
   <string id="9">xbmc media center</string>
+
   <string id="11">Segunda</string>
   <string id="12">Terça</string>
   <string id="13">Quarta</string>
@@ -25,6 +25,7 @@
   <string id="15">Sexta</string>
   <string id="16">Sábado</string>
   <string id="17">Domingo</string>
+
   <string id="21">Janeiro</string>
   <string id="22">Fevereiro</string>
   <string id="23">Março</string>
@@ -37,6 +38,7 @@
   <string id="30">Outubro</string>
   <string id="31">Novembro</string>
   <string id="32">Dezembro</string>
+
   <string id="41">Seg</string>
   <string id="42">Ter</string>
   <string id="43">Qua</string>
@@ -56,6 +58,7 @@
   <string id="60">Out</string>
   <string id="61">Nov</string>
   <string id="62">Dez</string>
+
   <string id="71">N</string>
   <string id="72">NNE</string>
   <string id="73">NO</string>
@@ -73,6 +76,7 @@
   <string id="85">NL</string>
   <string id="86">NNL</string>
   <string id="87">VAR</string>
+
   <string id="98">Ver: Auto</string>
   <string id="99">Ver: Auto grande</string>
   <string id="100">Ver: Icones</string>
   <string id="164">Sem disco</string>
   <string id="165">Disco presente</string>
   <string id="166">Skin</string>
+
   <string id="169">Resolução</string>
   <string id="170">Ajustar taxa de atualização para mesma da tela</string>
+
   <string id="171"></string>
+
   <string id="172">Data de lançamento:</string>
   <string id="173">Exibir videos 4:3 como</string>
+
   <string id="175">Modos</string>
   <string id="176">Estilos</string>
+
   <string id="179">Música</string>
   <string id="180">Duração</string>
   <string id="181">Selecionar álbum</string>
   <string id="197">Procurando informação de %s</string>
   <string id="198">Carregando detalhes do filme</string>
   <string id="199">Interface web</string>
+
   <string id="202">Título:</string>
   <string id="203">Sinopse:</string>
+
   <string id="205">Votos</string>
   <string id="206">Elenco</string>
   <string id="207">Enredo</string>
   <string id="221">Rede não está conectada</string>
   <string id="222">Cancelar</string>
   <string id="224">Velocidade</string>
+  <string id="225">Deslocamento Vertical</string>
   <string id="226">Padrões de teste....</string>
   <string id="227">Procurar CDs de áudio na Internet</string>
   <string id="228">Misturar lista de reprodução ao carregar</string>
   <string id="243">Taxa de Atualização</string>
   <string id="244">Tela Cheia</string>
   <string id="245">Dimensionando: (%i,%i)-&gt;(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1)</string>
+
   <string id="247">Scripts</string>
   <string id="248">Idioma</string>
   <string id="249">Música</string>
   <string id="282">Encontrado(s) %i item(s)</string>
   <string id="283">Resultado(s) da busca</string>
   <string id="284">Nenhum resultado encontrado</string>
+
   <string id="287">Legendas</string>
   <string id="288">Fonte</string>
   <string id="289">- Tamanho</string>
   <string id="304">Idioma</string>
   <string id="305">Ativado</string>
   <string id="306">Não-intercalado</string>
+
   <string id="312">(0=auto)</string>
   <string id="313">Excluindo banco de dados</string>
   <string id="314">Preparando...</string>
   <string id="404">Vento</string>
   <string id="405">Pt. de orvalho</string>
   <string id="406">Umidade</string>
+
   <string id="409">Padrões</string>
   <string id="410">Acessando o serviço de meteorologia</string>
   <string id="411">Obtendo informações de tempo para:</string>
   <string id="418">Baixo</string>
   <string id="419">Alto</string>
   <string id="420">HDMI</string>
+
   <string id="422">Excluir informações do álbum</string>
   <string id="423">Excluir informações do CD</string>
   <string id="424">Selecionar</string>
   <string id="432">Excluir filme da coleção</string>
   <string id="433">Deseja excluir '%s'?</string>
   <string id="434">De %s até %i %s</string>
+
   <string id="437">Disco removível</string>
   <string id="438">Abrindo arquivo</string>
   <string id="439">Cache</string>
   <string id="480">Aparência</string>
   <string id="481">Opções de Áudio</string>
   <string id="482">Sobre o XBMC</string>
+
   <string id="485">Excluir álbum</string>
   <string id="486">Repetir</string>
   <string id="487">Repetir uma</string>
   <string id="513">Janela principal</string>
   <string id="514">Configurações manuais</string>
   <string id="515">Gênero</string>
+
   <string id="517">Álbuns reproduzidos recentemente</string>
   <string id="518">Iniciar</string>
   <string id="519">Iniciar em..</string>
+
   <string id="521">Compilações</string>
   <string id="522">Remover origem</string>
   <string id="523">Trocar mídia</string>
   <string id="546">Dispositivo de saída de passagem</string>
   <string id="547">Sem biografia para este artista</string>
   <string id="548">Converter áudio multicanal para estéreo</string>
+
   <string id="550">Ordenar por: %s</string>
   <string id="551">Nome</string>
   <string id="552">Data</string>
   <string id="595">Repetir: desl.</string>
   <string id="596">Repetir: uma</string>
   <string id="597">Repetir: todos</string>
+
   <string id="600">Extrair CD de áudio</string>
   <string id="601">Média</string>
   <string id="602">Padrão</string>
   <string id="603">Extrema</string>
   <string id="604">Taxa de bits constante</string>
   <string id="605">Extraindo...</string>
+
   <string id="607">Para:</string>
   <string id="608">Não foi possível extrair o CD ou faixa</string>
   <string id="609">CDDARipPath não foi definido.</string>
   <string id="611">Digite número</string>
   <string id="612">Bits/Amostra</string>
   <string id="613">Frequencia de amostra</string>
+
   <string id="620">CDs de áudio</string>
   <string id="621">Codificador</string>
   <string id="622">Qualidade</string>
   <string id="657">Busca pasta</string>
   <string id="658">Informação da música</string>
   <string id="659">Expansão não-linear</string>
+
   <string id="660">Amplificação de volume</string>
   <string id="661">Pasta de exportação</string>
   <string id="662">Este arquivo não está mais disponível.</string>
   <string id="663">Gostaria de remover da coleção?</string>
   <string id="664">Busca Script</string>
   <string id="665">Nível de Compressão</string>
+
   <string id="700">Limpando a coleção</string>
   <string id="701">Removendo músicas antigas da coleção</string>
   <string id="702">Este caminho já foi examinado anteriormente</string>
   <string id="705">Rede</string>
   <string id="706">- Servidor</string>
+
   <string id="708">Ativar proxy HTTP</string>
+
   <string id="711">Internet Protocol (IP)</string>
   <string id="712">Porta inválida. O valor deve ser entre 1 e 65535.</string>
   <string id="713">Proxy HTTP</string>
+
   <string id="715">- Atribuição</string>
   <string id="716">Automático (DHCP)</string>
   <string id="717">Manual (estático)</string>
+
   <string id="719">- Endereço IP:</string>
   <string id="720">- Máscara de sub-rede:</string>
   <string id="721">- Gateway padrão:</string>
   <string id="726">As mudanças não foram salvas. Deseja continuar mesmo assim?</string>
   <string id="727">Servidor Web</string>
   <string id="728">Servidor FTP</string>
+
   <string id="730">- Porta</string>
+
   <string id="732">Salvar &amp; aplicar</string>
   <string id="733">- Senha</string>
   <string id="734">Sem senha</string>
   <string id="749">Espelhar imagem</string>
   <string id="750">Tem certeza?</string>
   <string id="751">Removendo origem</string>
+
   <string id="754">Adicionar link de programa</string>
   <string id="755">Editar caminho do programa</string>
   <string id="756">Editar nome do programa</string>
   <string id="757">Editar a profundidade do caminho</string>
+
   <string id="759">Ver: lista grande</string>
   <string id="760">Amarelo</string>
   <string id="761">Branco</string>
   <string id="765">Ciano</string>
   <string id="766">Cinza claro</string>
   <string id="767">Cinza</string>
+
   <string id="770">Erro %i: compartilhamento não disponível</string>
+
   <string id="772">Saída de áudio</string>
   <string id="773">Procurando</string>
   <string id="774">Pasta de apresentação (slideshow)</string>
   <string id="787">Interface de rede desabilitada</string>
   <string id="788">Interface de rede desabilitada com sucesso.</string>
   <string id="789">Nome da rede sem fio (ESSID)</string>
+
   <string id="791">Permitir programas locais controlar o XBMC</string>
   <string id="792">Porta</string>
   <string id="793">Intervalo de portas</string>
   <string id="796">Atraso de repetição contínuo (ms)</string>
   <string id="797">Número máximo de clientes</string>
   <string id="798">Acesso internet</string>
+
   <string id="850">Número de porta inválido</string>
   <string id="851">Intervalor de portas válido 1-65535</string>
   <string id="852">Intervalor de portas válido 1024-65535</string>
+
+  <string id="998">Adicione Música...</string>
+  <string id="999">Adicione Vídeos...</string>
   <string id="1000">- Previsualização</string>
   <string id="1001">Incapaz de conectar</string>
   <string id="1002">O XBMC foi incapaz de conectar ao local de rede</string>
   <string id="1003">Isto pode ser devido a rede não estar conectada.</string>
   <string id="1004">Gostaria de adicionar assim mesmo?</string>
+
   <string id="1006">Endereço IP</string>
   <string id="1007">Adicionar Local de rede</string>
   <string id="1008">Protocolo</string>
   <string id="1049">Opções do Script</string>
   <string id="1050">Singles</string>
   <string id="1051">Digite a URL</string>
+
   <string id="1200">Cliente SMB</string>
   <string id="1202">Grupo de trabalho</string>
   <string id="1203">Usuário padrão</string>
   <string id="1204">Senha padrão</string>
+
   <string id="1207">Servidor WINS</string>
   <string id="1208">Montar compartilhamento SMB</string>
+
   <string id="1210">Remover</string>
   <string id="1211">Música</string>
   <string id="1212">Vídeo</string>
   <string id="1233">Programas &amp; vídeo &amp; música</string>
   <string id="1234">Programas &amp; imagens &amp; música</string>
   <string id="1235">Programas &amp; imagens &amp; vídeo</string>
+
   <string id="1250">Auto detecção</string>
   <string id="1251">Auto detectar sistemas</string>
   <string id="1252">Apelido</string>
+
   <string id="1254">Perguntar para conectar</string>
   <string id="1255">Enviar usuário e senha de FTP</string>
   <string id="1256">Intervalo de ping</string>
   <string id="1257">Gostaria de conectar ao sistema auto detectado?</string>
+
   <string id="1260">Anunciar estes serviços para outros sistemas via Zeroconf</string>
+  <string id="1270">Permitir ao XBMC receber conteúdo AirPlay</string>
+  <string id="1271">Nome Equipamento</string>
+  <string id="1272">- Usar senha para proteção</string>
+
   <string id="1300">Dispositivo de áudio personalizado</string>
   <string id="1301">Dispositivo de passagem personalizado</string>
+
   <string id="1396">Correntes de ar</string>
   <string id="1397">e</string>
   <string id="1398">Congelando</string>
   <string id="1421">Muito Alto</string>
   <string id="1422">Ventoso</string>
   <string id="1423">Névoa</string>
+
   <string id="1450">Colocar tela em descanso quando inativo</string>
+
   <string id="2050">Executável</string>
+
   <string id="2100">Falha no Script! : %s</string>
   <string id="2101">Necessário versão mais nova - Veja o log</string>
+
   <string id="4501">Habilitar LCD/VFD</string>
+
   <string id="10000">Home</string>
   <string id="10001">Programas</string>
   <string id="10002">Imagens</string>
   <string id="10019">Configurações - Aparência</string>
   <string id="10020">Scripts</string>
   <string id="10021">Navegador Web</string>
+
   <string id="10028">Vídeos/lista de reprodução</string>
+  <string id="10029">Tela de Login</string>
+  
   <string id="10034">Configurações - Perfil</string>
+  
+  <string id="10040">Addon-Navegador</string>
+
   <string id="10100">Janela sim/não</string>
   <string id="10101">Janela de progresso</string>
+
   <string id="10210">Procurando legendas...</string>
   <string id="10211">Procurando ou armazenando legendas</string>
   <string id="10212">terminando</string>
   <string id="10213">carregando</string>
   <string id="10214">Abrindo sinal</string>
+
   <string id="10500">Música/lista de reprodução</string>
   <string id="10501">Música/arquivos</string>
   <string id="10502">Música/coleção</string>
   <string id="10504">As 100 melhores músicas</string>
   <string id="10505">Os 100 melhores álbuns</string>
   <string id="10506">Programas</string>
+
   <string id="10507">Configurações</string>
   <string id="10508">Previsão do tempo</string>
   <string id="10509">Jogos em rede</string>
   <string id="10510">Extensões</string>
   <string id="10511">Informações do sistema</string>
+
   <string id="10516">Músicas - Coleção</string>
   <string id="10517">Tocando agora - Músicas</string>
+
   <string id="10522">Tocando agora - Vídeos</string>
   <string id="10523">Informação do álbum</string>
   <string id="10524">Informação do filme</string>
+
   <string id="12000">Selec. janela</string>
   <string id="12001">Música/informação</string>
   <string id="12002">Janela OK</string>
   <string id="12004">Scripts/informação</string>
   <string id="12005">Vídeo em tela-cheia</string>
   <string id="12006">Visualização de áudio</string>
+
   <string id="12008">Janela agrupamento de arquivos</string>
   <string id="12009">Reconstruindo índice...</string>
   <string id="12010">Voltar para janela de músicas</string>
   <string id="12011">Voltar para janela de vídeos</string>
+
   <string id="12021">Iniciar/Reiniciar</string>
   <string id="12022">Retomar da posição %s</string>
+
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12377">Isto irá zerar qualquer valor previamente salvo</string>
   <string id="12378">Exibir cada imagem por</string>
   <string id="12379">Usar efeitos de pan e zoom</string>
+
   <string id="12383">relógio 12 horas</string>
   <string id="12384">relógio 24 horas</string>
   <string id="12385">Dia/Mês</string>
   <string id="12386">Mês/Dia</string>
+
   <string id="12390">Uptime do sistema</string>
   <string id="12391">Minutos</string>
   <string id="12392">Horas</string>
   <string id="12393">Dias</string>
   <string id="12394">Uptime total</string>
+  <string id="12395">Nível Bateria</string>
+
   <string id="12600">Tempo</string>
+
   <string id="12900">Proteção de tela</string>
   <string id="12901">OSD em tela-cheia</string>
+
   <string id="13000">Sistema</string>
   <string id="13001">Diminuir rotação do HD</string>
   <string id="13002">Somente vídeos</string>
   <string id="13003">- Atraso</string>
   <string id="13004">- Tempo mínimo de duração</string>
   <string id="13005">Desligar</string>
+
   <string id="13008">Modo de desligamento</string>
   <string id="13009">Terminar</string>
   <string id="13010">Hibernar</string>
   <string id="13014">Minimizar</string>
   <string id="13015">Ação do botão de Liga/Desliga</string>
   <string id="13016">Desligar o sistema</string>
+
   <string id="13020">Tem outra sessão ativa, talvez por ssh?</string>
   <string id="13021">Disco rígido removível montado</string>
   <string id="13022">Remoção insegura de dispositivo</string>
   <string id="13023">Dispositivo removido com sucesso</string>
   <string id="13024">Joystick conectado</string>
   <string id="13025">Joystick desconectado</string>
+
   <string id="13050">Bateria fraca</string>
+
   <string id="13100">Filtro de anti-oscilação</string>
   <string id="13101">Deixe driver escolher (necessita reinicializar)</string>
+
   <string id="13105">Sincronização vertical</string>
   <string id="13106">Desabilitado</string>
   <string id="13107">Habilitado durante execução de vídeo</string>
   <string id="13109">Testar e aplicar resolução</string>
   <string id="13110">Salvar resolução?</string>
   <string id="13111">Manter esta resolução?</string>
+
   <string id="13112">Aumento de resolução em alta qualidade</string>
   <string id="13113">Desabilitado</string>
   <string id="13114">Habilitado para conteúdo SD</string>
   <string id="13115">Sempre habilitado</string>
+
   <string id="13116">Método de aumento de resolução</string>
   <string id="13117">Bicúbico</string>
   <string id="13118">Lanczos</string>
   <string id="13120">VDPAU</string>
   <string id="13121">Nível VDPAU HQ Upscaling</string>
   <string id="13122">Nível de conversão de cores VDPAU Studio</string>
+
   <string id="13130">Escurecer outras telas</string>
   <string id="13131">Desabilitado</string>
   <string id="13132">Limpar telas</string>
+
   <string id="13140">Detectadas coneções ativas!</string>
   <string id="13141">Se continuar, poderá perder o controle do XBMC</string>
   <string id="13142">Tem certeza que quer parar o servidor de Eventos?</string>
+
   <string id="13144">Trocar o modo "Apple Remote"?</string>
   <string id="13145">Se está utilizando o "Apple Remote" agora para controlar</string>
   <string id="13146">XBMC, trocar esta configuração pode afetar sua habilidade</string>
   <string id="13147">de continuar controlando ele. Você deseja prosseguir?</string>
+
   <string id="13159">Máscara de sub-rede</string>
   <string id="13160">Gateway</string>
   <string id="13161">DNS primário</string>
   <string id="13162">Falha na inicialização</string>
+
   <string id="13170">Nunca</string>
   <string id="13171">Imediatamente</string>
   <string id="13172">Depois de %i segs</string>
   <string id="13173">Data de instalação do HDD:</string>
   <string id="13174">Re-ligamentos do HDD:</string>
+
   <string id="13200">Perfis</string>
   <string id="13201">Excluir perfil '%s'?</string>
+
   <string id="13204">Último perfil utilizado:</string>
   <string id="13205">Desconhecido</string>
   <string id="13206">Sobrescrever</string>
+
   <string id="13208">Alarme do relógio</string>
   <string id="13209">Intervalo do alarme (em minutos)</string>
   <string id="13210">Iniciado, alarmar em %im</string>
   <string id="13212">Cancelado restando %im%is</string>
   <string id="13213">%2.0fm</string>
   <string id="13214">%2.0fs</string>
+
   <string id="13249">Procurar por legendas em RARs</string>
   <string id="13250">Buscar por legendas...</string>
   <string id="13251">Mover item</string>
   <string id="13252">Mover item aqui</string>
   <string id="13253">Cancelar mover</string>
+
   <string id="13270">Hardware: </string>
   <string id="13271">Uso da CPU:</string>
+
   <string id="13274">Conectado, mas nenhum DNS disponível.</string>
   <string id="13275">Disco rígido</string>
   <string id="13276">DVD-ROM</string>
   <string id="13279">Rede</string>
   <string id="13280">Vídeo</string>
   <string id="13281">Hardware</string>
+
   <string id="13283">Sistema Operacional:</string>
   <string id="13284">Velocidade da CPU:</string>
+
   <string id="13286">Encoder de vídeo:</string>
   <string id="13287">Resolução de tela:</string>
+
   <string id="13292">Cabo A/V:</string>
+
   <string id="13294">Região do DVD:</string>
   <string id="13295">Internet:</string>
   <string id="13296">Conectado</string>
   <string id="13297">Desconectado. Verifique as opções de rede.</string>
+
   <string id="13299">Temperatura desejada:</string>
   <string id="13300">Velocidade do ventilador</string>
   <string id="13301">Controle automático de temperatura</string>
   <string id="13334">Editar etiqueta</string>
   <string id="13335">Tornar padrão</string>
   <string id="13336">Remover botão</string>
+
   <string id="13340">Deixar como está</string>
   <string id="13341">Verde</string>
   <string id="13342">Laranja</string>
   <string id="13359">Definir ícone do artista</string>
   <string id="13360">Gerar ícones automaticamente</string>
   <string id="13361">Ativar voz</string>
+
   <string id="13375">Ativar dispositivo</string>
   <string id="13376">Volume</string>
   <string id="13377">Modo de visualização padrão</string>
   <string id="13430">Permitir aceleração por hardware (OpenMax)</string>
   <string id="13431">Pixel Shaders</string>
   <string id="13432">Permitir aceleração por hardware (VideoToolbox)</string>
+
   <string id="13500">Método de syncronização de A/V</string>
   <string id="13501">Relógio de áudio</string>
   <string id="13502">Relógio de vídeo (cortar/ignorar áudio)</string>
   <string id="13508">Alto</string>
   <string id="13509">Realmente alto(lento!)</string>
   <string id="13510">Sincronizar reprodução com a exibição</string>
+
   <string id="13550">Pausa durante alteração na taxa de atualização</string>
   <string id="13551">Desligado</string>
   <string id="13552">%.1f Segundo</string>
   <string id="13553">%.1f Segundos</string>
+
   <string id="13600">Controle Remoto Apple</string>
+
   <string id="13602">Permite iniciar o XBMC através do Controle Remoto</string>
   <string id="13603">Tempo de espera para sequenciamento</string>
+
   <string id="13610">Desabilitado</string>
   <string id="13611">Padrão</string>
   <string id="13612">Controle Remoto Universal</string>
   <string id="13613">Controle Remoto universal (Harmony)</string>
+
   <string id="13620">Erro Controle Remoto Apple</string>
   <string id="13621">Suporte ao Controle Remoto Apple pode ser habilitado.</string>
+
   <string id="14000">Agrupar</string>
   <string id="14001">Desagrupar</string>
   <string id="14003">Baixando lista de execução...</string>
   <string id="14005">Interpretando lista de canais...</string>
   <string id="14006">Recebimento da lista de canais falhou</string>
   <string id="14007">Recebimento de lista de execução falhou</string>
+
   <string id="14009">Diretório de jogos</string>
   <string id="14010">Troca automática para ícones baseado em</string>
   <string id="14011">Ativar troca automática para ícones</string>
   <string id="14034">Cache do DVD - DVD-ROM</string>
   <string id="14035">- Rede local</string>
   <string id="14036">Serviços</string>
+
   <string id="14038">Configurações de rede modificadas</string>
   <string id="14039">O XBMC precisa reiniciar para aplicar as suas</string>
   <string id="14040">configurações de rede.  Deseja reiniciar agora?</string>
   <string id="14041">Limitação de banda de Internet</string>
+
   <string id="14043">- Desligar durante a execução</string>
   <string id="14044">%i mins</string>
   <string id="14045">%i segs</string>
   <string id="14051">Formato da hora</string>
   <string id="14052">Formato da data</string>
   <string id="14053">Filtros de interface</string>
+
   <string id="14055">Usar busca em segundo plano</string>
   <string id="14056">Parar busca</string>
   <string id="14057">Impossível enquanto estiver buscando informações da mídia</string>
   <string id="14069">Aplicar as configurações agora?</string>
   <string id="14070">Aplicar mudanças agora</string>
   <string id="14071">Permitir renomear e excluir arquivos</string>
+
   <string id="14074">Selecionar fuso horário</string>
   <string id="14075">Ajustar para horário de verão</string>
   <string id="14076">Adicionar a favoritos</string>
   <string id="14093">Segurança</string>
   <string id="14094">Disp. de Entrada</string>
   <string id="14095">Econ. de energia</string>
+
   <string id="15015">Remove</string>
   <string id="15016">Jogos</string>
+
   <string id="15019">Adicionar</string>
+
   <string id="15052">Senha</string>
+
   <string id="15100">Coleção</string>
   <string id="15101">Banco de dados</string>
   <string id="15102">* Todos álbuns</string>
   <string id="15103">* Todos artistas</string>
   <string id="15104">* Todas as músicas</string>
   <string id="15105">* Todos gêneros</string>
+
   <string id="15107">Carregando...</string>
   <string id="15108">Sons de navegação</string>
   <string id="15109">Skin padrão</string>
   <string id="15111">- Tema</string>
   <string id="15112">Tema padrão</string>
+
   <string id="15200">Last.fm</string>
   <string id="15201">Enviar músicas para o Last.fm</string>
   <string id="15202">Nome de usuário Last.fm</string>
   <string id="15219">Senha do Libre.fm</string>
   <string id="15220">Libre.fm</string>
   <string id="15221">Scrobbler</string>
+
   <string id="15250">Enviar a rádio para o Last.fm</string>
   <string id="15251">Conectando ao Last.fm...</string>
   <string id="15252">Selecionando estação...</string>
   <string id="15283">Faixas ouvidas recentemente por %name%</string>
   <string id="15284">Ouça recomendações de %name%'s no Last.fm</string>
   <string id="15285">Melhores gêneros para usuário %name%</string>
-  <string id="15286">Ouvir lista de reprodução de %name%'s do Last.fm</string>
+
   <string id="15287">Você quer adicionar a faixa atual para as suas faixas prediletas?</string>
   <string id="15288">Você quer banir a faixa atual?</string>
   <string id="15289">Adicionado às suas faixas prediletas: '%s'.</string>
   <string id="15296">Desbanir</string>
   <string id="15297">Você quer remover esta faixa de suas faixas prediletas?</string>
   <string id="15298">Você quer desbanir esta faixa?</string>
+
   <string id="15300">Caminho não encontrado ou inválido</string>
   <string id="15301">Não foi possível conectar ao servidor da rede</string>
   <string id="15302">Não encontrou servidores</string>
   <string id="15303">Grupo de trabalho não encontrado</string>
+
   <string id="15310">Abrindo múltiplos caminhos para os marcadores</string>
   <string id="15311">Caminho:</string>
+
   <string id="16000">Geral</string>
+
   <string id="16002">Busca na internet</string>
   <string id="16003">Reprodutor</string>
   <string id="16004">Reproduzir mídia do disco</string>
+
   <string id="16008">Digite um novo título</string>
   <string id="16009">Nome do filme</string>
   <string id="16010">Nome do perfil</string>
   <string id="16034">Não pôde obter músicas do banco de dados.</string>
   <string id="16035">Lista de execução em modo-festa</string>
   <string id="16036">De-interlace (Half)</string>
+  <string id="16037">Desentrelaçamento video</string>
+  <string id="16038">Método de Desentrelaçamento</string>
+  <string id="16039">Desligado</string>
+  <string id="16040">Auto</string>
+  <string id="16041">Ligado</string>
+
   <string id="16100">Todos os vídeos</string>
   <string id="16101">Não-vistos </string>
   <string id="16102">Vistos</string>
   <string id="16103">Marcar como visto</string>
   <string id="16104">Marcar como não-visto</string>
   <string id="16105">Editar título</string>
+
   <string id="16200">Operação foi cancelada</string>
   <string id="16201">Cópia falhou</string>
   <string id="16202">Falha ao copiar pelo menos um arquivo</string>
   <string id="16204">Falha ao mover pelo menos um arquivo</string>
   <string id="16205">Remover falhou</string>
   <string id="16206">Falha ao remover pelo menos um arquivo</string>
+
   <string id="16300">Método para escalamento de vídeo</string>
   <string id="16301">Vizinho mais próximo</string>
   <string id="16302">Bilinear</string>
   <string id="16317">Temporal (Half)</string>
   <string id="16318">Temporal/Spatial (Half)</string>
   <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 otimizado</string>
+  <string id="16324">Software Blend</string>
+
   <string id="16400">Pós-processamento de video</string>
-  <string id="16401">Desabilitado</string>
-  <string id="16402">Ativar para Conteúdo SD</string>
-  <string id="16403">Sempre Ligado</string>
   <string id="17500">Exibir intervalo para descanso</string>
+
   <string id="19000">Trocar para canal</string>
+
   <string id="20000">Pasta de músicas salvas</string>
   <string id="20001">Usar DVD-player externo</string>
   <string id="20002">DVD-player externo</string>
   <string id="20003">Pasta de trainers</string>
   <string id="20004">Pasta para captura de tela</string>
+
   <string id="20006">Pasta lista de reprodução</string>
   <string id="20007">Gravações</string>
   <string id="20008">Screenshots</string>
   <string id="20009">Usar XBMC</string>
+
   <string id="20011">Lista de reprodução de músicas</string>
   <string id="20012">Lista de reprodução de vídeos</string>
   <string id="20013">Você gostaria de iniciar o jogo?</string>
   <string id="20017">Ícone local</string>
   <string id="20018">Nenhum ícone</string>
   <string id="20019">Selecionar ícone</string>
+
   <string id="20022"></string>
   <string id="20023">Conflito</string>
   <string id="20024">Examinar novo</string>
   <string id="20025">Examinar todos</string>
   <string id="20026">Região</string>
+
   <string id="20037">Resumo</string>
   <string id="20038">Bloquear seção de música</string>
   <string id="20039">Bloquear seção de vídeo</string>
   <string id="20053">Sair do modo-mestre</string>
   <string id="20054">Entrou no modo-mestre</string>
   <string id="20055">Ícone Allmusic.com</string>
+
   <string id="20057">Remover ícone</string>
   <string id="20058">Adicionar perfil...</string>
   <string id="20059">Obter informação para todos os álbuns</string>
   <string id="20184">Rotacionar imagens usando informação do EXIF</string>
   <string id="20185">Usar estilo de visualização poster para seriados</string>
   <string id="20186">Por favor aguarde</string>
+
   <string id="20189">Habilitar auto rolagem para enredo &amp; crítica</string>
   <string id="20190">Personalizado</string>
   <string id="20191">Habilitar registro de depuração</string>
   <string id="20197">Importar coleção de música</string>
   <string id="20198">Artista não encontrado!</string>
   <string id="20199">Erro ao baixar informação de artista</string>
+
   <string id="20250">Ativo! (vídeos)</string>
   <string id="20251">Misturando bebidas (vídeos)</string>
   <string id="20252">Enchendo os copos (vídeos)</string>
   <string id="20256">Cliente HTS Tvheadend</string>
   <string id="20257">Cliente VDR Streamdev</string>
   <string id="20258">Cliente MythTV</string>
+  <string id="20259">Sistema Arquivos Rede(NFS)</string>
+  <string id="20260">Secure Shell (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
+
   <string id="20300">Diretório do servidor Web (HTTP)</string>
   <string id="20301">Diretório do servidor Web (HTTPS)</string>
   <string id="20302">Impossível gravar na pasta:</string>
   <string id="20303">Quer cancelar e prosseguir?</string>
   <string id="20304">Feed RSS</string>
+
   <string id="20307">DNS secundário</string>
   <string id="20308">Servidor DHCP:</string>
   <string id="20309">Criar nova pasta</string>
   <string id="20310">Escurecer LCD na reprodução</string>
   <string id="20311">Desconhecido ou onboard (protegido)</string>
   <string id="20312">Escurecer LCD na pausa</string>
+
   <string id="20314">Vídeos - Coleção</string>
+
   <string id="20316">Ordenar por: ID</string>
+
   <string id="20324">Reproduzir parte...</string>
   <string id="20325">Restaurar valores da calibração</string>
   <string id="20326">Isto irá restaurar os valores da calibração para %s</string>
   <string id="20327">para os valores padrões.</string>
   <string id="20328">Procurar destino</string>
+  <string id="20329">Filmes em pastas separadas que combinam com o título do filme</string>
   <string id="20330">Usar nomes de pastas para busca</string>
   <string id="20331">Arquivo</string>
   <string id="20332">Usar pasta ou nomes de arquivos em buscas?</string>
   <string id="20401">Reproduzir vídeo musical</string>
   <string id="20402">Baixar ícones de atores ao criar a coleção</string>
   <string id="20403">Selecionar ícone de ator</string>
+
   <string id="20405">Remover marcador do episódio</string>
   <string id="20406">Definir marcador do episódio</string>
   <string id="20407">Opções de scraper</string>
   <string id="20416">Primeira exibição</string>
   <string id="20417">Escritor</string>
   <string id="20418">Limpar nomes de arquivos e pastas</string>
+  <string id="20419">Substituir nome do arquivo pelo título da biblioteca</string>
+
   <string id="20420">Nunca</string>
   <string id="20421">Se só uma temporada</string>
   <string id="20422">Sempre</string>
   <string id="20453">episódios</string>
   <string id="20454">Ouvinte</string>
   <string id="20455">Ouvintes</string>
+  <string id="20456">Setar fanart coleções filmes</string>
+  <string id="20457">Conjunto de filmes</string>
+  <string id="20458">Agrupar filmes em conjuntos</string>
+
   <string id="21330">Exibir arquivos e diretórios ocultos</string>
+
   <string id="21331">Cliente TuxBox</string>
   <string id="21332">AVISO: dispositivo TuxBox está em modo de gravação!</string>
   <string id="21333">Este canal será interrompido!</string>
   <string id="21335">Tem certeza que deseja iniciar o canal?</string>
   <string id="21336">Conectando a: %s</string>
   <string id="21337">Dispositivo TuxBox</string>
+
   <string id="21359">Adicionar compartilhamento de mídia...</string>
   <string id="21360">Compartilhar coleções de vídeo e música através do UPnP</string>
+
   <string id="21364">Editar compartilhamento de mídia</string>
   <string id="21365">Remover compartilhamento de mídia</string>
   <string id="21366">Pasta de legendas</string>
   <string id="21367">Filme &amp; diretório de legenda alternativo</string>
+  <string id="21368">Substituir fontes da legendas em formato ASS/SSA</string>
+
   <string id="21369">Ativar mouse</string>
   <string id="21370">Permitir sons de navegação durante reprodução</string>
   <string id="21371">Ícone</string>
   <string id="21451">Necessário conexão com a Internet.</string>
   <string id="21452">Obter Mais</string>
   <string id="21453">Raiz</string>
+  <string id="21454">Cache cheio</string>
+  <string id="21455">Cache cheio antes de chegar a quantidade necessária para reprodução contínua</string>
+
 
   <string id="21460">Local da Legenda</string>
   <string id="21461">Fixado</string>
   <string id="21806">Comentário</string>
   <string id="21807">Colorido/B&amp;W</string>
   <string id="21808">Processamento JPEG</string>
+
   <string id="21820">Data/Hora</string>
   <string id="21821">Descrição</string>
   <string id="21822">Fabricante da câmera</string>
   <string id="21841">Longitude do GPS</string>
   <string id="21842">Altitude do GPS</string>
   <string id="21843">Orientação</string>
+
   <string id="21860">Categorias suplementares</string>
   <string id="21861">Palavras-chave</string>
   <string id="21862">Sub-título</string>
   <string id="21898">Anos de atividade</string>
   <string id="21899">Gravadora/marca</string>
   <string id="21900">Nascido/formado</string>
+
   <string id="22000">Atualizar coleção ao iniciar</string>
   <string id="22001">Ocultar progresso de atualizações de coleção</string>
   <string id="22002">- Sufixo de DNS</string>
+
   <string id="22003">%2.3fs</string>
   <string id="22004">Atrasado em: %2.3fs</string>
   <string id="22005">Adiantado em: %2.3fs</string>
   <string id="22022">Incluir arquivos de vídeo nas listagens</string>
   <string id="22023">Fabricante DirectX:</string>
   <string id="22024">Versão Direct3D:</string>
+
   <string id="22030">Fonte</string>
   <string id="22031">- Tamanho</string>
   <string id="22032">- Cores</string>
   <string id="22041">branco/vermelho</string>
   <string id="22042">branco/azul</string>
   <string id="22043">preto/branco</string>
+
   <string id="22079">Selecionar ação padrão</string>
   <string id="22080">Escolher</string>
   <string id="22081">Mostrar Informação</string>
   <string id="22082">Mais...</string>
   <string id="22083">Tocar Tudo</string>
+
   <string id="23049">Teletext indisponível</string>
   <string id="23050">Ativar Teletext</string>
   <string id="23051">Parte %i</string>
   <string id="23052">Acumulando %i bytes</string>
   <string id="23053">Parando</string>
   <string id="23054">Executando</string>
+
   <string id="23100">Player externo ativo</string>
   <string id="23101">Clique OK para sair do player</string>
+
   <string id="23104">Clique OK quando execução tiver terminado</string>
+
   <string id="24000">Add-on</string>
   <string id="24001">Add-ons</string>
   <string id="24002">Opções Add-on</string>
   <string id="24003">Informação do Add-on</string>
+
   <string id="24005">Locais de Midia</string>
   <string id="24007">Informação do Filme</string>
   <string id="24008">Proteção de Tela</string>
   <string id="24067">Baixando Add-ons</string>
   <string id="24068">Atualização Disponível</string>
   <string id="24069">Atualizar</string>
+
   <string id="24070">Add-on não utilizado</string>
   <string id="24071">Ocorreu um erro desconhecido</string>
   <string id="24072">Necessário configurações</string>
   <string id="24073">Não é possível conectar</string>
   <string id="24074">Necessário reiniciar</string>
   <string id="24075">Desativar</string>
+  <string id="24076">Add-on Necessário</string>
   <string id="24080">Reconectar?</string>
   <string id="24089">Add-on reiniciado</string>
   <string id="24090">Bloquear Gerenciador de Add-on</string>
+
   <string id="24091"></string>
   <string id="24092"></string>
   <string id="24093"></string>
-  <string id="24094"></string>
-  <string id="24095"></string>
+  <string id="24094">(atual)</string>
+  <string id="24095">(na lista negra)</string>
   <string id="24096">O Add-on foi marcado como indisponível no repositório.</string>
   <string id="24097">Você deseja desabilitar em seu sistema?</string>
   <string id="24098">Indisponível</string>
   <string id="24099">Gostaria de trocar para esta skin?</string>
   <string id="25000">Notificações</string>
+
   <string id="29800">Modo de coleção</string>
   <string id="29801">Teclado QWERTY</string>
   <string id="29802">Utilizando áudio em passthrough</string>
+
   <string id="33001">Qualidade do trailer</string>
   <string id="33002">Canal/sinal</string>
   <string id="33003">Baixar</string>
   <string id="33102">Servidor de Eventos</string>
   <string id="33103">Servidor de Comunicação Remota</string>
 
+  <string id="33200">Detectado Nova Conexão</string>
+
   <string id="34100">Configurar alto-falantes</string>
+  <string id="34101">2.0</string>
+  <string id="34102">2.1</string>
+  <string id="34103">3.0</string>
+  <string id="34104">3.1</string>
+  <string id="34105">4.0</string>
+  <string id="34106">4.1</string>
+  <string id="34107">5.0</string>
+  <string id="34108">5.1</string>
+  <string id="34109">7.0</string>
+  <string id="34110">7.1</string>
+  <!-- 34112-34200 reserved for future use -->
+
+  <string id="34201">Não foi possível encontrar um item posterior para tocar</string>
+  <string id="34202">Não foi possível encontrar um item anterior para tocar</string>
+
+  <string id="34300">Falha ao iniciar zeroconf</string>
+  <string id="34301">Se serviço Apple's Bonjour estiver instalado? Veja log para maiores informações.</string>
+
+  <string id="34400">Renderização de Video</string>
+  <string id="34401">Falha para inciar filtros e scalers de vídeo, voltando a usar bilinear scaling</string>
+  <string id="34402">Falha para inicializar o dispositivo de áudio</string>
+  <string id="34403">Verifique suas configurações de áudio</string>
+
+  <string id="35000">Periféricos</string>
+
+  <string id="35001">Disposito HID Genérico</string>
+  <string id="35002">Adaptador de Rede Genérico</string>
+  <string id="35003">Disco Genérico</string>
+  <string id="35004">Não existe ajustes disponíveis&#10;para este periférico.</string>
+  <string id="35005">Novo dispositivo configurado</string>
+  <string id="35006">Dispositivo removido</string>
+  <string id="35007">Keymap para uso com este dispositivo</string>
+  <string id="35008">Keymap ativado</string>
+
+  <string id="35500">Local</string>
+  <string id="35501">Classe</string>
+  <string id="35502">Nome</string>
+  <string id="35503">Fabricante</string>
+  <string id="35504">Produto ID</string>
+
+  <string id="36000">Adaptador CEC Pulse-Eight</string>
+  <string id="36001">Nyxboard Pulse-Eight</string>
+  <string id="36002">Trocar o comando para o lado do teclado</string>
+  <string id="36003">Trocar o comando para o lado do remoto</string>
+  <string id="36004">Pressione  botão de comando "usuário"</string>
+  <string id="36005">Enable switch side commands</string>
+  <string id="36006">Não pude abrir o adaptador</string>
+  <string id="36007">Ligar a TV ou projetor quando inicializar o XBMC</string>
+  <string id="36008">Desligar equipamentos quando parar o XBMC</string>
+  <string id="36009">Colocar os equipamentos em modo de espera quando ativando proteção de tela</string>
+  <string id="36010"></string>
+  <string id="36011">Não pude detectar a porta CEC. Seta manualmente.</string>
+  <string id="36012">Não pude detectar o adaptador CEC.</string>
+  <string id="36013">Versãod libcec da interface não suportada. %d é superior a versão que o XBMC suporta (%d)</string>
+  <string id="36014">Passar este PC para modo standby, quando a TV for desligada</string>
+  <string id="36015">Número da porta HDMI</string>
+  <string id="36016">Conectado</string> <!-- max. 13 characters -->
+  <string id="36017">Adaptador encontrado, mas libcec não esta disponível</string>
+  <string id="36018">Usar os ajustes de linguagem da TV</string>
 </strings>
index dd534fe..0ea741f 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!-- Translated by Daniel Alămiță, based on english revision 35193 -->
+<!-- Translated by Daniel Alămiță, based on english revision 0ee1ef0923 -->
 <strings>
   <string id="0">Programe</string>
   <string id="1">Imagini</string>
   <string id="164">Niciun disc</string>
   <string id="165">Disc prezent</string>
   <string id="166">Costum</string>
-  <string id="167"></string>
-  <string id="168"></string>
+
   <string id="169">Rezoluție</string>
   <string id="170">Ajustează rată reîmprospătare ecran pentru potrivire cu video</string>
-  <string id="171"></string>
 
   <string id="172">Dată de lansare</string>
   <string id="173">Afișează filmele 4:3 ca</string>
   <string id="221">Nu există conectare la rețea</string>
   <string id="222">Renunță</string>
   <string id="224">Viteză</string>
-
+  <string id="225">Deplasare verticală</string>
   <string id="226">Modele de testare...</string>
   <string id="227">Caută nume piste CD audio pe freedb.org</string>
   <string id="228">Amestecă lista de redare la încărcare</string>
   <string id="242">În fereastră</string>
   <string id="243">Rată de reîmprospătare</string>
   <string id="244">Ecran complet</string>
-  <string id="245">Dimensionare: (%i,%i)->(%i,%i) (zoom x%2.2f) AR:%2.2f:1 (pixeli: %2.2f:1)</string>
+  <string id="245">Dimensionare: (%i,%i)->(%i,%i) (zoom x%2.2f) AR:%2.2f:1 (pixeli: %2.2f:1) (DeplasareV: %2.2f)</string>
 
   <string id="247">Scripturi</string>
   <string id="248">Limbă</string>
   <string id="251">Selectează dosarul destinație</string>
   <string id="252">Scoate stereo în toate difuzoarele</string>
   <string id="253">Număr de canale</string>
-  <string id="254">- Receptor capabil de DTS</string>
+  <string id="254">- Receptor capabil DTS</string>
   <string id="255">CDDB</string>
   <string id="256">Culegere informații CD</string>
   <string id="257">Eroare</string>
   <string id="282">S-au găsit %i elemente</string>
   <string id="283">Rezultate căutare</string>
   <string id="284">Nu s-au găsit rezultate.</string>
-  <string id="286"></string>
+
   <string id="287">Subtitrări</string>
   <string id="288">Font</string>
   <string id="289">- Dimensiune</string>
   <string id="304">Limbă</string>
   <string id="305">Activat</string>
   <string id="306">Non-intercalat</string>
-  <string id="307"></string>
-  <string id="308"></string>
-  <string id="309"></string>
-  <string id="310"></string>
-  <string id="311"></string>
+
   <string id="312">(0=automat)</string>
   <string id="313">Curățare bază de date</string>
   <string id="314">Pregătire...</string>
   <string id="404">Vânt</string>
   <string id="405">Punct de rouă</string>
   <string id="406">Umiditate</string>
-  <string id="407"></string>
-  <string id="408"></string>
+
   <string id="409">Implicit</string>
   <string id="410">Se accesează serviciul de prognoză</string>
   <string id="411">Se obține prognoza pentru:</string>
   <string id="426">Nu s-au găsit informații CD</string>
   <string id="427">Disc</string>
   <string id="428">Inserați CD-ul/DVD-ul corect</string>
-  <string id="429">Inserați următorul CD/DVD</string>
+  <string id="429">Inserați următorul disc:</string>
   <string id="430">Sortează după: DVD#</string>
   <string id="431">Fără cache</string>
   <string id="432">Eliminare film din mediatecă</string>
   <string id="517">Albume redate recent</string>
   <string id="518">Lansează</string>
   <string id="519">Lansează în...</string>
-  <string id="520"></string>
+
   <string id="521">Compilații</string>
   <string id="522">Elimină sursa</string>
   <string id="523">Schimbă media</string>
   <string id="573">Cale</string>
   <string id="574">Țară</string>
   <string id="575">În progres</string>
+  <string id="576">Număr redări</string>
 
   <string id="580">Direcție de sortare</string>
   <string id="581">Metodă de sortare</string>
   <string id="715">- Atribuire</string>
   <string id="716">Automat (DHCP)</string>
   <string id="717">Manual (static)</string>
-  <string id="718"></string>
+
   <string id="719">- Adresă IP</string>
   <string id="720">- Mască de rețea</string>
   <string id="721">- Gateway implicit</string>
   <string id="726">Modificările nu au fost salvate. Continuați fără a le salva?</string>
   <string id="727">Server Web</string>
   <string id="728">Server FTP</string>
-  <string id="729"></string>
+
   <string id="730">- Port</string>
-  <string id="731"></string>
+
   <string id="732">Salvează și aplică</string>
   <string id="733">- Parolă</string>
   <string id="734">Nicio parolă</string>
   <!-- strings 768 and 769 reserved for more subtitle colors -->
 
   <string id="770">Eroare %i: partajarea nu este disponibilă</string>
-  <string id="771"></string>
+
   <string id="772">Ieșire audio</string>
   <string id="773">Salt</string>
   <string id="774">Dosar prezentare diapozitive</string>
   <string id="851">Interval valid de porturi este 1-65535</string>
   <string id="852">Interval valid de porturi este 1024-65535</string>
 
+  <string id="998">Adaugă muzică...</string>
+  <string id="999">Adaugă filme...</string>
   <string id="1000">- Previzualizare</string>
   <string id="1001">Imposibil de conectat</string>
   <string id="1002">XBMC nu s-a putut conecta la locația rețelei.</string>
   <string id="1030">Alegere imagine</string>
   <string id="1031">Alegere dosar de imagini</string>
   <string id="1032">Adaugă locație rețea...</string>
-  <string id="1033">Caută fișier</string>
+  <string id="1033">Căutare fișier</string>
   <string id="1034">Submeniu</string>
   <string id="1035">Activează butoane submeniu</string>
   <string id="1036">Favorite</string>
   <string id="1051">Introduceți adresă web</string>
 
   <string id="1200">Client SMB</string>
-  <string id="1202">Workgroup</string>
+  <string id="1202">Grup de lucru</string>
   <string id="1203">Nume utilizator implicit</string>
   <string id="1204">Parolă implicită</string>
 
   <string id="1234">Programe, imagini și muzică</string>
   <string id="1235">Programe, imagini și video</string>
 
-  <string id="1245"></string>
-  <string id="1246"></string>
-  <string id="1247"></string>
-
   <string id="1250">Detectare automată</string>
   <string id="1251">Detectează automat sistemul</string>
   <string id="1252">Pseudonim</string>
   <string id="1257">Doriți să vă conectați cu sistemul detectat automat?</string>
 
   <string id="1260">Anunță aceste servicii către celelalte sisteme prin Zeroconf</string>
+  <string id="1270">Permite XBMC să primească conținut AirPlay</string>
+  <string id="1271">Nume dispozitiv</string>
+  <string id="1272">- Folosește protecție prin parolă</string>
 
   <string id="1300">Dispozitiv audio specific</string>
   <string id="1301">Dispozitiv de traversare specific</string>
 
   <string id="2100">Scriptul a eșuat! : %s</string>
   <string id="2101">Este necesară o versiune mai nouă - Vedeți istoric modificări</string>
-  <string id="2102"></string>
-  <string id="2103"></string>
 
-  <string id="4501">Activează LCD/VFD</string>
+  <string id="4501">Activează LCD / VFD</string>
 
   <string id="10000">Acasă</string>
   <string id="10001">Programe</string>
   <string id="10019">Setări - Aspect</string>
   <string id="10020">Scripturi</string>
   <string id="10021">Navigator web</string>
-
+  <string id="10025">Filme</string>
   <string id="10028">Filme/Listă de redare</string>
+  <string id="10029">Ecran de autentificare</string>
   <string id="10034">Setări - Profile</string>
+  <string id="10040">Navigator de suplimente</string>
 
   <string id="10100">Dialog Da/Nu</string>
   <string id="10101">Dialog de progres</string>
   <string id="12009">Se reface indexul...</string>
   <string id="12010">Revino la fereastra de muzică</string>
   <string id="12011">Revino la fereastra de filme</string>
-  <string id="12012"></string>
-  <string id="12013"></string>
-  <string id="12014"></string>
-  <string id="12015"></string>
-  <string id="12016"></string>
-  <string id="12017"></string>
-  <string id="12018"></string>
-  <string id="12019"></string>
-  <string id="12020"></string>
+
   <string id="12021">Pornește de la început</string>
   <string id="12022">Reia de la %s</string>
-  <string id="12023"></string>
 
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12377">Vor fi resetate toate valorile salvate anterior.</string>
   <string id="12378">Durată de afișare pentru fiecare imagine</string>
   <string id="12379">Folosește efecte de mișcare și mărire</string>
-  <string id="12380"></string>
-  <string id="12381"></string>
-  <string id="12382"></string>
+
   <string id="12383">Ceas 12 ore</string>
   <string id="12384">Ceas 24 ore</string>
   <string id="12385">Zi/Lună</string>
   <string id="12392">ore</string>
   <string id="12393">zile</string>
   <string id="12394">Timp total de funcționare</string>
+  <string id="12395">Nivel baterie</string>
 
   <string id="12600">Meteo</string>
 
   <string id="13003">- Întârziere</string>
   <string id="13004">- Durată minimă fișier</string>
   <string id="13005">Închidere</string>
-  <string id="13006"></string>
-  <string id="13007"></string>
+
   <string id="13008">Tip de închidere</string>
   <string id="13009">Ieșire</string>
   <string id="13010">Hibernare</string>
 
   <string id="13100">Filtru pâlpâire</string>
   <string id="13101">Permite driverului să aleagă (necesită repornire)</string>
+
   <string id="13105">Sincronizare verticală goală</string>
   <string id="13106">Dezactivat</string>
   <string id="13107">Activată în timpul redării video</string>
   <string id="13146">XBMC, modificând această setare vă poate afecta abilitatea</string>
   <string id="13147">de a continua să îl controlați. Doriți să continuați?</string>
 
-  <string id="13150"></string>
-  <string id="13151"></string>
-  <string id="13152"></string>
-  <string id="13153"></string>
-  <string id="13154"></string>
-  <string id="13155"></string>
-  <string id="13156"></string>
-  <string id="13157"></string>
-  <string id="13158"></string>
-  <string id="13159">Mască subrețea</string>
+  <string id="13159">Mască de rețea</string>
   <string id="13160">Gateway</string>
   <string id="13161">DNS primar</string>
   <string id="13162">Inițializarea a eșuat</string>
 
-  <string id="13163"></string>
-  <string id="13164"></string>
-  <string id="13165"></string>
-  <string id="13166"></string>
-  <string id="13167"></string>
-  <string id="13168"></string>
-  <string id="13169"></string>
-
-
   <string id="13170">Niciodată</string>
   <string id="13171">Imediat</string>
   <string id="13172">După %i secunde</string>
 
   <string id="13200">Profile</string>
   <string id="13201">Ștergeți profilul '%s'?</string>
+  
   <string id="13204">Ultimul profil încărcat:</string>
   <string id="13205">Necunoscut</string>
   <string id="13206">Suprascrie</string>
+
   <string id="13208">Ceas alarmă</string>
   <string id="13209">Interval ceas alarmă (în minute)</string>
   <string id="13210">Pornit, alarmă în %i minute</string>
 
   <string id="13283">Sistem de operare:</string>
   <string id="13284">Viteză CPU:</string>
-  <string id="13285"></string>
+
   <string id="13286">Codor video:</string>
   <string id="13287">Rezoluție ecran:</string>
-  <string id="13288"></string>
-  <string id="13289"></string>
-  <string id="13290"></string>
-  <string id="13291"></string>
+
   <string id="13292">Cablu A/V:</string>
-  <string id="13293"></string>
+
   <string id="13294">Regiune DVD:</string>
   <string id="13295">Internet:</string>
   <string id="13296">conectat</string>
   <string id="13297">Neconectat. Verificați setările rețelei.</string>
-  <string id="13298"></string>
+
   <string id="13299">Temperatură țintă</string>
   <string id="13300">Viteză ventilator</string>
   <string id="13301">Control temperatură automat</string>
   <string id="13334">Modifică eticheta</string>
   <string id="13335">Setează ca implicit</string>
   <string id="13336">Elimină buton</string>
-  <string id="13338"></string>
-  <string id="13339"></string>
+
   <string id="13340">Lasă-l așa</string>
   <string id="13341">Verde</string>
   <string id="13342">Portocaliu</string>
   <string id="13359">Setează poză artist</string>
   <string id="13360">Generează miniaturi automat</string>
   <string id="13361">Activează voce</string>
+
   <string id="13375">Activează dispozitiv</string>
   <string id="13376">Volum</string>
   <string id="13377">Mod de vizualizare implicit</string>
   <string id="13409">Top 250</string>
   <string id="13410">Prinde radio Last.fm</string>
   <string id="13411">Viteză minimă ventilator</string>
-
+  <string id="13412">Redă începând de aici</string>
   <string id="13413">Se descarcă</string>
   <string id="13414">Include artiști care apar doar pe compilații</string>
   <string id="13415">Metodă de redare</string>
   <string id="13429">Permite accelerare hardware (VDADecoder)</string>
   <string id="13430">Permite accelerare hardware (OpenMax)</string>
   <string id="13431">Pixel shaders</string>
+  <string id="13432">Permite accelerare hardware (VideoToolbox)</string>
 
   <string id="13500">Metodă sincronizare A/V</string>
   <string id="13501">ceas audio</string>
   <string id="14038">Setările de rețea au fost schimbate</string>
   <string id="14039">XBMC trebuie repornit pentru a putea modifica</string>
   <string id="14040">setăriile rețelei.  Doriți să reporniți XBMC acum?</string>
-  <string id="14041"></string>
+  <string id="14041">Limitare bandă conexiune Internet</string>
 
   <string id="14043">- Oprire în timpul redării</string>
   <string id="14044">%i min</string>
   <string id="15275">Grafic piste săptămânal pentru %name%</string>
   <string id="15276">Ascultă radio Last.fm al veciniilor lui %name%</string>
   <string id="15277">Ascultă radio personal Last.fm al lui %name%'s</string>
-  <string id="15278">Ascultă radio Last.fm piste plăcute de %name%</string>
+  <string id="15278">Ascultă radio Last.fm mix %name%</string>
   <string id="15279">Se obține lista de la Last.fm...</string>
   <string id="15280">Nu se poate obține lista de la Last.fm...</string>
   <string id="15281">Introduceți un nume de artist pentru a găsii artiști similari</string>
   <string id="15283">Piese ascultate recent de %name%</string>
   <string id="15284">Ascultă recomandăriile lui %name% pe radio Last.fm</string>
   <string id="15285">Top etichete pentru utilizator %name%</string>
-  <string id="15286">Ascultă lista de redare a lui %name% pe radio Last.fm</string>
+
   <string id="15287">Doriți să adăugați piesa curentă la piesele îndrăgite?</string>
   <string id="15288">Doriți să blocați piesa curentă?</string>
   <string id="15289">Adaugată la piesele îndrăgite: '%s'.</string>
   <string id="16020">De-întrețesere</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (inversat)</string>
-  <string id="16023">Tratare video întrețesut</string>
+  <string id="16023"></string>
   <string id="16024">Renunțare...</string>
   <string id="16025">Introduceți nume artist</string>
   <string id="16026">Redarea a eșuat</string>
   <string id="16033">Baza de date nu poate fi deschisă.</string>
   <string id="16034">Nu pot fi preluate cântece din baza de date.</string>
   <string id="16035">Listă de redare mod petrecere</string>
-
+  <string id="16036">Deîntrețesere (jumătate)</string>
+  <string id="16037">Deîntrețesere video</string>
+  <string id="16038">Metodă de deîntrețesere</string>
+  <string id="16039">Oprită</string>
+  <string id="16040">Automat</string>
+  <string id="16041">Pornită</string>
+  
   <string id="16100">Toate filmele</string>
   <string id="16101">neprivite</string>
   <string id="16102">privite</string>
   <string id="16103">Marchează ca privit</string>
   <string id="16104">Marchează ca neprivit</string>
-  <string id="16105">Modifică titlul</string>
-  <string id="16106"></string>
-  <string id="16107"></string>
-  <string id="16108"></string>
-  <string id="16109"></string>
-  <string id="16110"></string>
+  <string id="16105">Modifică numele</string>
 
   <string id="16200">Operațiunea a fost anulată</string>
   <string id="16201">Copierea a eșuat</string>
   <string id="16309">Sinc (software)</string>
   <string id="16310">Temporal</string>
   <string id="16311">Temporal/Spațial</string>
-  <string id="16312">(VDPAU)Reducere zgomot</string>
-  <string id="16313">(VDPAU)Claritate</string>
+  <string id="16312">(VDPAU) Reducere zgomot</string>
+  <string id="16313">(VDPAU) Claritate</string>
   <string id="16314">Inverse Telecine</string>
-  <string id="16315">Lanczos3 optimized</string>
+  <string id="16315">Lanczos3 optimizat</string>
   <string id="16316">Automat</string>
   <string id="16317">Temporal (jumătate)</string>
   <string id="16318">Temporal/Spațial (jumătate)</string>
   <string id="16319">DXVA</string>
-
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA maxim</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 optimizat</string>
+  <string id="16324">Software Blend</string>
+  
   <string id="16400">Post-procesare video</string>
-  <string id="16401">Dezactivată</string>
-  <string id="16402">Activată pentru conținut SD</string>
-  <string id="16403">Activată întotdeauna</string>
 
   <string id="17500">Timp de așteptare repaus ecran</string>
 
   <string id="20141">Setează</string>
   <string id="20142">Nume utilizator</string>
   <string id="20143">Introduceți parola pentru</string>
-  <string id="20144">Cronometru de închidere</string>
-  <string id="20145">Interval de închidere&#10;(în minute)</string>
-  <string id="20146">Pornit, închidere în %i minute</string>
+  <string id="20144">Planificare închidere</string>
+  <string id="20145">Planificare închidere&#10;(în minute)</string>
+  <string id="20146">Pornită, închidere în %i minute</string>
   <string id="20147">Închidere în 30 de minute</string>
   <string id="20148">Închidere în 60 de minute</string>
   <string id="20149">Închidere în 120 de minute</string>
-  <string id="20150">Cronometru personalizat de închidere</string>
-  <string id="20151">Renunțare la cronomentru de închidere</string>
+  <string id="20150">Planificare închidere</string>
+  <string id="20151">Renunță la plan. închidere</string>
   <string id="20152">Blochează preferințele pentru %s</string>
   <string id="20153">Alege...</string>
   <string id="20154">Rezumat informații</string>
   <string id="20184">Rotește imaginile folosind informațiile EXIF</string>
   <string id="20185">Folosește stiluri vizualizare afiș pentru serialele TV</string>
   <string id="20186">Vă rugăm așteptați</string>
-  <string id="20187"></string>
-  <string id="20188"></string>
+
   <string id="20189">Activează derulare automată pentru intrigă și recenzie</string>
   <string id="20190">Particularizat</string>
   <string id="20191">Activează jurnalizare depanare</string>
   <string id="20256">Client HTS Tvheadend</string>
   <string id="20257">Client VDR Streamdev</string>
   <string id="20258">Client MythTV</string>
+  <string id="20259">Network Filesystem (NFS)</string>
+  <string id="20260">Secure Shell (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
 
   <string id="20300">Director server Web (HTTP)</string>
   <string id="20301">Director server Web (HTTPS)</string>
   <string id="20303">Doriți să săriți și să continuați?</string>
   <string id="20304">Flux RSS</string>
 
-  <string id="20306"></string>
   <string id="20307">DNS secundar</string>
   <string id="20308">Server DHCP:</string>
   <string id="20309">Creează dosar nou</string>
   <string id="20310">Întunecă LCD la redare</string>
   <string id="20311">Necunoscut sau integrat (protejat)</string>
   <string id="20312">Întunecă LCD în pauză</string>
-  <string id="20313"></string>
+
   <string id="20314">Mediatecă video</string>
-  <string id="20315"></string>
+
   <string id="20316">Sort. după: ID</string>
-  <string id="20317"></string>
-  <string id="20318"></string>
-  <string id="20319"></string>
-  <string id="20320"></string>
-  <string id="20321"></string>
-  <string id="20322"></string>
-  <string id="20323"></string>
+
   <string id="20324">Redă parte...</string>
   <string id="20325">Resetare calibrare</string>
   <string id="20326">Vor fi resetate valorile de calibrare pentru %s</string>
   <string id="20327">către valorile implicite.</string>
   <string id="20328">Alege destinație</string>
-
+  <string id="20329">Filmele sunt în dosare separate care se potrivesc cu numele filmului</string>
   <string id="20330">Folosește nume dosare la căutări</string>
   <string id="20331">Fișier</string>
   <string id="20332">Folosește nume fișier sau nume dosar la căutări?</string>
   <string id="20373">Sezon</string>
   <string id="20374">Descărcare informații filme</string>
   <string id="20375">Eliminare atribuire conținut</string>
-  <string id="20376">Titlu original</string>
+  <string id="20376">Nume original</string>
   <string id="20377">Actualizare informații serial</string>
   <string id="20378">Actualizați informațiile pentru toate episoadele?</string>
   <string id="20379">Dosarul selectat conține un singur serial</string>
   <string id="20407">Setări scraper</string>
   <string id="20408">Descărcare informații videoclipuri</string>
   <string id="20409">Descărcare informații serial</string>
-  <string id="20410">Trailer</string>
+  <string id="20410">Secvențe</string>
   <string id="20411">Netezește</string>
   <string id="20412">Netezește seriale</string>
-  <string id="20413">Obține Fanart</string>
-  <string id="20414">Arată Fanart în mediateciile de filme și muzică</string>
+  <string id="20413">Obține fundal</string>
+  <string id="20414">Arată fundale în mediateciile de filme și muzică</string>
   <string id="20415">Se scanează pentru conținut nou</string>
   <string id="20416">Prima difuzare</string>
   <string id="20417">Scenarist</string>
-  <string id="20418">Curăță numele fișierelor și al dosarelor</string>
+  <string id="20418"></string>
+  <string id="20419">Înlocuiește numele fișierelor cu titlurile din mediatecă</string>
 
   <string id="20420">niciodată</string>
   <string id="20421">doar dacă este un singur sezon</string>
   <string id="20453">episoade</string>
   <string id="20454">Ascultător</string>
   <string id="20455">Ascultători</string>
+  <string id="20456">Alege fundal set de filme</string>
+  <string id="20457">Set de filme</string>
+  <string id="20458">Grupează filmele în seturi</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Arată dosarele și fișierele ascunse</string>
   <string id="21365">Elimină partajare media</string>
   <string id="21366">Dosar de subtitrări</string>
   <string id="21367">Director de film și subtitrare alternativă</string>
+  <string id="21368">Ignoră fonturi subtitrări ASS/SSA</string>
 
-  <string id="21369">Activare mouse</string>
+  <string id="21369">Activează suport mouse și ecran sensibil la atingere</string>
   <string id="21370">Emite sunete de navigare în timpul redării media</string>
   <string id="21371">Miniaturi</string>
   <string id="21372">Regiune forțată lector DVD</string>
   <string id="21451">Este necesară o conexiune la Internet.</string>
   <string id="21452">Obține mai multe...</string>
   <string id="21453">Sistem de fișiere rădăcină</string>
+  <string id="21454">Cache plin</string>
+  <string id="21455">Cache împlinit înainte de a ajunge la nivelul necesar pentru redare continuă</string>
+  
+  <string id="21460">Locație subtitrare</string>
+  <string id="21461">Fixă</string>
+  <string id="21462">Jos pe video</string>
+  <string id="21463">Jos sub video</string>
+  <string id="21464">Sus pe video</string>
+  <string id="21465">Sus peste video</string>
 
   <string id="21800">Nume fișier</string>
   <string id="21801">Cale fișier</string>
   <string id="24015">Informații videoclipuri</string>
   <string id="24016">Informații albume</string>
   <string id="24017">Informații artiști</string>
+  <string id="24018">Servicii</string>
 
   <string id="24020">Configurează</string>
   <string id="24021">Dezactivează</string>
   <string id="24041">Instalare din fișier zip</string>
   <string id="24042">Se descarcă %i%%</string>
   <string id="24043">Actualizări disponibile</string>
+  <string id="24044">Dependențele nu au fost îndeplinite</string>
+  <string id="24045">Suplimentul nu are structura corectă</string>
+  <string id="24046">%s este folosit de următoarele suplimente instalate</string>
+  <string id="24047">Acest supliment nu poate fi dezinstalat</string>
+  <string id="24048">Revino</string>
 
   <string id="24050">Suplimente disponibile</string>
   <string id="24051">Versiune:</string>
   <string id="24073">Imposibil de conectat</string>
   <string id="24074">Trebuie să fie repornit</string>
   <string id="24075">Dezactivează</string>
+  <string id="24076">Supliment necesar</string>
   <string id="24080">Încercați reconectarea?</string>
   <string id="24089">Reporniri supliment</string>
   <string id="24090">Blochează gestionarul de suplimente</string>
 
-  <string id="24091"></string>
-  <string id="24092"></string>
-  <string id="24093"></string>
-  <string id="24094"></string>
-  <string id="24095"></string>
-
+  <string id="24094">(curent)</string>
+  <string id="24095">(pe lista neagră)</string>
   <string id="24096">Suplimentul a fost marcat ca defect în depozit.</string>
   <string id="24097">Doriți să îl dezactivați pe sistemul dumneavoastră?</string>
   <string id="24098">Defect</string>
   <string id="24099">Doriți să folosiți acest costum?</string>
+  <string id="24100">Pentru aceasta trebuie să descărcați un supliment:</string>
+  <string id="24101">Doriți să descărcați acest supliment?</string>
   <string id="25000">Notificări</string>
 
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29801">Tastatură QWERTY</string>
   <string id="29802">Traversare Audio în folosință</string>
 
-  <string id="29999"></string>
-
   <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
   <!-- strings 31000 thru 31999 reserved for skins -->
   <!-- strings 32000 thru 32999 reserved for scripts -->
   <!-- strings 33000 thru 33999 reserved for common strings used in addons -->
-  <string id="33001">Calitate trailer</string>
+  <string id="33001">Calitate secvențe</string>
   <string id="33002">Flux</string>
   <string id="33003">Descarcă</string>
   <string id="33004">Descarcă și redă</string>
   <string id="33082">Cale către script</string>
   <string id="33083">Activează buton personalizat script</string>
 
+  <string id="33100">Nu poate fi pornit</string>
+  <string id="33101">Server web</string>
+  <string id="33102">Server evenimente</string>
+  <string id="33103">Server comunicare la distanță</string>
+  
+  <string id="33200">Conexiune nouă detectată</string>
+
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
   <string id="34110">7.1</string>
   <!-- 34112-34200 reserved for future use -->
 
+  <string id="34201">Următorul element de redat nu poate fi găsit</string>
+  <string id="34202">Elementul anterior de redat nu poate fi găsit</string>
+  
+  <string id="34300">Zeroconf nu poate fi pornit</string>
+  <string id="34301">Serviciul Bonjour de la Apple este instalat? Vedeți jurnalul pentru mai multe informații.</string>
+  
+  <string id="34400">Randare video</string>
+  <string id="34401">Filtre/scalori video nu pot fi inițializați, revenim la scalare bilineară</string>
+  <string id="34402">Dispozitivul audio nu poate fi inițializat</string>
+  <string id="34403">Verificați setările audio</string>
+
+  <string id="35000">Periferice</string>
+
+  <string id="35001">Dispozitiv HID generic</string>
+  <string id="35002">Adaptor de rețea generic</string>
+  <string id="35003">Disc generic</string>
+  <string id="35004">Nu există setări disponibile&#10;pentru acest periferic.</string>
+  <string id="35005">Dispozitiv nou configurat</string>
+  <string id="35006">Dispozitiv eliminat</string>
+  <string id="35007">Hartă de taste de folosit pentru acest dispozitiv</string>
+  <string id="35008">Hartă de taste activată</string>
+
+  <string id="35500">Locație</string>
+  <string id="35501">Clasă</string>
+  <string id="35502">Nume</string>
+  <string id="35503">Furnizor</string>
+  <string id="35504">ID produs</string>
+  
+  <string id="36000">Adaptor Pulse-Eight CEC</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Comandă de comutare la parte tastatură</string>
+  <string id="36003">Comandă de comutare la parte telecomandă</string>
+  <string id="36004">Comandă apasă buton „utilizator”</string>
+  <string id="36005">Activează comenzi de schimbare a părții</string>
+  <string id="36006">Adapotorul nu poate fi deschis</string>
+  <string id="36007">Aprinde televizorul atunci când XBMC este pornit</string>
+  <string id="36008">Oprește dispozitivele atunci când XBMC este oprit</string>
+  <string id="36009">Pune dispozitivele în modul repaus când protector ecran este activat</string>
+  <string id="36010"></string>
+  <string id="36011">Portul CEC nu poate fi detectat. Setați-l manual.</string>
+  <string id="36012">Adaptorul CEC nu poate fi detectat.</string>
+  <string id="36013">Versiune interfață libcec nesuportată. %d este mai mare decât versiunea pe care XBMC o suportă (%d)</string>
+  <string id="36014">Pune acest calculator în repaus când televizorul este oprit</string>
+  <string id="36015">Număr port HDMI</string>
+  <string id="36016">Conectat</string> <!-- max. 13 characters -->
+  <string id="36017">Adaptor găsit, dar librăria libcec nu este disponibilă</string>
+  <string id="36018">Folosește setările de limbă ale televizorului</string>
 </strings>
index 42f4098..85d2985 100644 (file)
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--Language file translated with Team XBMC Translator-->
-<!--Date of translation: 12/31/2010-->
-<!--$Revision$-->
-<!--Based on english strings version 35208-->
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Russian – current edition by Roman_V_M -->
+<!--Based on English cd69c7030b0caec990b6143fac65ca8168dccf71 (23.01.2012)-->
 <strings>
   <string id="0">Программы</string>
-  <string id="1">Фото</string>
+  <string id="1">Фотографии</string>
   <string id="2">Музыка</string>
   <string id="3">Видео</string>
-  <string id="4">ТВ Гид</string>
+  <string id="4">ТВид</string>
   <string id="5">Настройки</string>
+  <string id="6">XBMC SVN</string>
   <string id="7">Файл-менеджер</string>
   <string id="8">Погода</string>
   <string id="9">Медиацентр XBMC</string>
+
   <string id="11">Понедельник</string>
   <string id="12">Вторник</string>
   <string id="13">Среда</string>
   <string id="15">Пятница</string>
   <string id="16">Суббота</string>
   <string id="17">Воскресенье</string>
-  <string id="21">Января</string>
-  <string id="22">Февраля</string>
-  <string id="23">Марта</string>
-  <string id="24">Апреля</string>
-  <string id="25">Мая</string>
-  <string id="26">Июня</string>
-  <string id="27">Июля</string>
-  <string id="28">Августа</string>
-  <string id="29">Сентября</string>
-  <string id="30">Октября</string>
-  <string id="31">Ноября</string>
-  <string id="32">Декабря</string>
+
+  <string id="21">января</string>
+  <string id="22">февраля</string>
+  <string id="23">марта</string>
+  <string id="24">апреля</string>
+  <string id="25">мая</string>
+  <string id="26">июня</string>
+  <string id="27">июля</string>
+  <string id="28">августа</string>
+  <string id="29">сентября</string>
+  <string id="30">октября</string>
+  <string id="31">ноября</string>
+  <string id="32">декабря</string>
+
   <string id="41">Пн</string>
   <string id="42">Вт</string>
   <string id="43">Ср</string>
   <string id="44">Чт</string>
   <string id="45">Пт</string>
   <string id="46">Сб</string>
-  <string id="47">Вск</string>
-  <string id="51">Янв</string>
-  <string id="52">Февр</string>
-  <string id="53">Март</string>
-  <string id="54">Апр</string>
-  <string id="55">Май</string>
-  <string id="56">Июнь</string>
-  <string id="57">Июль</string>
-  <string id="58">Авг</string>
-  <string id="59">Сент</string>
-  <string id="60">Окт</string>
-  <string id="61">Нояб</string>
-  <string id="62">Дек</string>
+  <string id="47">Вс</string>
+
+  <string id="51">янв.</string>
+  <string id="52">фев.</string>
+  <string id="53">марта</string>
+  <string id="54">апр.</string>
+  <string id="55">мая</string>
+  <string id="56">июня</string>
+  <string id="57">июля</string>
+  <string id="58">авг.</string>
+  <string id="59">сент.</string>
+  <string id="60">окт.</string>
+  <string id="61">нояб.</string>
+  <string id="62">дек.</string>
+
   <string id="71">С</string>
   <string id="72">ССВ</string>
   <string id="73">СВ</string>
   <string id="84">ЗСЗ</string>
   <string id="85">СЗ</string>
   <string id="86">ССЗ</string>
-  <string id="87">Переменный</string>
-  <string id="98">Вид: Авто</string>
-  <string id="99">Вид: Авто крупн.</string>
-  <string id="100">Вид: Значки</string>
-  <string id="101">Вид: Список</string>
+  <string id="87">Перем.</string>
+
+  <string id="98">Вид: авто</string>
+  <string id="99">Вид: авто крупн.</string>
+  <string id="100">Вид: значки</string>
+  <string id="101">Вид: список</string>
   <string id="102">Сканировать</string>
-  <string id="103">СоÑ\80Ñ\82. Ð¿Ð¾ Ð\98мени</string>
-  <string id="104">СоÑ\80Ñ\82. Ð¿Ð¾ Ð\94ате</string>
-  <string id="105">Сорт. по Размеру</string>
+  <string id="103">СоÑ\80Ñ\82. Ð¿Ð¾ Ð¸мени</string>
+  <string id="104">СоÑ\80Ñ\82. Ð¿Ð¾ Ð´ате</string>
+  <string id="105">Сорт. по размеру</string>
   <string id="106">Нет</string>
   <string id="107">Да</string>
-  <string id="108">Слайдшоу</string>
+  <string id="108">Слайд-шоу</string>
   <string id="109">Создавать эскизы</string>
   <string id="110">Создавать эскизы</string>
   <string id="111">Ярлыки</string>
-  <string id="112">Ð\9dа Ð¿Ð°Ñ\83зе</string>
+  <string id="112">Ð\9fаÑ\83за</string>
   <string id="113">Не удалось обновить</string>
   <string id="114">Не удалось установить</string>
   <string id="115">Копировать</string>
   <string id="119">Новая папка</string>
   <string id="120">Подтверждение копирования</string>
   <string id="121">Подтверждение перемещения</string>
-  <string id="122">Ð\9fодÑ\82веÑ\80ждаеÑ\82е Ñ\83даление?</string>
+  <string id="122">УдалиÑ\82Ñ\8c Ñ\84айл?</string>
   <string id="123">Копировать файлы?</string>
   <string id="124">Переместить файлы?</string>
-  <string id="125">Удалить файлы? (восстановление будет невозможно)</string>
-  <string id="126">Статус</string>
-  <string id="127">Объект(-ов)</string>
-  <string id="128">Основные</string>
-  <string id="129">Слайдшоу</string>
-  <string id="130">Ð\98нÑ\84оÑ\80маÑ\86ия о системе</string>
+  <string id="125">Удалить файлы? Восстановление будет невозможно!</string>
+  <string id="126">Состояние</string>
+  <string id="127">Объектов</string>
+  <string id="128">Общие</string>
+  <string id="129">Слайд-шоу</string>
+  <string id="130">Сведения о системе</string>
   <string id="131">Экран</string>
   <string id="132">Альбомы</string>
   <string id="133">Исполнители</string>
   <string id="135">Жанры</string>
   <string id="136">Плейлисты</string>
   <string id="137">Поиск</string>
-  <string id="138">Ð\98нÑ\84оÑ\80маÑ\86ия о системе</string>
+  <string id="138">Сведения о системе</string>
   <string id="139">Температура:</string>
   <string id="140">CPU:</string>
   <string id="141">GPU:</string>
   <string id="148">DHCP</string>
   <string id="149">MAC-адрес</string>
   <string id="150">IP-адрес</string>
-  <string id="151">Соединение: </string>
+  <string id="151">Соединение:</string>
   <string id="152">Полудуплекс</string>
   <string id="153">Полный дуплекс</string>
   <string id="154">Накопители</string>
-  <string id="155">Ð\9bоÑ\82ок DVD Ð¿Ñ\80ивода</string>
+  <string id="155">Ð\94иÑ\81к</string>
   <string id="156">Свободно</string>
   <string id="157">Видео</string>
   <string id="158">Свободно памяти</string>
   <string id="160">Свободно</string>
   <string id="161">Недоступно</string>
   <string id="162">Лоток открыт</string>
-  <string id="163">Чтение</string>
+  <string id="163">Чтение</string>
   <string id="164">Нет диска в приводе</string>
   <string id="165">Диск в приводе</string>
   <string id="166">Обложка</string>
-  <string id="167">Включить FTP-сервер</string>
-  <string id="168">Включить синхронизацию времени через Internet</string>
-  <string id="169">Разрешение экрана</string>
-  <string id="170">Настроить частоту экрана согласно видео</string>
-  <string id="171">Растягивать 4:3 до 16:9</string>
+
+  <string id="169">Разрешение</string>
+  <string id="170">Настроить частоту дисплея согласно видео</string>
+
   <string id="172">Дата выпуска</string>
-  <string id="173">Показывать видео формата 4:3 как</string>
+  <string id="173">Режим показа видео формата 4:3</string>
+
   <string id="175">Настроение</string>
   <string id="176">Стили</string>
+
   <string id="179">Песня</string>
   <string id="180">Длительность</string>
   <string id="181">Выберите альбом</string>
   <string id="186">ОК</string>
   <string id="187">Альбомы не найдены!</string>
   <string id="188">Выбрать все</string>
-  <string id="189">СканиÑ\80ование Ð¼ÐµÐ´Ð¸Ð°Ð´Ð°Ð½Ð½Ñ\8bÑ\85</string>
+  <string id="189">Ð\9fолÑ\83Ñ\87ение Ð¸Ð½Ñ\84оÑ\80маÑ\86ииâ\80¦</string>
   <string id="190">Сохранить</string>
   <string id="191">Перемешать</string>
   <string id="192">Очистить</string>
   <string id="193">Сканировать</string>
-  <string id="194">Поиск...</string>
-  <string id="195">Информации не найдено!</string>
+  <string id="194">Поиск</string>
+  <string id="195">Информация не найдена.</string>
   <string id="196">Выберите фильм:</string>
   <string id="197">Запрос информации от %s</string>
   <string id="198">Загрузка данных о фильме</string>
-  <string id="199">Вэб-интерфейс</string>
+  <string id="199">Веб-интерфейс</string>
+
   <string id="202">Девиз</string>
-  <string id="203">Сюжет</string>
+  <string id="203">Описание</string>
+
   <string id="205">Голосов</string>
-  <string id="206">Ð\90кÑ\82еÑ\80Ñ\8b</string>
+  <string id="206">Ð\92 Ñ\80олÑ\8fÑ\85</string>
   <string id="207">Сюжет</string>
-  <string id="208">Ð\92оÑ\81пÑ\80оизвеÑ\81Ñ\82и</string>
+  <string id="208">Ð\9fÑ\80оигÑ\80аÑ\82Ñ\8c</string>
   <string id="209">Следующий</string>
   <string id="210">Предыдущий</string>
-  <string id="213">Калибровка интерфейса...</string>
-  <string id="214">Калибровка экрана...</string>
+  <string id="213">Калибровка интерфейса</string>
+  <string id="214">Калибровка дисплея…</string>
   <string id="215">Сглаживание</string>
   <string id="216">Степень увеличения</string>
   <string id="217">Соотношение сторон</string>
   <string id="218">DVD-привод</string>
-  <string id="219">Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð²Ñ\81Ñ\82авÑ\8cÑ\82е Ð´Ð¸Ñ\81к...</string>
+  <string id="219">Ð\92Ñ\81Ñ\82авÑ\8cÑ\82е Ð´Ð¸Ñ\81к</string>
   <string id="220">Удаленный ресурс</string>
   <string id="221">Нет подключения к сети</string>
   <string id="222">Отмена</string>
-  <string id="224">Длительность показа слайда</string>
-  <string id="226">Тестовые шаблоны...</string>
-  <string id="227">Искать имена треков АудиоCD на freedb.org</string>
+  <string id="224">Скорость</string>
+  <string id="225">Вертикальное смещение</string>
+  <string id="226">Тестовые шаблоны…</string>
+  <string id="227">Искать имена треков аудио-CD на freedb.org</string>
   <string id="228">Перемешать плейлист при загрузке</string>
-  <string id="229">Останавливать HDD через (мин)</string>
+  <string id="229">Останавливать HDD через (мин.)</string>
   <string id="230">Видеофильтры</string>
-  <string id="231">Ð\9fÑ\83Ñ\81Ñ\82о</string>
+  <string id="231">Ð\9dеÑ\82</string>
   <string id="232">Точка</string>
   <string id="233">Линейный</string>
   <string id="234">Анизотропный</string>
   <string id="236">Кубический по Гауссу</string>
   <string id="237">Уменьшение</string>
   <string id="238">Увеличение</string>
-  <string id="239">Очищать плейлист после проигрывания </string>
-  <string id="240">Режим экрана</string>
+  <string id="239">Очищать плейлист после проигрывания</string>
+  <string id="240">Режим дисплея</string>
   <string id="241">Полный экран #%d</string>
   <string id="242">В окне</string>
-  <string id="243">ЧаÑ\81Ñ\82оÑ\82а Ð\9eбновления</string>
+  <string id="243">ЧаÑ\81Ñ\82оÑ\82а Ð¾бновления</string>
   <string id="244">Полный экран</string>
-  <string id="245">Размер: (%i,%i)-&gt;(%i,%i) (Увеличение x%2.2f) Соотношение:%2.2f:1 (Пикселей: %2.2f:1)</string>
+  <string id="245">Размер: (%i,%i)->(%i,%i) (Увеличение x%2.2f) Соотношение:%2.2f:1 (Пикселей: %2.2f:1) (Верт. смещение: %2.2f)</string>
+
   <string id="247">Скрипты</string>
   <string id="248">Язык</string>
   <string id="249">Музыка</string>
-  <string id="250">Ð\92идео Ñ\8dÑ\84Ñ\84екÑ\82Ñ\8b</string>
+  <string id="250">Ð\92изÑ\83ализаÑ\86иÑ\8f</string>
   <string id="251">Выберите папку назначения</string>
-  <string id="252">- выводить стерео на все динамики</string>
+  <string id="252">Выводить стерео на все динамики</string>
   <string id="253">Количество каналов</string>
-  <string id="254">- выводить звук в формате DTS®</string>
-  <string id="256">Запрос данных о CD</string>
+  <string id="254">- Выводить звук в формате DTS</string>
+  <string id="255">CDDB</string>
+  <string id="256">Получение данных о CD…</string>
   <string id="257">Ошибка</string>
   <string id="258">Читать информацию из тэгов</string>
-  <string id="259">Открытие</string>
-  <string id="261">Ожидание запуска....</string>
-  <string id="262">Лог работы скриптов</string>
-  <string id="263">Разрешить контроль XBMC через HTTP</string>
+  <string id="259">Открытие…</string>
+  <string id="260">Shoutcast</string>
+  <string id="261">Ожидание запуска…</string>
+  <string id="262">Журнал работы скриптов</string>
+  <string id="263">Разрешить управление XBMC по HTTP</string>
   <string id="264">Запись</string>
   <string id="265">Остановить запись</string>
-  <string id="266">Сорт. по: Треку</string>
-  <string id="267">Сорт. по: Времени</string>
-  <string id="268">Сорт. по: Названию</string>
-  <string id="269">Сорт. по: Исполнителю</string>
-  <string id="270">Сорт. по: Альбому</string>
+  <string id="266">Сорт. по трекам</string>
+  <string id="267">Сорт. по времени</string>
+  <string id="268">Сорт. по названию</string>
+  <string id="269">Сорт. по исполнителю</string>
+  <string id="270">Сорт. по альбомам</string>
   <string id="271">Топ 100</string>
   <string id="272">Настройка размеров экрана (левый верхний угол)</string>
   <string id="273">Настройка размеров экрана (правый нижний угол)</string>
   <string id="276">Двигайте стрелки для регулировки размеров экрана</string>
   <string id="277">Двигайте полоску, чтобы изменить позицию субтитров</string>
   <string id="278">Измените прямоугольник так, чтобы добиться идеального квадрата</string>
-  <string id="279">Невозможно загрузить настройки</string>
-  <string id="280">Использование стандартных настроек</string>
-  <string id="281">Пожалуйста, проверьте .xml-файлы</string>
-  <string id="282">Найдено %i объект(-ов)</string>
+  <string id="279">Не удалось загрузить настройки</string>
+  <string id="280">Используются стандартные настройки</string>
+  <string id="281">Проверьте файлы XML</string>
+  <string id="282">Найдено объектов: %i</string>
   <string id="283">Результаты поиска</string>
   <string id="284">Ничего не найдено</string>
-  <string id="286">Фильтр постобработки</string>
+
   <string id="287">Субтитры</string>
   <string id="288">Шрифт</string>
   <string id="289">- Размер</string>
   <string id="290">Сжатие динамического диапазона</string>
   <string id="291">Видео</string>
-  <string id="292">Ð\97вÑ\83к</string>
+  <string id="292">Ð\90Ñ\83дио</string>
   <string id="293">Выбрать субтитры</string>
-  <string id="294">Ð\9fоÑ\81Ñ\82авить закладку</string>
+  <string id="294">Создать закладку</string>
   <string id="296">Очистить закладки</string>
   <string id="297">Смещение звука</string>
   <string id="298">Закладки</string>
-  <string id="299">- Ð²ыводить звук в формате AAC</string>
-  <string id="300">- Ð²ыводить звук в формате MP1</string>
-  <string id="301">- Ð²ыводить звук в формате MP2</string>
-  <string id="302">- Ð²ыводить звук в формате MP3</string>
+  <string id="299">- Ð\92ыводить звук в формате AAC</string>
+  <string id="300">- Ð\92ыводить звук в формате MP1</string>
+  <string id="301">- Ð\92ыводить звук в формате MP2</string>
+  <string id="302">- Ð\92ыводить звук в формате MP3</string>
   <string id="303">Задержка</string>
   <string id="304">Язык</string>
-  <string id="305">Включено</string>
-  <string id="307">- автоматическая постобработка</string>
-  <string id="308">- вертикальный Deblocking-фильтр</string>
-  <string id="309">- горизонтальный Deblocking-фильтр</string>
-  <string id="310">- Авто яркость/контрастность</string>
-  <string id="311">- Подавление отражений</string>
+  <string id="305">Вкл.</string>
+  <string id="306">Без чередования</string>
+
   <string id="312">(0=авто)</string>
-  <string id="313">Очистка базы данных</string>
-  <string id="314">Подготовка...</string>
+  <string id="313">Очистка базы данных</string>
+  <string id="314">Подготовка</string>
   <string id="315">Ошибка базы данных</string>
-  <string id="316">Поиск песен...</string>
+  <string id="316">Поиск песен</string>
   <string id="317">Очистка базы данных выполнена</string>
-  <string id="318">Очистка песен...</string>
+  <string id="318">Очистка песен</string>
   <string id="319">Ошибка очистки песен</string>
-  <string id="320">Очистка исполнителей...</string>
+  <string id="320">Очистка исполнителей</string>
   <string id="321">Ошибка очистки исполнителей</string>
-  <string id="322">Очистка жанров...</string>
+  <string id="322">Очистка жанров</string>
   <string id="323">Ошибка очистки жанров</string>
   <string id="324">Очистка путей...</string>
   <string id="325">Ошибка очистки путей</string>
-  <string id="326">Очистка альбомов...</string>
+  <string id="326">Очистка альбомов</string>
   <string id="327">Ошибка очистки альбомов</string>
-  <string id="328">Запись изменений...</string>
+  <string id="328">Запись изменений</string>
   <string id="329">Ошибка записи изменений</string>
-  <string id="330">Это займет некоторое время...</string>
-  <string id="331">Сжатие базы данных...</string>
+  <string id="330">Это займет некоторое время</string>
+  <string id="331">Сжатие базы данных</string>
   <string id="332">Ошибка сжатия базы данных</string>
-  <string id="333">Ð\92Ñ\8b Ñ\85оÑ\82иÑ\82е Ð¾чистить медиатеку?</string>
-  <string id="334">Очистка медиатеки...</string>
+  <string id="333">Ð\9eчистить медиатеку?</string>
+  <string id="334">Очистка медиатеки</string>
   <string id="335">Старт</string>
   <string id="336">Преобразование частоты кадров</string>
-  <string id="337">ФоÑ\80маÑ\82 Ð°Ñ\83диовÑ\8bÑ\85ода</string>
+  <string id="337">Ð\92Ñ\8bвод Ð·Ð²Ñ\83ка</string>
   <string id="338">Аналоговый</string>
   <string id="339">Цифровой</string>
   <string id="340">Различные исполнители</string>
   <string id="343">Настроить частоту кадров</string>
   <string id="344">Актеры</string>
   <string id="345">Год</string>
-  <string id="346">Ð\97авышать громкость при смешивании</string>
+  <string id="346">Ð\9fовышать громкость при смешивании</string>
   <string id="350">Программы</string>
-  <string id="351">оÑ\82клÑ\8eÑ\87ено</string>
+  <string id="351">Ð\92Ñ\8bкл.</string>
   <string id="352">Затемнение</string>
   <string id="353">Черный экран</string>
-  <string id="354">Следы 'Матрицы'</string>
+  <string id="354">Следы "Матрицы"</string>
   <string id="355">Включать заставку через</string>
   <string id="356">Заставка</string>
   <string id="357">Завершить работу через</string>
   <string id="358">Все альбомы</string>
-  <string id="359">Свежие альбомы</string>
+  <string id="359">Ð\9fоÑ\81ледние альбомы</string>
   <string id="360">Заставка</string>
-  <string id="361">Рекурс. Слайдшоу</string>
+  <string id="361">Рекурс. слайд-шоу</string>
   <string id="362">Уровень затемнения экрана</string>
-  <string id="363">Сорт. по: Файлу</string>
-  <string id="364">- выводить звук в формате Dolby Digital® (AC3)</string>
-  <string id="365">Сорт. по: Имени</string>
-  <string id="366">Сорт. по: Году</string>
-  <string id="367">Сорт. по: Рейтингу</string>
+  <string id="363">Сорт. по файлам</string>
+  <string id="364">- Выводить звук в формате Dolby Digital (AC3)</string>
+  <string id="365">Сорт. по имени</string>
+  <string id="366">Сорт. по году</string>
+  <string id="367">Сорт. по рейтингу</string>
+  <string id="368">IMDb</string>
   <string id="369">Название</string>
   <string id="370">грозы</string>
-  <string id="371">Ð\9cестами</string>
-  <string id="372">Ð\9fреимущественно</string>
-  <string id="373">Солнечно</string>
-  <string id="374">Ð\9eблачно</string>
-  <string id="375">Снег</string>
-  <string id="376">Ð\94ождь</string>
-  <string id="377">Ð\9dеболÑ\8cÑ\88ой</string>
+  <string id="371">местами</string>
+  <string id="372">преимущественно</string>
+  <string id="373">солнечно</string>
+  <string id="374">облачно</string>
+  <string id="375">снег</string>
+  <string id="376">дождь</string>
+  <string id="377">неболÑ\8cÑ\88.</string>
   <string id="378">Утром</string>
-  <string id="379">Днём</string>
-  <string id="380">Ливни</string>
+  <string id="379">Днем</string>
+  <string id="380"> </string>
   <string id="381">немного</string>
-  <string id="382">Ð\9cестами</string>
-  <string id="383">Ð\92етер</string>
-  <string id="384">Сильный</string>
-  <string id="385">ЯÑ\81но</string>
-  <string id="386">Безоблачно</string>
-  <string id="387">Ð\9eблачно</string>
-  <string id="388">Ранние</string>
-  <string id="389">Ð\9eбилÑ\8cнÑ\8bй</string>
-  <string id="390">Швалистый</string>
+  <string id="382">местами</string>
+  <string id="383">ветер</string>
+  <string id="384">сильный</string>
+  <string id="385">безоблаÑ\87но</string>
+  <string id="386">ясно</string>
+  <string id="387">облачно</string>
+  <string id="388">ранние</string>
+  <string id="389">ливенÑ\8c</string>
+  <string id="390">снегопад</string>
   <string id="391">Мин.</string>
-  <string id="392">Среднее</string>
+  <string id="392">Средн.</string>
   <string id="393">Макс.</string>
-  <string id="394">Туман</string>
-  <string id="395">Ð\94ымка</string>
-  <string id="396">Ð\9cестность</string>
+  <string id="394">туман</string>
+  <string id="395">дымка</string>
+  <string id="396">Ð\92Ñ\8bбеÑ\80иÑ\82е Ð¼естность</string>
   <string id="397">Время обновления</string>
   <string id="398">Единица измерения температуры</string>
   <string id="399">Единица измерения скорости ветра</string>
   <string id="404">Ветер</string>
   <string id="405">Точка росы</string>
   <string id="406">Влажность</string>
-  <string id="407">
-  </string>
-  <string id="408">
-  </string>
+
   <string id="409">По умолчанию</string>
-  <string id="410">Подключение к Гидрометеоцентру</string>
+  <string id="410">Подключение к службе погоды…</string>
   <string id="411">Получение прогноза для:</string>
-  <string id="412">Невозможно получить прогноз</string>
+  <string id="412">Не удалось получить прогноз</string>
   <string id="413">Вручную</string>
   <string id="414">Нет описания этого альбома</string>
-  <string id="415">Загрузка эскизов...</string>
+  <string id="415">Загрузка эскизов</string>
   <string id="416">Нет данных</string>
-  <string id="417">Ð\92ид: Ð\97наÑ\87ки ÐºÑ\80Ñ\83пн.</string>
+  <string id="417">Ð\92ид: ÐºÑ\80Ñ\83пн. Ð·Ð½Ð°Ñ\87ки</string>
   <string id="418">Мин.</string>
-  <string id="419">Макс</string>
-  <string id="422">Удалить данные об альбоме</string>
-  <string id="423">Удалить данные о CD</string>
+  <string id="419">Макс.</string>
+  <string id="420">HDMI</string>
+
+  <string id="422">Удалить сведения об альбоме</string>
+  <string id="423">Удалить сведения о CD</string>
   <string id="424">Выбор</string>
-  <string id="425">Ð\94аннÑ\8bе об альбоме не найдены</string>
-  <string id="426">Ð\94аннÑ\8bе о CD не найдены</string>
+  <string id="425">СведениÑ\8f об альбоме не найдены</string>
+  <string id="426">СведениÑ\8f о CD не найдены</string>
   <string id="427">Диск</string>
-  <string id="428">Вставьте правильный CD/DVD диск</string>
-  <string id="429">Вставьте следующий CD/DVD диск</string>
-  <string id="430">Сорт. по: №DVD</string>
+  <string id="428">Вставьте правильный CD/DVD-диск</string>
+  <string id="429">Вставьте следующий диск:</string>
+  <string id="430">Сорт. по № DVD</string>
   <string id="431">Не кэшировать</string>
   <string id="432">Удалить фильм из медиатеки</string>
-  <string id="433">Действительно удалить '%s'?</string>
-  <string id="434">С %s на %i %s</string>
+  <string id="433">Действительно удалить[CR]"%s"?</string>
+  <string id="434">%s, %i %s</string> <!--From <wind dir.> at <speed> <unit>-->
+
   <string id="437">Съемный диск</string>
-  <string id="438">Открытие файла</string>
+  <string id="438">Открытие файла</string>
   <string id="439">Буферизация</string>
   <string id="440">Жесткий диск</string>
+  <string id="441">UDF</string>
   <string id="442">Локальная сеть</string>
   <string id="443">Интернет</string>
   <string id="444">Видео</string>
   <string id="445">Аудио</string>
+  <string id="446">DVD</string>
   <string id="447">Автозапуск</string>
   <string id="448">LCD-экран</string>
-  <string id="449">Включено</string>
+  <string id="449">Вкл.</string>
   <string id="450">Количество знакомест в строке</string>
   <string id="451">Адрес 1-ой строки</string>
   <string id="452">Адрес 2-ой строки</string>
   <string id="465">Контрастность</string>
   <string id="466">Гамма</string>
   <string id="467">Тип</string>
-  <string id="468">Двигайте полоску чтобы изменить положение экранного меню (OSD)</string>
-  <string id="469">Ð\9fозиÑ\86иÑ\8f экранного меню (OSD)</string>
+  <string id="468">Двигайте полоску, чтобы изменить положение экранного меню (OSD)</string>
+  <string id="469">Ð\9fоложение экранного меню (OSD)</string>
   <string id="470">Создатели</string>
   <string id="471">МOD-чип</string>
-  <string id="474">Выключено</string>
+  <string id="474">Выкл.</string>
   <string id="475">Только музыка</string>
-  <string id="476">Музыка &amp; видео</string>
-  <string id="477">Невозможно загрузить плейлист</string>
+  <string id="476">Музыка и видео</string>
+  <string id="477">Не удалось загрузить плейлист</string>
   <string id="478">Экранное меню (OSD)</string>
-  <string id="479">Оформление и язык</string>
+  <string id="479">Обложка и язык</string>
   <string id="480">Внешний вид</string>
-  <string id="481">Настройки аудио</string>
-  <string id="482">Об XBMC</string>
+  <string id="481">Параметры аудио</string>
+  <string id="482">О XBMC</string>
+
   <string id="485">Удалить альбом</string>
   <string id="486">Повторять</string>
   <string id="487">Повторить 1 раз</string>
   <string id="488">Повтор папки</string>
   <string id="489">Проигрывать следующий файл автоматически</string>
-  <string id="491">- Ð¸спользовать большие значки</string>
+  <string id="491">- Ð\98спользовать большие значки</string>
   <string id="492">Масштабировать субтитры</string>
-  <string id="493">РаÑ\81Ñ\88иÑ\80еннÑ\8bе Ð¾Ð¿Ñ\86ии (только для экспертов!)</string>
+  <string id="493">РаÑ\81Ñ\88иÑ\80еннÑ\8bе Ð¿Ð°Ñ\80амеÑ\82Ñ\80Ñ\8b (только для экспертов!)</string>
   <string id="494">Общий уровень шума в комнате (dB)</string>
-  <string id="495">Ð\9fеÑ\80еÑ\81Ñ\87иÑ\82Ñ\8bвать видео до разрешения GUI</string>
+  <string id="495">Ð\9cаÑ\81Ñ\88Ñ\82абиÑ\80овать видео до разрешения GUI</string>
   <string id="496">Калибровка</string>
   <string id="497">Показывать расширения файлов</string>
-  <string id="498">Сорт. по: Типу</string>
-  <string id="499">Невозможно соединиться с поисковым сервисом</string>
-  <string id="500">Неудачная загрузка данных об альбоме</string>
-  <string id="501">Проверка названий альбомов...</string>
-  <string id="502">Открыт</string>
-  <string id="503">Ð\9eбÑ\80абоÑ\82ка...</string>
+  <string id="498">Сорт. по типу</string>
+  <string id="499">Не удалось подключиться к поисковой службе</string>
+  <string id="500">Не удалось загрузить данные об альбоме</string>
+  <string id="501">Поиск названий альбомов…</string>
+  <string id="502">Открыть</string>
+  <string id="503">Ð\96диÑ\82еâ\80¦</string>
   <string id="504">Пуст</string>
-  <string id="505">Загрузка информации из файлов...</string>
-  <string id="507">Сорт. по Частоте</string>
-  <string id="510">Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c Ð²Ð¸Ð´ÐµÐ¾ Ñ\8dÑ\84Ñ\84екÑ\82Ñ\8b</string>
-  <string id="511">Автопереключение PAL/NTSC</string>
-  <string id="512">Ð\9eкно Ð·Ð°Ð¿Ñ\83Ñ\81ка</string>
+  <string id="505">Загрузка информации из файлов</string>
+  <string id="507">Сорт. по частоте</string>
+  <string id="510">Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c Ð²Ð¸Ð·Ñ\83ализаÑ\86иÑ\8e</string>
+  <string id="511">Автопереключение видеорежима</string>
+  <string id="512">СÑ\82аÑ\80Ñ\82овое Ð¾ÐºÐ½Ð¾</string>
   <string id="513">Главное меню</string>
   <string id="514">Настройки</string>
   <string id="515">Жанр</string>
+
   <string id="517">Недавно прослушанные альбомы</string>
   <string id="518">Запустить</string>
   <string id="519">Запустить в режиме…</string>
-  <string id="520">Изменить заголовок XBE</string>
+
   <string id="521">Сборники</string>
   <string id="522">Удалить источник</string>
-  <string id="523">Перейти к разделу...</string>
+  <string id="523">Перейти к разделу</string>
   <string id="524">Выбрать плейлист</string>
-  <string id="525">Создать новый плейлист...</string>
+  <string id="525">Создать новый плейлист</string>
   <string id="526">Добавить в плейлист</string>
   <string id="527">Добавить в медиатеку</string>
   <string id="528">Введите название</string>
-  <string id="529">Ð\9eÑ\88ибка: Ð\9eдинаковые названия</string>
+  <string id="529">Ð\9eÑ\88ибка: Ð¾динаковые названия</string>
   <string id="530">Выберите жанр</string>
   <string id="531">Новый жанр</string>
   <string id="532">Ручное добавление</string>
   <string id="534">Вид: %s</string>
   <string id="535">Список</string>
   <string id="536">Значки</string>
-  <string id="537">Ð\9fолнÑ\8bй список</string>
+  <string id="537">ШиÑ\80окий список</string>
   <string id="538">Крупные значки</string>
   <string id="539">Широкий</string>
   <string id="540">Широкий крупн.</string>
   <string id="541">Значки альбомов</string>
   <string id="542">Значки DVD</string>
-  <string id="544">Сведения</string>
+  <string id="543">DVD</string>
+  <string id="544">Информация</string>
   <string id="545">Устройство вывода звука</string>
-  <string id="546">Устройство передачи звука</string>
+  <string id="546">Устройство прямого вывода звука</string>
   <string id="547">Для этого исполнителя нет биографии</string>
   <string id="548">Сводить многоканальный звук в стерео</string>
-  <string id="550">Сорт. по: %s </string>
-  <string id="551">Названию</string>
-  <string id="552">Дате</string>
-  <string id="553">Размеру</string>
-  <string id="554">№ Трека</string>
+
+  <string id="550">Сорт. по: %s</string>
+  <string id="551">Название</string>
+  <string id="552">Дата</string>
+  <string id="553">Размер</string>
+  <string id="554">№ трека</string>
   <string id="555">Время</string>
   <string id="556">Название</string>
   <string id="557">Исполнитель</string>
   <string id="558">Альбом</string>
   <string id="559">Плейлист</string>
-  <string id="561">Имени файла</string>
+  <string id="560">ID</string>
+  <string id="561">Файл</string>
   <string id="562">Год</string>
   <string id="563">Рейтинг</string>
   <string id="564">Тип</string>
   <string id="565">Частота</string>
   <string id="566">Исполнитель альбома</string>
   <string id="567">Кол-во проигрываний</string>
-  <string id="568">Ð\9fоÑ\81ледний Ð¿Ñ\80оигÑ\80аннÑ\8bй</string>
-  <string id="569">Коммент.</string>
+  <string id="568">Ð\9fоÑ\81леднее Ð¿Ñ\80оигÑ\80Ñ\8bвание</string>
+  <string id="569">Комментарий</string>
   <string id="570">Дата добавления</string>
   <string id="571">По умолчанию</string>
-  <string id="572">Ð\9aиноÑ\81тудия</string>
+  <string id="572">Студия</string>
   <string id="573">Путь</string>
   <string id="574">Страна</string>
-  <string id="575">В процессе</string>
+  <string id="575">Неоконченные</string>
+  <string id="576">Кол-во проигрываний</string>
+
   <string id="580">Направление сортировки</string>
   <string id="581">Метод сортировки</string>
   <string id="582">Режим просмотра</string>
   <string id="583">Помнить параметры отображения каждой папки</string>
   <string id="584">По возрастанию</string>
   <string id="585">По убыванию</string>
-  <string id="586">Исправить плейлист</string>
+  <string id="586">Изменить плейлист</string>
   <string id="587">Фильтр</string>
-  <string id="588">Отключить режим 'party'</string>
-  <string id="589">Режим 'party'</string>
+  <string id="588">Отключить режим "party"</string>
+  <string id="589">Режим "party"</string>
   <string id="590">Случайно</string>
-  <string id="591">Выключено</string>
-  <string id="592">Один</string>
-  <string id="593">Все</string>
-  <string id="594">Выключено</string>
-  <string id="595">Повтор: Выключен</string>
-  <string id="596">Повтор: Один трек</string>
-  <string id="597">Повтор: Все треки</string>
-  <string id="600">Оцифровать AudioCD</string>
+  <string id="591">Выкл.</string>
+  <string id="592">Один трек</string>
+  <string id="593">Все треки</string>
+  <string id="594">Выкл.</string>
+  <string id="595">Повтор: выкл.</string>
+  <string id="596">Повтор: один трек</string>
+  <string id="597">Повтор: все треки</string>
+
+  <string id="600">Оцифровать аудио-CD</string>
   <string id="601">Среднее</string>
   <string id="602">Стандартное</string>
-  <string id="603">ЭкÑ\81Ñ\82Ñ\80емальное</string>
+  <string id="603">Ð\9cакÑ\81имальное</string>
   <string id="604">Постоянный битрейт</string>
-  <string id="605">Оцифровка...</string>
+  <string id="605">Оцифровка…</string>
+
   <string id="607">В:</string>
-  <string id="608">Ð\9eÑ\86иÑ\84Ñ\80оваÑ\82Ñ\8c CD Ð¸Ð»Ð¸ Ñ\82Ñ\80ек Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾</string>
-  <string id="609">Ð\97наÑ\87ение CDDARipPath Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð¾</string>
+  <string id="608">Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð¾Ñ\86иÑ\84Ñ\80оваÑ\82Ñ\8c CD Ð¸Ð»Ð¸ Ñ\82Ñ\80ек</string>
+  <string id="609">Ð\9fÑ\83Ñ\82Ñ\8c Ð´Ð»Ñ\8f Ð¾Ñ\86иÑ\84Ñ\80овки CD Ð½Ðµ Ð·Ð°Ð´Ð°Ð½</string>
   <string id="610">Оцифровать аудиотрек</string>
   <string id="611">Введите номер</string>
-  <string id="612">Бит/Сэмпл</string>
-  <string id="613">Частота Сэмплирования</string>
-  <string id="620">Аудио диски</string>
+  <string id="612">Бит/сэмпл</string>
+  <string id="613">Частота сэмплирования</string>
+
+  <string id="620">Аудио-CD</string>
   <string id="621">Кодировщик</string>
   <string id="622">Качество</string>
   <string id="623">Битрейт</string>
   <string id="624">Добавить номер трека</string>
-  <string id="625">Все песни </string>
+  <string id="625">Все песни</string>
   <string id="629">Режим просмотра</string>
   <string id="630">Нормальный</string>
   <string id="631">Увеличенный</string>
   <string id="632">Растянутый 4:3</string>
-  <string id="633">Растянутый 14:9</string>
+  <string id="633">Растянутый</string>
   <string id="634">Растянутый 16:9</string>
   <string id="635">Оригинальный размер</string>
-  <string id="636">Ð\9eÑ\81обый</string>
+  <string id="636">Ð\97аданный</string>
   <string id="637">Replay Gain</string>
-  <string id="638">Режим 'Replay Gain'</string>
+  <string id="638">Режим "Replay Gain"</string>
   <string id="639">По уровням трека</string>
   <string id="640">По уровням альбома</string>
   <string id="641">Уровень для файлов с Replay Gain</string>
   <string id="642">Уровень для файлов без Replay Gain</string>
-  <string id="643">Ð\98збегаÑ\82Ñ\8c Ð¸Ñ\81кажений Ð½Ð° Ñ\84айлаÑ\85 с Reply Gain</string>
+  <string id="643">Ð\98збегаÑ\82Ñ\8c Ð¸Ñ\81кажений Ð´Ð»Ñ\8f Ñ\84айлов с Reply Gain</string>
   <string id="644">Удалять черные полосы</string>
   <string id="645">Необходимо распаковать большой файл. Продолжить?</string>
   <string id="646">Удалить из медиатеки</string>
   <string id="647">Экспортировать видео медиатеку</string>
   <string id="648">Импортировать видео медиатеку</string>
-  <string id="649">Импорт</string>
-  <string id="650">Экспорт</string>
+  <string id="649">Импорт</string>
+  <string id="650">Экспорт</string>
   <string id="651">Укажите медиатеку</string>
   <string id="652">Годы</string>
   <string id="653">Обновить медиатеку</string>
   <string id="655">Укажите программу</string>
   <string id="656">Укажите плейлист</string>
   <string id="657">Укажите папку</string>
-  <string id="658">Ð\98нÑ\84оÑ\80маÑ\86ия о песне</string>
+  <string id="658">Сведения о песне</string>
   <string id="659">Нелинейное увеличение</string>
+
   <string id="660">Усиление громкости</string>
   <string id="661">Укажите папку для экспорта</string>
-  <string id="662">Этот файл больше недоступен.</string>
-  <string id="663">ХоÑ\82иÑ\82е Ñ\83далить его из медиатеки?</string>
-  <string id="664">Выбрать Скрипт</string>
+  <string id="662">Этот файл больше не доступен.</string>
+  <string id="663">Удалить его из медиатеки?</string>
+  <string id="664">Выбрать скрипт</string>
   <string id="665">Степень сжатия</string>
-  <string id="700">Очистка медиатеки</string>
-  <string id="701">Удаление старых песен из медиатеки</string>
+
+  <string id="700">Очистка медиатеки…</string>
+  <string id="701">Удаление старых песен из медиатеки…</string>
   <string id="702">Эта папка была просканирована ранее</string>
   <string id="705">Сеть</string>
   <string id="706">- Сервер</string>
-  <string id="708">Использовать HTTP прокси для доступа к интернету</string>
+
+  <string id="708">Использовать HTTP-прокси для доступа к Интернету</string>
+
   <string id="711">Интернет-протокол (IP)</string>
-  <string id="712">Неправильный порт. Должно быть от 1 до 65535.</string>
-  <string id="713">HTTP прокси</string>
+  <string id="712">Неправильный порт. Введите значение от 1 до 65535.</string>
+  <string id="713">HTTP-прокси</string>
+
   <string id="715">- Назначение</string>
   <string id="716">Автоматически (DHCP)</string>
-  <string id="717">Вручную (Static)</string>
-  <string id="718">По умолчанию (из Dashboard)</string>
+  <string id="717">Вручную (статический)</string>
+
   <string id="719">- IP-адрес</string>
   <string id="720">- Маска подсети</string>
-  <string id="721">- Ð\90дÑ\80еÑ\81 Ñ\88лÑ\8eза</string>
-  <string id="722">- Адрес DNS сервера</string>
+  <string id="721">- Ð¨Ð»Ñ\8eз Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e</string>
+  <string id="722">- DNS-сервер</string>
   <string id="723">Сохранить и перезапустить</string>
-  <string id="724">Ð\9dепÑ\80авилÑ\8cнÑ\8bй Ð°Ð´Ñ\80еÑ\81. Ð\94олжно Ð±Ñ\8bÑ\82Ñ\8c в виде AAA.BBB.CCC.DDD</string>
+  <string id="724">Ð\9dепÑ\80авилÑ\8cнÑ\8bй Ð°Ð´Ñ\80еÑ\81. Ð\92ведиÑ\82е Ð·Ð½Ð°Ñ\87ение в виде AAA.BBB.CCC.DDD</string>
   <string id="725">с числами от 0 до 255.</string>
   <string id="726">Изменения не сохранены. Продолжить без сохранения?</string>
-  <string id="727">Web сервер</string>
-  <string id="728">FTP сервер</string>
-  <string id="729">Время по Internet-у</string>
+  <string id="727">Веб-сервер</string>
+  <string id="728">FTP-сервер</string>
+
   <string id="730">- Порт</string>
-  <string id="731">Адрес сервера времени</string>
+
   <string id="732">Сохранить и применить</string>
   <string id="733">- Пароль</string>
   <string id="734">Без пароля</string>
   <string id="735">- Кодировка</string>
   <string id="736">- Стиль</string>
   <string id="737">- Цвет</string>
-  <string id="738">Ð\9eбÑ\8bÑ\87ный</string>
+  <string id="738">Ð\9dоÑ\80малÑ\8cный</string>
   <string id="739">Жирный</string>
   <string id="740">Курсив</string>
   <string id="741">Жирный курсив</string>
   <string id="742">Белый</string>
-  <string id="743">Жёлтый</string>
+  <string id="743">Желтый</string>
   <string id="744">Файлы</string>
   <string id="745">Нет сканированных данных для этого вида</string>
-  <string id="746">Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð²ыключите режим медиатеки</string>
+  <string id="746">Ð\92ыключите режим медиатеки</string>
   <string id="747">Ошибка загрузки картинки</string>
   <string id="748">Изменить путь</string>
   <string id="749">Зеркально</string>
   <string id="750">Вы уверены?</string>
   <string id="751">Удаление источника</string>
+
   <string id="754">Добавить ссылку на программу</string>
   <string id="755">Изменить путь программы</string>
   <string id="756">Изменить название программы</string>
   <string id="757">Изменить глубину пути</string>
-  <string id="759">Вид: Крупный Список</string>
-  <string id="760">Жёлтый</string>
+
+  <string id="759">Вид: широкий список</string>
+  <string id="760">Желтый</string>
   <string id="761">Белый</string>
   <string id="762">Синий</string>
   <string id="763">Светло-зеленый</string>
-  <string id="764">Жёлто-зеленый</string>
+  <string id="764">Желто-зеленый</string>
   <string id="765">Голубой</string>
   <string id="766">Светло-серый</string>
   <string id="767">Серый</string>
+  <!-- strings 768 and 769 reserved for more subtitle colors -->
+
   <string id="770">Ошибка %i: ресурс недоступен</string>
+
   <string id="772">Вывод звука</string>
-  <string id="773">Поиск</string>
-  <string id="774">Папка для слайдшоу</string>
+  <string id="773">Поиск</string>
+  <string id="774">Папка для слайд-шоу</string>
   <string id="775">Сетевой интерфейс</string>
   <string id="776">- Имя беспроводной сети (ESSID)</string>
-  <string id="777">- Ð\9fаÑ\80олÑ\8c Ð´Ð»Ñ\8f Ð±ÐµÑ\81пÑ\80оводной Ñ\81еÑ\82и</string>
+  <string id="777">- Пароль беспроводной сети</string>
   <string id="778">- Безопасность беспроводной сети</string>
   <string id="779">Сохранить и применить настройки сетевого интерфейса</string>
   <string id="780">Без шифрования</string>
-  <string id="784">Применение настроек сетевого интерфейса, подождите...</string>
-  <string id="785">Сетевой интерфейс перезапущен успешно</string>
-  <string id="786">Неудачный запуск сетевого интерфейса</string>
+  <string id="781">WEP</string>
+  <string id="782">WPA</string>
+  <string id="783">WPA2</string>
+  <string id="784">Применение сетевых настроек. Подождите…</string>
+  <string id="785">Сетевой интерфейс перезапущен.</string>
+  <string id="786">Не удалось запустить сетевой интерфейс.</string>
   <string id="787">Интерфейс отключен</string>
-  <string id="788">Сетевой интерфейс успешно отключен</string>
+  <string id="788">Сетевой интерфейс отключен.</string>
   <string id="789">Имя беспроводной сети (ESSID)</string>
+
   <string id="791">Разрешить программам на этой системе управлять XBMC</string>
   <string id="792">Порт</string>
   <string id="793">Диапазон портов</string>
   <string id="794">Разрешить программам на других системах управлять XBMC</string>
-  <string id="795">Задержка начального повтора (ms)</string>
-  <string id="796">Задержка последующих повторов (ms)</string>
+  <string id="795">Задержка начального повтора (мс)</string>
+  <string id="796">Задержка последующих повторов (мс)</string>
   <string id="797">Максимальное количество клиентов</string>
-  <string id="798">Доступ в интернет</string>
-  <string id="850">Введён неверный номер порта</string>
-  <string id="851">Доступный диапазон портов: 1-65535</string>
-  <string id="852">Доступный диапазон портов: 1024-65535</string>
-  <string id="1000">Посмотреть заставку</string>
-  <string id="1001">Невозможно подключиться</string>
-  <string id="1002">XBMC не может подключиться к сети.</string>
+  <string id="798">Доступ[CR]в Интернет</string>
+
+  <string id="850">Неправильный номер порта.</string>
+  <string id="851">Доступный диапазон портов: 1–65535</string>
+  <string id="852">Доступный диапазон портов: 1024–65535</string>
+
+  <string id="998">Добавить музыку…</string>
+  <string id="999">Добавить видео…</string>
+  <string id="1000">- Просмотр</string>
+  <string id="1001">Не удалось подключиться</string>
+  <string id="1002">XBMC не удалось подключиться к сети.</string>
   <string id="1003">Возможно, сеть не подключена.</string>
-  <string id="1004">Добавить в любом случае?</string>
+  <string id="1004">Все равно добавить?</string>
+
   <string id="1006">IP-адрес</string>
-  <string id="1007">Ð\94обавиÑ\82Ñ\8c Ñ\81еÑ\82евое Ñ\80аÑ\81положение</string>
+  <string id="1007">Ð\94обавиÑ\82Ñ\8c Ñ\81еÑ\82евой Ð°Ð´Ñ\80еÑ\81</string>
   <string id="1008">Протокол</string>
   <string id="1009">Адрес сервера</string>
   <string id="1010">Имя сервера</string>
   <string id="1011">Сетевой путь</string>
-  <string id="1012">Ð\94оÑ\81Ñ\82Ñ\83пная папка</string>
+  <string id="1012">Ð\9eбÑ\89ая папка</string>
   <string id="1013">Порт</string>
   <string id="1014">Имя пользователя</string>
   <string id="1015">Укажите сетевой сервер</string>
-  <string id="1016">Введите сетевой адрес сервера</string>
-  <string id="1017">Ð\92ведиÑ\82е Ð¿Ñ\83Ñ\82Ñ\8c Ðº Ñ\81еÑ\80веÑ\80Ñ\83</string>
+  <string id="1016">Введите адрес сервера</string>
+  <string id="1017">Ð\92ведиÑ\82е Ð¿Ñ\83Ñ\82Ñ\8c Ð½Ð° Ñ\81еÑ\80веÑ\80е</string>
   <string id="1018">Введите номер порта</string>
   <string id="1019">Введите имя пользователя</string>
-  <string id="1020">Ð\94обавиÑ\82Ñ\8c Ð¸Ñ\81Ñ\82оÑ\87ник %s</string>
-  <string id="1021">Введите путь или выберите местонахождение файлов</string>
-  <string id="1022">Ð\97адайÑ\82е Ð¸Ð¼Ñ\8f Ð´Ð»Ñ\8f Ñ\8dÑ\82ого Ð¼ÐµÐ´Ð¸Ð°Ð¸Ñ\81Ñ\82оÑ\87ника</string>
-  <string id="1023">Укажите новый источник</string>
-  <string id="1024">Ð\9fÑ\80оÑ\81моÑ\82р</string>
-  <string id="1025">Невозможно получить информацию о папке</string>
-  <string id="1026">Добавить источник</string>
-  <string id="1027">Изменить источник</string>
-  <string id="1028">Ð\98змениÑ\82Ñ\8c Ð¸Ñ\81Ñ\82оÑ\87ник %s </string>
-  <string id="1029">Введите новую метку</string>
-  <string id="1030">УкажиÑ\82е Ð¸Ð·Ð¾Ð±Ñ\80ажение</string>
+  <string id="1020">Ð\94обавление Ð¸Ñ\81Ñ\82оÑ\87ника - %s</string>
+  <string id="1021">Введите путь или укажите расположение файлов</string>
+  <string id="1022">Ð\92ведиÑ\82е Ð¸Ð¼Ñ\8f Ð¼ÐµÐ´Ð¸Ð°-иÑ\81Ñ\82оÑ\87ника.</string>
+  <string id="1023">Укажите новый ресурс</string>
+  <string id="1024">Ð\9eбзор</string>
+  <string id="1025">Не удалось получить информацию о папке</string>
+  <string id="1026">Добавить источник</string>
+  <string id="1027">Изменить источник</string>
+  <string id="1028">Ð\98зменение Ð¸Ñ\81Ñ\82оÑ\87ника - %s</string>
+  <string id="1029">Введите новое название</string>
+  <string id="1030">УкажиÑ\82е ÐºÐ°Ñ\80Ñ\82инкÑ\83</string>
   <string id="1031">Укажите папку с картинками</string>
-  <string id="1032">Ð\94обавиÑ\82Ñ\8c Ñ\81еÑ\82евое Ñ\80аÑ\81положение…</string>
+  <string id="1032">Ð\94обавиÑ\82Ñ\8c Ñ\81еÑ\82евой Ð°Ð´Ñ\80еÑ\81…</string>
   <string id="1033">Укажите файл</string>
   <string id="1034">Подменю</string>
   <string id="1035">Включить пункты подменю</string>
   <string id="1037">Видео дополнения</string>
   <string id="1038">Музыкальные дополнения</string>
   <string id="1039">Фото дополнения</string>
-  <string id="1040">Загрузка папки</string>
-  <string id="1041">Ð\92оÑ\81Ñ\81Ñ\82ановлено %i Ð¾Ð±Ñ\8aекÑ\82(-ов)</string>
-  <string id="1042">Ð\92оÑ\81Ñ\81Ñ\82ановлено %i Ð¸Ð· %i Ð¾Ð±Ñ\8aекÑ\82(-ов)</string>
+  <string id="1040">Загрузка папки</string>
+  <string id="1041">Ð\9fолÑ\83Ñ\87ено Ð¾Ð±Ñ\8aекÑ\82ов: %i</string>
+  <string id="1042">Ð\9fолÑ\83Ñ\87ено Ð¾Ð±Ñ\8aекÑ\82ов: %i Ð¸Ð· %i</string>
   <string id="1043">Программные дополнения</string>
   <string id="1044">Задать эскиз для дополнения</string>
   <string id="1045">Настройки дополнения</string>
   <string id="1046">Точки доступа</string>
-  <string id="1047">Прочее...</string>
+  <string id="1047">Прочее</string>
   <string id="1048">- Имя пользователя</string>
   <string id="1049">Настройки скриптов</string>
   <string id="1050">Синглы</string>
-  <string id="1051">Введите веб адрес</string>
+  <string id="1051">Введите веб-адрес</string>
+
   <string id="1200">SMB-клиент</string>
   <string id="1202">Рабочая группа</string>
   <string id="1203">Имя пользователя по умолчанию</string>
   <string id="1204">Пароль пользователя по умолчанию</string>
-  <string id="1207">WINS сервер</string>
-  <string id="1208">Монтировать SMB ресурсы</string>
+
+  <string id="1207">WINS-сервер</string>
+  <string id="1208">Монтировать SMB-ресурсы</string>
+
   <string id="1210">Удалить</string>
   <string id="1211">Музыка</string>
   <string id="1212">Видео</string>
   <string id="1213">Фотографии</string>
   <string id="1214">Файлы</string>
-  <string id="1215">Музыка и видео</string>
+  <string id="1215">Музыка и видео </string>
   <string id="1216">Музыка и фото</string>
   <string id="1217">Музыка и файлы</string>
   <string id="1218">Видео и фото</string>
   <string id="1232">Музыка, видео, фото и программы</string>
   <string id="1233">Программы, видео и музыка</string>
   <string id="1234">Программы, фото и музыка</string>
-  <string id="1235">Программы, фото и видео </string>
-  <string id="1245">Имя пользователя FTP</string>
-  <string id="1246">Пароль пользователя FTP</string>
-  <string id="1247">Пароль успешно установлен</string>
+  <string id="1235">Программы, фото и видео</string>
+
   <string id="1250">Автоопределение</string>
   <string id="1251">Автоопределение системы</string>
   <string id="1252">Псевдоним</string>
+
   <string id="1254">Запрашивать разрешение на подключение</string>
-  <string id="1255">Отправлять логин и пароль для FTP</string>
-  <string id="1256">Интервал для команды 'ping'</string>
-  <string id="1257">Вы хотите подключиться к найденной системе?</string>
-  <string id="1260">Объявлять эти сервисы на другие системы через Zeroconf</string>
+  <string id="1255">Использовать логин и пароль для FTP</string>
+  <string id="1256">Интервал опроса</string>
+  <string id="1257">Подключиться к найденной системе?</string>
+
+  <string id="1260">Объявлять эти сервисы другим системам по Zeroconf</string>
+  <string id="1270">Разрешить XBMC получать содержимое AirPlay</string>
+  <string id="1271">Имя устройства</string>
+  <string id="1272">- Использовать пароль</string>
+
   <string id="1300">Другое аудио устройство</string>
-  <string id="1301">Другое устроство прямого вывода звука</string>
-  <string id="1396">Гололёд</string>
+  <string id="1301">Другое устройство прямого вывода звука</string>
+
+  <string id="1396">гололед</string>
   <string id="1397">и</string>
-  <string id="1398">Ð\97аморозки</string>
-  <string id="1399">Ð\9fоздний</string>
-  <string id="1400">Ð\9cестами</string>
-  <string id="1401">Ð\9bивенÑ\8c Ñ\81 Ð\93розами</string>
-  <string id="1402">Ð\93Ñ\80ом</string>
-  <string id="1403">Солнце</string>
-  <string id="1404">Сильный</string>
+  <string id="1398">заморозки</string>
+  <string id="1399">поздний</string>
+  <string id="1400">местами</string>
+  <string id="1401">ливенÑ\8c Ñ\81 Ð³розами</string>
+  <string id="1402">гÑ\80оза</string>
+  <string id="1403">солнце</string>
+  <string id="1404">сильный</string>
   <string id="1405">в</string>
-  <string id="1406">..</string>
-  <string id="1407">Ð\9eкрестностях</string>
-  <string id="1408">Ð\9bÑ\91д</string>
+  <string id="1406"> </string>
+  <string id="1407">окрестностях</string>
+  <string id="1408">лед</string>
   <string id="1409">кристаллы</string>
-  <string id="1410">Спокойно</string>
+  <string id="1410">спокойно</string>
   <string id="1411">с</string>
   <string id="1412">ветрено</string>
   <string id="1413">дождь</string>
   <string id="1414">гроза</string>
   <string id="1415">дождь</string>
-  <string id="1416">Туманно</string>
-  <string id="1417">Зерна</string>
-  <string id="1418">Грозы</string>
-  <string id="1419">Грозовые ливни</string>
-  <string id="1420">Умеренный</string>
-  <string id="1421">Очень Высокий</string>
-  <string id="1422">Ветрено</string>
-  <string id="1423">Туман</string>
+  <string id="1416">туманно</string>
+  <string id="1417">град</string>
+  <string id="1418">грозы</string>
+  <string id="1419">Ливни с грозами</string>
+  <string id="1420">умеренный</string>
+  <string id="1421">очень высокий</string>
+  <string id="1422">ветрено</string>
+  <string id="1423">туман</string>
+
+  <!-- strings through to 1450 reserved for weather translation -->
+
   <string id="1450">Выключать экран во время простоя</string>
+  <!-- strings through to 1470 reserved for power-saving -->
+
   <string id="2050">Длительность</string>
-  <string id="2100">Скрипт совершил ошибку! : %s</string>
-  <string id="2101">Требуется более новая версия - Смотрите журнал</string>
-  <string id="4501">Включить LCD/VFD дисплей (на панели)</string>
-  <string id="10000">Основной</string>
+
+  <string id="2100">Ошибка скрипта: %s</string>
+  <string id="2101">Требуется более новая версия; см. журнал</string>
+
+  <string id="4501">Включить LCD/VFD-дисплей</string>
+
+  <string id="10000">Главное меню</string>
   <string id="10001">Программы</string>
   <string id="10002">Фотографии</string>
   <string id="10003">Файл-менеджер</string>
   <string id="10004">Настройки</string>
   <string id="10005">Музыка</string>
   <string id="10006">Видео</string>
-  <string id="10007">Ð\98нÑ\84оÑ\80маÑ\86ия о системе</string>
-  <string id="10008">Настройки -&gt; Основные</string>
-  <string id="10009">Настройки -&gt; Экран</string>
-  <string id="10010">Настройки -&gt; Внешний вид -&gt; Калибровка GUI</string>
-  <string id="10011">Настройки -&gt; Видео -&gt; Калибровка экрана </string>
-  <string id="10012">Настройки -&gt; Фотографии</string>
-  <string id="10013">Настройки -&gt; Программы</string>
-  <string id="10014">Настройки -&gt; Погода</string>
-  <string id="10015">Настройки -&gt; Музыка</string>
-  <string id="10016">Настройки -&gt; Система</string>
-  <string id="10017">Настройки -&gt; Видео</string>
-  <string id="10018">Настройки -&gt; Сеть</string>
-  <string id="10019">Настройки -&gt; Внешний вид</string>
+  <string id="10007">Сведения о системе</string>
+  <string id="10008">Настройки - Основные</string>
+  <string id="10009">Настройки - Экран</string>
+  <string id="10010">Настройки - Внешний вид - Калибровка интерфейса</string>
+  <string id="10011">Настройки - Видео - Калибровка дисплея</string>
+  <string id="10012">Настройки - Фотографии</string>
+  <string id="10013">Настройки - Программы</string>
+  <string id="10014">Настройки - Погода</string>
+  <string id="10015">Настройки - Музыка</string>
+  <string id="10016">Настройки - Система</string>
+  <string id="10017">Настройки - Видео</string>
+  <string id="10018">Настройки - Сеть</string>
+  <string id="10019">Настройки - Внешний вид</string>
   <string id="10020">Скрипты</string>
-  <string id="10021">Веб Браузер</string>
+  <string id="10021">Веб-браузер</string>
+
   <string id="10028">Видео/плейлист</string>
-  <string id="10034">Настройки -&gt; Профили</string>
-  <string id="10100">Диалог 'Да/Нет'</string>
+  <string id="10034">Настройки - Профили</string>
+
+  <string id="10100">Диалог "Да/Нет"</string>
   <string id="10101">Диалог выполнения</string>
-  <string id="10210">Поиск субтитров...</string>
-  <string id="10211">Поиск или кэширование субтитров...</string>
-  <string id="10212">завершение</string>
-  <string id="10213">буферизация</string>
+
+  <string id="10210">Поиск субтитров…</string>
+  <string id="10211">Поиск или кэширование субтитров…</string>
+  <string id="10212">завершение…</string>
+  <string id="10213">буферизация…</string>
   <string id="10214">Открытие потока</string>
-  <string id="10500">Музыка/Плейлист</string>
-  <string id="10501">Музыка/Файлы</string>
-  <string id="10502">Музыка/Медиатека</string>
+
+  <string id="10500">Музыка/плейлист</string>
+  <string id="10501">Музыка/файлы</string>
+  <string id="10502">Музыка/медиатека</string>
   <string id="10503">Редактор плейлиста</string>
-  <string id="10504">Top 100 - Песни</string>
-  <string id="10505">Top 100 - Альбомы</string>
+  <string id="10504">Топ 100 - песни</string>
+  <string id="10505">Топ 100 - альбомы</string>
   <string id="10506">Программы</string>
-  <string id="10507">Настройка профиля</string>
+  <string id="10507">Настройка</string>
   <string id="10508">Прогноз погоды</string>
   <string id="10509">Сетевая игра</string>
   <string id="10510">Дополнения</string>
-  <string id="10511">Информация о системе</string>
+  <string id="10511">Сведения о системе</string>
+
   <string id="10516">Музыка - Медиатека</string>
   <string id="10517">Музыка - Текущий плейлист</string>
+
   <string id="10522">Видео - Текущий плейлист</string>
-  <string id="10523">Информация об альбоме</string>
-  <string id="10524">Информация о фильме</string>
+  <string id="10523">Сведения об альбоме</string>
+  <string id="10524">Сведения о фильме</string>
+
   <string id="12000">Диалог выбора</string>
-  <string id="12001">Ð\9cÑ\83зÑ\8bка/Ð\94анные</string>
-  <string id="12002">Диалог 'Ok'</string>
-  <string id="12003">Ð\92идео/Ð\94анные</string>
-  <string id="12004">СкÑ\80ипÑ\82Ñ\8b\94анные</string>
+  <string id="12001">Ð\9cÑ\83зÑ\8bка/данные</string>
+  <string id="12002">Диалог "ОК"</string>
+  <string id="12003">Ð\92идео/данные</string>
+  <string id="12004">СкÑ\80ипÑ\82Ñ\8b´анные</string>
   <string id="12005">Полноэкранное видео</string>
-  <string id="12006">Видео эффекты для аудио </string>
-  <string id="12008">Диалог последовательности файлов</string>
+  <string id="12006">Визуализация аудио</string>
+
+  <string id="12008">Диалог объединения файлов</string>
   <string id="12009">Переиндексация…</string>
-  <string id="12010">Вернуться в раздел 'Музыка'</string>
-  <string id="12011">Вернуться в раздел 'Видео'</string>
-  <string id="12021">Начинать с начала</string>
+  <string id="12010">Вернуться в раздел "Музыка"</string>
+  <string id="12011">Вернуться в раздел "Видео"</string>
+
+  <string id="12021">Начать с начала</string>
   <string id="12022">Продолжить с %s</string>
-  <string id="12023">Проверка существующих трейнеров...</string>
+
+  <string id="12310">0</string>
+  <string id="12311">1</string>
+  <string id="12312">2</string>
+  <string id="12313">3</string>
+  <string id="12314">4</string>
+  <string id="12315">5</string>
+  <string id="12316">6</string>
+  <string id="12317">7</string>
+  <string id="12318">8</string>
+  <string id="12319">9</string>
+  <string id="12320">c</string>
   <string id="12321">Ок</string>
-  <string id="12325">Заблокировано! Введите код...</string>
+  <string id="12322">*</string>
+  <string id="12325">Заблокировано. Введите код…</string>
   <string id="12326">Введите пароль</string>
   <string id="12327">Введите код защиты</string>
   <string id="12328">Введите код разблокирования</string>
-  <string id="12329">или Ð²Ñ\8bбеÑ\80иÑ\82е 'C' для отмены</string>
-  <string id="12330">Ð\9dажимайте нужные кнопки на джойстике,</string>
-  <string id="12331">и Ð·Ð°Ñ\82ем 'Ð\9eÐ\9a', Ð¸Ð»Ð¸ 'Ð\9dазад' для отмены</string>
+  <string id="12329">или Ð½Ð°Ð¶Ð¼Ð¸Ñ\82е "C" для отмены</string>
+  <string id="12330">Ð\9dажмите нужные кнопки на джойстике,</string>
+  <string id="12331">а Ð·Ð°Ñ\82ем "Ð\9eÐ\9a" Ð¸Ð»Ð¸ "Ð\9dазад" для отмены</string>
   <string id="12332">Установить защиту</string>
   <string id="12333">Разблокировать</string>
   <string id="12334">Сбросить защиту</string>
   <string id="12340">Введите новый пароль</string>
   <string id="12341">Повторите новый пароль</string>
   <string id="12342">Неверный пароль,</string>
-  <string id="12343">попÑ\8bÑ\82ок Ð¾Ñ\81Ñ\82алоÑ\81Ñ\8c</string>
+  <string id="12343">оÑ\81Ñ\82алоÑ\81Ñ\8c Ð¿Ð¾Ð¿Ñ\8bÑ\82ок </string>
   <string id="12344">Введенные пароли не совпадают.</string>
   <string id="12345">Доступ запрещен</string>
   <string id="12346">Количество попыток ввода пароля исчерпано.</string>
-  <string id="12347">СейÑ\87аÑ\81 Ñ\81иÑ\81Ñ\82ема Ð±Ñ\83деÑ\82 Ð²Ñ\8bклÑ\8eÑ\87ена.</string>
+  <string id="12347">Система будет выключена.</string>
   <string id="12348">Заблокировано</string>
   <string id="12353">Переустановить защиту</string>
   <string id="12356">Сменить защиту</string>
   <string id="12357">Защита источника</string>
-  <string id="12358">Поле ввода пароля пусто. Повторите ввод.</string>
+  <string id="12358">Пустой пароль. Повторите ввод.</string>
   <string id="12360">Общая защита</string>
-  <string id="12362">Выключить систему если количество неудачных попыток исчерпано</string>
-  <string id="12367">Ð\9aод Ð·Ð°Ñ\89иÑ\82Ñ\8b Ð½ÐµÐ¿Ñ\80авилÑ\8cнÑ\8bй!</string>
-  <string id="12368">Введите правильный код защиты!</string>
+  <string id="12362">Выключить систему, если количество неудачных попыток исчерпано</string>
+  <string id="12367">Ð\9dепÑ\80авилÑ\8cнÑ\8bй ÐºÐ¾Ð´ Ð·Ð°Ñ\89иÑ\82Ñ\8b</string>
+  <string id="12368">Введите правильный код защиты</string>
   <string id="12373">Настройки и файл-менеджер</string>
   <string id="12376">Установить для всех фильмов</string>
   <string id="12377">Это сбросит сохраненные ранее значения.</string>
   <string id="12378">Время показа каждого слайда</string>
   <string id="12379">Эффекты панорамы и увеличения</string>
-  <string id="12383">12-ти часовой</string>
-  <string id="12384">24-х часовой</string>
-  <string id="12385">День/Месяц</string>
-  <string id="12386">Месяц/День</string>
+
+  <string id="12383">12-часовой</string>
+  <string id="12384">24-часовой</string>
+  <string id="12385">День/месяц</string>
+  <string id="12386">Месяц/день</string>
+
   <string id="12390">Время работы системы</string>
   <string id="12391">мин.</string>
-  <string id="12392">час.</string>
-  <string id="12393">дней</string>
+  <string id="12392">ч.</string>
+  <string id="12393">дн.</string>
   <string id="12394">Общее время работы</string>
+  <string id="12395">Уровень батареи</string>
+
   <string id="12600">Погода</string>
+
   <string id="12900">Заставка</string>
-  <string id="12901">Полноэкранная OSD</string>
+  <string id="12901">Полноэкранный OSD</string>
+
   <string id="13000">Система</string>
   <string id="13001">Немедленная остановка HDD</string>
   <string id="13002">Только видео</string>
-  <string id="13003">- Ð·адержка</string>
-  <string id="13004">- Ð¼инимальная длительность файла</string>
+  <string id="13003">- Ð\97адержка</string>
+  <string id="13004">- Ð\9cинимальная длительность файла</string>
   <string id="13005">Выключение</string>
-  <string id="13006">Загрузить Dashboard</string>
-  <string id="13007">Особый путь к Dashboard</string>
+
   <string id="13008">Режим выключения</string>
   <string id="13009">Выход</string>
   <string id="13010">Спящий режим</string>
   <string id="13013">Перезагрузка</string>
   <string id="13014">Свернуть</string>
   <string id="13015">Реакция на кнопку питания</string>
-  <string id="13020">Активна другая сессия, возможно через SSH?</string>
+  <string id="13016">Выключить систему</string>
+
+  <string id="13020">Проверьте, не активна ли другая сессия (напр., SSH).</string>
   <string id="13021">Подключен переносной жесткий диск</string>
   <string id="13022">Небезопасное отключение устройства</string>
   <string id="13023">Устройство отключено успешно</string>
   <string id="13024">Джойстик подключен</string>
   <string id="13025">Джойстик отключен</string>
+
   <string id="13050">Низкий заряд батареи</string>
+
   <string id="13100">Фильтр мерцания</string>
   <string id="13101">По выбору драйвера (требуется перезапуск)</string>
+
   <string id="13105">Вертикальная синхронизация</string>
-  <string id="13106">Ð\9eÑ\82клÑ\8eÑ\87ено</string>
+  <string id="13106">Ð\9eÑ\82клÑ\8eÑ\87ена</string>
   <string id="13107">Только при просмотре видео</string>
-  <string id="13108">Ð\92Ñ\81егда Ð²ÐºÐ»Ñ\8eÑ\87ено</string>
-  <string id="13109">Ð\9fÑ\80овеÑ\80ка Ð¸ Ð¿Ñ\80именение Ñ\80азÑ\80еÑ\88ениÑ\8f</string>
+  <string id="13108">Ð\92Ñ\81егда Ð²ÐºÐ»Ñ\8eÑ\87ена</string>
+  <string id="13109">Ð\9fÑ\80овеÑ\80иÑ\82Ñ\8c Ð¸ Ð¿Ñ\80имениÑ\82Ñ\8c Ñ\80азÑ\80еÑ\88ение</string>
   <string id="13110">Сохранить разрешение?</string>
-  <string id="13111">Вы хотите оставить это разрешение?</string>
+  <string id="13111">Оставить это разрешение?</string>
+
   <string id="13112">Высококачественное масштабирование</string>
   <string id="13113">Отключено</string>
   <string id="13114">Только для SD-содержимого</string>
   <string id="13115">Всегда включено</string>
+
   <string id="13116">Метод масштабирования</string>
-  <string id="13117">Бикубический</string>
+  <string id="13117">Bicubic</string>
+  <string id="13118">Lanczos</string>
+  <string id="13119">Sinc</string>
+  <string id="13120">VDPAU</string>
   <string id="13121">Высококачественное масштабирование VDPAU</string>
   <string id="13122">Преобразование цветов в VDPAU</string>
-  <string id="13130">Гашение экрана</string>
+
+  <string id="13130">Гасить другие дисплеи</string>
   <string id="13131">Отключено</string>
-  <string id="13132">Погасить экраны</string>
-  <string id="13140">Обнаружено активное соединение!</string>
-  <string id="13141">Если вы продолжите, то можете потерять возможность управлять</string>
-  <string id="13142">XBMC. Вы действительно хотите остановить сервер событий?</string>
+  <string id="13132">Погасить дисплеи</string>
+
+  <string id="13140">Обнаружены активные соединения.</string>
+  <string id="13141">В случае продолжения возможна потеря управления</string>
+  <string id="13142">XBMC. Остановить сервер событий?</string>
+
   <string id="13144">Изменить режим пульта Apple?</string>
-  <string id="13145">Если вы сейчас используете пульт Apple, чтобы управлять</string>
-  <string id="13146">XBMC, то изменение этих настроек может отключить</string>
-  <string id="13147">возможность управлять им. Вы хотите продолжить?</string>
+  <string id="13145">Если вы используете пульт Apple для управления</string>
+  <string id="13146">XBMC, изменение этих настроек может отключить</string>
+  <string id="13147">возможность управления. Продолжить?</string>
+
   <string id="13159">Маска подсети</string>
   <string id="13160">Шлюз</string>
   <string id="13161">Основной DNS</string>
-  <string id="13162">Неудачная инициализация</string>
+  <string id="13162">Не удалось инициализировать</string>
+
   <string id="13170">Никогда</string>
   <string id="13171">Немедленно</string>
-  <string id="13172">Через %i сек.</string>
+  <string id="13172">Через %i с.</string>
   <string id="13173">Дата установки HDD:</string>
   <string id="13174">Кол-во циклов включения/выключения HDD:</string>
+
   <string id="13200">Профили</string>
-  <string id="13201">Удалить профиль '%s'?</string>
+  <string id="13201">Удалить профиль "%s"?</string>
+
   <string id="13204">Последний загруженный профиль:</string>
   <string id="13205">Неизвестно</string>
   <string id="13206">Перезаписать</string>
+
   <string id="13208">Таймер напоминаний</string>
-  <string id="13209">Период таймера напоминаний (в минутах)</string>
-  <string id="13210">Запущен, сработает в %im</string>
+  <string id="13209">Период таймера напоминаний (в мин.)</string>
+  <string id="13210">Запущен; сработает через %i мин.</string>
   <string id="13211">НАПОМИНАНИЕ!</string>
-  <string id="13212">Отменено за %im%is до срабатывания</string>
-  <string id="13213">%2.0fм</string>
-  <string id="13214">%2.0fс</string>
-  <string id="13249">Искать субтитры в rar-архивах</string>
-  <string id="13250">Укажите субтитры...</string>
+  <string id="13212">Отменено за %i мин. %i с. до срабатывания</string>
+  <string id="13213">%2.0f мин.</string> <!--minutes (left from countdown)-->
+  <string id="13214">%2.0f с.</string> <!--seconds (left from countdown)-->
+
+  <string id="13249">Искать субтитры в архивах RAR</string>
+  <string id="13250">Выбрать субтитры…</string>
   <string id="13251">Переместить объект</string>
   <string id="13252">Переместить объект сюда</string>
   <string id="13253">Отменить перемещение</string>
+
   <string id="13270">Оборудование:</string>
-  <string id="13271">Загруженность CPU:</string>
-  <string id="13274">Подключено, но DNS сервер недоступен</string>
+  <string id="13271">Загрузка CPU:</string>
+
+  <string id="13274">Подключено, но DNS-сервер недоступен.</string>
   <string id="13275">Жесткий диск</string>
   <string id="13276">Привод DVD</string>
   <string id="13277">Накопители</string>
   <string id="13279">Сеть</string>
   <string id="13280">Видео</string>
   <string id="13281">Оборудование</string>
+
   <string id="13283">Операционная система:</string>
   <string id="13284">Частота CPU:</string>
+
   <string id="13286">Видеокодировщик:</string>
   <string id="13287">Разрешение экрана:</string>
-  <string id="13292">Кабель A/V:</string>
+
+  <string id="13292">Кабель А/В:</string>
+
   <string id="13294">Регион DVD:</string>
   <string id="13295">Интернет:</string>
-  <string id="13296">Подключено</string>
-  <string id="13297">Не подключена. Проверьте настройки сети.</string>
+  <string id="13296">подключен</string>
+  <string id="13297">не подключен. Проверьте настройки сети.</string>
+
   <string id="13299">Поддерживать температуру</string>
   <string id="13300">Скорость вентилятора</string>
   <string id="13301">Автоматический контроль температуры</string>
   <string id="13303">- Шрифты</string>
   <string id="13304">Разрешить обратное направление строк</string>
   <string id="13305">Включить RSS-новости</string>
-  <string id="13306">Показать значок родительской папки</string>
+  <string id="13306">Показывать значок родительской папки</string>
   <string id="13307">Шаблон для имени трека</string>
-  <string id="13308">Ð\92Ñ\8b Ñ\85оÑ\82иÑ\82е Ð¿ерезагрузить систему</string>
+  <string id="13308">Ð\9fерезагрузить систему</string>
   <string id="13309">вместо перезапуска XBMC?</string>
   <string id="13310">Эффект увеличения</string>
   <string id="13311">Эффект скольжения</string>
   <string id="13314">Плавный переход между песнями</string>
   <string id="13315">Обновить эскизы</string>
   <string id="13316">Рекурсивные эскизы</string>
-  <string id="13317">Просмотр слайдшоу</string>
-  <string id="13318">Рекурсивное слайдшоу</string>
+  <string id="13317">Просмотр слайд-шоу</string>
+  <string id="13318">Рекурсивное слайд-шоу</string>
   <string id="13319">Случайно</string>
   <string id="13320">Стерео</string>
-  <string id="13321">только Левый</string>
-  <string id="13322">только Правый</string>
-  <string id="13323">Разрешить поддержку караоке (CD+G)</string>
+  <string id="13321">Только левый</string>
+  <string id="13322">Только правый</string>
+  <string id="13323">Разрешить поддержку караоке</string>
   <string id="13324">Уровень прозрачности фона</string>
   <string id="13325">Уровень прозрачности текста</string>
   <string id="13326">Задержка звука относительно изображения</string>
   <string id="13327">Караоке</string>
   <string id="13328">%s не найден</string>
   <string id="13329">Ошибка открытия %s</string>
-  <string id="13330">Невозможно загрузить %s</string>
-  <string id="13331">Ошибка: не хватает памяти</string>
+  <string id="13330">Не удалось загрузить %s</string>
+  <string id="13331">Ошибка: недостаточно памяти</string>
   <string id="13332">Переместить вверх</string>
   <string id="13333">Переместить вниз</string>
-  <string id="13334">Ð\98змениÑ\82Ñ\8c Ð¼ÐµÑ\82кÑ\83</string>
+  <string id="13334">Ð\98змениÑ\82Ñ\8c Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ</string>
   <string id="13335">Сделать по умолчанию</string>
   <string id="13336">Убрать кнопку</string>
+
   <string id="13340">Оставить как есть</string>
   <string id="13341">Зеленый</string>
   <string id="13342">Оранжевый</string>
   <string id="13343">Красный</string>
   <string id="13344">Циклически</string>
-  <string id="13345">Выключать при проигрывании</string>
-  <string id="13346">Ð\94аннÑ\8bе о фильме</string>
+  <string id="13345">Ð\92Ñ\8bклÑ\8eÑ\87аÑ\82Ñ\8c Ð¸Ð½Ð´Ð¸ÐºÐ°Ñ\82оÑ\80 Ð¿Ñ\80и Ð¿Ñ\80оигÑ\80Ñ\8bвании</string>
+  <string id="13346">СведениÑ\8f о фильме</string>
   <string id="13347">Добавить в плейлист</string>
-  <string id="13348">Ð\9dайÑ\82и Ð² IMDb...</string>
-  <string id="13349">Сканировать новое содержимое</string>
-  <string id="13350">Текущий плейлист...</string>
-  <string id="13351">Ð\94аннÑ\8bе об альбоме</string>
+  <string id="13348">Ð\9fоиÑ\81к Ð² IMDbâ\80¦</string>
+  <string id="13349">Сканировать содержимое</string>
+  <string id="13350">Текущий плейлист</string>
+  <string id="13351">СведениÑ\8f об альбоме</string>
   <string id="13352">Сканировать в медиатеку</string>
   <string id="13353">Остановить сканирование</string>
   <string id="13354">Метод обработки</string>
-  <string id="13355">Пикс.шейдер низ.качества</string>
+  <string id="13355">Пикс. шейдер низк. качества</string>
   <string id="13356">Аппаратное наложение</string>
-  <string id="13357">Пикс.шейдер выс.качества</string>
-  <string id="13358">Ð\92оÑ\81пÑ\80оизвеÑ\81Ñ\82и объект</string>
-  <string id="13359">УÑ\81Ñ\82ановить эскиз исполнителя</string>
+  <string id="13357">Пикс. шейдер высок. качества</string>
+  <string id="13358">Ð\9fÑ\80оигÑ\80аÑ\82Ñ\8c объект</string>
+  <string id="13359">Ð\92Ñ\8bбÑ\80ать эскиз исполнителя</string>
   <string id="13360">Создавать эскизы</string>
   <string id="13361">Включить микрофон</string>
+
   <string id="13375">Включить устройство</string>
   <string id="13376">Громкость</string>
   <string id="13377">Основной режим просмотра</string>
-  <string id="13378">Стандартная Яркость</string>
-  <string id="13379">СÑ\82андаÑ\80Ñ\82наÑ\8f Ð\9aонтрастность</string>
-  <string id="13380">СÑ\82андаÑ\80Ñ\82наÑ\8f Ð\93амма</string>
+  <string id="13378">Стандартная яркость</string>
+  <string id="13379">СÑ\82андаÑ\80Ñ\82наÑ\8f Ðºонтрастность</string>
+  <string id="13380">СÑ\82андаÑ\80Ñ\82наÑ\8f Ð³амма</string>
   <string id="13381">Продолжить видео</string>
   <string id="13382">Маска для голоса 1</string>
   <string id="13383">Маска для голоса 2</string>
   <string id="13386">Позиционировать по времени</string>
   <string id="13387">Правая колонка в списке</string>
   <string id="13388">Предустановка</string>
-  <string id="13389">Для этого видео эффекта
-нет предустановок</string>
-  <string id="13390">Для этого видео эффекта
-нет настроек</string>
-  <string id="13391">Открыть / закрыть</string>
-  <string id="13392">Включать видео эффекты при проигрывании музыки</string>
-  <string id="13393">Вычислить объем</string>
-  <string id="13394">Вычисляется объем папки</string>
+  <string id="13389">Нет предустановок&#10;для этой визуализации</string>
+  <string id="13390">Нет настроек&#10;для этой визуализации</string>
+  <string id="13391">Открыть/закрыть</string>
+  <string id="13392">Включить визуализацию при проигрывании музыки</string>
+  <string id="13393">Вычислить размер</string>
+  <string id="13394">Вычисляется размер папки…</string>
   <string id="13395">Настройки видео</string>
-  <string id="13396">Настройки субтитров и звука</string>
+  <string id="13396">Настройки звука и субтитров</string>
   <string id="13397">Включить субтитры</string>
   <string id="13398">Ярлыки</string>
-  <string id="13399">Не учитывать артикли при сортировке</string>
+  <string id="13399">Не учитывать артикли при сортировке (напр., "the")</string>
   <string id="13400">Переход между песнями в том же альбоме</string>
-  <string id="13401">Ð\9fоиÑ\81к %s</string>
+  <string id="13401">Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c %s</string>
   <string id="13402">Показать позицию трека</string>
   <string id="13403">Очистить по умолчанию</string>
   <string id="13404">Продолжить</string>
-  <string id="13405">Ð\9fолÑ\83Ñ\87иÑ\82Ñ\8c Ñ\8dскиз</string>
-  <string id="13406">Ð\94аннÑ\8bе о фотографии</string>
-  <string id="13407">%s предустановки</string>
+  <string id="13405">Эскиз</string>
+  <string id="13406">СведениÑ\8f о фотографии</string>
+  <string id="13407">Предустановок: %s</string>
   <string id="13408">(Рейтинг пользователей IMDb)</string>
-  <string id="13409">Top 250</string>
+  <string id="13409">Топ 250</string>
   <string id="13410">Настройки Last.fm</string>
   <string id="13411">Минимальная скорость вентиляторов</string>
-  <string id="13413">Загрузка</string>
+  <string id="13412">Проигрывать отсюда</string>
+  <string id="13413">Загрузка…</string>
   <string id="13414">Включать исполнителей из сборников</string>
   <string id="13415">Метод обработки</string>
   <string id="13416">Автоопределение</string>
-  <string id="13417">Ð\9eÑ\81новные шейдеры (ARB)</string>
-  <string id="13418">Ð\94ополниÑ\82елÑ\8cные шейдеры (GLSL)</string>
+  <string id="13417">Ð\91азовые шейдеры (ARB)</string>
+  <string id="13418">РаÑ\81Ñ\88иÑ\80енные шейдеры (GLSL)</string>
   <string id="13419">Программный</string>
-  <string id="13420">Удалить безопасно</string>
+  <string id="13420">Безопасное удаление</string>
+  <string id="13421">VDPAU</string>
   <string id="13422">Начать слайдшоу отсюда</string>
   <string id="13423">Запомнить путь</string>
   <string id="13424">Использовать объекты пиксельного буфера</string>
   <string id="13428">Включить аппаратное ускорение (CrystalHD)</string>
   <string id="13429">Включить аппаратное ускорение (VDADecoder)</string>
   <string id="13430">Включить аппаратное ускорение (OpenMax)</string>
-  <string id="13431">Пиксельные Шейдеры</string>
-  <string id="13500">Метод синхронизации A/V</string>
-  <string id="13501">по частоте звука</string>
-  <string id="13502">по частоте видео (пропускать / дублировать звук)</string>
-  <string id="13503">по частоте видео (преобразовывать звук)</string>
+  <string id="13431">Пиксельные шейдеры</string>
+  <string id="13432">Включить аппаратное ускорение (VideoToolbox)</string>
+
+  <string id="13500">Синхронизация А/В</string>
+  <string id="13501">По частоте звука</string>
+  <string id="13502">По частоте видео (пропуск/дублирование звука)</string>
+  <string id="13503">По частоте видео (преобразование звука)</string>
   <string id="13504">Максимальная величина преобразования (%)</string>
   <string id="13505">Качество преобразования</string>
-  <string id="13506">Низкое</string>
+  <string id="13506">Низкое (быстро)</string>
   <string id="13507">Среднее</string>
   <string id="13508">Высокое</string>
-  <string id="13509">Действительно высокое</string>
-  <string id="13510">Синхронизировать с частотой экрана</string>
-  <string id="13600">Пульт Apple</string>
-  <string id="13602">Всегда работает</string>
-  <string id="13603">Время задержки последовательности</string>
-  <string id="13610">Отключено</string>
+  <string id="13509">Очень высокое (медленно!)</string>
+  <string id="13510">Синхронизировать видео с частотой дисплея</string>
+
+  <string id="13550">Пауза для смены частоты дисплея</string>
+  <string id="13551">Выкл.</string>
+  <string id="13552">%.1f с.</string>
+  <string id="13553">%.1f с.</string>
+
+  <string id="13600">ДУ Apple</string>
+
+  <string id="13602">Разрешить запуск XBMC с ДУ</string>
+  <string id="13603">Интервал последовательности</string>
+
+  <string id="13610">Откл.</string>
   <string id="13611">Стандартный</string>
-  <string id="13612">Универсальный пульт</string>
-  <string id="13613">Мульти-пульт (Harmony)</string>
-  <string id="13620">Ошибка пульта Apple</string>
-  <string id="13621">Поддержка пульта Apple должна быть включена</string>
+  <string id="13612">Универсальный пульт ДУ</string>
+  <string id="13613">Мульти-ДУ (Harmony)</string>
+
+  <string id="13620">Ошибка ДУ Apple</string>
+  <string id="13621">Можно включить поддержку ДУ Apple.</string>
+
   <string id="14000">Сгруппировать</string>
   <string id="14001">Разгруппировать</string>
-  <string id="14003">Загружается файл плейлиста...</string>
-  <string id="14004">Загружается список потоков...</string>
-  <string id="14005">Анализ списка потоков...</string>
-  <string id="14006">Ошибка загрузки списка потоков</string>
-  <string id="14007">Ошибка загрузки файла плейлиста</string>
+  <string id="14003">Загружается файл плейлиста…</string>
+  <string id="14004">Загружается список потоков…</string>
+  <string id="14005">Анализ списка потоков…</string>
+  <string id="14006">Не удалось загрузить список потоков</string>
+  <string id="14007">Не удалось загрузить файл плейлиста</string>
+
   <string id="14009">Папка с играми</string>
   <string id="14010">Автопереключение вида на эскизы по</string>
   <string id="14011">Включить автопереключение вида на эскизы</string>
-  <string id="14012">- Ð¸спользовать большие значки</string>
-  <string id="14013">- Ð¿ереключать по</string>
-  <string id="14014">- Ð¿роцентное соотношение</string>
-  <string id="14015">нет файлов и хотя бы один эскиз</string>
-  <string id="14016">хотя бы один файл и эскиз</string>
-  <string id="14017">процентное соотношение эскизов</string>
+  <string id="14012">- Ð\98спользовать большие значки</string>
+  <string id="14013">- Ð\9fереключать по</string>
+  <string id="14014">- Ð\9fроцентное соотношение</string>
+  <string id="14015">Ð\9dет файлов и хотя бы один эскиз</string>
+  <string id="14016">Хотя бы один файл и эскиз</string>
+  <string id="14017">Ð\9fроцентное соотношение эскизов</string>
   <string id="14018">Настройки просмотра</string>
-  <string id="14019">Ð\9fеÑ\80ваÑ\8f Ð¼ÐµÑ\81Ñ\82ноÑ\81Ñ\82Ñ\8c</string>
-  <string id="14020">Ð\92Ñ\82оÑ\80аÑ\8f Ð¼ÐµÑ\81Ñ\82ноÑ\81Ñ\82Ñ\8c</string>
-  <string id="14021">ТÑ\80еÑ\82Ñ\8cÑ\8f Ð¼ÐµÑ\81Ñ\82ноÑ\81Ñ\82Ñ\8c</string>
+  <string id="14019">Ð\9cеÑ\81Ñ\82ноÑ\81Ñ\82Ñ\8c 1</string>
+  <string id="14020">Ð\9cеÑ\81Ñ\82ноÑ\81Ñ\82Ñ\8c 2</string>
+  <string id="14021">Ð\9cеÑ\81Ñ\82ноÑ\81Ñ\82Ñ\8c 3</string>
   <string id="14022">Медиатека</string>
   <string id="14023">Без ТВ</string>
-  <string id="14024">Впишите ближайший большой город</string>
-  <string id="14025">Кэш для аудио/видео/DVD - с HDD</string>
-  <string id="14026">Кэш видео - с DVD диска</string>
-  <string id="14027">- из локальной сети</string>
-  <string id="14028">- из Internet</string>
-  <string id="14030">Кэш аудио - с DVD диска</string>
-  <string id="14031">- из локальной сети</string>
-  <string id="14032">- из Internet</string>
-  <string id="14034">Кэш DVD - с DVD диска</string>
-  <string id="14035">- из локальной сети</string>
-  <string id="14036">Серверы</string>
+  <string id="14024">Введите ближайший крупный город</string>
+  <string id="14025">Кэш аудио/видео/DVD - с ЖД</string>
+  <string id="14026">Кэш видео - с DVD-диска</string>
+  <string id="14027">- Из локальной сети</string>
+  <string id="14028">- из Интернета</string>
+  <string id="14030">Кэш аудио - с DVD-диска</string>
+  <string id="14031">- Из локальной сети</string>
+  <string id="14032">- из Интернета</string>
+  <string id="14034">Кэш DVD - с DVD-диска</string>
+  <string id="14035">- Из локальной сети</string>
+  <string id="14036">Службы</string>
+
   <string id="14038">Настройки локальной сети изменены.</string>
-  <string id="14039">Для применения изменений требуется перезапуск</string>
-  <string id="14040">XBMC. Хотите перезапустить сейчас?</string>
-  <string id="14041">Постобработка</string>
+  <string id="14039">Для изменения настроек сети требуется</string>
+  <string id="14040">перезапуск XBMC. Перезапустить сейчас?</string>
+  <string id="14041">Ограничение скорости интернет-соединения</string>
+
   <string id="14043">- Выключать во время проигрывания</string>
-  <string id="14044">%i мин</string>
-  <string id="14045">%i сек</string>
+  <string id="14044">%i мин.</string>
+  <string id="14045">%i с.</string>
   <string id="14046">%i мс</string>
   <string id="14047">%i %%</string>
-  <string id="14048">%i Кб/сек</string>
-  <string id="14049">%i Кб</string>
-  <string id="14050">%i.0 dB</string>
+  <string id="14048">%i Кбит/с</string>
+  <string id="14049">%i Кбит</string>
+  <string id="14050">%i.0 дБ</string>
   <string id="14051">Формат времени</string>
   <string id="14052">Формат даты</string>
   <string id="14053">Фильтры интерфейса</string>
+
   <string id="14055">Сканировать в фоновом режиме</string>
   <string id="14056">Остановить сканирование</string>
   <string id="14057">Невозможно, пока сканируются файлы</string>
   <string id="14058">Эффект кинопленки</string>
   <string id="14059">Искать эскизы на внешних ресурсах</string>
-  <string id="14060">Кэш неизвестных файлов - из Internet</string>
-  <string id="14061">Автоматически</string>
+  <string id="14060">Кэш неизвестных файлов - из Интернета</string>
+  <string id="14061">Авто</string>
   <string id="14062">Введите имя пользователя для</string>
   <string id="14063">Дата и время</string>
   <string id="14064">Установить дату</string>
   <string id="14069">Применить эти настройки сейчас?</string>
   <string id="14070">Применить изменения сейчас</string>
   <string id="14071">Разрешить переименование и удаление файлов</string>
-  <string id="14074">Установить часовой пояс</string>
+
+  <string id="14074">Выбрать часовой пояс</string>
   <string id="14075">Учитывать летнее/зимнее время</string>
-  <string id="14076">Добавить в 'Избранное'</string>
-  <string id="14077">Удалить из 'Избранного'</string>
+  <string id="14076">Добавить в "Избранное"</string>
+  <string id="14077">Удалить из "Избранного"</string>
   <string id="14078">- Цвета</string>
   <string id="14079">Страна в часовом поясе</string>
   <string id="14080">Часовой пояс</string>
   <string id="14081">Списки файлов</string>
-  <string id="14082">Показывать информацию о изображениях из  EXIF</string>
+  <string id="14082">Показывать сведения о фото из EXIF</string>
   <string id="14083">Использовать окно на весь экран вместо полного экрана</string>
   <string id="14084">Добавлять треки в очередь при выборе</string>
-  <string id="14085">Ð\92оÑ\81пÑ\80оизводиÑ\82Ñ\8c Ð\90Ñ\83диоCD автоматически</string>
+  <string id="14085">Ð\92оÑ\81пÑ\80оизводиÑ\82Ñ\8c Ð°Ñ\83дио-CD автоматически</string>
   <string id="14086">Воспроизведение</string>
   <string id="14087">DVD</string>
   <string id="14088">Воспроизводить DVD автоматически</string>
-  <string id="14089">Шрифт для текстовых субтитров</string>
-  <string id="14090">Ð\9cеждÑ\83наÑ\80однÑ\8bе</string>
+  <string id="14089">Шрифт текстовых субтитров</string>
+  <string id="14090">ЯзÑ\8bк[CR]и Ñ\81Ñ\82андаÑ\80Ñ\82Ñ\8b</string>
   <string id="14091">Кодировка</string>
   <string id="14092">Отладка</string>
   <string id="14093">Безопасность</string>
   <string id="14094">Устройства ввода</string>
-  <string id="14095">Энергосбережение</string>
-  <string id="15015">Убрать</string>
+  <string id="14095">Экономия[CR]энергии</string>
+
+  <string id="15015">Удалить</string>
   <string id="15016">Игры</string>
+
   <string id="15019">Добавить</string>
+
   <string id="15052">Пароль</string>
+
   <string id="15100">Медиатека</string>
   <string id="15101">База данных</string>
   <string id="15102">* Все альбомы</string>
   <string id="15103">* Все исполнители</string>
   <string id="15104">* Все песни</string>
   <string id="15105">* Все жанры</string>
-  <string id="15107">Буферизация...</string>
+
+  <string id="15107">Буферизация…</string>
   <string id="15108">Звуки интерфейса</string>
-  <string id="15109">Стандартное оформление</string>
+  <string id="15109">Стандартн.</string>
   <string id="15111">- Тема</string>
   <string id="15112">Стандартная тема</string>
+
+  <string id="15200">Last.fm</string>
   <string id="15201">Отправлять статистику на Last.fm</string>
   <string id="15202">Имя пользователя для Last.fm</string>
   <string id="15203">Пароль для Last.fm</string>
-  <string id="15204">Невозможно связаться: засыпаю...</string>
-  <string id="15205">Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð¾бновите XBMC</string>
-  <string id="15206">Ð\9dевеÑ\80наÑ\8f Ð°Ð²Ñ\82оÑ\80изаÑ\86иÑ\8f: Ð\9fроверьте имя пользователя и пароль</string>
-  <string id="15207">подклÑ\8eÑ\87ен</string>
-  <string id="15208">Не подключен</string>
-  <string id="15209">Интервал подключений %i</string>
-  <string id="15210">Ð\92 ÐºÑ\8dÑ\88е %i Ð¿ÐµÑ\81ен</string>
-  <string id="15211">Подключение...</string>
-  <string id="15212">Подключение через %i сек.</string>
-  <string id="15213">Ð\98Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð¿Ñ\80оигÑ\80Ñ\8bваÑ\82елÑ\8c...</string>
-  <string id="15214">Ð\9cÑ\8fгкаÑ\8f Ñ\81инÑ\85Ñ\80онизаÑ\86иÑ\8e звука и видео</string>
+  <string id="15204">Не удалось связаться: ожидание…</string>
+  <string id="15205">Ð\9eбновите XBMC</string>
+  <string id="15206">Ð\9eÑ\88ибка Ð°Ð²Ñ\82оÑ\80изаÑ\86ии: Ð¿роверьте имя пользователя и пароль</string>
+  <string id="15207">Ð\9fодклÑ\8eÑ\87ено</string>
+  <string id="15208">Не подключено</string>
+  <string id="15209">Интервал подключения %i</string>
+  <string id="15210">Ð\9fеÑ\81ен Ð² ÐºÑ\8dÑ\88е: %i</string>
+  <string id="15211">Подключение</string>
+  <string id="15212">Подключение через %i с.</string>
+  <string id="15213">Ð\9fÑ\80оигÑ\80аÑ\82Ñ\8c Ñ\81 Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8cÑ\8eâ\80¦</string>
+  <string id="15214">Ð\9fлавнаÑ\8f Ñ\81инÑ\85Ñ\80онизаÑ\86иÑ\8f звука и видео</string>
   <string id="15215">Скрывать имена файлов в режиме эскизов</string>
-  <string id="15216">Играть в режиме 'party'</string>
+  <string id="15216">Играть в режиме "party"</string>
   <string id="15217">Отправлять статистику на Libre.fm</string>
   <string id="15218">Имя пользователя для Libre.fm</string>
   <string id="15219">Пароль для Libre.fm</string>
-  <string id="15221">Скробблер</string>
-  <string id="15250">Учет в статистике песен с Last.fm</string>
-  <string id="15251">Подключение к Last.fm...</string>
-  <string id="15252">Выбор станции...</string>
-  <string id="15253">Поиск похожих исполнителей...</string>
-  <string id="15254">Поиск похожих тэгов...</string>
+  <string id="15220">Libre.fm</string>
+  <string id="15221">Отправка[CR]статистики</string>
+
+  <string id="15250">Отправлять радио Last.fm на Last.fm</string>
+  <string id="15251">Подключение к Last.fm…</string>
+  <string id="15252">Выбор станции…</string>
+  <string id="15253">Поиск похожих исполнителей…</string>
+  <string id="15254">Поиск похожих тэгов…</string>
   <string id="15255">Ваш профиль (%name%)</string>
   <string id="15256">Общий топ тэгов</string>
   <string id="15257">Топ исполнителей по тэгу %name%</string>
   <string id="15260">Слушать треки по тэгу %name% на Last.fm</string>
   <string id="15261">Исполнители, похожие на %name%</string>
   <string id="15262">Топ альбомов %name%</string>
-  <string id="15263">Топ трэков %name%</string>
+  <string id="15263">Топ треков %name%</string>
   <string id="15264">Топ тэгов %name%</string>
-  <string id="15265">СамÑ\8bе Ð±Ð¾Ð»Ñ\8cÑ\88ие фаны %name%</string>
+  <string id="15265">СамÑ\8bе Ð¿Ñ\80еданнÑ\8bе фаны %name%</string>
   <string id="15266">Слушать выбор фанов %name% на Last.fm</string>
   <string id="15267">Слушать похожих на %name% исполнителей на Last.fm</string>
   <string id="15268">Топ исполнителей от %name%</string>
   <string id="15274">Недельный чарт альбомов %name%</string>
   <string id="15275">Недельный чарт треков %name%</string>
   <string id="15276">Слушать выбор сообществ %name% на Last.fm</string>
-  <string id="15277">Слушать личный выбор %name% на Last.fm</string>
-  <string id="15278">Слушать любимые треки %name% на Last.fm</string>
-  <string id="15279">Получение списка от Last.fm...</string>
-  <string id="15280">Невозможно получить список от Last.fm...</string>
+  <string id="15277">Слушать личный выбор %name% на Last.fm</string>
+  <string id="15278">Слушать любимые треки %name% на Last.fm</string>
+  <string id="15279">Получение списка от Last.fm</string>
+  <string id="15280">Не удается получить список от Last.fm…</string>
   <string id="15281">Введите имя исполнителя для поиска похожих</string>
   <string id="15282">Введите название тэга для поиска похожих</string>
-  <string id="15283">Треки, недавно прослушанные %name%'ом</string>
-  <string id="15284">Слушать рекомендации %name% на Last.fm</string>
-  <string id="15285">Топ Ñ\82Ñ\8dгов Ð´ля %name%</string>
-  <string id="15286">Слушать плейлист %name%'а на Last.fm</string>
-  <string id="15287">Ð\92Ñ\8b Ñ\85оÑ\82иÑ\82е Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ\82Ñ\8c Ñ\8dÑ\82оÑ\82 Ñ\82Ñ\80ек Ðº Ñ\81воим любимым трекам?</string>
-  <string id="15288">Ð\92Ñ\8b Ñ\85оÑ\82иÑ\82е Ð·аблокировать этот трек?</string>
-  <string id="15289">Добавлено к вашим любимым трекам: '%s'.</string>
-  <string id="15290">Невозможно добавить '%s' к вашим любимым трекам.</string>
-  <string id="15291">Заблокировано: '%s'.</string>
-  <string id="15292">Невозможно заблокировать: '%s'.</string>
-  <string id="15293">Недавно полюбившиеся треки %name%</string>
-  <string id="15294">Недавно заблокированные треки %name%</string>
+  <string id="15283">Треки, недавно прослушанные %name%</string>
+  <string id="15284">Слушать рекомендации %name% на Last.fm</string>
+  <string id="15285">Топ Ñ\82Ñ\8dгов Ð¿Ð¾Ð»Ñ\8cзоваÑ\82еля %name%</string>
+
+  <string id="15287">Ð\94обавиÑ\82Ñ\8c Ñ\8dÑ\82оÑ\82 Ñ\82Ñ\80ек Ðº Ð²Ð°Ñ\88им любимым трекам?</string>
+  <string id="15288">Ð\97аблокировать этот трек?</string>
+  <string id="15289">Добавлено к вашим любимым трекам: "%s".</string>
+  <string id="15290">Не удалось добавить "%s" к вашим любимым трекам.</string>
+  <string id="15291">Заблокировано: "%s".</string>
+  <string id="15292">Не удалось заблокировать "%s".</string>
+  <string id="15293">Недавно полюбившиеся треки %name%</string>
+  <string id="15294">Недавно заблокированные треки %name%</string>
   <string id="15295">Удалить из любимых треков</string>
   <string id="15296">Разблокировать</string>
-  <string id="15297">Вы хотите удалить этот трек из любимых треков?</string>
-  <string id="15298">Вы хотите разблокировать этот трек?</string>
-  <string id="15300">Неверный или несуществующий путь </string>
-  <string id="15301">Невозможно подключиться с серверу</string>
-  <string id="15302">Серверов не найдено</string>
+  <string id="15297">Удалить этот трек из ваших любимых треков?</string>
+  <string id="15298">Разблокировать этот трек?</string>
+
+  <string id="15300">Неверный или несуществующий путь</string>
+  <string id="15301">Не удалось подключиться к серверу</string>
+  <string id="15302">Серверы не найдены</string>
   <string id="15303">Рабочая группа не найдена</string>
+
   <string id="15310">Открытие источника с множеством путей</string>
   <string id="15311">Путь:</string>
+
   <string id="16000">Общие</string>
-  <string id="16002">Поиск в Internet</string>
+
+  <string id="16002">Поиск в Интернете</string>
   <string id="16003">Проигрыватель</string>
   <string id="16004">Проиграть файл с диска</string>
+
   <string id="16008">Введите новое название</string>
   <string id="16009">Введите название фильма</string>
   <string id="16010">Введите название профиля</string>
   <string id="16013">Введите новое имя файла</string>
   <string id="16014">Введите название папки</string>
   <string id="16015">Введите папку</string>
-  <string id="16016">Ð\94оÑ\81Ñ\82Ñ\83пнÑ\8bе Ð¾Ð¿Ñ\86ии: %A, %T, %N, %B, %D, %G, %Y, %F, %S</string>
+  <string id="16016">Ð\94оÑ\81Ñ\82Ñ\83пнÑ\8bе Ð·Ð½Ð°Ñ\87ениÑ\8f: %A, %T, %N, %B, %D, %G, %Y, %F, %S</string>
   <string id="16017">Строка поиска</string>
-  <string id="16018">Ð\9dиÑ\87его</string>
+  <string id="16018">Ð\9dеÑ\82</string>
   <string id="16019">Автовыбор</string>
   <string id="16020">Деинтерлейсинг</string>
-  <string id="16023">Черезстрочная обработка</string>
-  <string id="16024">Отменяется...</string>
-  <string id="16025">Введите название исполнителя</string>
+  <string id="16021">Bob</string>
+  <string id="16022">Bob (обратный)</string>
+  <string id="16023"></string>
+  <string id="16024">Отмена…</string>
+  <string id="16025">Введите имя исполнителя</string>
   <string id="16026">Проигрывание плейлиста прервано</string>
-  <string id="16027">СлиÑ\88ком Ð¼Ð½Ð¾Ð³Ð¾ Ð¾Ñ\88ибок Ð¿Ð¾Ð´Ñ\80Ñ\8fд</string>
+  <string id="16027">Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð¿Ñ\80оигÑ\80аÑ\82Ñ\8c ÐºÐ°Ðº Ð¼Ð¸Ð½Ð¸Ð¼Ñ\83м Ð¾Ð´Ð¸Ð½ Ñ\84айл.</string>
   <string id="16028">Введите значение</string>
-  <string id="16029">Проверьте журнал событий для доп.иформации</string>
-  <string id="16030">Режим 'party' отключен</string>
-  <string id="16031">Нет соответствующих песен в медиатеке</string>
-  <string id="16032">Невозможно инициализировать базу данных</string>
-  <string id="16033">Невозможно открыть базу данных</string>
-  <string id="16034">Невозможно получить песни из базы данных</string>
-  <string id="16035">Плейлист режима 'party'</string>
+  <string id="16029">Для получения доп. сведений просмотрите журнал.</string>
+  <string id="16030">Режим "party" отключен.</string>
+  <string id="16031">Нет похожих песен в медиатеке.</string>
+  <string id="16032">Не удалось инициализировать базу данных.</string>
+  <string id="16033">Не удалось открыть базу данных.</string>
+  <string id="16034">Не удалось получить песни из базы данных.</string>
+  <string id="16035">Плейлист режима "party"</string>
+  <string id="16036">Деинтерлейсинг (1 поле)</string>
+  <string id="16037">Деинтерлейсинг</string>
+  <string id="16038">Метод деинтерлейсинга</string>
+  <string id="16039">Выкл.</string>
+  <string id="16040">Авто</string>
+  <string id="16041">Вкл.</string>
+
   <string id="16100">Все видео</string>
-  <string id="16101">Непросмотренное</string>
-  <string id="16102">Ð\9fÑ\80оÑ\81моÑ\82Ñ\80енное</string>
-  <string id="16103">Ð\9eÑ\82меÑ\82иÑ\82Ñ\8c ÐºÐ°Ðº Ð¿Ñ\80оÑ\81моÑ\82Ñ\80енное</string>
-  <string id="16104">Ð\9eÑ\82меÑ\82иÑ\82Ñ\8c ÐºÐ°Ðº Ð½ÐµÐ¿Ñ\80оÑ\81моÑ\82Ñ\80енное</string>
+  <string id="16101">Не просмотрено</string>
+  <string id="16102">Ð\9fÑ\80оÑ\81моÑ\82Ñ\80ено</string>
+  <string id="16103">Ð\92 Ð¿Ñ\80оÑ\81моÑ\82Ñ\80еннÑ\8bе</string>
+  <string id="16104">Ð\92 Ð½ÐµÐ¿Ñ\80оÑ\81моÑ\82Ñ\80еннÑ\8bе</string>
   <string id="16105">Изменить название</string>
+
   <string id="16200">Операция прервана</string>
   <string id="16201">Не удалось скопировать</string>
-  <string id="16202">Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\81копиÑ\80оваÑ\82Ñ\8c Ð½Ð¸ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ\84айла</string>
+  <string id="16202">Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\81копиÑ\80оваÑ\82Ñ\8c ÐºÐ°Ðº Ð¼Ð¸Ð½Ð¸Ð¼Ñ\83м Ð¾Ð´Ð¸Ð½ Ñ\84айл</string>
   <string id="16203">Не удалось переместить</string>
-  <string id="16204">Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð¿ÐµÑ\80емеÑ\81Ñ\82иÑ\82Ñ\8c Ð½Ð¸ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ\84айла</string>
+  <string id="16204">Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð¿ÐµÑ\80емеÑ\81Ñ\82иÑ\82Ñ\8c ÐºÐ°Ðº Ð¼Ð¸Ð½Ð¸Ð¼Ñ\83м Ð¾Ð´Ð¸Ð½ Ñ\84айл</string>
   <string id="16205">Не удалось удалить</string>
-  <string id="16206">Не удалось удалить ни одного файла</string>
+  <string id="16206">Не удалось удалить как минимум один файл</string>
+
   <string id="16300">Метод масштабирования видео</string>
-  <string id="16301">Ближайший соседний</string>
-  <string id="16302">Билинейный</string>
-  <string id="16303">Бикубический</string>
+  <string id="16301">Nearest neighbour</string>
+  <string id="16302">Bilinear</string>
+  <string id="16303">Bicubic</string>
+  <string id="16304">Lanczos2</string>
+  <string id="16305">Lanczos3</string>
+  <string id="16306">Sinc8</string>
   <string id="16307">Bicubic (программный)</string>
   <string id="16308">Lanczos (программный)</string>
   <string id="16309">Sinc (программный)</string>
-  <string id="16310">(VDPAU) Временный</string>
-  <string id="16311">(VDPAU) Временный / Пространственный</string>
-  <string id="16312">(VDPAU) Уменьшение шумов</string>
-  <string id="16313">(VDPAU) Чёткость</string>
-  <string id="16314">Обратный Telecine</string>
-  <string id="16316">Автоматически</string>
-  <string id="16400">Пост-обработка</string>
-  <string id="17500">Переход экрана в спящий режим через</string>
+  <string id="16310">Temporal</string>
+  <string id="16311">Temporal/Spatial</string>
+  <string id="16312">Шумоподавление (VDPAU)</string>
+  <string id="16313">Резкость (VDPAU)</string>
+  <string id="16314">Обратный пуллдаун (3:2)</string>
+  <string id="16315">Оптимизир. Lanczos3</string>
+  <string id="16316">Авто</string>
+  <string id="16317">Temporal (1 поле)</string>
+  <string id="16318">Temporal/Spatial (1 поле)</string>
+  <string id="16319">DXVA</string>
+  <string id="16320">Bob DXVA</string>
+  <string id="16321">Лучший DXVA</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Оптимизир. Spline36</string>
+  <string id="16324">Blend (программный)</string>
+
+  <string id="16400">Постобработка</string>
+
+  <string id="17500">Переход дисплея в спящий режим через</string>
+
   <string id="19000">Переключиться на канал</string>
+
   <string id="20000">Папка сохраненной музыки</string>
   <string id="20001">Использовать внешний проигрыватель DVD</string>
   <string id="20002">Внешний проигрыватель DVD</string>
   <string id="20003">Папка для трейнеров</string>
   <string id="20004">Папка для скриншотов</string>
+
   <string id="20006">Папка для плейлистов</string>
   <string id="20007">Записи</string>
   <string id="20008">Скриншоты</string>
   <string id="20009">Использовать XBMC</string>
+
   <string id="20011">Музыкальные плейлисты</string>
   <string id="20012">Плейлисты видео</string>
-  <string id="20013">ХоÑ\82иÑ\82е Ð·апустить игру?</string>
-  <string id="20014">Сорт. по: Плейлисту</string>
+  <string id="20013">Ð\97апустить игру?</string>
+  <string id="20014">Сорт. по плейлисту</string>
   <string id="20015">Внешний эскиз</string>
   <string id="20016">Текущий эскиз</string>
   <string id="20017">Локальный эскиз</string>
   <string id="20018">Без эскиза</string>
   <string id="20019">Выбрать эскиз</string>
+
+  <!-- string id 20022 will always be set to an empty string (LocalizeStrings.cpp)-->
+  <string id="20022"></string>
   <string id="20023">Конфликт</string>
   <string id="20024">Сканировать новое</string>
   <string id="20025">Сканировать все</string>
   <string id="20026">Регион</string>
+
+  <!-- string id's 20027 thru 20034 are reserved for temperature strings (LocalizeStrings.cpp)-->
+
   <string id="20037">Сведения</string>
-  <string id="20038">Заблокировать раздел 'Музыка'</string>
-  <string id="20039">Заблокировать раздел 'Видео'</string>
-  <string id="20040">Заблокировать раздел 'Фотографии'</string>
-  <string id="20041">Заблокировать раздел 'Программы' и 'Скрипты'</string>
-  <string id="20042">Заблокировать 'Файл-менеджер'</string>
-  <string id="20043">Заблокировать 'Настройки'</string>
+  <string id="20038">Заблокировать раздел "Музыка"</string>
+  <string id="20039">Заблокировать раздел "Видео"</string>
+  <string id="20040">Заблокировать раздел "Фотографии"</string>
+  <string id="20041">Заблокировать разделы "Программы" и "Скрипты"</string>
+  <string id="20042">Заблокировать "Файл-менеджер"</string>
+  <string id="20043">Заблокировать "Настройки"</string>
   <string id="20044">Чистый старт</string>
-  <string id="20045">Включить режим 'Полного доступа'</string>
-  <string id="20046">Выключить режим 'Полного доступа'</string>
-  <string id="20047">Создать профиль  '%s' ?</string>
+  <string id="20045">Включить режим полного доступа</string>
+  <string id="20046">Выключить режим полного доступа</string>
+  <string id="20047">Создать профиль "%s"?</string>
   <string id="20048">Запустить с чистыми параметрами</string>
   <string id="20049">Лучший из доступных</string>
-  <string id="20050">Автоматически переключать 16:9 или 4:3</string>
-  <string id="20051">Рассматривать последовательные файлы как единый файл</string>
+  <string id="20050">Автоматический выбор 16:9 или 4:3</string>
+  <string id="20051">Рассматривать составные файлы как единый файл</string>
   <string id="20052">Внимание</string>
-  <string id="20053">Ð\9eÑ\81Ñ\82авиÑ\82Ñ\8c Ñ\80ежим 'Ð\9fолного Ð´Ð¾Ñ\81Ñ\82Ñ\83па'</string>
-  <string id="20054">Включен режим 'Полного доступа'</string>
+  <string id="20053">Ð\9eÑ\82клÑ\8eÑ\87ен Ñ\80ежим Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\83па</string>
+  <string id="20054">Включен режим полного доступа</string>
   <string id="20055">Эскиз с Allmusic.com</string>
-  <string id="20057">Убрать эскиз</string>
-  <string id="20058">Добавить профиль...</string>
-  <string id="20059">Данные о всех альбомах</string>
-  <string id="20060">Данные о медиафайле</string>
-  <string id="20061">Раздельно</string>
+
+  <string id="20057">Удалить эскиз</string>
+  <string id="20058">Добавить профиль…</string>
+  <string id="20059">Получить сведения обо всех альбомах</string>
+  <string id="20060">Информация</string>
+  <string id="20061">Разделять</string>
   <string id="20062">Стандартные ресурсы</string>
   <string id="20063">Стандартные ресурсы (только чтение)</string>
   <string id="20064">Копировать стандартные</string>
   <string id="20066">Заблокировать предпочтения</string>
   <string id="20067">Изменить профиль</string>
   <string id="20068">Заблокировать профиль</string>
-  <string id="20069">Невозможно создать папку</string>
+  <string id="20069">Не удалось создать папку</string>
   <string id="20070">Папка профиля</string>
   <string id="20071">Стартовать с новыми источниками</string>
-  <string id="20072">УбедиÑ\82еÑ\81Ñ\8c, Ñ\87Ñ\82о Ð²Ñ\8bбÑ\80аннаÑ\8f Ð¿Ð°Ð¿ÐºÐ° Ð¾Ñ\82кÑ\80Ñ\8bÑ\82а</string>
-  <string id="20073">длÑ\8f Ð·Ð°Ð¿Ð¸Ñ\81и Ð¸ ÐµÐµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð²ÐµÑ\80ное</string>
+  <string id="20072">УбедиÑ\82еÑ\81Ñ\8c, Ñ\87Ñ\82о Ð²Ñ\8bбÑ\80аннаÑ\8f Ð¿Ð°Ð¿ÐºÐ° Ð´Ð¾Ñ\81Ñ\82Ñ\83пна Ð´Ð»Ñ\8f Ð·Ð°Ð¿Ð¸Ñ\81и</string>
+  <string id="20073">и Ñ\83казано Ð¿Ñ\80авилÑ\8cное Ð¸Ð¼Ñ\8f Ð½Ð¾Ð²Ð¾Ð¹ Ð¿Ð°Ð¿ÐºÐ¸</string>
   <string id="20074">Рейтинг MPAA</string>
   <string id="20075">Введите код защиты</string>
-  <string id="20076">Спрашивать код защиты при старте</string>
-  <string id="20077">Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð²Ð¸Ð´Ð°</string>
-  <string id="20078"> - нет связи -</string>
+  <string id="20076">Ð\97апрашивать код защиты при старте</string>
+  <string id="20077">Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð¾Ð±Ð»Ð¾Ð¶ÐºÐ¸</string>
+  <string id="20078">- нет связи -</string>
   <string id="20079">Использовать анимацию</string>
-  <string id="20080">Отключить RSS во время воспроизведения музыки</string>
-  <string id="20081">*Включить пункты Ссылок</string>
-  <string id="20082">Показывать 'Программы' в главном меню</string>
-  <string id="20083">Показывать информацию о музыке</string>
-  <string id="20084">Показывать информацию о погоде</string>
-  <string id="20085">Показывать информацию о системе</string>
-  <string id="20086">Показывать свободное место на C: E: F:</string>
-  <string id="20087">Показывать свободное место на E: F: G:</string>
+  <string id="20080">Отключить RSS-ленту во время воспроизведения музыки</string>
+  <string id="20081">Включить кнопки ярлыков</string>
+  <string id="20082">Показывать "Программы" в главном меню</string>
+  <string id="20083">Показывать сведения о музыке</string>
+  <string id="20084">Показывать сведения о погоде</string>
+  <string id="20085">Показывать сведения о системе</string>
+  <string id="20086">Показывать свободное место на дисках C: E: F:</string>
+  <string id="20087">Показывать свободное место на дисках E: F: G:</string>
   <string id="20088">Погода</string>
   <string id="20089">Свободное место на диске</string>
-  <string id="20090">Ð\92ведиÑ\82е Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ существующего ресурса</string>
+  <string id="20090">Ð\92ведиÑ\82е Ð¸Ð¼Ñ\8f существующего ресурса</string>
   <string id="20091">Код защиты</string>
   <string id="20092">Загрузить профиль</string>
   <string id="20093">Название профиля</string>
-  <string id="20094">Ð\98Ñ\81Ñ\82оÑ\87ники Ð¼ÐµÐ´Ð¸Ð°Ñ\84айлов</string>
-  <string id="20095">Введите кода защиты профиля</string>
+  <string id="20094">Ð\98Ñ\81Ñ\82оÑ\87ники Ð´Ð°Ð½Ð½Ñ\8bÑ\85</string>
+  <string id="20095">Введите код защиты профиля</string>
   <string id="20096">Экран входа</string>
-  <string id="20097">Запрос данных об альбоме</string>
-  <string id="20098">Запрос данных для альбома</string>
+  <string id="20097">Запрос данных об альбоме</string>
+  <string id="20098">Запрос данных для альбома</string>
   <string id="20099">Невозможно оцифровывать во время проигрывания</string>
   <string id="20100">Код защиты и его настройки</string>
-  <string id="20101">Ввод кода защиты всегда переключает в режим 'Полного доступа'</string>
+  <string id="20101">Ввод кода защиты всегда переключает в режим полного доступа</string>
   <string id="20102">или копировать из стандартного?</string>
   <string id="20103">Сохранить изменения профиля?</string>
   <string id="20104">Найдены старые настройки</string>
-  <string id="20105">Ð\92Ñ\8b Ñ\85оÑ\82иÑ\82е Ð¸Ñ\85 Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c?</string>
+  <string id="20105">Ð\98Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð¸Ñ\85?</string>
   <string id="20106">Найдены старые ресурсы</string>
   <string id="20107">Раздельно (закрыто)</string>
   <string id="20108">Корень</string>
   <string id="20112">Последний вход: %s</string>
   <string id="20113">Не входил никогда</string>
   <string id="20114">Профиль %i / %i</string>
-  <string id="20115">Ð\92Ñ\85од Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8f / Ð\92ыбор профиля</string>
-  <string id="20116">Использовать защиту на экране входа</string>
+  <string id="20115">Ð\92Ñ\85од Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8f / Ð²ыбор профиля</string>
+  <string id="20116">Использовать защиту экрана входа</string>
   <string id="20117">Неверный код защиты.</string>
-  <string id="20118">Ð\94лÑ\8f Ñ\8dÑ\82ого ÐºÐ¾Ð´ Ð·Ð°Ñ\89иÑ\82Ñ\8b Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ\8bÑ\82Ñ\8c Ñ\83Ñ\81Ñ\82ановлен.</string>
+  <string id="20118">Ð\9dеобÑ\85одимо Ñ\83Ñ\81Ñ\82ановиÑ\82Ñ\8c ÐºÐ¾Ð´ Ð·Ð°Ñ\89иÑ\82Ñ\8b.</string>
   <string id="20119">Установить его сейчас?</string>
-  <string id="20120">Загрузка данных о программе</string>
+  <string id="20120">Загрузка сведений о программе…</string>
   <string id="20121">Вечеринка началась!</string>
-  <string id="20122">Ð\98Ñ\81Ñ\82ина</string>
+  <string id="20122">Ð\94а</string>
   <string id="20123">Смешивание напитков</string>
   <string id="20124">Наполнение бокалов</string>
-  <string id="20125">Ð\92Ñ\85од Ð¿Ñ\80оизведен Ð¾Ñ\82 Ð¸Ð¼ÐµÐ½Ð¸</string>
+  <string id="20125">ТекÑ\83Ñ\89ий Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8c</string>
   <string id="20126">Выход</string>
-  <string id="20128">Перейти к корню</string>
+  <string id="20128">Перейти в корневую папку</string>
+  <string id="20129">Weave</string>
+  <string id="20130">Weave (обратный)</string>
+  <string id="20131">Blend</string>
   <string id="20132">Перезапустить видео</string>
-  <string id="20133">Ð\98змениÑ\82Ñ\8c Ñ\81еÑ\82евое Ñ\80аÑ\81положение</string>
-  <string id="20134">УдалиÑ\82Ñ\8c Ñ\81еÑ\82евое Ñ\80аÑ\81положение</string>
-  <string id="20135">ХоÑ\82иÑ\82е Ð¿Ñ\80оÑ\81канировать папку?</string>
+  <string id="20133">Ð\98змениÑ\82Ñ\8c Ñ\81еÑ\82евой Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81</string>
+  <string id="20134">УдалиÑ\82Ñ\8c Ñ\81еÑ\82евой Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81</string>
+  <string id="20135">Сканировать папку?</string>
   <string id="20136">Карта памяти</string>
   <string id="20137">Карта памяти подключена</string>
-  <string id="20138">Невозможно подключить карту памяти</string>
+  <string id="20138">Не удалось подключить карту памяти</string>
   <string id="20139">в порт %i, слот %i</string>
   <string id="20140">Заблокировать хранитель экрана</string>
   <string id="20141">Установить</string>
   <string id="20143">Введите пароль для</string>
   <string id="20144">Таймер выключения</string>
   <string id="20145">Интервал выключения (мин.)</string>
-  <string id="20146">Запущен, выключение через %im</string>
+  <string id="20146">Запущен, выключение через %i мин.</string>
   <string id="20147">Выключение через 30 мин.</string>
-  <string id="20148">Выключение через 1 час</string>
-  <string id="20149">Выключение через 2 часа</string>
-  <string id="20150">Выключение через заданное время</string>
-  <string id="20151">УбÑ\80ать таймер выключения</string>
+  <string id="20148">Выключение через 60 мин.</string>
+  <string id="20149">Выключение через 120 мин.</string>
+  <string id="20150">Выключение по таймеру</string>
+  <string id="20151">Ð\9eÑ\82менить таймер выключения</string>
   <string id="20152">Заблокировать предпочтения для %s</string>
-  <string id="20153">Просмотр...</string>
-  <string id="20154">Основная информация</string>
-  <string id="20155">Ð\98нÑ\84оÑ\80маÑ\86ия о накопителях</string>
-  <string id="20156">Ð\98нÑ\84оÑ\80маÑ\86иÑ\8f Ð¾ HDD</string>
-  <string id="20157">Ð\98нÑ\84оÑ\80маÑ\86ия о DVD-ROM</string>
-  <string id="20158">Ð\98нÑ\84оÑ\80маÑ\86ия о сети</string>
-  <string id="20159">Ð\98нÑ\84оÑ\80маÑ\86ия о видеоподсистеме</string>
-  <string id="20160">Ð\98нÑ\84оÑ\80маÑ\86ия об оборудовании</string>
+  <string id="20153">Просмотр</string>
+  <string id="20154">Основные сведения</string>
+  <string id="20155">Сведения о накопителях</string>
+  <string id="20156">СведениÑ\8f Ð¾ Ð\96Ð\94</string>
+  <string id="20157">Сведения о DVD-ROM</string>
+  <string id="20158">Сведения о сети</string>
+  <string id="20159">Сведения о видеоподсистеме</string>
+  <string id="20160">Сведения об оборудовании</string>
   <string id="20161">Всего</string>
   <string id="20162">Занято</string>
   <string id="20163">из</string>
   <string id="20169">Неделя</string>
   <string id="20170">Линия</string>
   <string id="20171">Сеть Windows (SMB)</string>
-  <string id="20172">Сервер XBMSP</string>
-  <string id="20173">Сервер FTP</string>
-  <string id="20174">iTunes (DAAP)</string>
-  <string id="20175">Сервер UPnP</string>
-  <string id="20176">Показывать информацию о видео</string>
+  <string id="20172">XBMSP-сервер</string>
+  <string id="20173">FTP-сервер</string>
+  <string id="20174">Ресурс iTunes (DAAP)</string>
+  <string id="20175">UPnP-сервер</string>
+  <string id="20176">Показывать сведения о видео</string>
   <string id="20177">Готово</string>
+  <string id="20178">Shift</string>
+  <string id="20179">Caps Lock</string>
   <string id="20180">Символы</string>
-  <string id="20181">&lt;--- Backspace</string>
+  <string id="20181">&#60;- Backspace</string>
   <string id="20182">Пробел</string>
-  <string id="20183">Обновить вид</string>
-  <string id="20184">Поворачивать изображения по информации из EXIF</string>
-  <string id="20185">Использовать вид постеров для сериалов</string>
-  <string id="20186">Пожалуйста, подождите</string>
+  <string id="20183">Обновить обложку</string>
+  <string id="20184">Поворачивать фото по информации из EXIF</string>
+  <string id="20185">Использовать представления с постерами для сериалов</string>
+  <string id="20186">Подождите…</string>
+
   <string id="20189">Включить автопрокрутку для сюжетов и обзоров</string>
   <string id="20190">Дополнительно</string>
-  <string id="20191">Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c Ð¿Ñ\80оÑ\82околиÑ\80ование (длÑ\8f Ð¾Ñ\82ладки)</string>
+  <string id="20191">Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c Ð¶Ñ\83Ñ\80нал Ð¾Ñ\82ладки</string>
   <string id="20192">Загружать доп. информацию во время обновлений</string>
-  <string id="20193">СеÑ\80виÑ\81 по умолчанию для альбомов</string>
-  <string id="20194">СеÑ\80виÑ\81 по умолчанию для исполнителей</string>
-  <string id="20195">Изменить инфо-ресурс</string>
+  <string id="20193">СлÑ\83жба по умолчанию для альбомов</string>
+  <string id="20194">СлÑ\83жба по умолчанию для исполнителей</string>
+  <string id="20195">Изменить инфоресурс</string>
   <string id="20196">Экспортировать музыкальную медиатеку</string>
   <string id="20197">Импортировать музыкальную медиатеку</string>
-  <string id="20198">Исполнитель не найден!</string>
-  <string id="20199">Загрузка данных об исполнителе не удалась</string>
+  <string id="20198">Исполнитель не найден.</string>
+  <string id="20199">Не удалось загрузить сведения об исполнителе</string>
+
+  <!-- string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)-->
+
   <string id="20250">Вечеринка началась! (Видео)</string>
-  <string id="20251">СмеÑ\88ивание Ð½Ð°Ð¿Ð¸Ñ\82ков (Ð\92идео)</string>
-  <string id="20252">Ð\9dаполнение Ð±Ð¾ÐºÐ°Ð»Ð¾Ð² (Ð\92идео)</string>
-  <string id="20253">WebDAV сервер (HTTP)</string>
-  <string id="20254">WebDAV сервер (HTTPS)</string>
-  <string id="20255">Первый вход, отредактируйте свой профиль</string>
+  <string id="20251">СмеÑ\88ивание Ð½Ð°Ð¿Ð¸Ñ\82ков (видео)</string>
+  <string id="20252">Ð\9dаполнение Ð±Ð¾ÐºÐ°Ð»Ð¾Ð² (видео)</string>
+  <string id="20253">WebDAV-сервер (HTTP)</string>
+  <string id="20254">WebDAV-сервер (HTTPS)</string>
+  <string id="20255">Первый вход; настройте свой профиль</string>
   <string id="20256">Клиент HTS Tvheadend</string>
   <string id="20257">Клиент VDR Streamdev</string>
-  <string id="20300">Папка Web-сервера (HTTP)</string>
-  <string id="20301">Папка Web-сервера (HTTPS)</string>
-  <string id="20302">Невозможно записать в папку:</string>
-  <string id="20303">Хотите пропустить и продолжить?</string>
-  <string id="20304">RSS Поток</string>
-  <string id="20307">Вторичный DNS</string>
+  <string id="20258">Клиент MythTV</string>
+  <string id="20259">Протокол NFS</string>
+  <string id="20260">Протокол SSH/SFTP</string>
+  <string id="20261">Протокол AFP</string>
+
+  <string id="20300">Папка веб-сервера (HTTP)</string>
+  <string id="20301">Папка веб-сервера (HTTPS)</string>
+  <string id="20302">Не удалось записать в папку:</string>
+  <string id="20303">Пропустить и продолжить?</string>
+  <string id="20304">RSS-лента</string>
+
+  <string id="20307">Дополнительный DNS</string>
   <string id="20308">Сервер DHCP:</string>
   <string id="20309">Создать новую папку</string>
-  <string id="20310">Ð\9fÑ\80игаÑ\81ить LCD-экран при проигрывании</string>
+  <string id="20310">Ð\97аÑ\82емнÑ\8fть LCD-экран при проигрывании</string>
   <string id="20311">Неизвестный или встроенный (защищенный)</string>
-  <string id="20312">Пригасить LCD-экран при паузе</string>
+  <string id="20312">Затемнять LCD-экран на паузе</string>
+
   <string id="20314">Видео - Медиатека</string>
-  <string id="20316">Сорт. по: ID</string>
-  <string id="20324">Играть часть...</string>
+
+  <string id="20316">Сорт. по ID</string>
+
+  <string id="20324">Играть часть…</string>
   <string id="20325">Сброс калибровки</string>
-  <string id="20326">Это сбросит калибровочное значение для %s</string>
-  <string id="20327">на значение по умолчанию</string>
-  <string id="20328">Укажите цель</string>
+  <string id="20326">Это сбросит калибровочные значения для %s</string>
+  <string id="20327">до значений по умолчанию</string>
+  <string id="20328">Укажите назначение</string>
+
   <string id="20330">Использовать имена папок для поиска</string>
   <string id="20331">Файл</string>
   <string id="20332">Использовать имена файлов или папок для поиска?</string>
-  <string id="20333">СодеÑ\80жимое</string>
+  <string id="20333">Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\82ип Ñ\81одеÑ\80жимого</string>
   <string id="20334">Папка</string>
   <string id="20335">Просматривать содержимое вложенных папок?</string>
   <string id="20336">Разблокировать источники</string>
   <string id="20337">Актер</string>
   <string id="20338">Фильм</string>
   <string id="20339">Режиссер</string>
-  <string id="20340">Ð\92Ñ\8b Ñ\85оÑ\82иÑ\82е Ñ\83далить все объекты внутри</string>
+  <string id="20340">Удалить все объекты внутри</string>
   <string id="20341">этого пути из медиатеки?</string>
   <string id="20342">Фильмы</string>
   <string id="20343">Сериалы</string>
   <string id="20346">Сканировать с подпапками</string>
   <string id="20347">в роли</string>
   <string id="20348">Режиссеры</string>
-  <string id="20349">Ð\9fо Ñ\8dÑ\82омÑ\83 Ð¿Ñ\83Ñ\82и Ð²Ð¸Ð´ÐµÐ¾Ñ\84айлÑ\8b Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ\8b!</string>
-  <string id="20350">пÑ\80оголоÑ\81овали</string>
-  <string id="20351">Ð\98нÑ\84оÑ\80маÑ\86ия о сериале</string>
-  <string id="20352">Ð\98нÑ\84оÑ\80маÑ\86иÑ\8f Ð¾Ð± Ñ\8dпизоде</string>
-  <string id="20353">Загрузка подробностей о сериале</string>
-  <string id="20354">РÑ\83ководÑ\81Ñ\82во Ð¿Ð¾ Ð²Ñ\8bбоÑ\80Ñ\83 Ñ\8dпизода</string>
-  <string id="20355">Загрузка данных об эпизодах в папке</string>
+  <string id="20349">Ð\9dе Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ð²Ð¸Ð´ÐµÐ¾Ñ\84айлов Ð¿Ð¾ Ñ\8dÑ\82омÑ\83 Ð¿Ñ\83Ñ\82и.</string>
+  <string id="20350">пÑ\80оголоÑ\81овало</string>
+  <string id="20351">Сведения о сериале</string>
+  <string id="20352">СведениÑ\8f Ð¾ Ñ\81еÑ\80ии</string>
+  <string id="20353">Загрузка сведений о сериале…</string>
+  <string id="20354">Ð\9fолÑ\83Ñ\87ение Ñ\80аÑ\81пиÑ\81аниÑ\8f Ñ\81еÑ\80ийâ\80¦</string>
+  <string id="20355">Загрузка сведений о сериях в папке…</string>
   <string id="20356">Выберите сериал:</string>
   <string id="20357">Введите название сериала</string>
   <string id="20358">Сезон %i</string>
-  <string id="20359">Эпизод</string>
-  <string id="20360">ЭпизодÑ\8b</string>
-  <string id="20361">Загрузка подробностей об эпизоде</string>
-  <string id="20362">УдалиÑ\82Ñ\8c Ñ\8dпизод из медиатеки</string>
+  <string id="20359">СеÑ\80иÑ\8f</string>
+  <string id="20360">СеÑ\80ии</string>
+  <string id="20361">Загрузка сведений о серии…</string>
+  <string id="20362">УдалиÑ\82Ñ\8c Ñ\81еÑ\80иÑ\8e из медиатеки</string>
   <string id="20363">Удалить сериал из медиатеки</string>
   <string id="20364">Сериал</string>
-  <string id="20365">СÑ\8eжеÑ\82 Ñ\8dпизода</string>
+  <string id="20365">СÑ\8eжеÑ\82 Ñ\81еÑ\80ии</string>
   <string id="20366">* Все сезоны</string>
   <string id="20367">Без просмотренных</string>
   <string id="20368">Код продукта</string>
   <string id="20369">Показывать сюжет для непросмотренного</string>
-  <string id="20370">* Скрыто для предотвращения спойлеров *</string>
-  <string id="20371">УÑ\81Ñ\82ановить эскиз для сезона</string>
+  <string id="20370">* Скрыто, чтобы избежать спойлеров *</string>
+  <string id="20371">Ð\92Ñ\8bбÑ\80ать эскиз для сезона</string>
   <string id="20372">Картинка сезона</string>
   <string id="20373">Сезон</string>
-  <string id="20374">Загрузка информации о фильме</string>
+  <string id="20374">Загрузка сведений о фильме…</string>
   <string id="20375">Не указывать содержимое</string>
   <string id="20376">Оригинальное название</string>
-  <string id="20377">Обновить информацию о сериале</string>
-  <string id="20378">Обновить информацию о всех эпизодах?</string>
+  <string id="20377">Обновить сведения о сериале</string>
+  <string id="20378">Обновить сведения обо всех сериях?</string>
   <string id="20379">Указанная папка содержит отдельный сериал</string>
   <string id="20380">Не сканировать выбранную папку</string>
-  <string id="20381">СпеÑ\86иалÑ\8cное</string>
-  <string id="20382">Автоматически создавать эскизы для сезонов</string>
-  <string id="20383">Указанная папка содержит отдельное видео</string>
+  <string id="20381">Ð\94ополнениÑ\8f</string>
+  <string id="20382">Автоматически загружать эскизы для сезонов</string>
+  <string id="20383">Указанная папка содержит отдельный видеофайл</string>
   <string id="20384">Связать с сериалом</string>
   <string id="20385">Убрать связь с сериалом</string>
-  <string id="20386">Свежие фильмы</string>
-  <string id="20387">Свежие Ñ\8dпизодÑ\8b</string>
-  <string id="20388">Ð\9aиноÑ\81тудии</string>
-  <string id="20389">Музыкальные видео</string>
-  <string id="20390">Свежие Ð¼Ñ\83зÑ\8bкалÑ\8cнÑ\8bе Ð²Ð¸Ð´ÐµÐ¾</string>
-  <string id="20391">Музыкальное видео</string>
-  <string id="20392">Удалить музыкальное видео из медиатеки</string>
-  <string id="20393">Ð\94аннÑ\8bе Ð¾ Ð¼Ñ\83зÑ\8bкалÑ\8cном Ð²Ð¸Ð´ÐµÐ¾</string>
-  <string id="20394">Загрузка данных о музыкальном видео</string>
-  <string id="20395">Смешанное</string>
-  <string id="20396">Перейти к альбому по исполнителю</string>
+  <string id="20386">Ð\9fоÑ\81ледние фильмы</string>
+  <string id="20387">Ð\9fоÑ\81ледние Ñ\81еÑ\80ии</string>
+  <string id="20388">Студии</string>
+  <string id="20389">Муз. клипы</string>
+  <string id="20390">Ð\9fоÑ\81ледние ÐºÐ»Ð¸Ð¿Ñ\8b</string>
+  <string id="20391">Музыкальный клип</string>
+  <string id="20392">Удалить музыкальный клип из медиатеки</string>
+  <string id="20393">СведениÑ\8f Ð¾ ÐºÐ»Ð¸Ð¿Ðµ</string>
+  <string id="20394">Загрузка сведений о клипе…</string>
+  <string id="20395">Смешанный</string>
+  <string id="20396">Перейти к альбомам по исполнителям</string>
   <string id="20397">Перейти к альбому</string>
   <string id="20398">Играть песню</string>
-  <string id="20399">Перейти к музыкальным видео из альбома</string>
-  <string id="20400">Перейти к музыкальным видео по исполнителю</string>
-  <string id="20401">Играть музыкальное видео</string>
-  <string id="20402">Автоматически создавать эскизы для актеров</string>
-  <string id="20403">Установить эскиз для актера</string>
-  <string id="20405">Удалить закладку эпизода</string>
-  <string id="20406">Установить закладку эпизода</string>
-  <string id="20407">Настройки инфо-ресурса</string>
-  <string id="20408">Загрузка данных о музыкальном видео</string>
-  <string id="20409">Загрузка данных о сериале</string>
+  <string id="20399">Перейти к музыкальным клипам из альбома</string>
+  <string id="20400">Перейти к музыкальным клипам по исполнителю</string>
+  <string id="20401">Играть музыкальный клип</string>
+  <string id="20402">Автоматически загружать эскизы для актеров</string>
+  <string id="20403">Выбрать эскиз для актера</string>
+
+  <string id="20405">Удалить закладку серии</string>
+  <string id="20406">Создать закладку серии</string>
+  <string id="20407">Настройки инфоресурса</string>
+  <string id="20408">Загрузка сведений о музыкальном клипе…</string>
+  <string id="20409">Загрузка сведений о сериале…</string>
   <string id="20410">Трейлер</string>
-  <string id="20411">Объединить</string>
-  <string id="20412">Объединять сериалы</string>
-  <string id="20413">Получить FanArt</string>
-  <string id="20414">Показывать FanArt в медиатеке</string>
-  <string id="20415">Сканирование нового содержимого</string>
-  <string id="20416">Первый переданный</string>
-  <string id="20417">Автор сценария</string>
-  <string id="20418">Очищать имена файлов и папок</string>
+  <string id="20411">Без категорий</string>
+  <string id="20412">Не объединять серии сериалов в сезоны</string>
+  <string id="20413">Фанарт</string>
+  <string id="20414">Показывать фанарт в медиатеке</string>
+  <string id="20415">Сканирование нового содержимого…</string>
+  <string id="20416">Премьера</string>
+  <string id="20417">Сценарий</string>
+  <string id="20418"></string>
+  <string id="20419">Показывать метаданные в представлении файлов</string>
+
   <string id="20420">Никогда</string>
-  <string id="20421">только если один сезон</string>
+  <string id="20421">Если один сезон</string>
   <string id="20422">Всегда</string>
   <string id="20423">Есть трейлер</string>
-  <string id="20424">Ð\9bожÑ\8c</string>
-  <string id="20425">Слайдшоу FanArt-ов</string>
+  <string id="20424">Ð\9dеÑ\82</string>
+  <string id="20425">Слайд-шоу фанартов</string>
   <string id="20426">Экспортировать одним файлом или разделять</string>
   <string id="20427">на отдельные файлы для каждой записи?</string>
   <string id="20428">Одним файлом</string>
   <string id="20429">Разделять</string>
-  <string id="20430">Экспортировать эскизы и FanArt?</string>
-  <string id="20431">Перезаписывать старые файлы?</string>
+  <string id="20430">Экспортировать эскизы и фанарт?</string>
+  <string id="20431">Перезаписать файлы?</string>
   <string id="20432">Исключить путь из обновлений медиатеки</string>
-  <string id="20433">Извлечь мета-данные из медиафайла</string>
-  <string id="20434">Ð\9dабоÑ\80ы</string>
-  <string id="20435">УÑ\81Ñ\82ановиÑ\82Ñ\8c Ð¼Ð¸Ð½Ð¸Ð°Ñ\82Ñ\8eÑ\80Ñ\83 Ð´Ð»Ñ\8f Ð½Ð°Ð±Ð¾Ñ\80а Ñ\84илÑ\8cмов</string>
-  <string id="20436">Экспортировать миниатюры для актёров?</string>
+  <string id="20433">Извлекать метаданные из медиафайлов</string>
+  <string id="20434">Ð\9aиноÑ\86иклы</string>
+  <string id="20435">Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\8dÑ\81киз ÐºÐ¸Ð½Ð¾Ñ\86икла</string>
+  <string id="20436">Экспортировать эскизы актеров?</string>
   <string id="20437">Выбрать фанарт</string>
   <string id="20438">Локальный фанарт</string>
   <string id="20439">Без фанарта</string>
   <string id="20440">Текущий фанарт</string>
   <string id="20441">Внешний фанарт</string>
-  <string id="20442">Ð\98змениÑ\82Ñ\8c Ñ\81одеÑ\80жимое</string>
-  <string id="20443">Ð\92Ñ\8b Ñ\85оÑ\82иÑ\82е Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ\82Ñ\8c Ð¸Ð½Ñ\84омаÑ\86иÑ\8e для всех</string>
-  <string id="20444">элементов в данной папке?</string>
+  <string id="20442">Ð\98змениÑ\82Ñ\8c Ñ\82ип Ñ\81одеÑ\80жимого</string>
+  <string id="20443">Ð\9eбновиÑ\82Ñ\8c Ñ\81ведениÑ\8f для всех</string>
+  <string id="20444">объектов в данной папке?</string>
   <string id="20445">Фанарт</string>
-  <string id="20446">Найдена локально хранимая информация.</string>
-  <string id="20447">Ð\98гноÑ\80иÑ\80оваÑ\82Ñ\8c Ð¸ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ\82Ñ\8c Ð¸Ð· Ð¸нтернета?</string>
-  <string id="20448">Невозможно загрузить информацию</string>
+  <string id="20446">Найдены локальные сведения.</string>
+  <string id="20447">Ð\98гноÑ\80иÑ\80оваÑ\82Ñ\8c Ð¸ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ\82Ñ\8c Ð¸Ð· Ð\98нтернета?</string>
+  <string id="20448">Не удалось загрузить сведения</string>
   <string id="20449">Сервер недоступен.</string>
-  <string id="20450">Ð\96елаеÑ\82е Ð¿родолжить сканирование?</string>
+  <string id="20450">Ð\9fродолжить сканирование?</string>
   <string id="20451">Страны</string>
-  <string id="20452">эпизод</string>
-  <string id="20453">эпизоды</string>
+  <string id="20452">серия</string>
+  <string id="20453">серий</string>
+  <string id="20454">Слушатель</string>
+  <string id="20455">Слушателей</string>
+  <string id="20456">Выбрать фанарт киноцикла</string>
+  <string id="20457">Киноцикл</string>
+  <string id="20458">Объединять фильмы в циклы</string>
+  <!-- up to 21329 is reserved for the video db !! !-->
+
   <string id="21330">Показывать скрытые файлы и папки</string>
+
   <string id="21331">Клиент TuxBox</string>
-  <string id="21332">ВНИМАНИЕ: Целевое устройство TuxBox находится в режиме записи!</string>
+  <string id="21332">ВНИМАНИЕ. Целевое устройство TuxBox находится в режиме записи!</string>
   <string id="21333">Поток будет остановлен!</string>
-  <string id="21334">Неудачное переключение на канал %s!</string>
-  <string id="21335">Вы уверены, что хотите включить поток?</string>
+  <string id="21334">Не удалось переключиться на канал %s.</string>
+  <string id="21335">Включить поток?</string>
   <string id="21336">Подключение к: %s</string>
   <string id="21337">Устройство TuxBox</string>
-  <string id="21359">Добавить медиаресурс...</string>
-  <string id="21360">Включить доступ к медиатеке через UPnP</string>
+  <!-- up to 21355 is reserved for the TuxBox Client!! !-->
+
+  <string id="21359">Добавить медиаресурс…</string>
+  <string id="21360">Включить доступ к медиатеке по UPnP</string>
+
   <string id="21364">Изменить медиаресурс</string>
   <string id="21365">Удалить медиаресурс</string>
   <string id="21366">Папка субтитров</string>
   <string id="21367">Папка для фильмов и альтернативных субтитров</string>
-  <string id="21369">Включить мышь</string>
+  <string id="21368">Игнорировать шрифты субтитров ASS/SSA</string>
+
+  <string id="21369">Включить мышь и сенсорный экран</string>
   <string id="21370">Звуки интерфейса во время проигрывания</string>
   <string id="21371">Эскизы</string>
   <string id="21372">Установить регион DVD-проигрывателя</string>
   <string id="21373">Вывод видео</string>
   <string id="21374">Соотношение сторон видео</string>
-  <string id="21375">Ð\9eбÑ\8bÑ\87ное</string>
-  <string id="21376">Letterbox</string>
+  <string id="21375">Ð\9dоÑ\80малÑ\8cное</string>
+  <string id="21376">4:3</string>
   <string id="21377">Широкоформатное</string>
   <string id="21378">Включить 480p</string>
   <string id="21379">Включить 720p</string>
   <string id="21380">Включить 1080i</string>
   <string id="21381">Введите имя нового плейлиста</string>
-  <string id="21382">Показывать «Добавить источник» в списках файлов</string>
+  <string id="21382">Показывать "Добавить источник" в списках файлов</string>
   <string id="21383">Включить полосы прокрутки</string>
-  <string id="21384">Ð\9eÑ\82меÑ\87аÑ\82Ñ\8c Ð³Ð°Ð»Ð¾Ñ\87кой Ð¿Ñ\80оÑ\81моÑ\82Ñ\80енное Ð²Ð¸Ð´ÐµÐ¾ Ð² Ð¼ÐµÐ´Ð¸Ð°Ñ\82еке</string>
+  <string id="21384">Отмечать просмотренное видео в медиатеке</string>
   <string id="21385">Открыть</string>
   <string id="21386">Управление уровнем шума</string>
   <string id="21387">Скорость</string>
   <string id="21388">Тишина</string>
-  <string id="21389">Разрешить свои фоновые изображения</string>
+  <string id="21389">Разрешить выбор фоновых изображений</string>
   <string id="21390">Управление питанием</string>
   <string id="21391">Полная мощность</string>
   <string id="21392">Пониженная мощность</string>
   <string id="21393">Полное ожидание</string>
   <string id="21394">Пониженное ожидание</string>
-  <string id="21395">Невозможно кэшировать файлы размером более 4 гигабайт</string>
+  <string id="21395">Не удалось кэшировать файлы размером более 4 ГБ</string>
   <string id="21396">Глава</string>
-  <string id="21397">Ð\92Ñ\8bÑ\81ококаÑ\87еÑ\81Ñ\82веннÑ\8bе Ð¿Ð¸ÐºÑ\81елÑ\8cнÑ\8bе Ñ\88ейдеÑ\80Ñ\8b v2</string>
+  <string id="21397">Ð\9aаÑ\87еÑ\81Ñ\82веннÑ\8bе Ð¿Ð¸ÐºÑ\81елÑ\8cнÑ\8bе Ñ\88ейдеÑ\80Ñ\8b Ð². 2</string>
   <string id="21398">Проигрывать плейлист при запуске</string>
   <string id="21399">Анимация отскакивания панелей</string>
   <string id="21400">содержит</string>
   <string id="21403">не</string>
   <string id="21404">начинается с</string>
   <string id="21405">заканчивается на</string>
-  <string id="21406">больше чем</string>
-  <string id="21407">меньше чем</string>
+  <string id="21406">больше, чем</string>
+  <string id="21407">меньше, чем</string>
   <string id="21408">после</string>
   <string id="21409">перед</string>
   <string id="21410">в конце</string>
   <string id="21411">не в конце</string>
-  <string id="21412">Инфо-ресурсы</string>
-  <string id="21413">СÑ\82андаÑ\80Ñ\82нÑ\8bй Ð¸Ð½Ñ\84о-Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81 Ð´Ð»Ñ\8f Ñ\84илÑ\8cмов</string>
-  <string id="21414">СÑ\82андаÑ\80Ñ\82нÑ\8bй Ð¸Ð½Ñ\84о-Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81 Ð´Ð»Ñ\8f Ñ\81еÑ\80иалов</string>
-  <string id="21415">СÑ\82андаÑ\80Ñ\82нÑ\8bй Ð¸Ð½Ñ\84о-Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81 Ð´Ð»Ñ\8f Ð¼Ñ\83зÑ\8bкалÑ\8cного Ð²Ð¸Ð´ÐµÐ¾</string>
-  <string id="21416">РазÑ\80еÑ\88иÑ\82Ñ\8c Ð¸Ñ\81пÑ\80авлениÑ\8f Ð½Ð° Ñ\8fзÑ\8bке Ð¸Ð½Ñ\84о-Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81а</string>
+  <string id="21412">Инфоресурсы</string>
+  <string id="21413">Ð\98нÑ\84оÑ\80еÑ\81Ñ\83Ñ\80Ñ\81 Ð´Ð»Ñ\8f Ñ\84илÑ\8cмов Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e</string>
+  <string id="21414">Ð\98нÑ\84оÑ\80еÑ\81Ñ\83Ñ\80Ñ\81 Ð´Ð»Ñ\8f Ñ\81еÑ\80иалов Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e</string>
+  <string id="21415">Ð\98нÑ\84оÑ\80еÑ\81Ñ\83Ñ\80Ñ\81 Ð´Ð»Ñ\8f ÐºÐ»Ð¸Ð¿Ð¾Ð² Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e</string>
+  <string id="21416">Ð\98Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ñ\8fзÑ\8bк Ð¸Ð½Ñ\84оÑ\80еÑ\81Ñ\83Ñ\80Ñ\81а Ð¿Ñ\80и Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пноÑ\81Ñ\82и Ð¾Ñ\81новного</string>
   <string id="21417">- Настройки</string>
-  <string id="21418">Мультиязычность</string>
-  <string id="21419">Источники информации отсутствуют</string>
-  <string id="21420">Значение слишком большое</string>
-  <string id="21421">Правило smart-плейлиста</string>
+  <string id="21418">Многоязычность</string>
+  <string id="21419">Инфоресурсы отсутствуют</string>
+  <string id="21420">Значение для поиска</string>
+  <string id="21421">Правило смарт-плейлиста</string>
   <string id="21422">Выбрать объекты, в которых</string>
-  <string id="21423">Новое правило...</string>
-  <string id="21424">Ð\9eбÑ\8aекÑ\82Ñ\8b Ð´Ð¾Ð»Ð¶Ð½Ñ\8b Ñ\83довлеÑ\82воÑ\80Ñ\8fть</string>
+  <string id="21423">Новое правило</string>
+  <string id="21424">Ð\9eбÑ\8aекÑ\82Ñ\8b Ð´Ð¾Ð»Ð¶Ð½Ñ\8b Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вовать</string>
   <string id="21425">всем правилам</string>
   <string id="21426">одному или более правилам</string>
   <string id="21427">Ограничить до</string>
   <string id="21429">Упорядочить по</string>
   <string id="21430">возрастанию</string>
   <string id="21431">убыванию</string>
-  <string id="21432">Изменить smart-плейлист</string>
+  <string id="21432">Изменить смарт-плейлист</string>
   <string id="21433">Название плейлиста</string>
   <string id="21434">Найти объекты, у которых</string>
-  <string id="21435">Исправить</string>
-  <string id="21436">%i объект(ов)</string>
-  <string id="21437">СоздаÑ\82Ñ\8c Ð½Ð¾Ð²Ñ\8bй smart-плейлист</string>
+  <string id="21435">Изменить</string>
+  <string id="21436">Объектов: %i</string>
+  <string id="21437">Ð\9dовÑ\8bй Ñ\81маÑ\80Ñ\82-плейлист</string>
   <string id="21438">Диск %c</string>
-  <string id="21439">Изменить правила режима 'party'</string>
+  <string id="21439">Изменить правила режима "party"</string>
   <string id="21440">Домашняя папка</string>
   <string id="21441">Количество просмотров</string>
-  <string id="21442">Ð\9dазвание Ñ\8dпизода</string>
+  <string id="21442">Ð\9dазвание Ñ\81еÑ\80ии</string>
   <string id="21443">Разрешение видео</string>
-  <string id="21444">Каналы аудио</string>
+  <string id="21444">Каналов аудио</string>
   <string id="21445">Кодек видео</string>
   <string id="21446">Кодек аудио</string>
   <string id="21447">Язык аудио</string>
   <string id="21448">Язык субтитров</string>
-  <string id="21449">Пульт ДУ посылает коды нажатий клавиатуры</string>
-  <string id="21450">- Ð ÐµÐ´Ð°ÐºÑ\82иÑ\80овать</string>
-  <string id="21451">Требуется соединение с интернет.</string>
-  <string id="21452">Ещё</string>
+  <string id="21449">Пульт ДУ посылает коды нажатий клавиш</string>
+  <string id="21450">- Ð\98зменить</string>
+  <string id="21451">Требуется подключение к Интернету.</string>
+  <string id="21452">Еще…</string>
   <string id="21453">Корневая ФС</string>
+  <string id="21454">Кэш заполнен</string>
+  <string id="21455">Объем кэша недостаточен для непрерывного проигрывания</string>
+
+  <string id="21460">Расположение субтитров</string>
+  <string id="21461">Фиксированное</string>
+  <string id="21462">Снизу видео</string>
+  <string id="21463">Под видео</string>
+  <string id="21464">Сверху видео</string>
+  <string id="21465">Над видео</string>
+
   <string id="21800">Имя файла</string>
   <string id="21801">Путь к файлу</string>
   <string id="21802">Размер файла</string>
   <string id="21803">Дата и время файла</string>
   <string id="21804">№ в слайдшоу</string>
-  <string id="21805">Размеры</string>
+  <string id="21805">Разрешение</string>
   <string id="21806">Комментарий</string>
-  <string id="21807">Цветная / Ч-Б</string>
+  <string id="21807">Цвет / Ч-Б</string>
   <string id="21808">Алгоритм JPEG</string>
-  <string id="21820">Дата съемки</string>
+
+  <string id="21820">Дата/время</string>
   <string id="21821">Описание</string>
   <string id="21822">Производитель</string>
   <string id="21823">Модель фотоаппарата</string>
-  <string id="21824">EXIF комментарий</string>
+  <string id="21824">Комментарий EXIF</string>
   <string id="21825">Прошивка</string>
   <string id="21826">Диафрагма</string>
-  <string id="21827">Фокальная длинна</string>
-  <string id="21828">ФокÑ\83Ñ\81ное Ñ\80аÑ\81Ñ\81Ñ\82оÑ\8fние</string>
+  <string id="21827">Фокусное расстояние</string>
+  <string id="21828">Ð\94иÑ\81Ñ\82анÑ\86иÑ\8f Ñ\84окÑ\83Ñ\81иÑ\80овки</string>
   <string id="21829">Экспозиция</string>
   <string id="21830">Время экспозиции</string>
   <string id="21831">Сдвиг экспозиции</string>
   <string id="21834">Баланс белого</string>
   <string id="21835">Источник света</string>
   <string id="21836">Режим измерения</string>
-  <string id="21838">Цифровой zoom</string>
+  <string id="21837">Чувствительность ISO</string>
+  <string id="21838">Цифровое увеличение</string>
   <string id="21839">Ширина CCD</string>
-  <string id="21840">GPS широта</string>
-  <string id="21841">GPS долгота</string>
-  <string id="21842">GPS высота</string>
+  <string id="21840">Широта GPS</string>
+  <string id="21841">Долгота GPS</string>
+  <string id="21842">Высота GPS</string>
   <string id="21843">Ориентация</string>
+
   <string id="21860">Дополнительные категории</string>
   <string id="21861">Ключевые слова</string>
   <string id="21862">Заголовок</string>
   <string id="21871">Авторское право</string>
   <string id="21872">Название объекта</string>
   <string id="21873">Город</string>
-  <string id="21874">ШÑ\82аÑ\82</string>
+  <string id="21874">Ð\9eблаÑ\81Ñ\82Ñ\8c</string>
   <string id="21875">Страна</string>
-  <string id="21876">*Оригинальный Tx Reference</string>
+  <string id="21876">Оригинальный Tx Reference</string>
   <string id="21877">Дата создания</string>
   <string id="21878">Признак авторского права</string>
   <string id="21879">Код страны</string>
   <string id="21880">Справочная служба</string>
-  <string id="21881">Разрешить контроль XBMC через UPnP</string>
-  <string id="21882">Попытаться пропустить вступление перед DVD-меню</string>
-  <string id="21883">Оцифрованные AudioCD диски</string>
-  <string id="21884">Данные о всех исполнителях</string>
-  <string id="21885">Загрузка данных об альбоме</string>
-  <string id="21886">Загрузка данных об исполнителе</string>
+  <string id="21881">Разрешить управление XBMC по UPnP</string>
+  <string id="21882">Пытаться пропустить вступление перед меню DVD</string>
+  <string id="21883">Оцифрованные аудио-CD</string>
+  <string id="21884">Данные обо всех исполнителях</string>
+  <string id="21885">Загрузка данных об альбоме</string>
+  <string id="21886">Загрузка данных об исполнителе</string>
   <string id="21887">Биография</string>
   <string id="21888">Дискография</string>
-  <string id="21889">Поиск исполнителя</string>
+  <string id="21889">Поиск исполнителя</string>
   <string id="21890">Выберите исполнителя</string>
-  <string id="21891">Ð\94аннÑ\8bе об исполнителе</string>
+  <string id="21891">СведениÑ\8f об исполнителе</string>
   <string id="21892">Инструменты</string>
-  <string id="21893">РодилÑ\81Ñ\8f(аÑ\81Ñ\8c)</string>
-  <string id="21894">Ð\9eбÑ\80азовалиÑ\81Ñ\8c</string>
+  <string id="21893">Рождение</string>
+  <string id="21894">ФоÑ\80миÑ\80ование</string>
   <string id="21895">Темы</string>
-  <string id="21896">Распались</string>
-  <string id="21897">Умер(ла)</string>
-  <string id="21898">Годы творч-ва</string>
-  <string id="21899">Метка</string>
-  <string id="21900">Родился(ась)/Образовались</string>
+  <string id="21896">Распад</string>
+  <string id="21897">Смерть</string>
+  <string id="21898">Годы активности</string>
+  <string id="21899">Студия</string>
+  <string id="21900">Рождение/формирование</string>
+
+  <!-- strings 21900 thru 21999 reserved for slideshow info -->
+
   <string id="22000">Обновлять медиатеку при запуске</string>
-  <string id="22001">Скрывать статус обновления медиатеки</string>
+  <string id="22001">Скрывать состояние обновления медиатеки</string>
   <string id="22002">- Суффикс DNS</string>
-  <string id="22003">%2.3fс</string>
-  <string id="22004">Задержано на: %2.3fс</string>
-  <string id="22005">Опережает на: %2.3fс</string>
+
+  <string id="22003">%2.3f с.</string>
+  <string id="22004">Задержка на %2.3f с.</string>
+  <string id="22005">Опережение на %2.3f с.</string>
   <string id="22006">Смещение субтитров</string>
   <string id="22007">Производитель OpenGL:</string>
-  <string id="22008">РендеÑ\80еÑ\80 OpenGL:</string>
+  <string id="22008">Ð\9eбÑ\80абоÑ\82Ñ\87ик OpenGL:</string>
   <string id="22009">Версия OpenGL:</string>
   <string id="22010">Температура GPU:</string>
   <string id="22011">Температура CPU:</string>
   <string id="22014">Затемнять при паузе во время просмотра видео</string>
   <string id="22015">Все записи</string>
   <string id="22016">По имени</string>
-  <string id="22017">Ð\9fо Ð³Ñ\80Ñ\83пппе</string>
+  <string id="22017">По группе</string>
   <string id="22018">Каналы прямой трансляции</string>
   <string id="22019">Записи по имени</string>
-  <string id="22020">РÑ\83ководÑ\81Ñ\82во</string>
-  <string id="22021">Ð\94опÑ\83Ñ\81Ñ\82имаÑ\8f Ð¾Ñ\88ибка Ð² Ñ\81ооÑ\82ноÑ\88ении Ñ\81Ñ\82оÑ\80он</string>
-  <string id="22022">Показывать видео файлы в списках</string>
+  <string id="22020">Ð\9fÑ\80огÑ\80амма</string>
+  <string id="22021">Ð\94опÑ\83Ñ\81Ñ\82имое Ð¸Ñ\81кажение Ð´Ð»Ñ\8f Ñ\83менÑ\8cÑ\88ениÑ\8f Ñ\87еÑ\80нÑ\8bÑ\85 Ð¿Ð¾Ð»Ð¾Ñ\81</string>
+  <string id="22022">Показывать видеофайлы в списках</string>
   <string id="22023">Производитель DirectX:</string>
   <string id="22024">Версия Direct3D:</string>
+
+  <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">Шрифт</string>
   <string id="22031">- Размер</string>
   <string id="22032">- Цвета</string>
   <string id="22033">- Кодировка</string>
-  <string id="22034">Экспортировать текст караоке в формате HTML</string>
-  <string id="22035">Экспортировать текст караоке в формате CSV</string>
-  <string id="22036">Импортировать текст караоке...</string>
+  <string id="22034">Экспорт в формате HTML</string>
+  <string id="22035">Экспорт в формате CSV</string>
+  <string id="22036">Импортировать текст караоке</string>
   <string id="22037">Показывать выбор песни автоматически</string>
-  <string id="22038">Экспортировать текст караоке...</string>
+  <string id="22038">Экспортировать текст караоке</string>
   <string id="22039">Введите номер песни</string>
   <string id="22040">белый/зеленый</string>
   <string id="22041">белый/красный</string>
   <string id="22042">белый/синий</string>
   <string id="22043">черный/белый</string>
-  <string id="22079">Действие по-умолчанию при выборе</string>
+
+  <string id="22079">Действие по умолчанию при выборе</string>
   <string id="22080">Выбрать</string>
-  <string id="22081">Показать инфо</string>
-  <string id="22082">Ещё...</string>
-  <string id="22083">Играть всё</string>
+  <string id="22081">Показать сведения</string>
+  <string id="22082">Еще…</string>
+  <string id="22083">Играть все</string>
+
   <string id="23049">Телетекст недоступен</string>
   <string id="23050">Активировать телетекст</string>
   <string id="23051">Часть %i</string>
-  <string id="23052">Буферизация %i байт</string>
-  <string id="23053">Остановка</string>
-  <string id="23054">Запуск</string>
+  <string id="23052">Буферизация: %i байт</string>
+  <string id="23053">Остановка…</string>
+  <string id="23054">Запуск…</string>
+
+  <!-- strings 23100 thru 23150 reserved for external player -->
   <string id="23100">Активирован внешний проигрыватель</string>
-  <string id="23101">Нажмите ОК для завершения плеера</string>
-  <string id="23104">Нажмите ОК когда проигрывание завершится</string>
+  <string id="23101">Нажмите ОК, чтобы закрыть проигрыватель</string>
+
+  <string id="23104">Нажмите ОК, когда проигрывание завершится</string>
+
+  <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
   <string id="24000">Дополнение</string>
   <string id="24001">Дополнения</string>
-  <string id="24002">Опции дополнения</string>
-  <string id="24003">Информация о Дополнении</string>
+  <string id="24002">Параметры дополнения</string>
+  <string id="24003">Сведения о дополнении</string>
+
   <string id="24005">Источники данных</string>
-  <string id="24007">Ð\98нÑ\84оÑ\80маÑ\86иÑ\8f Ð¾ Ñ\84илÑ\8cме</string>
+  <string id="24007">СведениÑ\8f Ð¾ Ñ\84илÑ\8cмаÑ\85</string>
   <string id="24008">Заставка</string>
   <string id="24009">Скрипт</string>
   <string id="24010">Визуализация</string>
   <string id="24011">Репозиторий дополнений</string>
   <string id="24012">Субтитры</string>
-  <string id="24013">Тексты</string>
-  <string id="24014">Информация о ТВ</string>
-  <string id="24015">Информация о клипе</string>
-  <string id="24016">Информация об альбоме</string>
-  <string id="24017">Информация о исполнителе</string>
+  <string id="24013">Тексты песен</string>
+  <string id="24014">Сведения о сериалах</string>
+  <string id="24015">Сведения о муз. клипах</string>
+  <string id="24016">Сведения об альбомах</string>
+  <string id="24017">Сведения об исполнителях</string>
+  <string id="24018">Службы</string>
+
   <string id="24020">Настроить</string>
-  <string id="24021">Ð\9eÑ\82клÑ\8eÑ\87ено</string>
-  <string id="24022">Ð\92клÑ\8eÑ\87ено</string>
+  <string id="24021">Ð\9eÑ\82клÑ\8eÑ\87иÑ\82Ñ\8c</string>
+  <string id="24022">Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c</string>
   <string id="24023">Дополнение отключено</string>
   <string id="24027">Погода</string>
   <string id="24028">Weather.com (стандартно)</string>
-  <string id="24030">Ð\94анное Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ð½Ð°Ñ\81Ñ\82Ñ\80оено</string>
+  <string id="24030">Ð\9dевозможно Ð½Ð°Ñ\81Ñ\82Ñ\80оиÑ\82Ñ\8c Ð´Ð°Ð½Ð½Ð¾Ðµ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ</string>
   <string id="24031">Ошибка при загрузке настроек</string>
-  <string id="24032">Ð\92Ñ\81е Ð\94ополнения</string>
-  <string id="24033">Ð\9fолÑ\83Ñ\87иÑ\82Ñ\8c Ð\94ополнения</string>
+  <string id="24032">Ð\92Ñ\81е Ð´ополнения</string>
+  <string id="24033">Ð\97агÑ\80Ñ\83зиÑ\82Ñ\8c Ð´ополнения</string>
   <string id="24034">Проверить обновления</string>
-  <string id="24035">Принуд. обновление</string>
+  <string id="24035">Принудительное обновление</string>
   <string id="24036">Список изменений</string>
-  <string id="24037">Ð\94еинÑ\81Ñ\82алиÑ\80овать</string>
+  <string id="24037">Удалить</string>
   <string id="24038">Установить</string>
-  <string id="24039">Ð\9eÑ\82клÑ\8eÑ\87иÑ\82Ñ\8c Ð\94ополнения</string>
+  <string id="24039">Ð\9eÑ\82клÑ\8eÑ\87еннÑ\8bе Ð´ополнения</string>
   <string id="24040">(Очистить текущие настройки)</string>
-  <string id="24041">Установить из файла *.zip</string>
-  <string id="24042">Загружается %i%%</string>
-  <string id="24043">Доступные Обновления</string>
-  <string id="24050">Доступные Дополнения</string>
+  <string id="24041">Установить из файла ZIP</string>
+  <string id="24042">Загружается: %i%%…</string>
+  <string id="24043">Доступные обновления</string>
+  <string id="24044">Отсутствуют нужные компоненты</string>
+  <string id="24045">Неправильная структура дополнения</string>
+  <string id="24046">%s используется установленными дополнениями</string>
+  <string id="24047">Невозможно удалить дополнение</string>
+  <string id="24048">Вернуть</string>
+
+  <string id="24050">Доступные дополнения</string>
   <string id="24051">Версия:</string>
   <string id="24052">Соглашение</string>
   <string id="24053">Лицензия:</string>
   <string id="24054">Список изменений</string>
-  <string id="24059">Вы желаете включить это Дополнение?</string>
-  <string id="24060">Ð\92Ñ\8b Ð¶ÐµÐ»Ð°ÐµÑ\82е Ð¾Ñ\82клÑ\8eÑ\87иÑ\82Ñ\8c Ð´Ð°Ð½Ð½Ð¾Ðµ Ð\94ополнение?</string>
-  <string id="24061">Доступны обновления для дополнений!</string>
-  <string id="24062">Ð\92клÑ\8eÑ\87еннÑ\8bе Ð\94ополнения</string>
-  <string id="24063">Автобновление</string>
+  <string id="24059">Включить это дополнение?</string>
+  <string id="24060">Ð\9eÑ\82клÑ\8eÑ\87иÑ\82Ñ\8c Ñ\8dÑ\82о Ð´ополнение?</string>
+  <string id="24061">Доступны обновления для дополнений.</string>
+  <string id="24062">Ð\92клÑ\8eÑ\87еннÑ\8bе Ð´ополнения</string>
+  <string id="24063">Автообновление</string>
   <string id="24064">Дополнение включено</string>
   <string id="24065">Дополнение обновлено</string>
   <string id="24066">Отменить загрузку дополнений?</string>
-  <string id="24067">Загружающиеся Дополнения:</string>
+  <string id="24067">Загружаемые дополнения</string>
   <string id="24068">Доступно обновление</string>
   <string id="24069">Обновить</string>
-  <string id="24070">Дополнение не может быть использовано</string>
-  <string id="24071">Произошла неведомая ошибка</string>
+
+  <string id="24070">Не удалось загрузить дополнение</string>
+  <string id="24071">Неизвестная ошибка.</string>
   <string id="24072">Требуется настройка</string>
-  <string id="24073">Невозможно подключиться</string>
+  <string id="24073">Не удалось подключиться</string>
   <string id="24074">Требуется перезапуск</string>
   <string id="24075">Отключить</string>
-  <string id="24080">Попробовать переподключиться?</string>
+  <string id="24076">Требуемое дополнение</string>
+  <string id="24080">Подключиться повторно?</string>
   <string id="24089">Дополнение перезапускается</string>
   <string id="24090">Заблокировать менеджер дополнений</string>
-  <string id="24096">Аддон помечен в репозитории как испорченый.</string>
-  <string id="24097">Вы желаете отключить его в вашей системе?</string>
-  <string id="24098">Испорчен</string>
-  <string id="24099">Вы желаете переключиться на эту обложку?</string>
+
+  <string id="24094">(текущ.)</string>
+  <string id="24095">(заблокирован.)</string>
+  <string id="24096">Дополнение помечено в репозитории как испорченное.</string>
+  <string id="24097">Отключить его в системе?</string>
+  <string id="24098">Испорчено</string>
+  <string id="24099">Переключиться на эту обложку?</string>
+  <string id="24100">Для данной функции требуется дополнение:</string>
+  <string id="24101">Загрузить это дополнение?</string>
   <string id="25000">Уведомления</string>
+
+  <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="29800">Режим медиатеки</string>
   <string id="29801">Клавиатура QWERTY</string>
-  <string id="29802">Включен режим Passthrough Audio</string>
+  <string id="29802">Прямой вывод звука</string>
+
+  <!-- strings 30000 thru 30999 reserved for plugins and plugin settings --><!-- strings 31000 thru 31999 reserved for skins --><!-- strings 32000 thru 32999 reserved for scripts --><!-- strings 33000 thru 33999 reserved for common strings used in addons -->
   <string id="33001">Качество трейлера</string>
   <string id="33002">Поток</string>
-  <string id="33003">СкаÑ\87ать</string>
-  <string id="33004">СкаÑ\87ать и проиграть</string>
-  <string id="33005">СкаÑ\87ать и сохранить</string>
+  <string id="33003">Ð\97агÑ\80Ñ\83зить</string>
+  <string id="33004">Ð\97агÑ\80Ñ\83зить и проиграть</string>
+  <string id="33005">Ð\97агÑ\80Ñ\83зить и сохранить</string>
   <string id="33006">Сегодня</string>
   <string id="33007">Завтра</string>
-  <string id="33008">Сохраняем</string>
-  <string id="33009">Копируем</string>
-  <string id="33010">УÑ\81Ñ\82ановка Ð¿Ñ\83Ñ\82и Ð´Ð»Ñ\8f Ñ\81каÑ\87иваниÑ\8f</string>
+  <string id="33008">Сохранение…</string>
+  <string id="33009">Копирование…</string>
+  <string id="33010">Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ð¿Ð°Ð¿ÐºÑ\83 Ð´Ð»Ñ\8f Ð·Ð°Ð³Ñ\80Ñ\83зки</string>
   <string id="33011">Длительность поиска</string>
   <string id="33012">Короткая</string>
   <string id="33013">Длинная</string>
-  <string id="33014">Использовать DVD player вместо обычного</string>
-  <string id="33015">Предлагать скачать видео перед проигрыванием</string>
+  <string id="33014">Использовать проигрыватель DVD вместо обычного</string>
+  <string id="33015">Предлагать загрузку видео перед проигрыванием</string>
   <string id="33016">Клипы</string>
-  <string id="33017">Ð\94лÑ\8f Ð²ÐºÐ»Ñ\8eÑ\87ениÑ\8f Ð½ÐµÐ¾Ð±Ñ\85одимо Ð¿ÐµÑ\80езапÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ð¼Ð¾Ð´Ñ\83лÑ\8c</string>
+  <string id="33017">Ð\9fеÑ\80езапÑ\83Ñ\81Ñ\82иÑ\82е Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ, Ñ\87Ñ\82обÑ\8b Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c ÐµÐ³Ð¾</string>
   <string id="33018">Сегодня вечером</string>
   <string id="33019">Завтра вечером</string>
-  <string id="33020">Условие</string>
+  <string id="33020">Условия</string>
   <string id="33021">Осадки</string>
   <string id="33022">Осадки</string>
   <string id="33023">Влажность</string>
-  <string id="33024">Ощущается как</string>
-  <string id="33025">Соблюдается</string>
+  <string id="33024">Ощущается</string>
+  <string id="33025">Ð\9dаблюдается</string>
   <string id="33026">Отклонение от нормы</string>
   <string id="33027">Восход</string>
   <string id="33028">Закат</string>
-  <string id="33029">Ð\9fодÑ\80обноÑ\81Ñ\82и</string>
-  <string id="33030">Outlook</string>
-  <string id="33031">Coverflow</string>
-  <string id="33032">Translate text</string>
-  <string id="33033">Map list %s category</string>
-  <string id="33034">36 Hour</string>
+  <string id="33029">СведениÑ\8f</string>
+  <string id="33030">Наблюдение</string>
+  <string id="33031">Карусель постеров</string>
+  <string id="33032">Перевести текст</string>
+  <string id="33033">Категория списка карт: %s</string>
+  <string id="33034">36 часов</string>
   <string id="33035">Карты</string>
-  <string id="33036">Hourly</string>
-  <string id="33037">Weekend</string>
-  <string id="33038">%s day</string>
-  <string id="33049">Сигнал</string>
-  <string id="33050">СигналÑ\8b</string>
-  <string id="33051">Choose Your</string>
+  <string id="33036">Ежечасно</string>
+  <string id="33037">Выходные</string>
+  <string id="33038">%s дн.</string>
+  <string id="33049">Ð\9fÑ\80едÑ\83пÑ\80еждение</string>
+  <string id="33050">Ð\9fÑ\80едÑ\83пÑ\80еждениÑ\8f</string>
+  <string id="33051">Выберите</string>
   <string id="33052">Проверить</string>
   <string id="33053">Настройте</string>
   <string id="33054">Сезоны</string>
   <string id="33056">Смотрите</string>
   <string id="33057">Слушайте</string>
   <string id="33058">Просматривайте</string>
-  <string id="33059">Ð\9dаÑ\81Ñ\82Ñ\80аивайте</string>
-  <string id="33060">Вкл/выкл</string>
+  <string id="33059">Ð\9dаÑ\81Ñ\82Ñ\80ойте</string>
+  <string id="33060">Вкл./выкл.</string>
   <string id="33061">Меню</string>
   <string id="33062">Воспроизводите</string>
-  <string id="33063">Ð\9dаÑ\81Ñ\82Ñ\80ойки</string>
+  <string id="33063">Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b</string>
   <string id="33065">Редактор</string>
-  <string id="33066">About your</string>
-  <string id="33067">Star rating</string>
+  <string id="33066">Сведения о</string>
+  <string id="33067">Рейтинг</string>
   <string id="33068">Фон</string>
   <string id="33069">Варианты фона</string>
   <string id="33070">Свой фон</string>
   <string id="33071">Свои фоны</string>
-  <string id="33072">Просмотреть Readme</string>
-  <string id="33073">Просмотреть Changelog</string>
-  <string id="33074">Ð\94аннаÑ\8f Ð²ÐµÑ\80Ñ\81иÑ\8f %s Ñ\82Ñ\80ебÑ\83еÑ\82</string>
-  <string id="33075">веÑ\80Ñ\81иÑ\8e XBMC revision %s или новее.</string>
-  <string id="33076">Ð\9fожалÑ\83йÑ\81Ñ\82а Ð¾бновите XBMC.</string>
-  <string id="33077">Данные не найдены!</string>
+  <string id="33072">Просмотреть информацию</string>
+  <string id="33073">Просмотреть список изменений</string>
+  <string id="33074">Ð\94лÑ\8f Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð²ÐµÑ\80Ñ\81ии %s Ñ\82Ñ\80ебÑ\83еÑ\82Ñ\81Ñ\8f</string>
+  <string id="33075">веÑ\80Ñ\81иÑ\8f XBMC %s или новее.</string>
+  <string id="33076">Ð\9eбновите XBMC.</string>
+  <string id="33077">Данных не найдено.</string>
   <string id="33078">Следующая страница</string>
   <string id="33079">Нравится</string>
   <string id="33080">Не нравится</string>
-  <string id="33081">ЭÑ\82ом Ñ\84айл Ñ\81оÑ\81Ñ\82оиÑ\82 Ð¸Ð· Ð½ÐµÑ\81колÑ\8cкиÑ\85, выберите часть для проигрывания.</string>
+  <string id="33081">СоÑ\81Ñ\82авной Ñ\84айл; выберите часть для проигрывания.</string>
   <string id="33082">Путь к скрипту</string>
-  <string id="33083">Включить свою кнопку скрипта</string>
+  <string id="33083">Включить кнопку выбранного скрипта</string>
+
+  <string id="33100">Не удалось запустить</string>
+  <string id="33101">Веб-сервер</string>
+  <string id="33102">Сервер событий</string>
+  <string id="33103">Сервер удаленного доступа</string>
+
+  <string id="33200">Обнаружено новое подключение</string>
+
+  <!-- translators: no need to add these to your language files -->
+  <string id="34000">Lame</string>
+  <string id="34001">Vorbis</string>
+  <string id="34002">Wav</string>
+  <string id="34003">DXVA2</string>
+  <string id="34004">VAAPI</string>
+  <string id="34005">Flac</string>
+
   <string id="34100">Конфигурация динамиков</string>
+  <string id="34101">2.0</string>
+  <string id="34102">2.1</string>
+  <string id="34103">3.0</string>
+  <string id="34104">3.1</string>
+  <string id="34105">4.0</string>
+  <string id="34106">4.1</string>
+  <string id="34107">5.0</string>
+  <string id="34108">5.1</string>
+  <string id="34109">7.0</string>
+  <string id="34110">7.1</string>
+  <!-- 34112-34200 reserved for future use -->
+
+  <string id="34201">Не удается найти следующий файл</string>
+  <string id="34202">Не удается найти предыдущий файл</string>
+
+  <string id="34300">Не удалось запустить zeroconf</string>
+  <string id="34301">Проверьте, установлена ли служба Apple Bonjour. См. журнал.</string>
+
+  <string id="34400">Обработчик видео</string>
+  <string id="34401">Не удалось активировать фильтры видео. Используется масштабирование bilinear.</string>
+  <string id="34402">Не удалось активировать аудиоустройство</string>
+  <string id="34403">Проверьте настройки аудио</string>
+
+  <string id="35000">Периферия</string>
+
+  <string id="35001">Типовое HID-устройство</string>
+  <string id="35002">Типовой сетевой адаптер</string>
+  <string id="35003">Типовой диск</string>
+  <string id="35004">Для этой периферии&#10;нет настроек.</string>
+  <string id="35005">Настроено новое устройство</string>
+  <string id="35006">Устройство удалено</string>
+  <string id="35007">Раскладка для этого устройства</string>
+  <string id="35008">Раскладка включена</string>
+
+  <string id="35500">Расположение</string>
+  <string id="35501">Класс</string>
+  <string id="35502">Название</string>
+  <string id="35503">Производитель</string>
+  <string id="35504">ID продукта</string>
+
+  <string id="36000">Адаптер Pulse-Eight CEC</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Включить дополнительные команды клавиатуры</string>
+  <string id="36003">Включить дополнительные команды ДУ</string>
+  <string id="36004">Нажмите настраиваемую кнопку "user"</string>
+  <string id="36005">Включить дополнительные команды</string>
+  <string id="36006">Не удалось открыть адаптер</string>
+  <string id="36007">Включать ТВ при старте XBMC</string>
+  <string id="36008">Выключать устройства при выходе из XBMC</string>
+  <string id="36009">Переводить устройства в спящий режим при активной заставке</string>
+  <string id="36010"></string>
+  <string id="36011">Не удалось обнаружить порт CEC. Настройте его вручную.</string>
+  <string id="36012">Не удалось обнаружить адаптер CEC.</string>
+  <string id="36013">Неподдерживаемая версия интерфейса libcec. %d выше, чем версия, поддерживаемая XBMC (%d)</string>
+  <string id="36014">Переводить этот ПК в режим ожидания при выключении ТВ</string>
+  <string id="36015">Номер порта HDMI</string>
+  <string id="36016">Подключено</string> <!-- max. 13 characters -->
+  <string id="36017">Адаптер найден, но libcec недоступен</string>
+  <string id="36018">Использовать языковые настройки ТВ</string>
 </strings>
index f6594c6..8f8d425 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <!--Translator: Tadej Novak-->
 <!--Email: tadej@tano.si-->
-<!--Date of translation: 20/08/2011-->
+<!--Date of translation: 18/02/2012-->
 <!--$Revision$-->
 <strings>
   <string id="0">Programi</string>
 
   <string id="1260">Oznani storitve drugim sistemom preko Zeroconf</string>
 
+  <string id="1270">Dovoli XBMC sprejemanje vsebin AirPlay</string>
+  <string id="1271">Ime naprave</string>
+  <string id="1272">- Zaščiti z geslom</string>
+
   <string id="1300">Poljubna zvočna naprava</string>
   <string id="1301">Poljubna naprava za preusmeritev zvoka</string>
 
   <string id="10020">Skripte</string>
   <string id="10021">Spletni brskalnik</string>
 
+  <string id="10025">Videi</string>
   <string id="10028">Video/Predvajalni seznam</string>
+  <string id="10029">Prijavno okno</string>
   <string id="10034">Nastavitve - Profili</string>
+  <string id="10040">Brskalnik dodatkov</string>
 
   <string id="10100">Da/Ne dialog</string>
   <string id="10101">Dialog napredka</string>
   <string id="16020">Razpletanje</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (obrnjeno)</string>
-  <string id="16023">Uporaba prepletanja</string>
+  <string id="16023"></string>
   <string id="16024">Preklic...</string>
   <string id="16025">Vnesite ime izvajalca</string>
   <string id="16026">Predvajanje ni uspelo</string>
   <string id="16034">Ne morem pridobiti pesmi iz baze</string>
   <string id="16035">Predvajalni seznam zabavnega načina</string>
   <string id="16036">Razpletanje (Polovično)</string>
+  <string id="16037">Uporabi razpletanje videa</string>
+  <string id="16038">Metoda razpletanja</string>
+  <string id="16039">Izključeno</string>
+  <string id="16040">Avtomatsko</string>
+  <string id="16041">Vključeno</string>
 
   <string id="16100">Vsi posnetki</string>
   <string id="16101">Nepogledani</string>
   <string id="16309">Sinc (programsko)</string>
   <string id="16310">Temporal</string>
   <string id="16311">Temporal/Spatial</string>
-  <string id="16312">(VDPAU)Zmanjševanje šuma</string>
-  <string id="16313">(VDPAU)Ostrenje</string>
+  <string id="16312">(VDPAU) Zmanjševanje šuma</string>
+  <string id="16313">(VDPAU) Ostrenje</string>
   <string id="16314">Inverse Telecine</string>
   <string id="16315">Lanczos3 optimalno</string>
   <string id="16316">Samodejno</string>
-  <string id="16317">Temporal (Half)</string>
-  <string id="16318">Temporal/Spatial (Half)</string>
+  <string id="16317">Temporal (Polovično)</string>
+  <string id="16318">Temporal/Spatial (Polovično)</string>
   <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 optimized</string>
+  <string id="16324">Programski Blend</string>
 
   <string id="16400">Post-procesiranje</string>
 
   <string id="20258">MythTV odjemalec</string>
   <string id="20259">Omrežni datotečni sistem (NFS)</string>
   <string id="20260">Varna lupina (SSH/SFTP)</string>
+  <string id="20261">Apple Filing protokol (AFP)</string>
 
   <string id="20300">Mapa spletnega strežnika (HTTP)</string>
   <string id="20301">Mapa spletnega strežnika (HTTPS)</string>
   <string id="20327">na privzete vrednosti.</string>
   <string id="20328">Prebrskaj za ciljem</string>
 
+  <string id="20329">Filmi so v ločenih mapah, ki se ujemajo z naslovom filma</string>
   <string id="20330">Uporabi imena map za poizvedbe</string>
   <string id="20331">Datoteka</string>
   <string id="20332">Uporabi ime datoteke ali mape v poizvedbah?</string>
   <string id="20416">Prvič na sporedu</string>
   <string id="20417">Scenarist</string>
   <string id="20418"></string>
-  <string id="20419">Prikaži podrobnosti v pogledu datotek</string>
+  <string id="20419">Zamenjaj imena datotek z naslovi v knjižnici</string>
 
   <string id="20420">Nikoli</string>
   <string id="20421">Če vsebuje le eno sezono</string>
   <string id="20454">Listener</string>
   <string id="20455">Listeners</string>
   <string id="20456">Nastavi ozadje filmske zbirke</string>
+  <string id="20457">Filmska zbirka</string>
+  <string id="20458">Združi filme v zbirke</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Prikaži skrite datoteke in mape</string>
   <string id="21365">Odstrani multimedijsko skupno rabo</string>
   <string id="21366">Mapa s podnapisi</string>
   <string id="21367">Film &amp; dodatna mapa s podnapisi</string>
-  
-  <string id="21369">Vključi miško</string>
+  <string id="21368">Ponastavi pisave podnapisov ASS/SSA</string>
+
+  <string id="21369">Vključi miško in podporo za zaslone na dotik</string>
   <string id="21370">Vključi navigacijske zvoke med predvajanjem vsebine</string>
   <string id="21371">Sličica</string>
   <string id="21372">Vsiljena DVD regija</string>
   <string id="21451">Potrebna je internetna povezava.</string>
   <string id="21452">Prenesi več...</string>
   <string id="21453">Korenski datotečni sistem</string>
+  <string id="21454">Začasni pomnilnik poln</string>
+  <string id="21455">Začasni pomnilnik se je zapolnil, preden je bila dosežen nivo za tekoče predvajanje</string>
+
+  <string id="21460">Položaj podnapisov</string>
+  <string id="21461">Fiksno</string>
+  <string id="21462">Dno videa</string>
+  <string id="21463">Pod videom</string>
+  <string id="21464">Vrh videa</string>
+  <string id="21465">Nad videom</string>
 
   <string id="21800">Ime datoteke</string>
   <string id="21801">Pot datoteke</string>
   <string id="24073">Ni se mogoče povezati</string>
   <string id="24074">Potrebuje ponoven zagon</string>
   <string id="24075">Onemogoči</string>
+  <string id="24076">Zahtevan dodatek</string>
   <string id="24080">Poskusim ponovno povezati?</string>
   <string id="24089">Ponovni zagoni dodatkov</string>
   <string id="24090">Zakleni upravljalnik z dodatki</string>
   <string id="24097">Ga želite onemogočiti na vašem sistemu?</string>
   <string id="24098">Nedelujoč</string>
   <string id="24099">Želite preklopiti na to preobleko?</string>
+  <string id="24100">Za uporabo te funkcije potrebujete dodatek:</string>
+  <string id="24101">Želite prenesti ta dodatek?</string>
   <string id="25000">Obvestila</string>
 
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="33102">Strežnik dogodkov</string>
   <string id="33103">Strežnik oddaljene komunikacije</string>
 
+  <string id="33200">Zaznana nova povezava</string>
+
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
 
   <string id="34201">Ni mogoče najti naslednjega predmeta za predvajanje</string>
   <string id="34202">Ni mogoče najti prejšnjega predmeta za predvajanje</string>
+
+  <string id="35000">Naprave</string>
+
+  <string id="35001">Generična naprava HID</string>
+  <string id="35002">Generični omrežni vmesnik</string>
+  <string id="35003">Generični disk</string>
+  <string id="35004">Za to napravo ni na voljo nobenih dodatnih nastavitev.</string>
+  <string id="35005">Dodana nova naprava</string>
+  <string id="35006">Odstranjena naprava</string>
+  <string id="35007">Bližnjice za uporabo te naprave</string>
+  <string id="35008">Vključene bližnjice</string>
+
+  <string id="35500">Lokacija</string>
+  <string id="35501">Razred</string>
+  <string id="35502">Ime</string>
+  <string id="35503">Proizvajalec</string>
+  <string id="35504">ID izdelka</string>
+
+  <string id="36000">Pulse-Eight CEC adapter</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Preklopi na upravljanje s stranjo tipkovnice</string>
+  <string id="36003">Preklopi na upravljanje s stranjo daljinskega upravljalnika</string>
+  <string id="36004">Pritisni gumb "uporabnik"</string>
+  <string id="36005">Vključi ukaz za menjavo strani</string>
+  <string id="36006">Ni mogoče odpreti adapterja</string>
+  <string id="36007">Vključi TV ob zagonu XBMC</string>
+  <string id="36008">Izključi naprave ob izhodu iz XBMC</string>
+  <string id="36009">Postavi naprave v stanje pripravljenosti ob ohranjevalniku zaslona</string>
+  <string id="36010"></string>
+  <string id="36011">Ni mogoče zaznati vrat CEC. Nastavite jih ročno.</string>
+  <string id="36012">Ni mogoče zaznati adapterja CEC.</string>
+  <string id="36013">Nepodprta različica libcec. %d je višja, kot jo podpira XBMC (%d)</string>
+  <string id="36014">Postavi računalnik v stanje pripravljenosti, ko se ugasne TV</string>
+  <string id="36015">Št. vrat HDMI</string>
+  <string id="36016">XBMC povezan</string>  <!-- max. 13 characters -->
+  <string id="36017">Vmesnik najden, toda libcec ni na voljo</string>
+  <string id="36018">Uporabi jezikovne nastavitve TV</string>
 </strings>
index f7bb40d..70bdd0e 100644 (file)
@@ -14,7 +14,7 @@
   <regions>
     <region name="Mexico" locale="MX">
       <dateshort>DD/MM/YYYY</dateshort>
-      <datelong>DDDD, D de MMMM de YYYY</datelong>
+      <datelong>DDDD, DD' de 'MMMM' de 'YYYY</datelong>
       <time symbolAM="AM" symbolPM="PM">h:mm:ss xx</time>
       <tempunit>C</tempunit>
       <speedunit>kmh</speedunit>
index e075956..2881eb5 100644 (file)
@@ -1,10 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!--Language file translated with Team XBMC Translator-->
-<!--Translator: Josue Jeriel Camargo Cruz-->
-<!--Email: josue.camargo@gmail.com-->
-<!--Date of translation: 04/24/2009-->
-<!--$Revision$-->
-<!--updated to 34760 by Juanjo Armellino (juanjo at ajjar dot com dot ar)-->
+<!--Translator: Juanjo Armellino-->
+<!--Date of translation: 01/23/2012-->
+<!--Based on English 98d103ae66a1e81e379e65dd131341cd119cfcf2 (21.01.2012)-->
 <strings>
   <string id="0">Programas</string>
   <string id="1">Imágenes</string>
@@ -15,8 +12,7 @@
   <string id="6">XBMC SVN</string>
   <string id="7">Administrador archivos</string>
   <string id="8">Clima</string>
-  <string id="9">xbox media center</string>
-  
+  <string id="9">xbmc media center</string>
   <string id="11">Lunes</string>
   <string id="12">Martes</string>
   <string id="13">Miércoles</string>
@@ -24,7 +20,6 @@
   <string id="15">Viernes</string>
   <string id="16">Sábado</string>
   <string id="17">Domingo</string>
-
   <string id="21">Enero</string>
   <string id="22">Febrero</string>
   <string id="23">Marzo</string>
@@ -37,7 +32,6 @@
   <string id="30">Octubre</string>
   <string id="31">Noviembre</string>
   <string id="32">Diciembre</string>
-
   <string id="41">Lun</string>
   <string id="42">Mar</string>
   <string id="43">Mié</string>
@@ -45,7 +39,6 @@
   <string id="45">Vie</string>
   <string id="46">Sab</string>
   <string id="47">Dom</string>
-
   <string id="51">Ene</string>
   <string id="52">Feb</string>
   <string id="53">Mar</string>
@@ -58,7 +51,6 @@
   <string id="60">Oct</string>
   <string id="61">Nov</string>
   <string id="62">Dic</string>
-  
   <string id="71">N</string>
   <string id="72">NNE</string>
   <string id="73">NE</string>
   <string id="85">NO</string>
   <string id="86">NNO</string>
   <string id="87">VAR</string>
-
   <string id="98">Ver: Auto</string>
   <string id="99">Ver: Auto Gr.</string>
   <string id="100">Ver: Iconos</string>
   <string id="101">Ver: Lista</string>
   <string id="102">Analizar</string>
-  <string id="103">Por: Nombre</string>
-  <string id="104">Por: Fecha</string>
-  <string id="105">Por: Tamaño</string>
+  <string id="103">Ord x Nombre</string>
+  <string id="104">Ord x Fecha</string>
+  <string id="105">Ord x Tamaño</string>
   <string id="106">No</string>
   <string id="107">Sí</string>
   <string id="108">Presentación</string>
   <string id="127">Objetos</string>
   <string id="128">General</string>
   <string id="129">Presentación</string>
-  <string id="130">Información del sistema</string>
+  <string id="130">Info del sistema</string>
   <string id="131">Pantalla</string>
   <string id="132">Álbumes</string>
   <string id="133">Intérpretes</string>
   <string id="144">Compilación:</string>
   <string id="145">Red:</string>
   <string id="146">Tipo:</string>
-  <string id="147">IP estática</string>
+  <string id="147">IP Fija</string>
   <string id="148">DHCP</string>
   <string id="149">MAC</string>
   <string id="150">IP</string>
-  <string id="151">Estado de la conexión: </string>
+  <string id="151">Conexión: </string>
   <string id="152">Half duplex</string>
   <string id="153">Full duplex</string>
   <string id="154">Almacenamiento</string>
   <string id="164">Sin Disco</string>
   <string id="165">Disco Presente</string>
   <string id="166">Skin</string>
-  <string id="167"></string>
-  <string id="168"></string>
   <string id="169">Resolución</string>
-  <string id="170">Ajustar frecuencia refresco</string>
-  <string id="171"></string>
-
+  <string id="170">Ajustar frecuencia de refresco de pantalla al video</string>
   <string id="172">Fecha de publicación</string>
   <string id="173">Mostrar videos 4:3 como</string>
-
   <string id="175">Estados de ánimo</string>
   <string id="176">Estilos</string>
-  
   <string id="179">Canción</string>
   <string id="180">Duración</string>
   <string id="181">Seleccionar álbum</string>
   <string id="188">Seleccionar todo</string>
   <string id="189">Obteniendo información de medios</string>
   <string id="190">Guardar</string>
-  <string id="191">Aleatorio</string>
+  <string id="191">Mezclar</string>
   <string id="192">Limpiar</string>
   <string id="193">Analizar</string>
   <string id="194">Buscando...</string>
   <string id="197">Consultando %s</string>
   <string id="198">Cargando detalles de la película</string>
   <string id="199">Interfaz Web</string>
-
   <string id="202">Eslogan</string>
   <string id="203">Resumen</string>
-
   <string id="205">Votos</string>
   <string id="206">Reparto</string>
   <string id="207">Argumento</string>
   <string id="221">La red no está conectada</string>
   <string id="222">Cancelar</string>
   <string id="224">Velocidad</string>
-
-  <string id="226">Probar patrones...</string>
-  <string id="227">Consultar CDs de audio en Internet</string>
-  <string id="228">Lista de reproducción aleatoria al cargar</string>
-  <string id="229">Parar el disco duro tras</string>
+  <string id="225">Desplazamiento vertical</string>
+  <string id="226">Patrones de prueba</string>
+  <string id="227">Consultar CDs de audio en freedb.org</string>
+  <string id="228">Mezclar lista de reproducción al cargar</string>
+  <string id="229">Detener el disco duro tras</string>
   <string id="230">Filtros de vídeo</string>
   <string id="231">Ninguno</string>
   <string id="232">Punto</string>
   <string id="242">En ventana</string>
   <string id="243">Tasa de Refresco</string>
   <string id="244">Pant. Completa</string>
-  <string id="245">Tamaño: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1)</string>
-
+  <string id="245">Tamaño: (%i,%i)-&gt;(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixeles: %2.2f:1) (VShift: %2.2f)</string>
   <string id="247">Scripts</string>
   <string id="248">Idioma</string>
   <string id="249">Música</string>
   <string id="251">Seleccione carpeta destino</string>
   <string id="252">Salida estéreo a todos los altavoces</string>
   <string id="253">Número de canales</string>
-  <string id="254">Decodificador compatible DTS</string>
+  <string id="254">Decodificador compatible DTS</string>
   <string id="255">CDDB</string>
   <string id="256">Consultando información del CD</string>
   <string id="257">Error</string>
   <string id="260">Shoutcast</string>
   <string id="261">Esperando para empezar....</string>
   <string id="262">Salida de secuencias de comandos</string>
-  <string id="263">Activar Servidor Web</string>
+  <string id="263">Permitir controlar XBMC via HTTP</string>
   <string id="264">Grabar</string>
   <string id="265">Detener grabación</string>
   <string id="266">Por: Pista</string>
   <string id="277">Mueva la flecha para variar la posición de los subtítulos</string>
   <string id="278">Modifique el rectángulo hasta que sea un cuadrado perfecto</string>
   <string id="279">No se puede cargar la configuración</string>
-  <string id="280">Usando valores alternativos por defecto</string>
-  <string id="281">Por favor, compruebe los archivos .xml</string>
-  <string id="282">encontrados %i elementos</string>
+  <string id="280">Usando valores por defecto</string>
+  <string id="281">Por favor compruebe los archivos .xml</string>
+  <string id="282">Encontrados %i elementos</string>
   <string id="283">Resultados de la búsqueda</string>
   <string id="284">No se encontraron resultados</string>
-  <string id="286"></string>
   <string id="287">Subtítulos</string>
   <string id="288">Tipografía</string>
-  <string id="289">Tamaño</string>
+  <string id="289">Tamaño</string>
   <string id="290">Compresión de Rango Dinámico</string>
   <string id="291">Vídeo</string>
   <string id="292">Sonido</string>
-  <string id="293">Subtítulos</string>
+  <string id="293">Buscar subtítulos</string>
   <string id="294">Crear marcador</string>
   <string id="296">Borrar marcadores</string>
   <string id="297">Retardo de sonido</string>
   <string id="304">Idioma</string>
   <string id="305">Activado</string>
   <string id="306">No-Interpolado</string>
-  <string id="307"></string>
-  <string id="308"></string>
-  <string id="309"></string>
-  <string id="310"></string>
-  <string id="311"></string>
   <string id="312">(0=auto)</string>
-  <string id="313">Limpieza de base de datos</string>
+  <string id="313">Limpiando base de datos</string>
   <string id="314">Preparando...</string>
   <string id="315">Error en base de datos</string>
   <string id="316">Buscando canciones...</string>
   <string id="330">Esto puede llevar algún tiempo...</string>
   <string id="331">Comprimiendo base de datos...</string>
   <string id="332">Error comprimiendo base de datos</string>
-  <string id="333">¿Quieres limpiar la Bibloteca?</string>
+  <string id="333">¿Quiere limpiar la Bibloteca?</string>
   <string id="334">Limpiar biblioteca...</string>
-  <string id="335">Inicio</string>
+  <string id="335">Iniciar</string>
   <string id="336">Conversión de imágenes por segundo</string>
   <string id="337">Salida de sonido</string>
   <string id="338">Analógica</string>
   <string id="339">Optica/Coaxial</string>
   <string id="340">Varios Intérpretes</string>
-  <string id="341">Reproduc. disco</string>
+  <string id="341">Reprod. disco</string>
   <string id="342">Películas</string>
   <string id="343">Ajustar Imágenes/seg</string>
   <string id="344">Actores</string>
   <string id="361">Pres. Recurs.</string>
   <string id="362">Nivel de atenuación</string>
   <string id="363">Por: Archivo</string>
-  <string id="364">Decodificador compatible AC3</string>
+  <string id="364">Decodificador compatible AC3</string>
   <string id="365">Por: Nombre</string>
   <string id="366">Por: Año</string>
   <string id="367">Por: Valoración</string>
   <string id="368">IMDb</string>
   <string id="369">Título</string>
-  <string id="370">Tormenta</string>
+  <string id="370">Tormentas</string>
   <string id="371">Parcialmente</string>
   <string id="372">Mayormente</string>
   <string id="373">Soleado</string>
   <string id="404">Viento</string>
   <string id="405">Punto Rocío</string>
   <string id="406">Humedad</string>
-  <string id="407"></string>
-  <string id="408"></string>
   <string id="409">Predef.</string>
-  <string id="410">Accediendo a weather</string>
-  <string id="411">Obteniendo el tiempo para:</string>
-  <string id="412">No se pueden obtener datos meteorológicos</string>
+  <string id="410">Accediendo servicio de clima</string>
+  <string id="411">Obteniendo clima para:</string>
+  <string id="412">No se pueden obtener datos de clima</string>
   <string id="413">Manual</string>
   <string id="414">No hay crítica para este álbum</string>
   <string id="415">Descargando miniatura...</string>
   <string id="418">Min</string>
   <string id="419">Max</string>
   <string id="420">HDMI</string>
-  
   <string id="422">Eliminar información del álbum</string>
   <string id="423">Eliminar información CDDB</string>
   <string id="424">Seleccionar</string>
   <string id="431">Sin Caché</string>
   <string id="432">Eliminar película de la base de datos</string>
   <string id="433">¿Eliminar realmente '%s'?</string>
-  <string id="434">Del %s a %i %s</string> <!--From <wind dir.> at <speed> <unit>-->
-  
+  <string id="434">Del %s a %i %s</string>
   <string id="437">Disco Removible</string>
   <string id="438">Abriendo fichero</string>
   <string id="439">Cache</string>
   <string id="444">Vídeo</string>
   <string id="445">Sonido</string>
   <string id="446">DVD</string>
-  <string id="447">Reproducción automática</string>
+  <string id="447">Reproducir automáticamente</string>
   <string id="448">LCD</string>
   <string id="449">Activado</string>
   <string id="450">Columnas</string>
   <string id="480">Apariencia</string>
   <string id="481">Opciones de Sonido</string>
   <string id="482">Acerca de XBMC</string>
-  
   <string id="485">Eliminar álbum</string>
   <string id="486">Repetir</string>
   <string id="487">Repetir Uno</string>
   <string id="488">Repetir carpetas</string>
-  <string id="489">Reproducir automáticamente el siguiente elemento</string>
+  <string id="489">Reproducir automáticamente la próxima canción</string>
   <string id="491">- Usar iconos grandes</string>
   <string id="492">Redimensionar subtítulos VOB</string>
   <string id="493">Opciones Avanzadas (¡Sólo expertos!)</string>
-  <string id="494">Margen total de sonido (dB)</string>
-  <string id="495">Sobremuestrear vídeos a resolución XBMC</string>
+  <string id="494">Margen total de sonido</string>
+  <string id="495">Agrandar vídeos a resolución XBMC</string>
   <string id="496">Calibración</string>
-  <string id="497">Ocultar extensiones</string>
+  <string id="497">Mostrar extensiones</string>
   <string id="498">Por: Tipo</string>
-  <string id="499">No se puede conectar con www.allmusic.com</string>
+  <string id="499">No se puede conectar al servicio online</string>
   <string id="500">Error al obtener información de album</string>
   <string id="501">Buscando nombres de los álbumes...</string>
   <string id="502">Abierto</string>
   <string id="513">Pantalla principal</string>
   <string id="514">Ajustes manuales</string>
   <string id="515">Género</string>
-
   <string id="517">Álbumes reproducidos recientemente</string>
   <string id="518">Lanzar</string>
   <string id="519">Lanzar en..</string>
-  <string id="520"></string>
   <string id="521">Compilaciones</string>
   <string id="522">Eliminar fuente</string>
   <string id="523">Cambiar medio</string>
   <string id="537">Lista grande</string>
   <string id="538">I. Grandes</string>
   <string id="539">Amplio</string>
-  <string id="540">Ampio Grande</string>
+  <string id="540">Amplio Grande</string>
   <string id="541">Iconos de Album</string>
   <string id="542">Iconos de DVD</string>
   <string id="543">DVD</string>
   <string id="546">Dispositivo de salida passthrough</string>
   <string id="547">No hay biografía para este artista</string>
   <string id="548">Convertir audio multicanal a stereo</string>
-
   <string id="550">Ordenar por: %s</string>
   <string id="551">Nombre</string>
   <string id="552">Fecha</string>
   <string id="560">ID</string>
   <string id="561">Fichero</string>
   <string id="562">Año</string>
-  <string id="563">Valoración</string>
+  <string id="563">Calificación</string>
   <string id="564">Tipo</string>
   <string id="565">Uso</string>
   <string id="566">Artista álbum</string>
   <string id="571">Por defecto</string>
   <string id="572">Estudio</string>
   <string id="573">Ruta</string>
-  <string id="574">Pais</string>
+  <string id="574">País</string>
   <string id="575">En progreso</string>
-  
+  <string id="576">Veces reproducida</string>
   <string id="580">Dirección de ordenación</string>
   <string id="581">Método de ordenación</string>
   <string id="582">Modo de vista</string>
   <string id="595">Repetir: Off</string>
   <string id="596">Repetir: Uno</string>
   <string id="597">Repetir: Todos</string>
-
   <string id="600">Ripear CD de Audio</string>
   <string id="601">Media</string>
   <string id="602">Estándar</string>
   <string id="603">Extrema</string>
-  <string id="604">Velocidad de bits constante (CBR)</string>
+  <string id="604">Bitrate constante</string>
   <string id="605">Ripeando...</string>
-
   <string id="607">A:</string>
   <string id="608">No se puede copiar CD o Pista</string>
   <string id="609">CDDARipPath no está definido.</string>
   <string id="610">Copiar pista de audio</string>
   <string id="611">Introducir número</string>
-  <string id="612">Bits/Muestra</string> 
-  <string id="613">Frecuencia de muestreo</string> 
-
-  <string id="620">Ripear CD</string>
+  <string id="612">Bits/Muestra</string>
+  <string id="613">Frecuencia de muestreo</string>
+  <string id="620">CDs de audio</string>
   <string id="621">Codificador</string>
   <string id="622">Calidad</string>
-  <string id="623">Velocidad de bits</string>
+  <string id="623">Bitrate</string>
   <string id="624">Incluir número de pista</string>
   <string id="625">Todas las canciones de</string>
   <string id="629">Modo de vista</string>
   <string id="630">Normal</string>
   <string id="631">Zoom</string>
   <string id="632">Adaptar a 4:3</string>
-  <string id="633">Adaptar a 14:9</string>
+  <string id="633">Zoom amplio</string>
   <string id="634">Adaptar a 16:9</string>
   <string id="635">Tamaño Original</string>
   <string id="636">Personalizado</string>
-  <string id="637">Replaygain</string>
-  <string id="638">Ajuste de volumen Replaygain</string>
+  <string id="637">Replay gain</string>
+  <string id="638">Ajuste de volumen Replay gain</string>
   <string id="639">Usar volumen de la pista</string>
   <string id="640">Usar volumen del álbum</string>
   <string id="641">Nivel PreAmp - archivos con ReplayGain</string>
   <string id="648">Importar biblioteca de vídeo</string>
   <string id="649">Importando</string>
   <string id="650">Exportando</string>
-  <string id="651">Explorar biblioteca</string>
+  <string id="651">Buscar biblioteca</string>
   <string id="652">Años</string>
   <string id="653">Actualizar biblioteca</string>
   <string id="654">Ver Info Depuración</string>
   <string id="657">Buscar carpeta</string>
   <string id="658">Info. de la Canción</string>
   <string id="659">Estiramiento No-lineal</string>
-
   <string id="660">Amplificación de Volumen</string>
   <string id="661">Escoja la carpeta de exportación</string>
   <string id="662">Éste archivo ya no está disponible</string>
   <string id="663">¿Le gustaría eliminarlo de la biblioteca?</string>
   <string id="664">Buscar Script</string>
   <string id="665">Nivel de compresión</string>
-  <string id="700">Limpiar la biblioteca</string>
+  <string id="700">Limpiando la biblioteca</string>
   <string id="701">Eliminando canciones antiguas de la biblioteca</string>
   <string id="702">Esta ruta ya ha sido explorada anteriormente</string>
   <string id="705">Red</string>
   <string id="706">- Servidor</string>
-
   <string id="708">Usar servidor proxy para acceder a internet</string>
-
   <string id="711">Protololo Internet (IP)</string>
   <string id="712">Puerto especificado no válido. El valor debe estar entre 1 y 65535.</string>
   <string id="713">Proxy HTTP</string>
-
   <string id="715">- Asignación</string>
   <string id="716">Automática (DHCP)</string>
   <string id="717">Manual (Estática)</string>
-  <string id="718"></string>
   <string id="719">- Dirección IP</string>
   <string id="720">- Máscara de Subred</string>
   <string id="721">- Puerta de Enlace</string>
   <string id="723">Guardar y Reiniciar</string>
   <string id="724">Dirección especificada no válida. El valor debe ser AAA.BBB.CCC.DDD</string>
   <string id="725">con números entre 0 y 255</string>
-  <string id="726">Cambios no guardados. ¿Seguir sin guardar?</string>
+  <string id="726">¿Continuar sin guardar los cambios?</string>
   <string id="727">Servidor Web</string>
   <string id="728">Servidor FTP</string>
-  <string id="729">Hora desde Internet</string>
-  <string id="730">Puerto del Servidor Web</string>
-  <string id="731">Host del Servidor Horario</string>
+  <string id="730">- Puerto</string>
   <string id="732">Guardar y Aplicar</string>
-  <string id="733">Contraseña del Servidor Web</string>
+  <string id="733">- Contraseña</string>
   <string id="734">Sin contraseña</string>
   <string id="735">- Juego de caracteres</string>
   <string id="736">- Estilo</string>
   <string id="743">Amarillo</string>
   <string id="744">Archivos</string>
   <string id="745">No se ha explorado información para esta vista</string>
-  <string id="746">Por favor apage el modo de biblioteca</string>
+  <string id="746">Por favor apague el modo de biblioteca</string>
   <string id="747">Error cargando imagen</string>
   <string id="748">Editar ruta</string>
   <string id="749">Añadir fuente</string>
   <string id="750">¿Está seguro?</string>
   <string id="751">Eliminando fuente</string>
-  
   <string id="754">Añadir Enlace a Programa</string>
   <string id="755">Editar Ruta Programa</string>
   <string id="756">Editar Nombre Programa</string>
   <string id="757">Editar Profundidad Ruta</string>
-  
   <string id="759">Ver: Lista Grande</string>
   <string id="760">Amarillo</string>
   <string id="761">Blanco</string>
   <string id="763">Verde Claro</string>
   <string id="764">Verde amarillento</string>
   <string id="765">Verde azulado</string>
-  <string id="766">Reservado</string>
-  <string id="767">Reservado</string>
-  
-  
+  <string id="766">Gris claro</string>
+  <string id="767">Gris</string>
   <string id="770">Error %i: recurso no disponible</string>
-  <string id="771"></string>
   <string id="772">Hardware Sonido</string>
   <string id="773">Buscando</string>
   <string id="774">Carpeta de diapositivas</string>
   <string id="775">Interfaz de red</string>
   <string id="776">- Nombre de la red (ESSID)</string>
-  <string id="777">- Password de la red</string>
-  <string id="778">- Seguridad de la red</string>
+  <string id="777">- Contraseña de red</string>
+  <string id="778">- Seguridad de red</string>
   <string id="779">Guardar y aplicar la configuración del interfaz de red</string>
   <string id="780">Sin cifrado</string>
   <string id="781">WEP</string>
   <string id="787">Interfaz deshabilitada</string>
   <string id="788">La interfaz de red se deshabilitó con éxito.</string>
   <string id="789">Nombre de la red inalámbrica (ESSID)</string>
-  
-  <string id="791">Permitir que programas en este sistema manejen a XBMC</string>
+  <string id="791">Permitir que programas en este equipo manejen a XBMC</string>
   <string id="792">Puerto</string>
   <string id="793">Rango de puertos de eventos remotos</string>
-  <string id="794">Permitir que programas en otro sistema manejen a XBMC</string>
+  <string id="794">Permitir que programas de otros equipos manejen a XBMC</string>
   <string id="795">Retraso inicial de repetición (ms)</string>
   <string id="796">Retraso continuo de repetición (ms)</string>
   <string id="797">Número máximo de clientes</string>
   <string id="798">Accesso a Internet</string>
-
   <string id="850">Se ingresó un número de puerto inválido</string>
   <string id="851">El rango válido de puerto es 1-65535</string>
   <string id="852">El rango válido de puerto es 1024-65535</string>
-
-  <string id="1000">-Vista previa</string>
+  <string id="998">Agregar Música...</string>
+  <string id="999">Agregar Videos...</string>
+  <string id="1000">- Vista previa</string>
   <string id="1001">Imposible conectar</string>
   <string id="1002">XBMC ha sido incapaz de conectar a la dirección de red.</string>
   <string id="1003">Podría ser debido a que la red no esté conectada.</string>
   <string id="1004">¿Desea añadirla de todos modos?</string>
-  
   <string id="1006">Dirección IP</string>
   <string id="1007">Añadir Dirección de Red</string>
   <string id="1008">Protocolo</string>
   <string id="1027">Editar fuente</string>
   <string id="1028">Editar fuente %s</string>
   <string id="1029">Introduzca la nueva etiqueta</string>
-  <string id="1030">una imagen</string>
-  <string id="1031">una carpeta de imágenes</string>
+  <string id="1030">Buscar imagen</string>
+  <string id="1031">Buscar carpeta de imágenes</string>
   <string id="1032">Añadir sitio de red...</string>
-  <string id="1033">un fichero</string>
+  <string id="1033">Buscar fichero</string>
   <string id="1034">Submenú</string>
   <string id="1035">Habilitar Botones de Submenú</string>
   <string id="1036">Favoritos</string>
   <string id="1042">%i de %i elementos obtenidos</string>
   <string id="1043">Addons de Aplicaciones</string>
   <string id="1044">Establecer miniatura de plugin</string>
-  <string id="1045">Configuración del plugin</string>
+  <string id="1045">Configuración del Addon</string>
   <string id="1046">Puntos de acceso</string>
   <string id="1047">Otro...</string>
-  <string id="1048">Nombre de usuario</string>
+  <string id="1048">Nombre de usuario</string>
   <string id="1049">Configuración de Script</string>
   <string id="1050">Simples</string>
   <string id="1051">Ingrese dir. web</string>
-  
   <string id="1200">Cliente SMB</string>
   <string id="1202">Grupo de trabajo</string>
   <string id="1203">Usuario por defecto</string>
   <string id="1204">Contraseña por defecto</string>
-
   <string id="1207">Servidor WINS</string>
   <string id="1208">Montar recursos compartidos SMB</string>
-
   <string id="1210">Eliminar</string>
   <string id="1211">Música</string>
   <string id="1212">Vídeo</string>
   <string id="1233">Programas, video y música</string>
   <string id="1234">Programas, imágenes y música</string>
   <string id="1235">Programas, imágenes y video</string>
-  
-  <string id="1245"></string>
-  <string id="1246"></string>
-  <string id="1247"></string>
-  
   <string id="1250">Autodetección</string>
-  <string id="1251">Autodetección de otros sistemas</string>
+  <string id="1251">Autodetectar sistema</string>
   <string id="1252">Nickname</string>
-  
   <string id="1254">Preguntar antes de conectar</string>
   <string id="1255">Enviar usuario y contraseña FTP</string>
   <string id="1256">Intervalo de Ping</string>
   <string id="1257">¿Desea conectar al sistema autodetectado?</string>
-  
-  <string id="1260">Zeroconf publishing</string>
-  
+  <string id="1260">Publicar servicios con Zeroconf</string>
+  <string id="1270">Permitir que XBMC reciba contenido AirPlay</string>
+  <string id="1271">Nombre de dispositivo</string>
+  <string id="1272">- Usar contraseña</string>
   <string id="1300">Dispositivo de audio especial</string>
   <string id="1301">Dispositivo passthrough especial</string>
-
   <string id="1396">A la deriva</string>
   <string id="1397">y</string>
   <string id="1398">Helando</string>
   <string id="1399">Tarde</string>
   <string id="1400">Aisladas</string>
-  <string id="1401">T-Lluvias</string>
+  <string id="1401">Tormentas</string>
   <string id="1402">Truenos</string>
   <string id="1403">Sol</string>
   <string id="1404">Fuerte</string>
   <string id="1409">Granizo</string>
   <string id="1410">Calma</string>
   <string id="1411">con</string>
-  <string id="1412">viento</string>
+  <string id="1412">ventoso</string>
   <string id="1413">llovizna</string>
   <string id="1414">Tormenta Eléctrica</string>
   <string id="1415">Llovizna</string>
   <string id="1421">Muy Alta</string>
   <string id="1422">Ventoso</string>
   <string id="1423">Niebla</string>
-  
-  <!-- strings through to 1450 reserved for weather translation -->
-
   <string id="1450">Apagar pantalla cuando esté desocupado</string>
-  <!-- strings through to 1470 reserved for power-saving -->
-  
   <string id="2050">Duración:</string>
-
   <string id="2100">Falló script : %s</string>
   <string id="2101">Se necesita nueva versión - Vea log</string>
-  <string id="2102"></string>
-  <string id="2103"></string>
-  <string id="4501">activar LCD/VFD</string>
-
+  <string id="4501">Activar LCD/VFD</string>
   <string id="10000">Inicio</string>
   <string id="10001">Programas</string>
   <string id="10002">Imágenes</string>
   <string id="10019">Configuración - Apariencia</string>
   <string id="10020">Scripts</string>
   <string id="10021">Navegador Web</string>
-
   <string id="10028">Vídeos/Lista de reproducción</string>
-  <string id="10034">Configuración-&gt;Perfiles</string>
-
+  <string id="10034">Configuración - Perfiles</string>
   <string id="10100">Cuadro de diálogo Sí/No</string>
   <string id="10101">Diálogo de Progreso</string>
-
   <string id="10210">Buscando subtítulos...</string>
   <string id="10211">Cacheando subtítulos...</string>
   <string id="10212">finalizando</string>
   <string id="10213">buffering</string>
   <string id="10214">Abriendo flujo</string>
-
   <string id="10500">Música/Lista de reproducción</string>
   <string id="10501">Música/Archivos</string>
   <string id="10502">Música/Biblioteca</string>
   <string id="10509">Juego en Red</string>
   <string id="10510">Extensiones</string>
   <string id="10511">Info Sistema</string>
-
   <string id="10516">Música - Biblioteca</string>
   <string id="10517">Música - Reproduciendo</string>
-
   <string id="10522">Vídeo - Reproduciendo</string>
-  <string id="10523">Información de álbum</string>
-  <string id="10524">Información de película</string>
-
+  <string id="10523">Info de álbum</string>
+  <string id="10524">Infor de película</string>
   <string id="12000">Diálogo de Selección</string>
   <string id="12001">Música/info</string>
   <string id="12002">Diálogo de OK</string>
   <string id="12004">Secuencias de Comandos/Info</string>
   <string id="12005">Vídeo a pantalla completa</string>
   <string id="12006">Visualización de sonido</string>
-
   <string id="12008">Diálogo de agrupar archivos</string>
   <string id="12009">Reconstruir índice...</string>
   <string id="12010">Volver a Ventana Música</string>
   <string id="12011">Volver a Ventana Vídeos</string>
-  <string id="12012"></string>
-  <string id="12013"></string>
-  <string id="12014"></string>
-  <string id="12015"></string>
-  <string id="12016"></string>
-  <string id="12017"></string>
-  <string id="12018"></string>
-  <string id="12019"></string>
-  <string id="12020"></string>
   <string id="12021">Comenzar desde el principio</string>
   <string id="12022">Continuar desde la posición %s</string>
-  <string id="12023"></string>
-  
   <string id="12310">0</string>
   <string id="12311">1</string>
   <string id="12312">2</string>
   <string id="12344">Las contraseñas introducidas no coinciden.</string>
   <string id="12345">Acceso Denegado</string>
   <string id="12346">Límite de intentos de contraseña excedidos.</string>
-  <string id="12347">La Xbox se apagará ahora.</string>
+  <string id="12347">El equipo se apagará ahora.</string>
   <string id="12348">Elemento Bloqueado</string>
   <string id="12353">Reactivar Bloqueo</string>
   <string id="12356">Cambiar Bloqueo</string>
   <string id="12357">Bloqueo de Recurso</string>
   <string id="12358">Contraseña introducida en blanco. Inténtelo de nuevo.</string>
   <string id="12360">Bloqueo Maestro</string>
-  <string id="12362">Apagar Xbox si se excede el máximo de intentos</string>
+  <string id="12362">Apagar equipo si se excede el máximo de intentos</string>
   <string id="12367">¡Código Maestro no válido!</string>
   <string id="12368">¡Por favor, introduzca un Código Maestro Válido!</string>
   <string id="12373">Configuración y Archivos</string>
   <string id="12377">Esto eliminará cualquier valor previamente salvado</string>
   <string id="12378">Mostrar cada imagen durante</string>
   <string id="12379">Usar efectos de movimiento y ampliación</string>
-  <string id="12380"></string>
-  <string id="12381"></string>
-  <string id="12382"></string>
   <string id="12383">Reloj de 12 horas</string>
   <string id="12384">Reloj de 24 horas</string>
   <string id="12385">Día/Mes</string>
   <string id="12386">Mes/Día</string>
-  
   <string id="12390">Encendido hace</string>
   <string id="12391">Minutos</string>
   <string id="12392">Horas</string>
   <string id="12393">Días</string>
   <string id="12394">Tiempo total encendido</string>
-
-  <string id="12600">El Tiempo</string>
-
+  <string id="12395">Nivel de batería</string>
+  <string id="12600">Clima</string>
   <string id="12900">Salvapantallas</string>
   <string id="12901">OSD a pantalla completa</string>
-
   <string id="13000">Sistema</string>
   <string id="13001">Parar el disco duro inmediatamente</string>
   <string id="13002">Sólo Vídeo</string>
   <string id="13003">- Retardo</string>
   <string id="13004">- Duración mínima del fichero</string>
   <string id="13005">Apagar</string>
-  <string id="13006">Dashboard</string>
-  <string id="13007">Usar Ruta de Dashboard Personalizada</string>
-  <string id="13008">Modo de apagado por defecto</string>
+  <string id="13008">Acción de apagar</string>
   <string id="13009">Salir</string>
   <string id="13010">Hibernar</string>
   <string id="13011">Suspender</string>
   <string id="13013">Reiniciar</string>
   <string id="13014">Minimizar</string>
   <string id="13015">Acción del boton de Encendido</string>
-  <string id="13016">Apagar sistema</string> 
-
+  <string id="13016">Apagar sistema</string>
   <string id="13020">Existe otra sesión activa, ¿tal vez ssh?</string>
   <string id="13021">Disco duro remoto montado</string>
   <string id="13022">Expulsión de dispositivo no segura</string>
   <string id="13023">Dispositivo eliminado correctamente</string>
   <string id="13024">Joystick conectado</string>
   <string id="13025">Joystick desconectado</string>
-  
   <string id="13050">Se está quedando sin batería</string>
-
   <string id="13100">Filtro antivibración</string>
-  <string id="13101">Permitir al dispositivo elegir (requiere reinicio)</string>
+  <string id="13101">Permitir que el controlador elija (requiere reinicio)</string>
   <string id="13105">Sinc. de refresco vertical</string>
   <string id="13106">Deshabilitado</string>
   <string id="13107">Al reproducir vídeo</string>
   <string id="13109">Probar resolución</string>
   <string id="13110">¿Guardar resolución?</string>
   <string id="13111">¿Desea mantener esta resolución?</string>
-  
-  <string id="13112">Reescalado software de alta calidad</string>
+  <string id="13112">Reescalado de alta calidad</string>
   <string id="13113">Deshabilitado</string>
-  <string id="13114">Habilitado para contenido en baja definición</string>
+  <string id="13114">Habilitado para contenido en SD</string>
   <string id="13115">Siempre habilitado</string>
-  
   <string id="13116">Método de reescalado</string>
   <string id="13117">Bicúbico</string>
   <string id="13118">Lanczos</string>
   <string id="13120">VDPAU</string>
   <string id="13121">Nivel de reescalado HQ VDPAU</string>
   <string id="13122">Conversión de color VDPAU con calidad de estudio</string>
-  
   <string id="13130">Mostrar refresco</string>
   <string id="13131">Deshabilitado</string>
   <string id="13132">Pantallas de refresco</string>
-  
   <string id="13140">Conexiones activas detectadas!</string>
   <string id="13141">Si continúa, puede que pierda el control de XBMC</string>
   <string id="13142">¿Está seguro de que quiere parar el servidor de eventos??</string>
-
   <string id="13144">¿Cambiar modo Apple remoto</string>
   <string id="13145">Si está usando Apple Remote para controlar</string>
   <string id="13146">XBMC, cambiar éste ajuste puede afectar su capacidad</string>
   <string id="13147">para continuar controlándolo.¿Desea continuar?</string>
-
-  <string id="13150"></string>
-  <string id="13151"></string>
-  <string id="13152"></string>
-  <string id="13153"></string>
-  <string id="13154"></string>
-  <string id="13155"></string>
-  <string id="13156"></string>
-  <string id="13157"></string>
-  <string id="13158"></string>
   <string id="13159">Máscara de red</string>
   <string id="13160">Puerta de enlace</string>
   <string id="13161">DNS Primario</string>
   <string id="13162">Fallo en inicialización</string>
-  
-  <string id="13163"></string>
-  <string id="13164"></string>
-  <string id="13165"></string>
-  <string id="13166"></string>
-  <string id="13167"></string>
-  <string id="13168"></string>
-  <string id="13169"></string>
-  
-  
   <string id="13170">Nunca</string>
   <string id="13171">Inmediatamente</string>
   <string id="13172">Después de %i segs.</string>
   <string id="13173">Fecha de instalación del disco duro:</string>
   <string id="13174">Contador de encendidos del disco duro:</string>
-  
   <string id="13200">Perfiles</string>
   <string id="13201">¿Eliminar el perfil '%s'?</string>
   <string id="13204">Último perfil cargado:</string>
   <string id="13210">Iniciada, alarma en %im</string>
   <string id="13211">¡Alarma!</string>
   <string id="13212">Cancelada antes de %im%is</string>
-  <string id="13213">%2.0fm</string> <!--minutes (left from countdown)-->
-  <string id="13214">%2.0fs</string> <!--seconds (left from countdown)-->
-
+  <string id="13213">%2.0fm</string>
+  <string id="13214">%2.0fs</string>
   <string id="13249">Buscar subtítulos en RARs</string>
   <string id="13250">Buscar subtítulos...</string>
   <string id="13251">Mover Elemento</string>
   <string id="13252">Mover Elemento Aquí</string>
   <string id="13253">Cancelar Movimiento</string>
-  
   <string id="13270">Hardware:</string>
   <string id="13271">Uso de CPU:</string>
-  
   <string id="13274">Conectado, pero no hay un DNS disponible.</string>
   <string id="13275">Disco duro</string>
   <string id="13276">DVD-ROM</string>
   <string id="13279">Red de trabajo</string>
   <string id="13280">Vídeo</string>
   <string id="13281">Hardware</string>
-  
   <string id="13283">Sistema operativo:</string>
   <string id="13284">Velocidad de CPU:</string>
-  <string id="13285"></string>
   <string id="13286">Codificador de Vídeo:</string>
   <string id="13287">Resolución de pantalla:</string>
-  <string id="13288"></string>
-  <string id="13289"></string>
-  <string id="13290"></string>
-  <string id="13291"></string>
   <string id="13292">Cable A/V:</string>
-  <string id="13293"></string>
   <string id="13294">Región de DVD:</string>
   <string id="13295">Internet:</string>
   <string id="13296">Conectado</string>
   <string id="13297">No conectado. Compruebe la configuración de red.</string>
-  <string id="13298"></string>
   <string id="13299">Temperatura deseada</string>
   <string id="13300">Velocidad del ventilador</string>
   <string id="13301">Control del ventilador por temperatura</string>
   <string id="13320">Estéreo</string>
   <string id="13321">Sólo izquierdo</string>
   <string id="13322">Sólo derecho</string>
-  <string id="13323">Activar CD+G</string>
+  <string id="13323">Activar karaoke</string>
   <string id="13324">Transparencia del fondo</string>
   <string id="13325">Transparencia del primer plano</string>
   <string id="13326">Retardo A/V</string>
   <string id="13334">Editar etiqueta</string>
   <string id="13335">Crear por defecto</string>
   <string id="13336">Quitar botón</string>
-  <string id="13338"></string>
-  <string id="13339"></string>
   <string id="13340">Dejarlo tal cual</string>
   <string id="13341">Verde</string>
   <string id="13342">Naranja</string>
   <string id="13379">Contraste por defecto</string>
   <string id="13380">Gamma por defecto</string>
   <string id="13381">Reanudar Vídeo</string>
-  <string id="13382">Máscara Voz - Puerto 0</string>
-  <string id="13383">Máscara Voz - Puerto 1</string>
-  <string id="13384">Máscara Voz - Puerto 2</string>
-  <string id="13385">Máscara Voz - Puerto 3</string>
+  <string id="13382">Máscara Voz - Puerto 1</string>
+  <string id="13383">Máscara Voz - Puerto 2</string>
+  <string id="13384">Máscara Voz - Puerto 3</string>
+  <string id="13385">Máscara Voz - Puerto 4</string>
   <string id="13386">Usar Búsqueda basada en tiempo</string>
   <string id="13387">Plantilla de nombres de pistas correcta</string>
   <string id="13388">Ajustes Predeterminados</string>
   <string id="13395">Ajustes de vídeo</string>
   <string id="13396">Ajustes de sonido y subtítulos</string>
   <string id="13397">Habilitar subtítulos</string>
-  <string id="13398">Marcas</string>
+  <string id="13398">Atajos</string>
   <string id="13399">Ignorar tokens al ordenar</string>
-  <string id="13400">Mezclar pistas de álbumes</string>
+  <string id="13400">Enganchar pistas del mismo álbum</string>
   <string id="13401">Buscar %s</string>
   <string id="13402">Mostrar posición de la pista</string>
   <string id="13403">Borrar por defecto</string>
   <string id="13404">Continuar</string>
   <string id="13405">Obtener Miniatura</string>
   <string id="13406">Información de Imágen</string>
-  <string id="13407">%s Ajustes</string>
-  <string id="13408">(Valoración de usuarios de IMDb)</string>
+  <string id="13407">%s ajustes</string>
+  <string id="13408">(Calificación de usuarios de IMDb)</string>
   <string id="13409">Top 250</string>
   <string id="13410">Sintonizar en Last.FM</string>
   <string id="13411">Velocidad mínima de ventilador</string>
-
+  <string id="13412">Continuar reproducción</string>
   <string id="13413">Descargando</string>
   <string id="13414">Ocultar artistas que sólo aparecen en compilaciones</string>
   <string id="13415">Método de renderizado</string>
   <string id="13429">Permitir aceleración por HW (VDADecoder)</string>
   <string id="13430">Permitir aceleración por HW (OpenMax)</string>
   <string id="13431">Pixel Shaders</string>
-
+  <string id="13432">Permitir aceleración por HW (VideoToolbox)</string>
   <string id="13500">Método de sincron. de A/V</string>
   <string id="13501">Clock de audio</string>
   <string id="13502">Clock de video(Drop/Dupe audio)</string>
   <string id="13508">Alta</string>
   <string id="13509">Realmente alta(lento!)</string>
   <string id="13510">Sincronizar reproducción con la pantalla</string>
-
   <string id="13550">Pausar durante cambio de velocidad de refresco</string>
   <string id="13551">Apagado</string>
   <string id="13552">%.1f Segundo</string>
   <string id="13553">%.1f Segundos</string>
-
   <string id="13600">Apple Remote</string>
-
   <string id="13602">Permitir arrancar XBMC desde remoto</string>
   <string id="13603">Retraso en tiempo de secuencia</string>
-  
   <string id="13610">Deshabilitado</string>
   <string id="13611">Estándar</string>
   <string id="13612">Universal Remote</string>
   <string id="13613">Multi Remote (Harmony)</string>
-
   <string id="13620">Error de Apple Remote</string>
   <string id="13621">No se puede activar el soporte para Apple Remote.</string>
-  
   <string id="14000">Agrupar</string>
   <string id="14001">Desagrupar</string>
   <string id="14003">Descargando fichero de lista de reproducción...</string>
   <string id="14005">Procesando lista de canales...</string>
   <string id="14006">Descarga de lista de canales fallida</string>
   <string id="14007">Descarga del fichero de lista de reproducción fallida</string>
-  
   <string id="14009">Carpeta de Juegos</string>
   <string id="14010">Cambiar autom. a miniaturas según</string>
   <string id="14011">Activar cambio auto. a miniaturas</string>
   <string id="14034">Caché de DVD - DVD-ROM</string>
   <string id="14035">- Red Local</string>
   <string id="14036">Servicios</string>
-
   <string id="14038">Configuración de red cambiada</string>
   <string id="14039">XBMC necesita reiniciar para poder cambiar su</string>
   <string id="14040">configuración de red. ¿Quiere reiniciar ahora?</string>
-  <string id="14041"></string>
-  
+  <string id="14041">Limitar ancho de banda de la conexión de internet</string>
   <string id="14043">- Apagar mientras está reproduciendo</string>
   <string id="14044">%i min</string>
   <string id="14045">%i seg</string>
   <string id="14051">Formato de Hora</string>
   <string id="14052">Formato de Fecha</string>
   <string id="14053">Filtros GUI</string>
-  
   <string id="14055">Realizar la exploración en segundo plano</string>
   <string id="14056">Detener la exploración</string>
   <string id="14057">No es posible mientras se explora la información de medios</string>
   <string id="14069">¿Quiere aplicar las opciones ahora?</string>
   <string id="14070">Aplicar cambios ahora</string>
   <string id="14071">Permitir el renombrado y borrado de archivos</string>
-
   <string id="14074">Establecer Zona Horaria</string>
   <string id="14075">Usar Horario de Verano</string>
   <string id="14076">Añadir a favoritos</string>
   <string id="14093">Seguridad</string>
   <string id="14094">Dispositivos de entrada</string>
   <string id="14095">Ahorro de energía</string>
-
   <string id="15015">Eliminar</string>
   <string id="15016">Juegos</string>
-  
   <string id="15019">Añadir</string>
-  
   <string id="15052">Contraseña</string>
-  
   <string id="15100">Biblioteca</string>
   <string id="15101">Base de datos</string>
   <string id="15102">* Todos Albums</string>
   <string id="15103">* Todos Artistas</string>
   <string id="15104">* Todas Canciones</string>
   <string id="15105">* Todos Géneros</string>
-  
   <string id="15107">Almacenando...</string>
   <string id="15108">Sonidos de navegación</string>
   <string id="15109">Según skin</string>
-  <string id="15111">Tema del skin</string>
+  <string id="15111">Tema del skin</string>
   <string id="15112">Tema por defecto</string>
-  
   <string id="15200">Last.FM</string>
   <string id="15201">Enviar canciones a Last.FM</string>
   <string id="15202">Usuario Last.FM</string>
   <string id="15219">Contraseña de Libre.fm</string>
   <string id="15220">Libre.fm</string>
   <string id="15221">Envío de canciones</string>
-
   <string id="15250">Enviar datos de radio Last.FM a Last.FM</string>
   <string id="15251">Conectando a Last.FM...</string>
   <string id="15252">Seleccionando emisora...</string>
   <string id="15283">Canciones escuchadas recientemente por %name%</string>
   <string id="15284">Escuche recomendaciones de %name% en la radio Last.FM</string>
   <string id="15285">Top de etiquetas para el usuario %name%</string>
-  <string id="15286">Escuchar la lista de reproducción de %name% en la radio Last.FM</string>
   <string id="15287">¿Desea añadir la pista actual a su lista de canciones favoritas?</string>
   <string id="15288">¿Desea prohibir la reproducción de la pista actual?</string>
   <string id="15289">Se ha añadido a sus canciones favoritas: '%s'.</string>
   <string id="15296">Quitar prohibición</string>
   <string id="15297">¿Desea quitar esta pista de sus canciones favoritas?</string>
   <string id="15298">¿Desea quitar la prohibición de esta pista?</string>
-
   <string id="15300">Ruta no encontrada o inválida</string>
   <string id="15301">Imposible conectar al servidor</string>
   <string id="15302">No se encontraron servidores</string>
   <string id="15303">Grupo de trabajo no encontrado</string>
-
   <string id="15310">Abriendo marcador multi-carpeta</string>
   <string id="15311">Ruta:</string>
-
   <string id="16000">General</string>
-
   <string id="16002">Búsqueda en internet</string>
   <string id="16003">Reproductor</string>
   <string id="16004">Reproducir desde disco</string>
-
   <string id="16008">Introduzca nuevo título</string>
   <string id="16009">Introduzca el nombre de la Pelicula</string>
   <string id="16010">Introduzca el nombre del Perfil</string>
   <string id="16020">Desentralazar</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (Invertido)</string>
-  <string id="16023">Gestión del entrelazado</string>
   <string id="16024">Cancelando...</string>
   <string id="16025">Introduzca el nombre del intérprete</string>
-  <string id="16026">Reproducción de lista abortada</string>
-  <string id="16027">Demasiados elementos fallidos consecutivos</string>
+  <string id="16026">Falló reproducción</string>
+  <string id="16027">Falló la reproducción de uno o más items.</string>
   <string id="16028">Introducir valor</string>
   <string id="16029">Verifique los detalles en el archivo log.</string>
   <string id="16030">Modo fiesta abortado.</string>
   <string id="16031">No hay canciones coincidentes en la base de datos.</string>
   <string id="16032">No se pudo inicializar la base de datos.</string>
   <string id="16033">No se pudo abrir la base de datos.</string>
-  <string id="16034">No se pudieron obtener canciones de la base de datos.</string>
+  <string id="16034">No se pudo obtener canciones de la base de datos.</string>
   <string id="16035">Lista de reproducción del modo fiesta</string>
-  
+  <string id="16036">Desentrelazar (Medio)</string>
+  <string id="16037">Desentrelazar video</string>
+  <string id="16038">Método de desetrelazado</string>
+  <string id="16039">apagado</string>
+  <string id="16040">Auto</string>
+  <string id="16041">activado</string>
   <string id="16100">Todos los vídeos</string>
   <string id="16101">Los no vistos</string>
   <string id="16102">Los ya vistos</string>
   <string id="16103">Marcar como vistos</string>
   <string id="16104">Marcar como no vistos</string>
   <string id="16105">Editar título</string>
-  <string id="16106"></string>
-  <string id="16107"></string>
-  <string id="16108"></string>
-  <string id="16109"></string>
-  <string id="16110"></string>
-
   <string id="16200">Operación abortada</string>
   <string id="16201">Fallo al copiar</string>
   <string id="16202">Fallo al copiar al menos un fichero</string>
   <string id="16204">Fallo al mover al menos un fichero</string>
   <string id="16205">Fallo al borrar</string>
   <string id="16206">Fallo al borrar al menos un fichero</string>
-  
   <string id="16300">Método de escalado de vídeo</string>
   <string id="16301">Vecino más cercano</string>
   <string id="16302">Bilinear</string>
   <string id="16307">Bicúbico (software)</string>
   <string id="16308">Lanczos (software)</string>
   <string id="16309">Sinc (software)</string>
-  <string id="16310">(VDPAU)Temporal</string>
-  <string id="16311">(VDPAU)Temporal/Espacial</string>
+  <string id="16310">Temporal</string>
+  <string id="16311">Temporal/Espacial</string>
   <string id="16312">(VDPAU)Reducción de Ruído</string>
   <string id="16313">(VDPAU)Agudeza</string>
   <string id="16314">Telecine inverso</string>
   <string id="16317">Temporal (medio)</string>
   <string id="16318">Temporal/Espacial (medio)</string>
   <string id="16319">DXVA</string>
-
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 optimized</string>
+  <string id="16324">Software Blend</string>
   <string id="16400">Post-procesado</string>
-  <string id="16401"></string>
-  <string id="16402"></string>
-  <string id="16403"></string>
-
   <string id="17500">Mostrar cuenta atrás para el reposo</string>
-
   <string id="19000">Cambiar a canal</string>
-
   <string id="20000">Carpeta de grabación de CDs de audio</string>
   <string id="20001">Usar Reproductor DVD externo</string>
   <string id="20002">Reproductor DVD externo</string>
   <string id="20003">Carpeta de trainers</string>
   <string id="20004">Carpeta de instantáneas</string>
-  
   <string id="20006">Carpeta de listas de reproducción</string>
   <string id="20007">Grabaciones</string>
   <string id="20008">Instantáneas</string>
   <string id="20009">Usar XBMC</string>
-  
   <string id="20011">Listas Rep. Música</string>
   <string id="20012">Listas Rep. Vídeo</string>
   <string id="20013">¿Desea ejecutar el juego?</string>
   <string id="20014">Ver: Lista Rep.</string>
-  <string id="20015">Miniatura IMDb</string>
+  <string id="20015">Miniatura remota</string>
   <string id="20016">Miniatura actual</string>
   <string id="20017">Miniatura local</string>
   <string id="20018">Sin miniatura</string>
   <string id="20019">Elija miniatura</string>
-  
-  
   <string id="20022"></string>
   <string id="20023">Conflicto</string>
   <string id="20024">Explorar nuevos</string>
   <string id="20025">Explorar todo</string>
   <string id="20026">Región</string>
-
-
-
-  <string id="20037">Summario</string>
-  <string id="20038">Bloquear sección de música</string>
-  <string id="20039">Bloquear sección de vídeo</string>
-  <string id="20040">Bloquear sección de imágenes</string>
-  <string id="20041">Bloquear secciones de programas y secuencias de comandos</string>
+  <string id="20037">Sumario</string>
+  <string id="20038">Bloquear ventana música</string>
+  <string id="20039">Bloquear ventana vídeo</string>
+  <string id="20040">Bloquear ventana imágenes</string>
+  <string id="20041">Bloquear ventana programas y ventana scripts</string>
   <string id="20042">Bloquear gestor de archivos</string>
   <string id="20043">Bloquear ajustes</string>
   <string id="20044">Inicio limpio</string>
   <string id="20050">Cambio automático entre 16x9 y 4x3</string>
   <string id="20051">Tratar archivos agrupados como un solo fichero</string>
   <string id="20052">Precaución</string>
-  <string id="20053">Falta modo maestro</string>
+  <string id="20053">Se abandonó el modo maestro</string>
   <string id="20054">Se entró en modo maestro</string>
   <string id="20055">Miniatura allmusic.com</string>
-  
   <string id="20057">Eliminar miniatura</string>
   <string id="20058">Añadir Perfil...</string>
   <string id="20059">Obtener información para todos los álbumes</string>
   <string id="20078">- no hay enlace establecido -</string>
   <string id="20079">Habilitar Animaciones</string>
   <string id="20080">Deshabilitar RSS con la Música</string>
-  <string id="20081">Habilitar Botones de Marcas</string>
-  <string id="20082">Mostrar Info XLink Kai</string>
+  <string id="20081">Habilitar Botones de Atajos</string>
+  <string id="20082">Mostrar programas en el menu principal</string>
   <string id="20083">Mostrar Info Música</string>
-  <string id="20084">Mostrar información meteorológica</string>
-  <string id="20085">Mostrar información de sistema</string>
+  <string id="20084">Mostrar info de clima</string>
+  <string id="20085">Mostrar info de sistema</string>
   <string id="20086">Mostrar espacio disponible en C: E: F:</string>
   <string id="20087">Mostrar espacio disponible en E: F: G:</string>
   <string id="20088">Información meteorológica</string>
   <string id="20096">Inicio de sesión</string>
   <string id="20097">Obteniendo info del álbum</string>
   <string id="20098">Obteniendo info para el álbum</string>
-  <string id="20099">No se puede copiar CD o pista mientras se reproduce el CD</string>
+  <string id="20099">No se puede ripear CD o una pista mientras se reproduce el mismo</string>
   <string id="20100">Código Maestro y Bloqueos</string>
   <string id="20101">Introducir el código maestro siempre habilita el modo maestro</string>
   <string id="20102">o copiarlos de ajustes predefinidos?</string>
   <string id="20106">Encontradas fuentes de medios antiguos.</string>
   <string id="20107">Separado (bloqueado)</string>
   <string id="20108">Raíz</string>
-  <string id="20109">Zoom del interfaz</string>
+  <string id="20109">- Zoom</string>
   <string id="20110">Ajustes UPnP</string>
-  <string id="20111">Inicio automático de Cliente UPnP</string>
+  <string id="20111">Iniciar automáticamente el cliente UPnP</string>
   <string id="20112">Último inicio de sesión: %s</string>
   <string id="20113">Nunca ha iniciado sesión</string>
   <string id="20114">Perfil %i / %i</string>
   <string id="20164">Bloqueo no soportado</string>
   <string id="20165">No bloqueado</string>
   <string id="20166">Bloqueado</string>
-  <string id="20167">Colgado</string>
+  <string id="20167">Congelado</string>
   <string id="20168">Requiere reinicio</string>
   <string id="20169">Semana</string>
   <string id="20170">Línea</string>
   <string id="20173">Servidor FTP</string>
   <string id="20174">iTunes: música compartida (DAAP)</string>
   <string id="20175">Servidor UPnP</string>
-  <string id="20176">Ver Info Vídeo</string>
+  <string id="20176">Ver Info de vídeo</string>
   <string id="20177">Hecho</string>
   <string id="20178">Mays.</string>
   <string id="20179">Bloq. Mays.</string>
   <string id="20180">Símbolos</string>
-  <string id="20181">Borrado</string>
+  <string id="20181">Retroceso</string>
   <string id="20182">Espacio</string>
   <string id="20183">Recargar skin</string>
   <string id="20184">Rotar usando información EXIF</string>
   <string id="20185">Usar vista de poster para programas de TV</string>
-  <string id="20186">Espere, por favor</string>
-  <string id="20187"></string>
-  <string id="20188"></string>
+  <string id="20186">Espere por favor</string>
   <string id="20189">Permitir desplazamiento automático para el argumento y la reseña</string>
   <string id="20190">Personalizado</string>
   <string id="20191">Habilitar trazas de depuración</string>
   <string id="20197">Importar biblioteca de música</string>
   <string id="20198">¡No se encontraron artistas!</string>
   <string id="20199">Falló la descarga de información de artista</string>
-  
-  
-  
   <string id="20250">¡Que empiece la fiesta! (vídeos)</string>
   <string id="20251">Mezclando bebidas (vídeos)</string>
   <string id="20252">Llenando vasos (vídeos)</string>
   <string id="20255">Primer login, cargue su perfil</string>
   <string id="20256">Cliente HTS Tvheadend</string>
   <string id="20257">Cliente VDR Streamdev</string>
-   <string id="20258">Cliente MythTV</string> 
+  <string id="20258">Cliente MythTV</string>
+  <string id="20259">Network Filesystem (NFS)</string>
+  <string id="20260">Secure Shell (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
   <string id="20300">Carpeta Servidor Web (HTTP)</string>
   <string id="20301">Carpeta Servidor Web (HTTPS)</string>
   <string id="20302">Imposible escribir en carpeta:</string>
   <string id="20303">Desea saltear y continuar?</string>
   <string id="20304">RSS Feed</string>
-
-  <string id="20306"></string>
   <string id="20307">DNS Secundario</string>
   <string id="20308">Servidor DHCP:</string>
   <string id="20309">Crear nueva carpeta</string>
   <string id="20310">Atenuar LCD al reproducir</string>
   <string id="20311">Desconocido o en placa (protegido)</string>
   <string id="20312">Atenuar LCD al pausar</string>
-  <string id="20313"></string>
-  <string id="20314">Mi Vídeo - Biblioteca</string>
-  <string id="20315"></string>
+  <string id="20314">Vídeos - Biblioteca</string>
   <string id="20316">Por: ID</string>
-  <string id="20317"></string>
-  <string id="20318"></string>
-  <string id="20319"></string>
-  <string id="20320"></string>
-  <string id="20321"></string>
-  <string id="20322"></string>
-  <string id="20323"></string>
   <string id="20324">Reproducir fragmento...</string>
   <string id="20325">Reiniciar Calibrado</string>
   <string id="20326">Esto reiniciará los valores de calibración de %s</string>
   <string id="20327">a sus valores por defecto.</string>
-  <string id="20328">una ubicación para copiar la partida</string>
-  
+  <string id="20328">Buscar destino</string>
   <string id="20330">Usar nombres de dir. en búsquedas</string>
   <string id="20331">Fichero</string>
   <string id="20332">¿Usar nombres de archivo o carpeta en búsquedas?</string>
   <string id="20367">Ocultar los vistos</string>
   <string id="20368">Código de Prod.</string>
   <string id="20369">Ocultar el argumento de elementos no vistos</string>
-  <string id="20370">* Oculto para prevenir desenlaces *</string>
+  <string id="20370">* Oculto para prevenir SPOILERS *</string>
   <string id="20371">Establecer miniatura. de la temporada</string>
   <string id="20372">Imagen de la temporada</string>
   <string id="20373">Temporada</string>
   <string id="20401">Reproducir videoclip</string>
   <string id="20402">Obtener automáticamente las miniaturas de actor</string>
   <string id="20403">Establecer Miniatura de Actor</string>
-
   <string id="20405">Eliminar marcador de episodio</string>
   <string id="20406">Establecer marcador de episodio</string>
   <string id="20407">Configuración del scraper</string>
   <string id="20413">Obtener fanart</string>
   <string id="20414">Mostrar fanart en la biblioteca de vídeo</string>
   <string id="20415">Buscando contenido nuevo</string>
-  <string id="20416">Emisión</string>
+  <string id="20416">Emitido el</string>
   <string id="20417">Escritor</string>
-  <string id="20418">Limpiar nombres de fichero</string>
-
+  <string id="20419">Mostrar Metainfo en lista de archivos</string>
   <string id="20420">Nunca</string>
   <string id="20421">Si hay sólo una temporada</string>
   <string id="20422">Siempre</string>
   <string id="20451">Paises</string>
   <string id="20452">episodio</string>
   <string id="20453">episodios</string>
-  <!-- up to 21329 is reserved for the video db !! !-->
-
+  <string id="20454">Listener</string>
+  <string id="20455">Listeners</string>
+  <string id="20456">Set movieset fanart</string>
+  <string id="20457">Movie set</string>
   <string id="21330">Mostrar archivos y carpetas ocultos</string>
-  
   <string id="21331">Cliente TuxBox</string>
   <string id="21332">¡AVISO: El dispositivo TuxBox está en Modo-Grabación!</string>
   <string id="21333">El medio se detendrá!</string>
   <string id="21335">¿Seguro que desea iniciar el medio?</string>
   <string id="21336">Conectando a: %s</string>
   <string id="21337">Dispositivo TuxBox</string>
-  <!-- up to 21355 is reserved for the TuxBox Client!! !-->
-  
   <string id="21359">Añadir Compartición</string>
   <string id="21360">Compartir librerias de video y música via UPnP</string>
-
   <string id="21364">Editar Compartición</string>
   <string id="21365">Eliminar Compartición</string>
   <string id="21366">Carpeta de subtítulos</string>
   <string id="21367">Carpeta de subtítulos de películas y otros</string>
-
+  <string id="21368">Ignorar fuente de subtitulos ASS/SSA</string>
   <string id="21369">Habilitar ratón</string>
   <string id="21370">Reproducir sonidos de navegación durante reproducción</string>
   <string id="21371">Miniatura</string>
   <string id="21392">Low Power</string>
   <string id="21393">High Standby</string>
   <string id="21394">Low Standby</string>
-  <string id="21395">No se pueden almacenar archivos mayores de 4 GB</string>
+  <string id="21395">No se pueden hace cache de archivos mayores de 4 GB</string>
   <string id="21396">Capítulo</string>
   <string id="21397">Pixel Shader de alta calidad V2</string>
   <string id="21398">Habilitar lista de reproducción al inicio</string>
   <string id="21451">Se requiere una conexión a internet.</string>
   <string id="21452">Obtener más...</string>
   <string id="21453">Sistema de archivos Root</string>
-
+  <string id="21454">Cache lleno</string>
+  <string id="21455">El cache se llenó antes de alcanzar la cantidad requerida para reproducción continua</string>
+  <string id="21460">Ubicación de subtitulos</string>
+  <string id="21461">Fijo</string>
+  <string id="21462">Sobre el final del video</string>
+  <string id="21463">Debajo del video</string>
+  <string id="21464">Sobre el comienzo del video</string>
+  <string id="21465">Arriba del video</string>
   <string id="21800">Nombre de fichero</string>
   <string id="21801">Ruta de fichero</string>
   <string id="21802">Tamaño de fichero</string>
   <string id="21806">Comentario</string>
   <string id="21807">Color/BN</string>
   <string id="21808">Procesado JPEG</string>
-
   <string id="21820">Fecha/Hora</string>
   <string id="21821">Descripción</string>
   <string id="21822">Fabricante de cámara</string>
   <string id="21841">Longitud GPS</string>
   <string id="21842">Altitud GPS</string>
   <string id="21843">Orientación</string>
-
   <string id="21860">Categorías complementarias</string>
   <string id="21861">Palabras clave</string>
   <string id="21862">Pie de foto</string>
   <string id="21878">Marca copyright</string>
   <string id="21879">Código de país</string>
   <string id="21880">Servicio Referencia</string>
-  <string id="21881">Habilitar renderizador UPnP</string>
+  <string id="21881">Permitir control de XBMC via UPnP</string>
   <string id="21882">Intentar saltar introducción previa al menú DVD</string>
-  <string id="21883">CDs Audio copiados</string>
+  <string id="21883">Música almacenada</string>
   <string id="21884">Solicitar información para todos los artistas</string>
   <string id="21885">Descargando información de album</string>
   <string id="21886">Descargando información de artista</string>
   <string id="21898">Años activo</string>
   <string id="21899">Firma</string>
   <string id="21900">Nacido/Formado</string>
-
-  <!-- strings 21900 thru 21999 reserved for slideshow info -->
-
   <string id="22000">Actualizar biblioteca en el arranque</string>
   <string id="22001">Siempre actualizar la biblioteca en segundo plano</string>
   <string id="22002">- Sufijo DNS</string>
-
   <string id="22003">%2.3fs</string>
   <string id="22004">Retrasado en: %2.3fs</string>
   <string id="22005">Adelantado en: %2.3fs</string>
-  <string id="22006">Retraso de subtítulos</string>
+  <string id="22006">Mover subtítulos</string>
   <string id="22007">Distribuidor OpenGL:</string>
   <string id="22008">Renderizador OpenGL:</string>
   <string id="22009">Versión OpenGL:</string>
   <string id="22011">Temperatura de CPU:</string>
   <string id="22012">Memoria Total</string>
   <string id="22013">Datos de perfil</string>
-  <string id="22014">Atenuado si se pausa durante reproducción de video</string>
+  <string id="22014">Atenuar si se pausa durante reproducción de video</string>
   <string id="22015">Todas las grabaciones</string>
   <string id="22016">Por título</string>
   <string id="22017">Por grupo</string>
   <string id="22022">Mostrar archivos de video en listados</string>
   <string id="22023">Distribuidor DirectX:</string>
   <string id="22024">Versión Direct3D:</string>
-
-  <!-- strings 22030 thru 22060 reserved for karaoke -->
   <string id="22030">Fuente</string>
   <string id="22031">- Tamaño</string>
   <string id="22032">- Colores</string>
   <string id="22041">Blanco/Rojo</string>
   <string id="22042">Blanco/Azul</string>
   <string id="22043">Blanco/Negro</string>
-
   <string id="22079">Acción del botón select</string>
   <string id="22080">Elegir</string>
   <string id="22081">Mostrar información</string>
   <string id="22082">Más...</string>
   <string id="22083">Reproducir todo</string>
-
   <string id="23049">Teletext no disponible</string>
   <string id="23050">Activar Teletext</string>
   <string id="23051">Parte %i</string>
   <string id="23052">Almacenando %i bytes</string>
   <string id="23053">Deteniendo</string>
   <string id="23054">Ejecutando</string>
-
-  <!-- strings 23100 thru 23150 reserved for external player -->
   <string id="23100">Reproductor externo activo</string>
   <string id="23101">Click en OK para terminar el reproductor</string>
-
   <string id="23104">Click en OK cuando haya terminado la reproducción</string>
-
-  <!-- strings 24000 thru 24299 reserved for the Add-ons framework -->
   <string id="24000">Add-on</string>
   <string id="24001">Add-ons</string>
   <string id="24002">Opciones de Add-on</string>
   <string id="24003">Información de Add-on</string>
-
   <string id="24005">Fuente de contenidos</string>
-  <string id="24007">Movie information</string>
-  <string id="24008">Screensaver</string>
+  <string id="24007">Info de Películas</string>
+  <string id="24008">Refrescapantalla</string>
   <string id="24009">Script</string>
-  <string id="24010">Visualization</string>
-  <string id="24011">Add-on repository</string>
-  <string id="24012">Subtitles</string>
-  <string id="24013">Lyrics</string>
-  <string id="24014">TV information</string>
-  <string id="24015">Music video information</string>
-  <string id="24016">Album information</string>
-  <string id="24017">Artist information</string>
-
+  <string id="24010">Visualización</string>
+  <string id="24011">Repositorio de Add-on</string>
+  <string id="24012">Subtítulos</string>
+  <string id="24013">Letras</string>
+  <string id="24014">Info de TV</string>
+  <string id="24015">Info de videoclips</string>
+  <string id="24016">Info de album musical</string>
+  <string id="24017">Info de artista</string>
+  <string id="24018">Servicios</string>
   <string id="24020">Configure</string>
   <string id="24021">Disable</string>
   <string id="24022">Enable</string>
   <string id="24041">Install from zip file</string>
   <string id="24042">Downloading %i%%</string>
   <string id="24043">Available Updates</string>
-
+  <string id="24044">Dependencias no cumplidas</string>
+  <string id="24045">El Add-on no tiene la estructura correcta</string>
+  <string id="24046">%s se usa por los siguientes addon(s) instalado(s)</string>
+  <string id="24047">Este add-on no se puede desinstalar</string>
+  <string id="24048">Volver a versión anterior</string>
   <string id="24050">Available Add-ons</string>
   <string id="24051">Version:</string>
   <string id="24052">Disclaimer</string>
   <string id="24067">Add-ons siendo descargados</string>
   <string id="24068">Actualización disponible</string>
   <string id="24069">Actualizar</string>
-
   <string id="24070">No se pudo cargar el Add-on.</string>
   <string id="24071">Ocurrió un error desconocido.</string>
   <string id="24072">Se requiere configuración</string>
   <string id="24073">No se pudo conectar</string>
   <string id="24074">Es necesario reiniciar</string>
   <string id="24075">Desactivar</string>
+  <string id="24076">Add-on requerido</string>
   <string id="24080">Intentar reconectar?</string>
   <string id="24089">Se reinicia Add-on</string>
   <string id="24090">Bloquear administrador de Add-on</string>
-
-  <string id="24091"></string>
-  <string id="24092"></string>
-  <string id="24093"></string>
-  <string id="24094"></string>
-  <string id="24095"></string>
-
+  <string id="24094">(actual)</string>
+  <string id="24095">(blacklisted)</string>
   <string id="24096">El Add-on ha sido marcado como ROTO en el repositorio.</string>
   <string id="24097">Desea desactivarlo en su sistema?</string>
   <string id="24098">ROTO</string>
-
-  <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
+  <string id="24099">Desea cambiar a este skin?</string>
+  <string id="24100">Para usar esta opción necesita descargar un Add-on:</string>
+  <string id="24101">Quiere descargar este Add-on?</string>
+  <string id="25000">Notificaciones</string>
   <string id="29800">Modo biblioteca</string>
   <string id="29801">Teclado QWERTY</string>
   <string id="29802">Audio Passthrough en uso</string>
-
-  <string id="29999"></string>
-
-  <!-- strings 30000 thru 30999 reserved for plugins and plugin settings -->
-  <!-- strings 31000 thru 31999 reserved for skins -->
-  <!-- strings 32000 thru 32999 reserved for scripts -->
-  <!-- strings 33000 thru 33999 reserved for common strings used in addons -->
   <string id="33001">Calidad del Trailer</string>
   <string id="33002">Stream</string>
   <string id="33003">Descargar</string>
   <string id="33081">Este archivo esta apilado, seleccion la parte desde la que desea reproducir.</string>
   <string id="33082">Ruta al script</string>
   <string id="33083">Activar boton script personalizado</string>
-
-  <string id="34100">Configuracion de parlantes</string>
+  <string id="33100">Fallo al iniciar</string>
+  <string id="33101">Servidor Web</string>
+  <string id="33102">Servidor de eventos</string>
+  <string id="33103">Servidor de comunicacion remota</string>
+  <string id="33200">Detectada nueva conexión</string>
+  <string id="34100">Configuración de parlantes</string>
   <string id="34101">2.0</string>
   <string id="34102">2.1</string>
   <string id="34103">3.0</string>
   <string id="34108">5.1</string>
   <string id="34109">7.0</string>
   <string id="34110">7.1</string>
-  <!-- 34112-34200 reserved for future use -->
-
-</strings>
+  <string id="34201">No se encuentra el próximo item</string>
+  <string id="34202">No se encuentra el item anterior</string>
+  <string id="34300">Fallo al iniciar Zeroconf</string>
+  <string id="34301">Está instalado el servicio Bonjour de Apple? vea log para mas info.</string>
+  <string id="34400">Renderizado de video</string>
+  <string id="34401">Fallo al iniciar filtros/escaladores de video, utilizando escalado bilineal</string>
+  <string id="34402">Fallo al iniciar dispositivo de sonido</string>
+  <string id="34403">Verifique su configuracion de sonido</string>
+  <string id="35000">Periféricos</string>
+  <string id="35001">Dispositivo HID genérico</string>
+  <string id="35002">Adaptador de red genérico</string>
+  <string id="35003">Disco genérico</string>
+  <string id="35004">No hay configuración disponible&#10;para este periférico.</string>
+  <string id="35005">Nuevo dispositivo configurado</string>
+  <string id="35006">Dispositivo removido</string>
+  <string id="35007">Keymap para este dispositivo</string>
+  <string id="35008">Keymap activado</string>
+  <string id="35500">Ubicación</string>
+  <string id="35501">Clase</string>
+  <string id="35502">Nombre</string>
+  <string id="35503">Fabricante</string>
+  <string id="35504">ID de producto</string>
+  <string id="36000">Adaptador Pulse-Eight CEC</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Switch to keyboard side command</string>
+  <string id="36003">Switch to remote side command</string>
+  <string id="36004">Press "user" button command</string>
+  <string id="36005">Enable switch side commands</string>
+  <string id="36006">No se pudo acceder al adaptador</string>
+  <string id="36007">Encender TV al iniciar XBMC</string>
+  <string id="36008">Apagar dispositivos al detener XBMC</string>
+  <string id="36009">Poner dispositivos en standby cuando se active el refrescapantallas</string>
+  <string id="36010">Activar como fuente inactiva al detener XBMC</string>
+  <string id="36011">No se pudo detectar puerto CEC. Configurelo manualmente.</string>
+  <string id="36012">No se pudo detectar adaptador CEC.</string>
+  <string id="36013">Versión de interface libcec no soportada. %d es mayor que la versión soportada por XBMC (%d)</string>
+  <string id="36014">Poner esta PC en standby cuando se apage la TV</string>
+  <string id="36015">puerto HDMI</string>
+  <string id="36016">Connectado</string>
+  <string id="36017">Adaptador encontrado, pero libcec no está disponible</string>
+  <string id="36018">Usar configuración de idioma de la TV</string>
+</strings>
\ No newline at end of file
index 9a151d9..1c5e26f 100644 (file)
@@ -2,9 +2,8 @@
 <!--Language file translated with Team XBMC Translator-->
 <!--Translator: blittan-->
 <!--Email: blittan@xbmc.org-->
-<!--Date of translation: 11/19/2010-->
+<!--Date of translation: 12/26/2011-->
 <!--$Revision$-->
-<!--Based on english strings version 35193-->
 <strings>
   <string id="0">Program</string>
   <string id="1">Bilder</string>
   <string id="164">Ingen skiva</string>
   <string id="165">Skiva laddad</string>
   <string id="166">Skal</string>
-  <string id="167">Aktivera FTP-server</string>
   <string id="169">Upplösning</string>
   <string id="170">Justera uppdateringsfrekvens till att matcha video</string>
   <string id="172">Utgivningsdatum</string>
   <string id="221">Det finns inget nätverk</string>
   <string id="222">Avbryt</string>
   <string id="224">Hastighet</string>
+  <string id="225">Vertikal skiftning</string>
   <string id="226">Testmönster...</string>
   <string id="227">Slå upp låtnamn till musikskivor på freedb.org</string>
   <string id="228">Blanda spellistor när de laddas</string>
   <string id="573">Sökväg</string>
   <string id="574">Land</string>
   <string id="575">Pågår</string>
+  <string id="576">Gånger spelad</string>
   <string id="580">Sorteringsriktning</string>
   <string id="581">Sorteringsmetod</string>
   <string id="582">Visningsläge</string>
   <string id="766">Ljusgrå</string>
   <string id="767">Grå</string>
   <string id="770">Fel %i: utdelningen inte tillgänglig</string>
-  <string id="771">- Automatisk FATX-begränsare</string>
   <string id="772">Ljudutgång</string>
   <string id="773">Söker</string>
   <string id="774">Mapp för bildspelsskärmsläckare</string>
   <string id="850">Ogiltigt portnummer angivet</string>
   <string id="851">Giltigt portintervall är 1-65535</string>
   <string id="852">Giltigt portintervall är 1024-65535</string>
+  <string id="998">Lägg till musik...</string>
+  <string id="999">Lägg till video...</string>
   <string id="1000">- Förhandsgranska</string>
   <string id="1001">Kunde inte ansluta</string>
   <string id="1002">XBMC kunde inte ansluta till nätverksplatsen.</string>
   <string id="1256">Pingintervall (sek)</string>
   <string id="1257">Vill du ansluta till det autodetekterade systemet?</string>
   <string id="1260">Publicera dessa tjänster till andra system via Zeroconf</string>
+  <string id="1270">Tillåt XBMC att ta emot AirPlay-innehåll</string>
+  <string id="1271">Enhetsnamn</string>
+  <string id="1272">- Använd lösenordsskydd</string>
   <string id="1300">Anpassad ljudenhet</string>
   <string id="1301">Anpassad ljudutgångsenhet för genomströmning</string>
   <string id="1396">Blåsigt</string>
   <string id="12392">timmar</string>
   <string id="12393">dagar</string>
   <string id="12394">Total driftstid</string>
+  <string id="12395">Batterinivå</string>
   <string id="12600">Väder</string>
   <string id="12900">Skärmsläckare</string>
   <string id="12901">Fullskärms-OSD</string>
@@ -1108,6 +1113,7 @@ den här visualiseringen</string>
   <string id="13409">Topp 250</string>
   <string id="13410">Ställ in på Last.fm</string>
   <string id="13411">Minsta fläkthastighet</string>
+  <string id="13412">Spela från här</string>
   <string id="13413">Laddar ned</string>
   <string id="13414">Inkludera artister som endast är med på samlingsalbum</string>
   <string id="13415">Renderingsmetod</string>
@@ -1127,6 +1133,7 @@ den här visualiseringen</string>
   <string id="13429">Tillåt hårdvaruacceleration (VDADecoder)</string>
   <string id="13430">Tillåt hårdvaruacceleration (OpenMax)</string>
   <string id="13431">Pixelskuggning</string>
+  <string id="13432">Tillåt hårdvaruacceleration (Videoverktyg)</string>
   <string id="13500">A/V-synkmetod</string>
   <string id="13501">Ljudklocka</string>
   <string id="13502">Videoklocka (tappat/dubblerat ljud)</string>
@@ -1187,6 +1194,7 @@ den här visualiseringen</string>
   <string id="14038">Nätverksinställningar ändrade</string>
   <string id="14039">XBMC måste startas om för att slutföra din</string>
   <string id="14040">nätverksinställning. Vill du starta om nu?</string>
+  <string id="14041">Bandbreddsbegränsning för internetanslutning</string>
   <string id="14043">- Stäng av under uppspelning</string>
   <string id="14044">%i min</string>
   <string id="14045">%i sek</string>
@@ -1310,7 +1318,6 @@ den här visualiseringen</string>
   <string id="15283">Nyligen spelade låtar av %name%</string>
   <string id="15284">Lyssna till %name%'s rekommenderade Last.fm radio</string>
   <string id="15285">Topp taggar för användare %name%</string>
-  <string id="15286">Lyssna till %name%'s spellista på Last.fm radio</string>
   <string id="15287">Vill du lägga till detta spår i dina älsklingsspår?</string>
   <string id="15288">Vill du bannlysa detta spår?</string>
   <string id="15289">Tillagt i dina älsklingsspår: '%s'.</string>
@@ -1361,6 +1368,12 @@ den här visualiseringen</string>
   <string id="16033">Kunde inte öppna databasen.</string>
   <string id="16034">Kunde inte hämta låtar från databasen.</string>
   <string id="16035">Partylägespellista</string>
+  <string id="16036">Avflätning (halv)</string>
+  <string id="16037">Avfläta video</string>
+  <string id="16038">Avflätningsmetod</string>
+  <string id="16039">Av</string>
+  <string id="16040">Auto</string>
+  <string id="16041">På</string>
   <string id="16100">Alla filmer</string>
   <string id="16101">Inte visad</string>
   <string id="16102">Visad</string>
@@ -1394,6 +1407,11 @@ den här visualiseringen</string>
   <string id="16317">Temporal (Halv)</string>
   <string id="16318">Temporal/Spatial (Halv)</string>
   <string id="16319">DXVA</string>
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36-optimerad</string>
+  <string id="16324">Mjukvarublandning</string>
   <string id="16400">Efterbearbetning</string>
   <string id="17500">Visa insommningstimeout</string>
   <string id="19000">Byt till kanal</string>
@@ -1587,6 +1605,9 @@ den här visualiseringen</string>
   <string id="20256">HTS Tvheadend-klient</string>
   <string id="20257">VDR Streamdev-klient</string>
   <string id="20258">MythTV-klient</string>
+  <string id="20259">Network Filesystem (NFS)</string>
+  <string id="20260">Secure Shell (SSH/SFTP)</string>
+  <string id="20261">Apple Flin Protocol (AFP)</string>
   <string id="20300">Webbserver katalog (HTTP)</string>
   <string id="20301">Webbserver katalog (HTTPS)</string>
   <string id="20302">Kunde inte skriva till mapp:</string>
@@ -1693,6 +1714,7 @@ den här visualiseringen</string>
   <string id="20416">Först sänt</string>
   <string id="20417">Författare</string>
   <string id="20418">Rensa mapp och filnamn</string>
+  <string id="20419">Visa metadata i filläge</string>
   <string id="20420">Aldrig</string>
   <string id="20421">Om endast en säsong</string>
   <string id="20422">Alltid</string>
@@ -1729,6 +1751,8 @@ den här visualiseringen</string>
   <string id="20453">avsnitt</string>
   <string id="20454">Lyssnare</string>
   <string id="20455">Lyssnare</string>
+  <string id="20456">Ange filmsetsfanart</string>
+  <string id="20457">Filmset</string>
   <string id="21330">Visa dolda filer och mappar</string>
   <string id="21331">TuxBox-klient</string>
   <string id="21332">VARNING: Vald TuxBox-enhet är i inspelningsläge!</string>
@@ -1743,6 +1767,7 @@ den här visualiseringen</string>
   <string id="21365">Ta bort mediautdelning</string>
   <string id="21366">Undertextsmapp</string>
   <string id="21367">Film &amp; alternativ undertextmapp</string>
+  <string id="21368">Åsidosätt ASS/SSA undertextstypsnitt</string>
   <string id="21369">Aktivera mus</string>
   <string id="21370">Spela navigationsljud under mediauppspelning</string>
   <string id="21371">Miniatyrbild</string>
@@ -1828,6 +1853,12 @@ den här visualiseringen</string>
   <string id="21451">Internetuppkoppling krävs.</string>
   <string id="21452">Hämta fler...</string>
   <string id="21453">Rotfilsystem</string>
+  <string id="21460">Undertextsplacering</string>
+  <string id="21461">Fast</string>
+  <string id="21462">Botten av videon</string>
+  <string id="21463">Under videon</string>
+  <string id="21464">Toppen av videon</string>
+  <string id="21465">Över videon</string>
   <string id="21800">Filnamn</string>
   <string id="21801">Filsökväg</string>
   <string id="21802">Filstorlek</string>
@@ -1971,6 +2002,7 @@ den här visualiseringen</string>
   <string id="24015">Musikvideoinformation</string>
   <string id="24016">Albuminformation</string>
   <string id="24017">Artistinformation</string>
+  <string id="24018">Tjänster</string>
   <string id="24020">Konfigurera</string>
   <string id="24021">Inaktivera</string>
   <string id="24022">Aktivera</string>
@@ -1991,6 +2023,11 @@ den här visualiseringen</string>
   <string id="24041">Installera från zipfil</string>
   <string id="24042">Laddar ner %i%%</string>
   <string id="24043">Tillgängliga uppdateringar</string>
+  <string id="24044">Beronden möts inte</string>
+  <string id="24045">Tillägget har inte korrekt stuktur</string>
+  <string id="24046">%s används av följande installerade tillägg</string>
+  <string id="24047">Detta tillägg kan inte avinstalleras</string>
+  <string id="24048">Återladdning</string>
   <string id="24050">Tillgängliga Ttillägg</string>
   <string id="24051">Version:</string>
   <string id="24052">Ansvarsfriskrivning</string>
@@ -2013,13 +2050,18 @@ den här visualiseringen</string>
   <string id="24073">Kan ej ansluta</string>
   <string id="24074">Kräver omstart</string>
   <string id="24075">Inaktivera</string>
+  <string id="24076">Tillägg krävs</string>
   <string id="24080">Prova återanslut?</string>
   <string id="24089">Tillägget startar om</string>
   <string id="24090">Lås tilläggshanteraren</string>
+  <string id="24094">(nuvarande)</string>
+  <string id="24095">(svartlistad)</string>
   <string id="24096">Tillägget har markerats som trasigt i förrådet.</string>
   <string id="24097">Vill du inaktivera det på ditt system?</string>
   <string id="24098">Trasigt</string>
   <string id="24099">Vill du byta till detta skal?</string>
+  <string id="24100">För att använda denna funktion måste du ladda ner ett tillägg:</string>
+  <string id="24101">Vill du ladda ner detta tillägg?</string>
   <string id="25000">Notifieringar</string>
   <string id="29800">Biblioteksläge</string>
   <string id="29801">QWERTY-tangentbord</string>
@@ -2096,6 +2138,10 @@ den här visualiseringen</string>
   <string id="33081">Denna fil är sammanslagen, välj den del du vill spela.</string>
   <string id="33082">Sökväg till skript</string>
   <string id="33083">Aktivera egen skriptknapp</string>
+  <string id="33100">Misslyckades att starta</string>
+  <string id="33101">Webbserver</string>
+  <string id="33102">Händelseserver</string>
+  <string id="33103">Fjärrkommunikationsserver</string>
   <string id="34000">Lame</string>
   <string id="34001">Vorbis</string>
   <string id="34002">Wav</string>
@@ -2113,4 +2159,38 @@ den här visualiseringen</string>
   <string id="34108">5.1</string>
   <string id="34109">7.0</string>
   <string id="34110">7.1</string>
+  <string id="34201">Kan inte hitta nästa objekt att spela</string>
+  <string id="34202">Kan inte hitta föregående objekt att spela</string>
+  <string id="35000">Kringutrustning</string>
+  <string id="35001">Allmän HID-enhet</string>
+  <string id="35002">Allmän nätverksadapter</string>
+  <string id="35003">Allmän disk</string>
+  <string id="35004">Det finns inga tillgängliga&#10;inställningar för denna kringutrustning</string>
+  <string id="35005">Ny enhet konfigurerad</string>
+  <string id="35006">Enhet borttagen</string>
+  <string id="35007">Tangentmappning att använda för denna enhet</string>
+  <string id="35008">Tangentmappning aktiverad</string>
+  <string id="35500">Plats</string>
+  <string id="35501">Klass</string>
+  <string id="35502">Namn</string>
+  <string id="35503">Tillverkare</string>
+  <string id="35504">Produktid</string>
+  <string id="36000">Pulse-Eight CEC-adapter</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Byt till tangentbordskommando</string>
+  <string id="36003">Byt till fjärrkontrollskomando</string>
+  <string id="36004">Tryck "user"-knappskommando</string>
+  <string id="36005">Aktivera sidbytskommando</string>
+  <string id="36006">Kunde inte öppna adaptern</string>
+  <string id="36007">Slå på TVn när XBMC startas</string>
+  <string id="36008">Slå av enheter när XBMC stängs av</string>
+  <string id="36009">Ställ enheter i standbyläge när skärmsläckaren aktiveras</string>
+  <string id="36011">Kunde inte hitta CEC-porten. Ställ in den manuellt</string>
+  <string id="36012">Kunde inte hitta CEC-adaptern</string>
+  <string id="36013">Ostödd libcec-gränssnittsversion. %d är nyare än versionen XBMC stödjer (%d)</string>
+  <string id="36014">Ställ denna PC i standbyläge när TVn stängs av</string>
+  <string id="36015">HDMI-portnummer</string>
+  <string id="36016">Ansluten</string>
+  <string id="36017">Adapter hittat, men libcec är inte tillgänglig</string>
+  <string id="36018">Använd TV'ns språkinställning</string>
 </strings>
index 97d0016..61204e2 100644 (file)
@@ -2,13 +2,13 @@
 <!--Translator: NFA (necipfazil)-->
 <!--Email: necipfazil@gmail.com-->
 <!--Date of translation: 06/07/2006-->
-<!--Translator: Özgür BASKIN (queeup)-->
-<!--Email: ozgur.baskin@gmail.com-->
-<!--Date of translation: 22/04/2011-->
 <!--Translator: K. Deniz-->
 <!--Email: blackpilot24@hotmail.com-->
-<!--Date of translation: 08/08/2011-->
-<!--Based on English strings commit 282f5a5b809ab387129f-->
+<!--Date of translation: 22/04/2011-->
+<!--Translator: Özgür BASKIN (queeup)-->
+<!--Email: ozgur.baskin@gmail.com-->
+<!--Date of translation: 27/02/2012-->
+<!--Based on English strings commit 0ee1ef0923 -->
 <strings>
   <string id="0">Programlar</string>
   <string id="1">Resimler</string>
@@ -19,7 +19,7 @@
   <string id="6">XBMC SVN</string>
   <string id="7">Dosya yöneticisi</string>
   <string id="8">Hava Durumu</string>
-  <string id="9">xbmc media merkezi</string>
+  <string id="9">xbmc medya merkezi</string>
 
   <string id="11">Pazartesi</string>
   <string id="12">Salı</string>
   <string id="560">ID</string>
   <string id="561">Dosya</string>
   <string id="562">Yıl</string>
-  <string id="563">Beğeni</string>
+  <string id="563">Derecelendirme</string>
   <string id="564">Tür</string>
   <string id="565">Kullanım</string>
   <string id="566">Albüm sanatçısı</string>
   <string id="596">Tekrar: Birini</string>
   <string id="597">Tekrar: Hepsini</string>
 
-  <string id="600">Ses CD'sini Aktar</string>
+  <string id="600">Ses CD'sinden kopyala</string>
   <string id="601">Orta</string>
   <string id="602">Standart</string>
   <string id="603">Extreme</string>
   <string id="605">Kopyalanıyor...</string>
 
   <string id="607">Nereye:</string>
-  <string id="608">CD veya parça aktarılamıyor</string>
-  <string id="609">CDDA Aktarma Yolu ayarlanmamış</string>
-  <string id="610">Parçayı aktar</string>
+  <string id="608">CD veya parça kopyalanamıyor</string>
+  <string id="609">CDDA kopyalama yolu ayarlanmamış</string>
+  <string id="610">Parçayı kopyala</string>
   <string id="611">Numara gir</string>
   <string id="612">Bits/Sample</string>
   <string id="613">Sample Frequency</string>
   <!-- strings 768 and 769 reserved for more subtitle colors -->
 
   <string id="770">Hata %i: paylaşım bulunamıyor</string>
-  <string id="771"></string>
+
   <string id="772">Ses çıkışı</string>
   <string id="773">Atla</string>
   <string id="774">Slayt Gösterisi klasörü</string>
   <string id="1004">Yine de eklemek istiyor musunuz?</string>
 
   <string id="1006">IP adresi</string>
-  <string id="1007">Ağ bağlantısı ekle</string>
+  <string id="1007">Ağ konumu ekle</string>
   <string id="1008">Protokol</string>
   <string id="1009">Sunucu adresi</string>
   <string id="1010">Sunucu adı</string>
   <string id="1257">Otomatik olarak tanımlanan sisteme bağlanmak ister misiniz?</string>
 
   <string id="1260">Bu hizmetleri Zeroconf üzerinden diğer sistemlere bildir</string>
+  <string id="1270">XBMC'nin AirPlay içeriğini almasına izin ver</string>
+  <string id="1271">Aygıt adı</string>
+  <string id="1272">- Parola koruması kullan</string>
 
   <string id="1300">Özel ses aygıtı</string>
   <string id="1301">Özel passthrough aygıtı</string>
   <string id="10019">Ayarlar - Görünüm</string>
   <string id="10020">Betikler</string>
   <string id="10021">Web Tarayıcısı</string>
-
+  <string id="10025">Videolar</string>
   <string id="10028">Videolar/Çalma Listesi</string>
+  <string id="10029">Giriş ekranı</string>
   <string id="10034">Ayarlar - Profiller</string>
+  <string id="10040">Eklenti tarayıcısı</string>
 
   <string id="10100">Evet/Hayır iletişim kutusu</string>
   <string id="10101">İlerleme iletişim kutusu</string>
   <string id="12340">Yeni parolayı girin</string>
   <string id="12341">Yeni parolayı tekrar girin</string>
   <string id="12342">Yanlış parola,</string>
-  <string id="12343"> deneme hakkı kaldı </string>
+  <string id="12343">deneme hakkı kaldı </string>
   <string id="12344">Girilen parola aynı değil.</string>
   <string id="12345">Giriş reddedildi</string>
   <string id="12346">Parola deneme hakkı tükendi.</string>
   <string id="12392">Saat</string>
   <string id="12393">Gün</string>
   <string id="12394">Toplam çalışma süresi</string>
+  <string id="12395">Pil düzeyi</string>
 
   <string id="12600">Hava Durumu</string>
 
 
   <string id="13100">Titreme filtresi</string>
   <string id="13101">Sürücü seçsin (yeniden başlatmak gerekir)</string>
+  
   <string id="13105">Dikey boşluk senkronizasyonu</string>
   <string id="13106">Devre dışı</string>
   <string id="13107">Video oynatılırken etkinleştir</string>
   <string id="13171">Hemen</string>
   <string id="13172">%i saniye sonra</string>
   <string id="13173">HDD yükleme tarihi:</string>
-  <string id="13174">HDD power cycle count:</string>
+  <string id="13174">HDD güç döngüsü sayısı:</string>
 
   <string id="13200">Profiller</string>
   <string id="13201">'%s' profili silinsin mi?</string>
+  
   <string id="13204">En son yüklenen profil:</string>
   <string id="13205">Bilinmiyor</string>
-  <string id="13206">Kaydet</string>
+  <string id="13206">Üzerine yaz</string>
+  
   <string id="13208">Çalar saat</string>
   <string id="13209">Çalar saat aralığı (dakika şeklinde)</string>
   <string id="13210">Alarm Aktif: %idk</string>
   <string id="13302">Fan hızı ayarı</string>
   <string id="13303">- Yazı tipleri</string>
   <string id="13304">Enable flipping bi-directional strings</string>
-  <string id="13305">RSS haber beslemelerini göster</string>
+  <string id="13305">RSS haber akışlarını göster</string>
   <string id="13306">Geri gitme simgesini göster</string>
   <string id="13307">Parça isim kalıbı</string>
   <string id="13308">XBMC'yi yeniden başlatmak yerine sistemi</string>
   <string id="13359">Sanatçı küçük resmini ayarla</string>
   <string id="13360">Küçük resimleri otomatik olarak oluştur</string>
   <string id="13361">Sesi etkinleştir</string>
+  
   <string id="13375">Donanımı etkinleştir</string>
   <string id="13376">Ses Şiddeti</string>
   <string id="13377">Varsayılan görünüm modu</string>
   <string id="13405">Küçük resim al</string>
   <string id="13406">Resim bilgisi</string>
   <string id="13407">%s önayarları</string>
-  <string id="13408">(IMDb kullanıcı beğenisi)</string>
+  <string id="13408">(IMDb kullanıcı derecelendirmesi)</string>
   <string id="13409">En İyi 250</string>
   <string id="13410">Last.fm'de bul</string>
   <string id="13411">Asgari fan hızı</string>
   <string id="13500">Ses/Video senkron biçimi</string>
   <string id="13501">Ses saati</string>
   <string id="13502">Video saati (Drop/Dupe audio)</string>
-  <string id="13503">Video saati (ses yeniden örnekleme)</string>
+  <string id="13503">Video saati (yeniden ses örnekleme)</string>
   <string id="13504">Azami yeniden örnekleme miktarı (%)</string>
   <string id="13505">Yeniden örnekleme kalitesi</string>
   <string id="13506">Düşük(hızlı)</string>
   <string id="15210">%i şarkı önbellekte</string>
   <string id="15211">Gönderiyor...</string>
   <string id="15212">%i sn. dir gönderiyor</string>
-  <string id="15213">...Kullanarak Oynat</string>
+  <string id="15213">...Kullanarak oynat</string>
   <string id="15214">Düzgün Ses/Video senkronizasyonunu kullan</string>
   <string id="15215">Küçük resim görünümünde dosya isimlerini sakla</string>
   <string id="15216">Parti modunda çal</string>
   <string id="16020">De-interlace</string>
   <string id="16021">Bob</string>
   <string id="16022">Bob (inverted)</string>
-  <string id="16023">Resim düzeltme</string>
+  <string id="16023"></string>
   <string id="16024">İptal ediliyor...</string>
   <string id="16025">Sanatçı adını girin</string>
   <string id="16026">Çalma başarısız</string>
   <string id="16033">Veritabanı açılamıyor.</string>
   <string id="16034">Veritabanından şarkılar alınamıyor.</string>
   <string id="16035">Parti modu çalma listesi</string>
-
+  <string id="16036">De-interlace (Yarım)</string>
+  <string id="16037">Deinterlace video</string>
+  <string id="16038">Deinterlace metodu</string>
+  <string id="16039">Kapalı</string>
+  <string id="16040">Otomatik</string>
+  <string id="16041">Açık</string>
+  
   <string id="16100">Bütün Videolar</string>
   <string id="16101">Seyredilmeyen</string>
   <string id="16102">Seyredilen</string>
   <string id="16317">Temporal (Yarım)</string>
   <string id="16318">Temporal/Spatial (Yarım)</string>
   <string id="16319">DXVA</string>
-
+  <string id="16320">DXVA Bob</string>
+  <string id="16321">DXVA Best</string>
+  <string id="16322">Spline36</string>
+  <string id="16323">Spline36 optimized</string>
+  <string id="16324">Software Blend</string>
+  
   <string id="16400">Post-processing</string>
 
   <string id="17500">Görüntü uyku zaman aşımı</string>
   <string id="20071">Taze ortam kaynaklarıyla başla</string>
   <string id="20072">Seçili klasörün yazılabilir ve klasör adının</string>
   <string id="20073">geçerli olduğundan emin olun</string>
-  <string id="20074">MPAA</string>
+  <string id="20074">MPAA derecelendirmesi</string>
   <string id="20075">Yönetici kilit kodunu gir</string>
   <string id="20076">Başlangıçta yönetici kilit kodunu sor</string>
   <string id="20077">Dış görünüm ayarları</string>
   <string id="20126">Oturumu kapat</string>
   <string id="20128">Kök dizine git</string>
   <string id="20129">Weave</string>
-  <string id="20130">Weave (inverted)</string>
+  <string id="20130">Weave (ters)</string>
   <string id="20131">Karıştır</string>
   <string id="20132">Video'yu yeniden başlat</string>
   <string id="20133">Ağ konumunu düzenle</string>
   <string id="20256">HTS Tvheadend istemcisi</string>
   <string id="20257">VDR Streamdev istemcisi</string>
   <string id="20258">MythTV istemcisi</string>
+  <string id="20259">Ağ Dosya Sistemi (NFS)</string>
+  <string id="20260">Güvenli Kabuk (SSH/SFTP)</string>
+  <string id="20261">Apple Filing Protocol (AFP)</string>
 
   <string id="20300">Web sunucu dizini (HTTP)</string>
   <string id="20301">Web sunucu dizini (HTTPS)</string>
   <string id="20302">Klasöre yazılamıyor:</string>
   <string id="20303">Bu adımı atlayıp devam etme istiyor musunuz?</string>
-  <string id="20304">RSS Beslemesi</string>
+  <string id="20304">RSS Akışı</string>
 
-  <string id="20306"></string>
   <string id="20307">İkincil DNS</string>
   <string id="20308">DHCP sunucusu:</string>
   <string id="20309">Yeni klasör yarat</string>
   <string id="20326">Bu %s için olan ayarlama değerlerini</string>
   <string id="20327">varsayılana sıfırlayacak.</string>
   <string id="20328">Hedefe gözat</string>
-
+  <string id="20329">Filmler ayrı klasörlerde film başlığı ile eşleşecek şekilde bulunuyor</string>
   <string id="20330">Arama için klasör adlarını kullan</string>
   <string id="20331">Dosya</string>
   <string id="20332">Aramalarda dosya veya klasör adları kullanılsın mı?</string>
   <string id="20415">Yeni içerik için taranıyor</string>
   <string id="20416">İlk gösterim</string>
   <string id="20417">Yazar</string>
-  <string id="20418">Dosya ve klasör adlarını temizle</string>
+  <string id="20418"></string>
+  <string id="20419">Dosya görünümünde meta verileri gösterilsin mi?</string>
 
   <string id="20420">Asla</string>
   <string id="20421">Yalnızca bir sezon ise</string>
   <string id="20453">bölüm</string>
   <string id="20454">Dinleyici</string>
   <string id="20455">Dinleyiciler</string>
+  <string id="20456">Set movieset fanart</string>
+  <string id="20457">Movie set</string>
+  <string id="20458">Group movies in sets</string>
   <!-- up to 21329 is reserved for the video db !! !-->
 
   <string id="21330">Gizli dosya ve dizinleri göster</string>
   <string id="21365">Ortam paylaşımını kaldır</string>
   <string id="21366">Altyazı klasörü</string>
   <string id="21367">Film ve alternatif altyazı klasörü</string>
-
-  <string id="21369">Fareyi etkinleştir</string>
+  <string id="21368">ASS/SSA altyazı yazı tiplerini geçersiz kıl</string>
+  
+  <string id="21369">Fareyi ve Dokunmatik Ekran desteğini etkinleştir</string>
   <string id="21370">Ortam oynatılırken kılavuz seslerini çal</string>
   <string id="21371">Küçük resimler</string>
   <string id="21372">DVD bölge kodunu zorla</string>
   <string id="21373">Video çıkışı</string>
   <string id="21374">Video görüntü oranı</string>
   <string id="21375">Normal</string>
-  <string id="21376">Letterbox</string>
+  <string id="21376">Sinemaskop</string>
   <string id="21377">Geniş ekran</string>
   <string id="21378">480p'yi etkinleştir</string>
   <string id="21379">720p'ti etkinleştir</string>
   <string id="21448">Altyazı dili</string>
   <string id="21449">Remote control sends keyboard presses</string>
   <string id="21450">- Düzenle</string>
-  <string id="21451">Internet bağlantısı gereklidir.</string>
+  <string id="21451">İnternet bağlantısı gereklidir.</string>
   <string id="21452">Daha Fazla...</string>
   <string id="21453">Kök dosya sistemi</string>
+  <string id="21454">Önbellek dolu</string>
+  <string id="21455">Önbellek sürekli oynatma için gerekli miktara ulaşamadan doldu</string>
+  
+  <string id="21460">Altyazı konumu</string>
+  <string id="21461">Sabit</string>
+  <string id="21462">Videonun en altında</string>
+  <string id="21463">Videonun altında</string>
+  <string id="21464">Videonun en üstünde</string>
+  <string id="21465">Videonun üstünde</string>
 
   <string id="21800">Dosya adı</string>
   <string id="21801">Dosya yolu</string>
   <string id="24043">Kullanılabilir Güncelleştirmeler</string>
   <string id="24044">Bağımlılıklar karşılanmadı</string>
   <string id="24045">Eklenti doğru bir yapıya sahip değil</string>
+  <string id="24046">%s yüklü eklenti(ler) tarafından kullanılıyor</string>
+  <string id="24047">Bu eklenti kaldırılamaz</string>
+  <string id="24048">Geri alma</string>
 
   <string id="24050">Kullanılabilir Eklentiler</string>
   <string id="24051">Sürüm:</string>
   <string id="24073">Bağlanılamadı</string>
   <string id="24074">Yeniden başlatmak gerekiyor</string>
   <string id="24075">Devre dışı bırak</string>
+  <string id="24076">Eklenti Gerekli</string>
   <string id="24080">Yeniden bağlanılsın mı?</string>
   <string id="24089">Eklenti yeniden başlatmaları</string>
   <string id="24090">Eklenti yöneticisini kilitle</string>
 
+  <string id="24094">(geçerli)</string>
+  <string id="24095">(kara listede)</string>
   <string id="24096">Depodaki eklenti bozuk olarak işaretlenmiş.</string>
   <string id="24097">Sisteminizde devre dışı bırakmak ister misiniz?</string>
   <string id="24098">Bozuk</string>
   <string id="24099">Bu dış görünüme geçmek ister misiniz?</string>
+  <string id="24100">Bu özelliği kullanabilmek için indirmeniz gereken eklenti:</string>
+  <string id="24101">Bu eklentiyi indirmek istiyor musunuz?</string>
   <string id="25000">Bildirimler</string>
 
   <!-- strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code -->
   <string id="33029">Ayrıntılar</string>
   <string id="33030">Outlook</string>
   <string id="33031">Coverflow</string>
-  <string id="33032">Metni Tercüme Et</string>
+  <string id="33032">Metni tercüme et</string>
   <string id="33033">%s kategorisinin harita listesi</string>
   <string id="33034">36 Saatlik</string>
   <string id="33035">Haritalar</string>
   <string id="33063">Seçenekler</string>
   <string id="33065">Düzenleyici</string>
   <string id="33066">About your</string>
-  <string id="33067">Star rating</string>
+  <string id="33067">Yıldız derecelendirmesi</string>
   <string id="33068">Arka Plan</string>
   <string id="33069">Arka Planlar</string>
   <string id="33070">Özel arka plan</string>
   <string id="33071">Özel arka planlar</string>
   <string id="33072">Benioku'yu görüntüle</string>
   <string id="33073">Değişiklikleri görüntüle</string>
-  <string id="33074">This version of %s requires an</string>
-  <string id="33075">XBMC revision of %s or greater to run.</string>
+  <string id="33074">%s sürümünün çalışması için</string>
+  <string id="33075">%s veya daha büyük bir XBMC sürümü gerekli.</string>
   <string id="33076">Lütfen XBMC'yi güncelleyin.</string>
   <string id="33077">Hiç veri bulunamadı!</string>
   <string id="33078">Sonraki sayfa</string>
   <string id="33081">Bu dosya yığınlandı, oynatmak istediğiniz bölümü seçin.</string>
   <string id="33082">Betik yolu</string>
   <string id="33083">Özel betik tuşunu etkinleştir</string>
-  
+
   <string id="33100">Başlatılamadı</string>
   <string id="33101">Web Sunucusu</string>
   <string id="33102">Olay Sunucusu</string>
   <string id="33103">Uzak iletişim sunucusu</string>
+  
+  <string id="33200">Yeni Bağlantı Algılandı</string>
 
   <!-- translators: no need to add these to your language files -->
   <string id="34000">Lame</string>
   <string id="34110">7.1</string>
   <!-- 34112-34200 reserved for future use -->
 
+  <string id="34201">Çalınacak sonraki öğeyi bulamıyor</string>
+  <string id="34202">Çalınacak önceki öğeyi bulamıyor</string>
+  
+  <string id="34300">Zeroconf başlatılamadı</string>
+  <string id="34301">Apple'ın Bonjour Hizmeti yüklü mü? Daha fazla bilgi için hata ayıklama çıktısına bakın.</string>
+  
+  <string id="34400">Video İşleme</string>
+  <string id="34401">Video filtreleri/ölçekleyiciler başlatılamadı, bilinear ölçeklendirmeye dönülüyor</string>
+  <string id="34402">Ses aygıtı başlatılamadı</string>
+  <string id="34403">Ses ayarlarınızı denetleyin</string>
+
+  <string id="35000">Çevre birimleri</string>
+
+  <string id="35001">Genel HID aygıtı</string>
+  <string id="35002">Genel ağ bağdaştırıcısı</string>
+  <string id="35003">Genel disk</string>
+  <string id="35004">Bu çevre birimi için ayar mevcut değil.</string>
+  <string id="35005">Yani aygıt yapılandırıldı</string>
+  <string id="35006">Aygıt kaldırıldı</string>
+  <string id="35007">Bu aygıt için kullanılacak keymap</string>
+  <string id="35008">Keymap etkin</string>
+
+  <string id="35500">Konum</string>
+  <string id="35501">Sınıf</string>
+  <string id="35502">Adı</string>
+  <string id="35503">Satıcı</string>
+  <string id="35504">Ürün Kimliği</string>
+  
+  <string id="36000">Pulse-Eight CEC bağdaştırıcısı</string>
+  <string id="36001">Pulse-Eight Nyxboard</string>
+  <string id="36002">Switch to keyboard side command</string>
+  <string id="36003">Switch to remote side command</string>
+  <string id="36004">Press "user" button command</string>
+  <string id="36005">Enable switch side commands</string>
+  <string id="36006">Bağdaştırıcı açılamıyor</string>
+  <string id="36007">XBMC başlatılınca Televizyonu aç</string>
+  <string id="36008">XBMC durdurulunca aygıtı kapat</string>
+  <string id="36009">Ekran koruyucu devreye girince aygıtı bekleme moduna geçir</string>
+  <string id="36010"></string>
+  <string id="36011">CEC portu algılanamadı. El ile ayarla.</string>
+  <string id="36012">CEC bağdaştırıcısı algılanamadı.</string>
+  <string id="36013">Desteklenmeyen libcec arabirim sürümü. %d is greater than the version XBMC supports (%d)</string>
+  <string id="36014">Televizyon kapatılınca bilgisayarı bekleme moduna geçir</string>
+  <string id="36015">HDMI port numarası</string>
+  <string id="36016">Bağlandı</string> <!-- max. 13 characters -->
+  <string id="36017">Bağdaştırıcı bulundu, fakat libcec kullanılamıyor</string>
+  <string id="36018">Televizyonun dil ayarlarını kullan</string>
 </strings>
index 267f1ee..46a7481 100644 (file)
@@ -42,13 +42,10 @@ extern "C" {
   #else
     #include <ffmpeg/avformat.h>
   #endif
-  /* libavformat/riff.h is not a public header, so include it here */
-  #include "ffmpeg/libavformat/riff.h"
   /* av_read_frame_flush() is defined for us in lib/xbmc-dll-symbols/DllAvFormat.c */
   void av_read_frame_flush(AVFormatContext *s);
 #else
   #include "libavformat/avformat.h"
-  #include "libavformat/riff.h"
 #endif
 }
 
diff --git a/lib/DllLibbluray.h b/lib/DllLibbluray.h
new file mode 100644 (file)
index 0000000..e5db1ce
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ *      Copyright (C) 2005-2009 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+#pragma once
+#include "system.h"
+#ifdef HAVE_LIBBLURAY
+
+#include "DynamicDll.h"
+
+
+extern "C"
+{
+#include <libbluray/bluray.h>
+#include <libbluray/filesystem.h>
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+#include <libbluray/log_control.h>
+#endif
+}
+
+class DllLibblurayInterface
+{
+public:
+  virtual ~DllLibblurayInterface() {};
+  virtual uint32_t bd_get_titles(BLURAY *bd, uint8_t flags, uint32_t min_title_length)=0;
+  virtual BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx, unsigned angle)=0;
+  virtual BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist, unsigned angle)=0;
+  virtual void bd_free_title_info(BLURAY_TITLE_INFO *title_info)=0;
+  virtual BLURAY *bd_open(const char* device_path, const char* keyfile_path)=0;
+  virtual void bd_close(BLURAY *bd)=0;
+  virtual int64_t bd_seek(BLURAY *bd, uint64_t pos)=0;
+  virtual int64_t bd_seek_time(BLURAY *bd, uint64_t tick)=0;
+  virtual int bd_read(BLURAY *bd, unsigned char *buf, int len)=0;
+  virtual int64_t bd_seek_chapter(BLURAY *bd, unsigned chapter)=0;
+  virtual int64_t bd_chapter_pos(BLURAY *bd, unsigned chapter)=0;
+  virtual uint32_t bd_get_current_chapter(BLURAY *bd)=0;
+  virtual int64_t bd_seek_mark(BLURAY *bd, unsigned mark)=0;
+  virtual int bd_select_playlist(BLURAY *bd, uint32_t playlist)=0;
+  virtual int bd_select_title(BLURAY *bd, uint32_t title)=0;
+  virtual int bd_select_angle(BLURAY *bd, unsigned angle)=0;
+  virtual void bd_seamless_angle_change(BLURAY *bd, unsigned angle)=0;
+  virtual uint64_t bd_get_title_size(BLURAY *bd)=0;
+  virtual uint32_t bd_get_current_title(BLURAY *bd)=0;
+  virtual unsigned bd_get_current_angle(BLURAY *bd)=0;
+  virtual uint64_t bd_tell(BLURAY *bd)=0;
+  virtual uint64_t bd_tell_time(BLURAY *bd)=0;
+  virtual BD_FILE_OPEN bd_register_file(BD_FILE_OPEN p)=0;
+  virtual BD_DIR_OPEN bd_register_dir(BD_DIR_OPEN p)=0;
+
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+  virtual void     bd_set_debug_handler(BD_LOG_FUNC)=0;
+  virtual void     bd_set_debug_mask(uint32_t mask)=0;
+  virtual uint32_t bd_get_debug_mask(void)=0;
+#endif
+};
+
+class DllLibbluray : public DllDynamic, DllLibblurayInterface
+{
+  DECLARE_DLL_WRAPPER(DllLibbluray, DLL_PATH_LIBBLURAY)
+#ifdef HAVE_LIBBBLURAY_HAVE_LIBBLURAY_NOANGLE
+  DEFINE_METHOD3(uint32_t,            bd_get_titles,          (BLURAY *p1, uint8_t p2))
+  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_title_info,      (BLURAY *p1, uint32_t p2))
+  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_playlist_info,   (BLURAY *p1, uint32_t p2))
+#else
+  DEFINE_METHOD3(uint32_t,            bd_get_titles,          (BLURAY *p1, uint8_t p2, uint32_t p3))
+  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_title_info,      (BLURAY *p1, uint32_t p2, unsigned p3))
+  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_playlist_info,   (BLURAY *p1, uint32_t p2, unsigned p3))
+#endif
+  DEFINE_METHOD1(void,                bd_free_title_info,     (BLURAY_TITLE_INFO *p1))
+  DEFINE_METHOD2(BLURAY*,             bd_open,                (const char* p1, const char* p2))
+  DEFINE_METHOD1(void,                bd_close,               (BLURAY *p1))
+  DEFINE_METHOD2(int64_t,             bd_seek,                (BLURAY *p1, uint64_t p2))
+  DEFINE_METHOD2(int64_t,             bd_seek_time,           (BLURAY *p1, uint64_t p2))
+  DEFINE_METHOD3(int,                 bd_read,                (BLURAY *p1, unsigned char *p2, int p3))
+  DEFINE_METHOD2(int64_t,             bd_seek_chapter,        (BLURAY *p1, unsigned p2))
+  DEFINE_METHOD2(int64_t,             bd_chapter_pos,         (BLURAY *p1, unsigned p2))
+  DEFINE_METHOD1(uint32_t,            bd_get_current_chapter, (BLURAY *p1))
+  DEFINE_METHOD2(int64_t,             bd_seek_mark,           (BLURAY *p1, unsigned p2))
+  DEFINE_METHOD2(int,                 bd_select_playlist,     (BLURAY *p1, uint32_t p2))
+  DEFINE_METHOD2(int,                 bd_select_title,        (BLURAY *p1, uint32_t p2))
+  DEFINE_METHOD2(int,                 bd_select_angle,        (BLURAY *p1, unsigned p2))
+  DEFINE_METHOD2(void,                bd_seamless_angle_change,(BLURAY *p1, unsigned p2))
+  DEFINE_METHOD1(uint64_t,            bd_get_title_size,      (BLURAY *p1))
+  DEFINE_METHOD1(uint32_t,            bd_get_current_title,   (BLURAY *p1))
+  DEFINE_METHOD1(unsigned,            bd_get_current_angle,   (BLURAY *p1))
+  DEFINE_METHOD1(uint64_t,            bd_tell,                (BLURAY *p1))
+  DEFINE_METHOD1(uint64_t,            bd_tell_time,           (BLURAY *p1))
+  DEFINE_METHOD1(BD_FILE_OPEN,        bd_register_file,       (BD_FILE_OPEN p1))
+  DEFINE_METHOD1(BD_DIR_OPEN,         bd_register_dir,        (BD_DIR_OPEN p1))
+
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+  DEFINE_METHOD1(void,                bd_set_debug_handler,   (BD_LOG_FUNC p1))
+  DEFINE_METHOD1(void,                bd_set_debug_mask,      (uint32_t p1))
+  DEFINE_METHOD0(uint32_t,            bd_get_debug_mask)
+#endif
+
+  BEGIN_METHOD_RESOLVE()
+    RESOLVE_METHOD(bd_get_titles)
+    RESOLVE_METHOD(bd_get_title_info)
+    RESOLVE_METHOD(bd_get_playlist_info)
+    RESOLVE_METHOD_RENAME(bd_free_title_info,   bd_free_title_info)
+    RESOLVE_METHOD_RENAME(bd_open,              bd_open)
+    RESOLVE_METHOD_RENAME(bd_close,             bd_close)
+    RESOLVE_METHOD_RENAME(bd_seek,              bd_seek)
+    RESOLVE_METHOD_RENAME(bd_seek_time,         bd_seek_time)
+    RESOLVE_METHOD_RENAME(bd_read,              bd_read)
+    RESOLVE_METHOD_RENAME(bd_seek_chapter,      bd_seek_chapter)
+    RESOLVE_METHOD_RENAME(bd_chapter_pos,       bd_chapter_pos)
+    RESOLVE_METHOD_RENAME(bd_get_current_chapter, bd_get_current_chapter)
+    RESOLVE_METHOD_RENAME(bd_seek_mark,         bd_seek_mark)
+    RESOLVE_METHOD_RENAME(bd_select_playlist,   bd_select_playlist)
+    RESOLVE_METHOD_RENAME(bd_select_title,      bd_select_title)
+    RESOLVE_METHOD_RENAME(bd_select_angle,      bd_select_angle)
+    RESOLVE_METHOD_RENAME(bd_seamless_angle_change, bd_seamless_angle_change)
+    RESOLVE_METHOD_RENAME(bd_get_title_size,    bd_get_title_size)
+    RESOLVE_METHOD_RENAME(bd_get_current_title, bd_get_current_title)
+    RESOLVE_METHOD_RENAME(bd_get_current_angle, bd_get_current_angle)
+    RESOLVE_METHOD_RENAME(bd_tell,              bd_tell)
+    RESOLVE_METHOD_RENAME(bd_tell_time,         bd_tell_time)
+    RESOLVE_METHOD_RENAME(bd_register_file,     bd_register_file)
+    RESOLVE_METHOD_RENAME(bd_register_dir,      bd_register_dir)
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+    RESOLVE_METHOD(bd_set_debug_handler)
+    RESOLVE_METHOD(bd_set_debug_mask)
+    RESOLVE_METHOD(bd_get_debug_mask)
+#endif
+  END_METHOD_RESOLVE()
+
+#ifdef HAVE_LIBBBLURAY_HAVE_LIBBLURAY_NOANGLE
+  uint32_t bd_get_titles(BLURAY *bd, uint8_t flags, uint32_t min_title_length)
+      {return bd_get_titles_noangle(bd, flags);           }
+  BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx, unsigned angle)
+      {return bd_get_title_info_noangle(bd, title_idx);   }
+  BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist, unsigned angle)
+      {return bd_get_playlist_info_noangle(bd, playlist); }
+#endif
+
+public:
+  static void       file_close(BD_FILE_H *file);
+  static int64_t    file_seek(BD_FILE_H *file, int64_t offset, int32_t origin);
+  static int64_t    file_tell(BD_FILE_H *file);
+  static int        file_eof(BD_FILE_H *file);
+  static int64_t    file_read(BD_FILE_H *file, uint8_t *buf, int64_t size);
+  static int64_t    file_write(BD_FILE_H *file, const uint8_t *buf, int64_t size);
+  static BD_FILE_H *file_open(const char* filename, const char *mode);
+  static void      dir_close(BD_DIR_H *dir);
+  static int       dir_read(BD_DIR_H *dir, BD_DIRENT *entry);
+  static BD_DIR_H *dir_open(const char* dirname);
+  static void      bluray_logger(const char* msg);
+};
+
+#endif
index 8206b18..b4a8091 100644 (file)
@@ -5,6 +5,16 @@
 #include "XEventUtils.h"
 #endif
 
+// a cautious wrapper around strncpy
+char *strncpy_null_terminated(char *dest, const char *src, size_t n)
+{
+  char *result = strncpy(dest, src, n);
+  if(n>0) {
+    dest[n-1] = '\0';
+  }
+  return result;
+}
+
 CmdExtract::CmdExtract()
 {
   TotalFileCount=0;
@@ -90,7 +100,7 @@ void CmdExtract::ExtractArchiveInit(CommandData *Cmd,Archive &Arc)
 #endif
 
   if (*Cmd->Password!=0)
-    strcpy(Password,Cmd->Password);
+    strncpy_null_terminated(Password,Cmd->Password, MAXPASSWORD);
   PasswordAll=(*Cmd->Password!=0);
 
   DataIO.UnpVolume=false;
@@ -249,7 +259,7 @@ bool CmdExtract::ExtractCurrentFile(CommandData *Cmd,Archive &Arc,int HeaderSize
   char ArcFileName[NM];
 
   IntToExt(Arc.NewLhd.FileName,Arc.NewLhd.FileName);
-  strcpy(ArcFileName,Arc.NewLhd.FileName);
+  strncpy_null_terminated(ArcFileName,Arc.NewLhd.FileName, NM);
 
   wchar ArcFileNameW[NM];
   *ArcFileNameW=0;
@@ -297,7 +307,7 @@ bool CmdExtract::ExtractCurrentFile(CommandData *Cmd,Archive &Arc,int HeaderSize
     char Name[NM];
     WideToChar(ArcFileNameW,Name);
     if (IsNameUsable(Name))
-    strcpy(ArcFileName,Name);
+      strncpy_null_terminated(ArcFileName,Name, NM);
   }
 #endif
 
@@ -329,7 +339,7 @@ bool CmdExtract::ExtractCurrentFile(CommandData *Cmd,Archive &Arc,int HeaderSize
   if ((Arc.NewLhd.Flags & (LHD_SPLIT_BEFORE/*|LHD_SOLID*/)) && FirstFile)
   {
     char CurVolName[NM];
-    strcpy(CurVolName,ArcName);
+    strncpy_null_terminated(CurVolName,ArcName, NM);
 
     VolNameToFirstName(ArcName,ArcName,(Arc.NewMhd.Flags & MHD_NEWNUMBERING) != 0);
     if (stricomp(ArcName,CurVolName)!=0 && FileExist(ArcName))
@@ -351,7 +361,7 @@ bool CmdExtract::ExtractCurrentFile(CommandData *Cmd,Archive &Arc,int HeaderSize
       }
     }
 #endif
-    strcpy(ArcName,CurVolName);
+    strncpy_null_terminated(ArcName,CurVolName, NM);
   }
 #endif
 
@@ -393,7 +403,7 @@ bool CmdExtract::ExtractCurrentFile(CommandData *Cmd,Archive &Arc,int HeaderSize
           if (Cmd->Callback==NULL ||
               Cmd->Callback(UCM_NEEDPASSWORD,Cmd->UserData,(LONG)Cmd->Password,sizeof(Cmd->Password))==-1)
             return(false);
-        strcpy(Password,Cmd->Password);
+        strncpy_null_terminated(Password,Cmd->Password, MAXPASSWORD);
 
 #else
         if (!GetPassword(PASSWORD_FILE,ArcFileName,Password,sizeof(Password)))
@@ -430,7 +440,7 @@ bool CmdExtract::ExtractCurrentFile(CommandData *Cmd,Archive &Arc,int HeaderSize
       WideToChar(Cmd->ExtrPathW,DestFileName);
     else
 #endif
-      strcpy(DestFileName,Cmd->ExtrPath);
+      strncpy_null_terminated(DestFileName,Cmd->ExtrPath, NM);
 
 
 #ifndef SFX_MODULE
@@ -551,7 +561,7 @@ bool CmdExtract::ExtractCurrentFile(CommandData *Cmd,Archive &Arc,int HeaderSize
 #ifdef RARDLL
     if (*Cmd->DllDestName)
     {
-      strncpy(DestFileName,Cmd->DllDestName,sizeof(DestFileName));
+      strncpy_null_terminated(DestFileName,Cmd->DllDestName,sizeof(DestFileName));
       *DestFileNameW=0;
       if (Cmd->DllOpMode!=RAR_EXTRACT)
         ExtrFile=false;
index a688909..e48fa0a 100644 (file)
 
 #define _stdfunction 
 
-#ifdef _APPLE
-  #ifndef BIG_ENDIAN
-    #define BIG_ENDIAN
-  #endif
-  #ifdef LITTLE_ENDIAN
-    #undef LITTLE_ENDIAN
-  #endif
-#endif
-
 #if defined(__sparc) || defined(sparc) || defined(__hpux)
   #ifndef BIG_ENDIAN
      #define BIG_ENDIAN
index a0e34d9..7fe2937 100644 (file)
@@ -202,8 +202,10 @@ int urarlib_get(char *rarfile, char *targetPath, char *fileToExtract, char *libp
 
           if (bShowProgress)
           {
-            // temporary workaround to avoid deadlocks caused by dvdplayer halting app thread
-            pExtract->GetDataIO().m_pDlgProgress = NULL;//(CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS);
+            pExtract->GetDataIO().m_pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS);
+            pExtract->GetDataIO().m_pDlgProgress->SetHeading(fileToExtract);
+            pExtract->GetDataIO().m_pDlgProgress->SetCanCancel(false);
+            pExtract->GetDataIO().m_pDlgProgress->StartModal();
           }
 
           int64_t iOff=0;
@@ -232,6 +234,7 @@ int urarlib_get(char *rarfile, char *targetPath, char *fileToExtract, char *libp
             
             if (pExtract->GetDataIO().bQuit) 
             {
+              pExtract->GetDataIO().m_pDlgProgress->Close();
               bRes = 2;
               break;
             }
@@ -265,6 +268,8 @@ int urarlib_get(char *rarfile, char *targetPath, char *fileToExtract, char *libp
           if (pExtract->GetDataIO().m_pDlgProgress)
             pExtract->GetDataIO().m_pDlgProgress->ShowProgressBar(false);
         }
+        if (bShowProgress)
+          pExtract->GetDataIO().m_pDlgProgress->Close();
       }
     }
   }
@@ -340,6 +345,13 @@ int urarlib_list(char *rarfile, ArchiveList_struct **ppList, char *libpassword,
               if (!*ppList)
                 *ppList = pCurr;
               pCurr->item.NameSize = strlen(pArc->NewLhd.FileName);
+              // sanity check - if it fails the archive is likely corrupt
+              if (pCurr->item.NameSize > NM)
+              {
+                File::RemoveCreated();
+                return 0;
+              }
+
               pCurr->item.Name = (char *)malloc(pCurr->item.NameSize + 1);
               strcpy(pCurr->item.Name, pArc->NewLhd.FileName);
               pCurr->item.NameW = (wchar *)malloc((pCurr->item.NameSize + 1)*sizeof(wchar));
@@ -360,6 +372,11 @@ int urarlib_list(char *rarfile, ArchiveList_struct **ppList, char *libpassword,
                 break;
             }
             iOffset = pArc->NextBlockPos;
+            if (iOffset > pArc->FileLength())
+            {
+              File::RemoveCreated();
+              return 0;
+            }
             pArc->SeekToNext();
           }
           if (pCmd->VolSize!=0 && ((pArc->NewLhd.Flags & LHD_SPLIT_AFTER) || (pArc->GetHeaderType()==ENDARC_HEAD && (pArc->EndArcHead.Flags & EARC_NEXT_VOLUME)!=0)))
index 17e5b21..4eae8fa 100644 (file)
@@ -82,7 +82,7 @@ int ComprDataIO::UnpRead(byte *Addr,uint Count)
             {
               if (CurUnpStart+MAXWINMEMSIZE>SrcArc->NewLhd.FullUnpSize)
               {
-                m_iSeekTo=SrcArc->NewLhd.FullUnpSize-iSeekTo+iStartOfFile; // back
+                m_iSeekTo=iStartOfFile;
                 UnpPackedSize = SrcArc->NewLhd.FullPackSize;
               }
               else 
@@ -146,7 +146,7 @@ int ComprDataIO::UnpRead(byte *Addr,uint Count)
       if (m_pDlgProgress)
       {
         CURL url(SrcArc->FileName);
-        m_pDlgProgress->SetLine(2,url.GetWithoutUserDetails()); // update currently extracted rar file
+        m_pDlgProgress->SetLine(0,url.GetWithoutUserDetails()); // update currently extracted rar file
         m_pDlgProgress->Progress();
       }
     }
diff --git a/lib/addons/script.module.pil/Imaging-1.1.7-access.patch b/lib/addons/script.module.pil/Imaging-1.1.7-access.patch
new file mode 100644 (file)
index 0000000..dd51f4a
--- /dev/null
@@ -0,0 +1,13 @@
+diff -rupN Imaging-1.1.7/libImaging/Access.c Imaging-1.1.7-mod/libImaging/Access.c
+--- Imaging-1.1.7/libImaging/Access.c  2009-10-31 20:44:12.000000000 -0400
++++ Imaging-1.1.7-mod/libImaging/Access.c      2011-10-10 19:40:22.000000000 -0400
+@@ -32,7 +32,7 @@ add_item(const char* mode)
+ {
+     UINT32 i = hash(mode);
+     /* printf("hash %s => %d\n", mode, i); */
+-    if (access_table[i].mode) {
++    if (access_table[i].mode && (strcmp(mode, access_table[i].mode) != 0)) {
+         fprintf(stderr, "AccessInit: hash collision: %d for both %s and %s\n",
+                 i, mode, access_table[i].mode);
+         exit(1);
+
diff --git a/lib/addons/script.module.pil/Imaging-1.1.7-crosscompiling-0.1.patch b/lib/addons/script.module.pil/Imaging-1.1.7-crosscompiling-0.1.patch
new file mode 100644 (file)
index 0000000..ccd7afd
--- /dev/null
@@ -0,0 +1,34 @@
+diff -Naur Imaging-1.1.7/setup.py Imaging-1.1.7.patch/setup.py
+--- Imaging-1.1.7/setup.py     2011-04-17 09:31:07.000000000 +0200
++++ Imaging-1.1.7.patch/setup.py       2011-04-17 09:54:20.880047886 +0200
+@@ -147,7 +147,6 @@
+             add_directory(library_dirs, "/opt/local/lib")
+             add_directory(include_dirs, "/opt/local/include")
+-        add_directory(library_dirs, "/usr/local/lib")
+         # FIXME: check /opt/stuff directories here?
+         prefix = sysconfig.get_config_var("prefix")
+@@ -199,22 +198,6 @@
+             add_directory(include_dirs, include_root)
+         #
+-        # add standard directories
+-
+-        # look for tcl specific subdirectory (e.g debian)
+-        if _tkinter:
+-            tcl_dir = "/usr/include/tcl" + TCL_VERSION
+-            if os.path.isfile(os.path.join(tcl_dir, "tk.h")):
+-                add_directory(include_dirs, tcl_dir)
+-
+-        # standard locations
+-        add_directory(library_dirs, "/usr/local/lib")
+-        add_directory(include_dirs, "/usr/local/include")
+-
+-        add_directory(library_dirs, "/usr/lib")
+-        add_directory(include_dirs, "/usr/include")
+-
+-        #
+         # insert new dirs *before* default libs, to avoid conflicts
+         # between Python PYD stub libs and real libraries
diff --git a/lib/addons/script.module.pil/Imaging-1.1.7-setuptools-0.1.patch b/lib/addons/script.module.pil/Imaging-1.1.7-setuptools-0.1.patch
new file mode 100644 (file)
index 0000000..a59ea79
--- /dev/null
@@ -0,0 +1,12 @@
+diff -Naur Imaging-1.1.7/setup.py Imaging-1.1.7.patch/setup.py
+--- Imaging-1.1.7/setup.py     2009-11-15 17:06:10.000000000 +0100
++++ Imaging-1.1.7.patch/setup.py       2011-04-17 09:31:07.545708559 +0200
+@@ -83,7 +83,7 @@
+ # --------------------------------------------------------------------
+ from distutils import sysconfig
+-from distutils.core import Extension, setup
++from setuptools import Extension, setup
+ from distutils.command.build_ext import build_ext
+ try:
index bc8696c..0cc40f4 100644 (file)
@@ -11,8 +11,13 @@ ARCHIVE_TOOL=tar
 ARCHIVE_TOOL_FLAGS=xf
 
 ifeq ($(OSTYPE),Darwin)
-include ../../../tools/darwin/depends/config.site.mk
-PYTHON=$(prefix_path)/bin/python
+include @abs_top_srcdir@/tools/darwin/depends/Makefile.include
+include @abs_top_srcdir@/tools/darwin/depends/config.site.mk
+export TARBALLS_LOCATION=.
+export PYTHONXCPREFIX=$(PREFIX)
+export LDFLAGS+=-L$(PREFIX)/lib
+PYTHON=$(TOOLCHAIN)/bin/python
+PYTHONCROSS=--cross-compile
 else
 PYTHON=@PYTHON@
 endif
@@ -32,10 +37,18 @@ $(ARCHIVE):
 $(SOURCE): $(ARCHIVE)
        -rm -rf $(SOURCE)
        $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(ARCHIVE)
+       if test "$(OSTYPE)" = "Darwin"; then \
+       cd $(SOURCE); \
+       patch -p1 < ../Imaging-1.1.7-crosscompiling-0.1.patch; \
+       patch -p1 < ../Imaging-1.1.7-setuptools-0.1.patch; \
+       patch -p1 < ../Imaging-1.1.7-access.patch; \
+       sed -ie "s|"darwin"|"darwinNot"|g" "setup.py"; \
+       sed -ie "s|ZLIB_ROOT = None|ZLIB_ROOT = libinclude(\"${platform_sdk_path}/usr\")|" "setup.py"; \
+       fi
 
 $(DESTDIR): $(SOURCE)
        -rm -rf $(DESTDIR)
-       pushd $(SOURCE) && $(PYTHON) setup.py build --build-lib $(DESTDIR); popd
+       pushd $(SOURCE) && $(PYTHON) setup.py build $(PYTHONCROSS) --build-lib $(DESTDIR); popd
 else
 $(DESTDIR):
        @true
diff --git a/lib/boost/uuid/sha1.hpp b/lib/boost/uuid/sha1.hpp
new file mode 100644 (file)
index 0000000..f160e3f
--- /dev/null
@@ -0,0 +1,208 @@
+// boost/uuid/sha1.hpp header file  ----------------------------------------------//
+
+// Copyright 2007 Andy Tompkins.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Revision History
+//  29 May 2007 - Initial Revision
+//  25 Feb 2008 - moved to namespace boost::uuids::detail
+
+// This is a byte oriented implementation
+// Note: this implementation does not handle message longer than
+//       2^32 bytes.
+
+#ifndef BOOST_UUID_SHA1_H
+#define BOOST_UUID_SHA1_H
+
+#include <boost/static_assert.hpp>
+#include <cstddef>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std {
+    using ::size_t;
+} // namespace std
+#endif
+
+namespace boost {
+namespace uuids {
+namespace detail {
+
+BOOST_STATIC_ASSERT(sizeof(unsigned char)*8 == 8);
+BOOST_STATIC_ASSERT(sizeof(unsigned int)*8 == 32);
+
+inline unsigned int left_rotate(unsigned int x, std::size_t n)
+{
+    return (x<<n) ^ (x>> (32-n));
+}
+
+class sha1
+{
+public:
+    typedef unsigned int(&digest_type)[5];
+public:
+    sha1();
+
+    void reset();
+
+    void process_byte(unsigned char byte);
+    void process_block(void const* bytes_begin, void const* bytes_end);
+    void process_bytes(void const* buffer, std::size_t byte_count);
+
+    void get_digest(digest_type digest);
+
+private:
+    void process_block();
+
+private:
+    unsigned int h_[5];
+
+    unsigned char block_[64];
+
+    std::size_t block_byte_index_;
+    std::size_t byte_count_;
+};
+
+inline sha1::sha1()
+{
+    reset();
+}
+
+inline void sha1::reset()
+{
+    h_[0] = 0x67452301;
+    h_[1] = 0xEFCDAB89;
+    h_[2] = 0x98BADCFE;
+    h_[3] = 0x10325476;
+    h_[4] = 0xC3D2E1F0;
+
+    block_byte_index_ = 0;
+    byte_count_ = 0;
+}
+
+inline void sha1::process_byte(unsigned char byte)
+{
+    block_[block_byte_index_++] = byte;
+    ++byte_count_;
+    if (block_byte_index_ == 64) {
+        block_byte_index_ = 0;
+        process_block();
+    }
+}
+
+inline void sha1::process_block(void const* bytes_begin, void const* bytes_end)
+{
+    unsigned char const* begin = static_cast<unsigned char const*>(bytes_begin);
+    unsigned char const* end = static_cast<unsigned char const*>(bytes_end);
+    for(; begin != end; ++begin) {
+        process_byte(*begin);
+    }
+}
+
+inline void sha1::process_bytes(void const* buffer, std::size_t byte_count)
+{
+    unsigned char const* b = static_cast<unsigned char const*>(buffer);
+    process_block(b, b+byte_count);
+}
+
+inline void sha1::process_block()
+{
+    unsigned int w[80];
+    for (std::size_t i=0; i<16; ++i) {
+        w[i]  = (block_[i*4 + 0] << 24);
+        w[i] |= (block_[i*4 + 1] << 16);
+        w[i] |= (block_[i*4 + 2] << 8);
+        w[i] |= (block_[i*4 + 3]);
+    }
+    for (std::size_t i=16; i<80; ++i) {
+        w[i] = left_rotate((w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16]), 1);
+    }
+
+    unsigned int a = h_[0];
+    unsigned int b = h_[1];
+    unsigned int c = h_[2];
+    unsigned int d = h_[3];
+    unsigned int e = h_[4];
+
+    for (std::size_t i=0; i<80; ++i) {
+        unsigned int f;
+        unsigned int k;
+
+        if (i<20) {
+            f = (b & c) | (~b & d);
+            k = 0x5A827999;
+        } else if (i<40) {
+            f = b ^ c ^ d;
+            k = 0x6ED9EBA1;
+        } else if (i<60) {
+            f = (b & c) | (b & d) | (c & d);
+            k = 0x8F1BBCDC;
+        } else {
+            f = b ^ c ^ d;
+            k = 0xCA62C1D6;
+        }
+
+        unsigned temp = left_rotate(a, 5) + f + e + k + w[i];
+        e = d;
+        d = c;
+        c = left_rotate(b, 30);
+        b = a;
+        a = temp;
+    }
+
+    h_[0] += a;
+    h_[1] += b;
+    h_[2] += c;
+    h_[3] += d;
+    h_[4] += e;
+}
+
+inline void sha1::get_digest(digest_type digest)
+{
+    std::size_t bit_count = byte_count_*8;
+
+    // append the bit '1' to the message
+    process_byte(0x80);
+
+    // append k bits '0', where k is the minimum number >= 0
+    // such that the resulting message length is congruent to 56 (mod 64)
+    // check if there is enough space for padding and bit_count
+    if (block_byte_index_ > 56) {
+        // finish this block
+        while (block_byte_index_ != 0) {
+            process_byte(0);
+        }
+
+        // one more block
+        while (block_byte_index_ < 56) {
+            process_byte(0);
+        }
+    } else {
+        while (block_byte_index_ < 56) {
+            process_byte(0);
+        }
+    }
+
+    // append length of message (before pre-processing) 
+    // as a 64-bit big-endian integer
+    process_byte(0);
+    process_byte(0);
+    process_byte(0);
+    process_byte(0);
+    process_byte( static_cast<unsigned char>((bit_count>>24) & 0xFF));
+    process_byte( static_cast<unsigned char>((bit_count>>16) & 0xFF));
+    process_byte( static_cast<unsigned char>((bit_count>>8 ) & 0xFF));
+    process_byte( static_cast<unsigned char>((bit_count)     & 0xFF));
+
+    // get final digest
+    digest[0] = h_[0];
+    digest[1] = h_[1];
+    digest[2] = h_[2];
+    digest[3] = h_[3];
+    digest[4] = h_[4];
+}
+
+}}} // namespace boost::uuids::detail
+
+#endif
\ No newline at end of file
index d09aa64..52f2f68 100644 (file)
@@ -201,7 +201,7 @@ extern void cmyth_dbg(int level, char *fmt, ...);
  * Define a callback to use to send messages rather than using stderr
  * \param msgcb function pointer to pass a string to
  */
-extern void cmyth_set_dbg_msgcallback(void (*msgcb)(char *));
+extern void cmyth_set_dbg_msgcallback(void (*msgcb)(int level,char *));
 
 /*
  * -----------------------------------------------------------------
index 3c1a88c..71d9a6e 100644 (file)
@@ -63,7 +63,7 @@ __mvp_atomic_increment(mvp_atomic_t *valp)
 /**
  * Atomically decrement a reference count variable.
  * \param valp address of atomic variable
- * \return incremented reference count
+ * \return decremented reference count
  */
 static inline unsigned
 __mvp_atomic_decrement(mvp_atomic_t *valp)
@@ -72,7 +72,7 @@ __mvp_atomic_decrement(mvp_atomic_t *valp)
 #if defined __i486__ || defined __i586__ || defined __i686__
        __asm__ __volatile__(
                "lock xaddl %0, (%1);"
-               "     inc   %0;"
+               "     dec   %0;"
                : "=r" (__val)
                : "r" (valp), "0" (0x1)
                : "cc", "memory"
@@ -113,7 +113,7 @@ __mvp_atomic_decrement(mvp_atomic_t *valp)
         * Don't know how to atomic decrement for a generic architecture
         * so punt and just decrement the value.
         */
-//#warning unknown architecture, atomic deccrement is not...
+//#warning unknown architecture, atomic decrement is not...
        __val = --(*valp);
 #endif
        return __val;
index 37bbfcc..197801d 100644 (file)
@@ -116,7 +116,7 @@ cmyth_dbg(int level, char *fmt, ...)
 }
 
 void
-cmyth_set_dbg_msgcallback(void (*msgcb)(char *))
+cmyth_set_dbg_msgcallback(void (*msgcb)(int level,char *))
 {
        cmyth_debug_ctx.msg_callback = msgcb;
 }
index c11f47a..3ff23fa 100644 (file)
@@ -936,7 +936,7 @@ cmyth_mythtv_remove_previos_recorded(cmyth_database_t db,char *query)
 
 int
 cmyth_mysql_testdb_connection(cmyth_database_t db,char **message) {
-       char buf[1000];
+       char *buf=malloc(sizeof(char)*1001);
        int new_conn = 0;
        if (db->mysql != NULL) {
                if (mysql_stat(db->mysql) == NULL) {
@@ -949,21 +949,21 @@ cmyth_mysql_testdb_connection(cmyth_database_t db,char **message) {
                new_conn = 1;
                if(db->mysql == NULL) {
                        fprintf(stderr,"%s: mysql_init() failed, insufficient memory?", __FUNCTION__);
-                       snprintf(buf, sizeof(buf), "mysql_init() failed, insufficient memory?");
+                       snprintf(buf, 1000, "mysql_init() failed, insufficient memory?");
                        *message=buf;
                        return -1;
                }
                if (NULL == mysql_real_connect(db->mysql, db->db_host,db->db_user,db->db_pass,db->db_name,0,NULL,0)) {
                        fprintf(stderr,"%s: mysql_connect() failed: %s\n", __FUNCTION__,
                        mysql_error(db->mysql));
-                       snprintf(buf, sizeof(buf), "%s",mysql_error(db->mysql));
+                       snprintf(buf, 1000, "%s",mysql_error(db->mysql));
                        fprintf (stderr,"buf = %s\n",buf);
                        *message=buf;
                        cmyth_database_close(db);
                        return -1;
                }
        }
-       snprintf(buf, sizeof(buf), "All Test Successful\n");
+       snprintf(buf, 1000, "All Test Successful\n");
        *message=buf;
        return 1;
 }
index 9d3a405..f1f9a45 100644 (file)
@@ -998,7 +998,7 @@ cmyth_rcv_int64(cmyth_conn_t conn, int *err, long long *buf, int count)
        /*
         * Got a result, return it.
         */
-       *buf = (long)(sign * val);
+       *buf = (long long)(sign * val);
 
        return consumed;
 }
index e393f3e..af19ac6 100644 (file)
@@ -283,7 +283,8 @@ ref_realloc(void *p, size_t len)
        refmem_dbg(REF_DBG_DEBUG, "%s(%d, ret = %p, ref = %p) {\n",
                   __FUNCTION__, len, ret, ref);
 #ifdef DEBUG
-       assert(ref->magic == ALLOC_MAGIC);
+  if(p)
+         assert(ref->magic == ALLOC_MAGIC);
 #endif /* DEBUG */
        if (p && ret) {
                memcpy(ret, p, ref->length);
index f718269..adadeea 100644 (file)
 void CxImagePNG::ima_png_error(png_struct *png_ptr, char *message)
 {
        strcpy(info.szLastError,message);
+#ifdef USE_NEW_LIBPNG_API
+       longjmp(png_jmpbuf(png_ptr), 1);
+#else
        longjmp(png_ptr->jmpbuf, 1);
+#endif
 }
 ////////////////////////////////////////////////////////////////////////////////
 #if CXIMAGE_SUPPORT_DECODE
@@ -62,7 +66,11 @@ bool CxImagePNG::Decode(CxFile *hFile)
     /* Set error handling if you are using the setjmp/longjmp method (this is
     * the normal method of doing things with libpng).  REQUIRED unless you
     * set up your own error handlers in the png_create_read_struct() earlier. */
+#ifdef USE_NEW_LIBPNG_API
+       if (setjmp(png_jmpbuf(png_ptr))) {
+#else
        if (setjmp(png_ptr->jmpbuf)) {
+#endif
                /* Free all of the memory associated with the png_ptr and info_ptr */
                delete [] row_pointers;
                png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
@@ -76,16 +84,34 @@ bool CxImagePNG::Decode(CxFile *hFile)
        /* read the file information */
        png_read_info(png_ptr, info_ptr);
 
+#ifdef USE_NEW_LIBPNG_API
+       png_uint_32 _width,_height;
+       int _bit_depth,_color_type,_interlace_type,_compression_type,_filter_type;
+       png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,
+               &_interlace_type,&_compression_type,&_filter_type);
+
+       if (info.nEscape == -1){
+               head.biWidth = _width;
+               head.biHeight= _height;
+               info.dwType = CXIMAGE_FORMAT_PNG;
+               longjmp(png_jmpbuf(png_ptr), 1);
+       }
+#else
        if (info.nEscape == -1){
                head.biWidth = info_ptr->width;
                head.biHeight= info_ptr->height;
                info.dwType = CXIMAGE_FORMAT_PNG;
                longjmp(png_ptr->jmpbuf, 1);
        }
+#endif
 
        /* calculate new number of channels */
        int channels=0;
+#ifdef USE_NEW_LIBPNG_API
+       switch(_color_type){
+#else
        switch(info_ptr->color_type){
+#endif
        case PNG_COLOR_TYPE_GRAY:
        case PNG_COLOR_TYPE_PALETTE:
                channels = 1;
@@ -101,20 +127,49 @@ bool CxImagePNG::Decode(CxFile *hFile)
                break;
        default:
                strcpy(info.szLastError,"unknown PNG color type");
+#ifdef USE_NEW_LIBPNG_API
+               longjmp(png_jmpbuf(png_ptr), 1);
+#else
                longjmp(png_ptr->jmpbuf, 1);
+#endif
        }
 
        //find the right pixel depth used for cximage
+#ifdef USE_NEW_LIBPNG_API
+       int pixel_depth = _bit_depth * png_get_channels(png_ptr,info_ptr);
+#else
        int pixel_depth = info_ptr->pixel_depth;
+#endif
        if (channels == 1 && pixel_depth>8) pixel_depth=8;
        if (channels == 2) pixel_depth=8;
        if (channels >= 3) pixel_depth=24;
 
+#ifdef USE_NEW_LIBPNG_API
+       if (!Create(_width, _height, pixel_depth, CXIMAGE_FORMAT_PNG)){
+               longjmp(png_jmpbuf(png_ptr), 1);
+#else
        if (!Create(info_ptr->width, info_ptr->height, pixel_depth, CXIMAGE_FORMAT_PNG)){
                longjmp(png_ptr->jmpbuf, 1);
+#endif
        }
 
        /* get metrics */
+#ifdef USE_NEW_LIBPNG_API
+       png_uint_32 _x_pixels_per_unit,_y_pixels_per_unit;
+       int _phys_unit_type;
+       png_get_pHYs(png_ptr,info_ptr,&_x_pixels_per_unit,&_y_pixels_per_unit,&_phys_unit_type);
+       switch (_phys_unit_type)
+       {
+       case PNG_RESOLUTION_UNKNOWN:
+               SetXDPI(_x_pixels_per_unit);
+               SetYDPI(_y_pixels_per_unit);
+               break;
+       case PNG_RESOLUTION_METER:
+               SetXDPI((long)floor(_x_pixels_per_unit * 254.0 / 10000.0 + 0.5));
+               SetYDPI((long)floor(_y_pixels_per_unit * 254.0 / 10000.0 + 0.5));
+               break;
+       }
+#else
        switch (info_ptr->phys_unit_type)
        {
        case PNG_RESOLUTION_UNKNOWN:
@@ -126,46 +181,94 @@ bool CxImagePNG::Decode(CxFile *hFile)
                SetYDPI((long)floor(info_ptr->y_pixels_per_unit * 254.0 / 10000.0 + 0.5));
                break;
        }
+#endif
 
+#ifdef USE_NEW_LIBPNG_API
+       int _num_palette;
+       png_colorp _palette;
+       png_uint_32 _palette_ret;
+       _palette_ret = png_get_PLTE(png_ptr,info_ptr,&_palette,&_num_palette);
+       if (_palette_ret && _num_palette>0){
+               SetPalette((rgb_color*)_palette,_num_palette);
+               SetClrImportant(_num_palette);
+       } else if (_bit_depth ==2) { //<DP> needed for 2 bpp grayscale PNGs
+#else
        if (info_ptr->num_palette>0){
                SetPalette((rgb_color*)info_ptr->palette,info_ptr->num_palette);
                SetClrImportant(info_ptr->num_palette);
        } else if (info_ptr->bit_depth ==2) { //<DP> needed for 2 bpp grayscale PNGs
+#endif
                SetPaletteColor(0,0,0,0);
                SetPaletteColor(1,85,85,85);
                SetPaletteColor(2,170,170,170);
                SetPaletteColor(3,255,255,255);
        } else SetGrayPalette(); //<DP> needed for grayscale PNGs
        
+#ifdef USE_NEW_LIBPNG_API
+       int nshift = max(0,(_bit_depth>>3)-1)<<3;
+#else
        int nshift = max(0,(info_ptr->bit_depth>>3)-1)<<3;
+#endif
 
+#ifdef USE_NEW_LIBPNG_API
+       png_bytep _trans_alpha;
+       int _num_trans;
+       png_color_16p _trans_color;
+       png_uint_32 _trans_ret;
+       _trans_ret = png_get_tRNS(png_ptr,info_ptr,&_trans_alpha,&_num_trans,&_trans_color);
+       if (_trans_ret && _num_trans!=0){ //palette transparency
+               if (_num_trans==1){
+                       if (_color_type == PNG_COLOR_TYPE_PALETTE){
+#else
        if (info_ptr->num_trans!=0){ //palette transparency
                if (info_ptr->num_trans==1){
                        if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE){
+#endif
+#ifdef USE_NEW_LIBPNG_API
+                               info.nBkgndIndex = _trans_color->index;
+#else
 #if PNG_LIBPNG_VER > 10399
                                info.nBkgndIndex = info_ptr->trans_color.index;
 #else
                                info.nBkgndIndex = info_ptr->trans_values.index;
 #endif
+#endif
                        } else{
+#ifdef USE_NEW_LIBPNG_API
+                               info.nBkgndIndex = _trans_color->gray>>nshift;
+#else
 #if PNG_LIBPNG_VER > 10399
                                info.nBkgndIndex = info_ptr->trans_color.gray>>nshift;
 #else
                                info.nBkgndIndex = info_ptr->trans_values.gray>>nshift;
 #endif
+#endif
                        }
                }
+#ifdef USE_NEW_LIBPNG_API
+               if (_num_trans>1 && _trans_alpha!=NULL){
+#else
                if (info_ptr->num_trans>1){
+#endif
                        RGBQUAD* pal=GetPalette();
                        if (pal){
                                DWORD ip;
+#ifdef USE_NEW_LIBPNG_API
+                               for (ip=0;ip<min(head.biClrUsed,(unsigned long)_num_trans);ip++)
+                                       pal[ip].rgbReserved=_trans_alpha[ip];
+#else
                                for (ip=0;ip<min(head.biClrUsed,(unsigned long)info_ptr->num_trans);ip++)
 #if PNG_LIBPNG_VER > 10399
                                        pal[ip].rgbReserved=info_ptr->trans_alpha[ip];
 #else
                                        pal[ip].rgbReserved=info_ptr->trans[ip];
 #endif
+#endif
+#ifdef USE_NEW_LIBPNG_API
+                               for (ip=_num_trans;ip<head.biClrUsed;ip++){
+#else
                                for (ip=info_ptr->num_trans;ip<head.biClrUsed;ip++){
+#endif
                                        pal[ip].rgbReserved=255;
                                }
                                info.bAlphaPaletteEnabled=true;
@@ -178,6 +281,11 @@ bool CxImagePNG::Decode(CxFile *hFile)
                int num_trans;
                png_color_16 *image_background;
                if (png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, &image_background)){
+#ifdef USE_NEW_LIBPNG_API
+                       info.nBkgndColor.rgbRed   = (BYTE)(_trans_color->red>>nshift);
+                       info.nBkgndColor.rgbGreen = (BYTE)(_trans_color->green>>nshift);
+                       info.nBkgndColor.rgbBlue  = (BYTE)(_trans_color->blue>>nshift);
+#else
 #if PNG_LIBPNG_VER > 10399
                        info.nBkgndColor.rgbRed   = (BYTE)(info_ptr->trans_color.red>>nshift);
                        info.nBkgndColor.rgbGreen = (BYTE)(info_ptr->trans_color.green>>nshift);
@@ -187,6 +295,7 @@ bool CxImagePNG::Decode(CxFile *hFile)
                        info.nBkgndColor.rgbGreen = (BYTE)(info_ptr->trans_values.green>>nshift);
                        info.nBkgndColor.rgbBlue  = (BYTE)(info_ptr->trans_values.blue>>nshift);
 #endif
+#endif
                        info.nBkgndColor.rgbReserved = 0;
                        info.nBkgndIndex = 0;
                }
@@ -202,15 +311,27 @@ bool CxImagePNG::Decode(CxFile *hFile)
        }
 
        // <vho> - flip the RGB pixels to BGR (or RGBA to BGRA)
+#ifdef USE_NEW_LIBPNG_API
+       if (_color_type & PNG_COLOR_MASK_COLOR){
+#else
        if (info_ptr->color_type & PNG_COLOR_MASK_COLOR){
+#endif
                png_set_bgr(png_ptr);
        }
 
        // <vho> - handle cancel
+#ifdef USE_NEW_LIBPNG_API
+       if (info.nEscape) longjmp(png_jmpbuf(png_ptr), 1);
+#else
        if (info.nEscape) longjmp(png_ptr->jmpbuf, 1);
+#endif
 
        // row_bytes is the width x number of channels x (bit-depth / 8)
+#ifdef USE_NEW_LIBPNG_API
+       row_pointers = new BYTE[png_get_rowbytes(png_ptr,info_ptr) + 8];
+#else
        row_pointers = new BYTE[info_ptr->rowbytes + 8];
+#endif
 
        // turn on interlace handling
        int number_passes = png_set_interlace_handling(png_ptr);
@@ -221,8 +342,16 @@ bool CxImagePNG::Decode(CxFile *hFile)
                SetCodecOption(0);
        }
 
+#ifdef USE_NEW_LIBPNG_API
+       int chan_offset = _bit_depth >> 3;
+#else
        int chan_offset = info_ptr->bit_depth >> 3;
+#endif
+#ifdef USE_NEW_LIBPNG_API
+       int pixel_offset = (_bit_depth * png_get_channels(png_ptr,info_ptr)) >> 3;
+#else
        int pixel_offset = info_ptr->pixel_depth >> 3;
+#endif
 
        for (int pass=0; pass < number_passes; pass++) {
                iter.Upset();
@@ -230,7 +359,11 @@ bool CxImagePNG::Decode(CxFile *hFile)
                do      {
 
                        // <vho> - handle cancel
+#ifdef USE_NEW_LIBPNG_API
+                       if (info.nEscape) longjmp(png_jmpbuf(png_ptr), 1);
+#else
                        if (info.nEscape) longjmp(png_ptr->jmpbuf, 1);
+#endif
 
 #if CXIMAGE_SUPPORT_ALPHA      // <vho>
                        if (AlphaIsValid()) {
@@ -241,7 +374,11 @@ bool CxImagePNG::Decode(CxFile *hFile)
                                BYTE* prow= iter.GetRow(ay);
 
                                //recover data from previous scan
+#ifdef USE_NEW_LIBPNG_API
+                               if (_interlace_type && pass>0 && pass!=7){
+#else
                                if (info_ptr->interlace_type && pass>0 && pass!=7){
+#endif
                                        for(ax=0;ax<head.biWidth;ax++){
                                                long px = ax * pixel_offset;
                                                if (channels == 2){
@@ -278,10 +415,17 @@ bool CxImagePNG::Decode(CxFile *hFile)
 #endif // CXIMAGE_SUPPORT_ALPHA                // vho
                        {
                                //recover data from previous scan
+#ifdef USE_NEW_LIBPNG_API
+                               if (_interlace_type && pass>0){
+                                       iter.GetRow(row_pointers, png_get_rowbytes(png_ptr,info_ptr));
+                                       //re-expand buffer for images with bit depth > 8
+                                       if (_bit_depth > 8){
+#else
                                if (info_ptr->interlace_type && pass>0){
                                        iter.GetRow(row_pointers, info_ptr->rowbytes);
                                        //re-expand buffer for images with bit depth > 8
                                        if (info_ptr->bit_depth > 8){
+#endif
                                                for(long ax=(head.biWidth*channels-1);ax>=0;ax--)
                                                        row_pointers[ax*chan_offset] = row_pointers[ax];
                                        }
@@ -291,15 +435,27 @@ bool CxImagePNG::Decode(CxFile *hFile)
                                png_read_row(png_ptr, row_pointers, NULL);
 
                                //shrink 16 bit depth images down to 8 bits
+#ifdef USE_NEW_LIBPNG_API
+                               if (_bit_depth > 8){
+#else
                                if (info_ptr->bit_depth > 8){
+#endif
                                        for(long ax=0;ax<(head.biWidth*channels);ax++)
                                                row_pointers[ax] = row_pointers[ax*chan_offset];
                                }
 
                                //copy the pixels
+#ifdef USE_NEW_LIBPNG_API
+                               iter.SetRow(row_pointers, png_get_rowbytes(png_ptr,info_ptr));
+#else
                                iter.SetRow(row_pointers, info_ptr->rowbytes);
+#endif
                                //<DP> expand 2 bpp images only in the last pass
+#ifdef USE_NEW_LIBPNG_API
+                               if (_bit_depth==2 && pass==(number_passes-1))
+#else
                                if (info_ptr->bit_depth==2 && pass==(number_passes-1))
+#endif
                                        expand2to4bpp(iter.GetRow());
 
                                //go on
@@ -361,9 +517,13 @@ bool CxImagePNG::Encode(CxFile *hFile)
    /* Set error handling.  REQUIRED if you aren't supplying your own
     * error hadnling functions in the png_create_write_struct() call.
     */
+#ifdef USE_NEW_LIBPNG_API
+       if (setjmp(png_jmpbuf(png_ptr))){
+#else
        if (setjmp(png_ptr->jmpbuf)){
                /* If we get here, we had a problem reading the file */
                if (info_ptr->palette) free(info_ptr->palette);
+#endif
                png_destroy_write_struct(&png_ptr,  (png_infopp)&info_ptr);
                cx_throw("Error saving PNG file");
        }
@@ -372,9 +532,23 @@ bool CxImagePNG::Encode(CxFile *hFile)
        //png_init_io(png_ptr, hFile);
 
        // use custom I/O functions
-    png_set_write_fn(png_ptr,hFile,/*(png_rw_ptr)*/user_write_data,/*(png_flush_ptr)*/user_flush_data);
+       png_set_write_fn(png_ptr,hFile,/*(png_rw_ptr)*/user_write_data,/*(png_flush_ptr)*/user_flush_data);
 
        /* set the file information here */
+#ifdef USE_NEW_LIBPNG_API
+       /* use variables to hold the values so it isnt necessary to png_get them later */
+       png_uint_32 _width,_height;
+       int _bit_depth,_color_type,_interlace_type,_compression_type,_filter_type;
+       png_byte _channels,_pixel_depth;
+
+       _width = GetWidth();
+       _height = GetHeight();
+       _pixel_depth = (BYTE)GetBpp();
+       _channels = (GetBpp()>8) ? (BYTE)3: (BYTE)1;
+       _bit_depth = (BYTE)(GetBpp()/_channels);
+       _compression_type = PNG_COMPRESSION_TYPE_DEFAULT;
+       _filter_type = PNG_FILTER_TYPE_DEFAULT;
+#else
        info_ptr->width = GetWidth();
        info_ptr->height = GetHeight();
        info_ptr->pixel_depth = (BYTE)GetBpp();
@@ -382,13 +556,22 @@ bool CxImagePNG::Encode(CxFile *hFile)
        info_ptr->bit_depth = (BYTE)(GetBpp()/info_ptr->channels);
        info_ptr->compression_type = info_ptr->filter_type = 0;
        info_ptr->valid = 0;
+#endif
 
        switch(GetCodecOption(CXIMAGE_FORMAT_PNG)){
        case 1:
+#ifdef USE_NEW_LIBPNG_API
+               _interlace_type = PNG_INTERLACE_ADAM7;
+#else
                info_ptr->interlace_type = PNG_INTERLACE_ADAM7;
+#endif
                break;
        default:
+#ifdef USE_NEW_LIBPNG_API
+               _interlace_type = PNG_INTERLACE_NONE;
+#else
                info_ptr->interlace_type = PNG_INTERLACE_NONE;
+#endif
        }
 
        /* set compression level */
@@ -398,19 +581,38 @@ bool CxImagePNG::Encode(CxFile *hFile)
 
        if (GetNumColors()){
                if (bGrayScale){
+#ifdef USE_NEW_LIBPNG_API
+                       _color_type = PNG_COLOR_TYPE_GRAY;
+#else
                        info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
+#endif
                } else {
+#ifdef USE_NEW_LIBPNG_API
+                       _color_type = PNG_COLOR_TYPE_PALETTE;
+#else
                        info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
+#endif
                }
        } else {
+#ifdef USE_NEW_LIBPNG_API
+               _color_type = PNG_COLOR_TYPE_RGB;
+#else
                info_ptr->color_type = PNG_COLOR_TYPE_RGB;
+#endif
        }
 #if CXIMAGE_SUPPORT_ALPHA
        if (AlphaIsValid()){
+#ifdef USE_NEW_LIBPNG_API
+               _color_type |= PNG_COLOR_MASK_ALPHA;
+               _channels++;
+               _bit_depth = 8;
+               _pixel_depth += 8;
+#else
                info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
                info_ptr->channels++;
                info_ptr->bit_depth = 8;
                info_ptr->pixel_depth += 8;
+#endif
        }
 #endif
 
@@ -427,14 +629,30 @@ bool CxImagePNG::Encode(CxFile *hFile)
        /* set metrics */
        png_set_pHYs(png_ptr, info_ptr, head.biXPelsPerMeter, head.biYPelsPerMeter, PNG_RESOLUTION_METER);
 
+#ifdef USE_NEW_LIBPNG_API
+       png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,_interlace_type,
+               _compression_type,_filter_type);
+#else
        png_set_IHDR(png_ptr, info_ptr, info_ptr->width, info_ptr->height, info_ptr->bit_depth,
                                info_ptr->color_type, info_ptr->interlace_type,
                                PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
+#endif
 
        //<DP> simple transparency
        if (info.nBkgndIndex >= 0){
+#if PNG_LIBPNG_VER <= 10499
                info_ptr->num_trans = 1;
                info_ptr->valid |= PNG_INFO_tRNS;
+#endif
+#ifdef USE_NEW_LIBPNG_API
+               png_color_16 _trans_color;
+               _trans_color.index = (BYTE)info.nBkgndIndex;
+               _trans_color.red   = tc.rgbRed;
+               _trans_color.green = tc.rgbGreen;
+               _trans_color.blue  = tc.rgbBlue;
+               _trans_color.gray  = _trans_color.index;
+               png_set_tRNS(png_ptr,info_ptr,(png_bytep)trans,1,&_trans_color);
+#else
 #if PNG_LIBPNG_VER > 10399
                info_ptr->trans_alpha = trans;
                info_ptr->trans_color.index = (BYTE)info.nBkgndIndex;
@@ -450,6 +668,7 @@ bool CxImagePNG::Encode(CxFile *hFile)
                info_ptr->trans_values.blue  = tc.rgbBlue;
                info_ptr->trans_values.gray  = info_ptr->trans_values.index;
 #endif
+#endif
 
                // the transparency indexes start from 0 for non grayscale palette
                if (!bGrayScale && head.biClrUsed && info.nBkgndIndex)
@@ -457,10 +676,16 @@ bool CxImagePNG::Encode(CxFile *hFile)
        }
 
        /* set the palette if there is one */
+#ifdef USE_NEW_LIBPNG_API
+       png_colorp _palette = NULL;
+       if (GetPalette()){
+               /* png_set_PLTE() will be called once the palette is ready */
+#else
        if (GetPalette()){
                if (!bGrayScale){
                        info_ptr->valid |= PNG_INFO_PLTE;
                }
+#endif
 
                int nc = GetClrImportant();
                if (nc==0) nc = GetNumColors();
@@ -468,20 +693,34 @@ bool CxImagePNG::Encode(CxFile *hFile)
                if (info.bAlphaPaletteEnabled){
                        for(WORD ip=0; ip<nc;ip++)
                                trans[ip]=GetPaletteColor((BYTE)ip).rgbReserved;
+#if PNG_LIBPNG_VER <= 10499
                        info_ptr->num_trans = (WORD)nc;
                        info_ptr->valid |= PNG_INFO_tRNS;
+#endif
+#ifdef USE_NEW_LIBPNG_API
+                       png_set_tRNS(png_ptr,info_ptr,(png_bytep)trans,nc,NULL);
+#else
 #if PNG_LIBPNG_VER > 10399
                        info_ptr->trans_alpha = trans;
 #else
                        info_ptr->trans = trans;
 #endif
+#endif
                }
 
                // copy the palette colors
+#ifdef USE_NEW_LIBPNG_API
+               _palette = new png_color[nc];
+               for (int i=0; i<nc; i++)
+                       GetPaletteColor(i, &_palette[i].red, &_palette[i].green, &_palette[i].blue);
+
+               png_set_PLTE(png_ptr,info_ptr,_palette,nc);
+#else
                info_ptr->palette = new png_color[nc];
                info_ptr->num_palette = (png_uint_16) nc;
                for (int i=0; i<nc; i++)
                        GetPaletteColor(i, &info_ptr->palette[i].red, &info_ptr->palette[i].green, &info_ptr->palette[i].blue);
+#endif
        }  
 
 #if CXIMAGE_SUPPORT_ALPHA      // <vho>
@@ -495,8 +734,12 @@ bool CxImagePNG::Encode(CxFile *hFile)
        }       }       }
 #endif // CXIMAGE_SUPPORT_ALPHA        // <vho>
 
+#ifdef USE_NEW_LIBPNG_API
+       int row_size = max(info.dwEffWidth, (_width * _channels * _bit_depth / 8));
+#else
        int row_size = max(info.dwEffWidth, info_ptr->width*info_ptr->channels*(info_ptr->bit_depth/8));
        info_ptr->rowbytes = row_size;
+#endif
        BYTE *row_pointers = new BYTE[row_size];
 
        /* write the file information */
@@ -514,7 +757,11 @@ bool CxImagePNG::Encode(CxFile *hFile)
                        if (AlphaIsValid()){
                                for (long ax=head.biWidth-1; ax>=0;ax--){
                                        c = BlindGetPixelColor(ax,ay);
+#ifdef USE_NEW_LIBPNG_API
+                                       int px = ax * _channels;
+#else
                                        int px = ax * info_ptr->channels;
+#endif
                                        if (!bGrayScale){
                                                row_pointers[px++]=c.rgbRed;
                                                row_pointers[px++]=c.rgbGreen;
@@ -529,7 +776,11 @@ bool CxImagePNG::Encode(CxFile *hFile)
 #endif //CXIMAGE_SUPPORT_ALPHA // <vho>
                        {
                                iter.GetRow(row_pointers, row_size);
+#ifdef USE_NEW_LIBPNG_API
+                               if (_color_type == PNG_COLOR_TYPE_RGB) //HACK BY OP
+#else
                                if (info_ptr->color_type == PNG_COLOR_TYPE_RGB) //HACK BY OP
+#endif
                                        RGBtoBGR(row_pointers, row_size);
                                png_write_row(png_ptr, row_pointers);
                        }
@@ -546,9 +797,14 @@ bool CxImagePNG::Encode(CxFile *hFile)
        png_write_end(png_ptr, info_ptr);
 
        /* if you malloced the palette, free it here */
+#ifdef USE_NEW_LIBPNG_API
+       if (_palette){
+               delete [] (_palette);
+#else
        if (info_ptr->palette){
                delete [] (info_ptr->palette);
                info_ptr->palette = NULL;
+#endif
        }
 
        /* clean up after the write, and free any memory allocated */
index db41935..7d1611b 100644 (file)
@@ -30,6 +30,10 @@ extern "C" {
 #endif
 }
 
+#if PNG_LIBPNG_VER > 10499
+  #define USE_NEW_LIBPNG_API
+#endif
+
 class CxImagePNG: public CxImage
 {
 public:
@@ -69,8 +73,13 @@ protected:
 
     static void PNGAPI user_error_fn(png_structp png_ptr,png_const_charp error_msg)
        {
+#ifdef USE_NEW_LIBPNG_API
+               strncpy((char*)png_get_error_ptr(png_ptr),error_msg,255);
+               longjmp(png_jmpbuf(png_ptr), 1);
+#else
                strncpy((char*)png_ptr->error_ptr,error_msg,255);
                longjmp(png_ptr->jmpbuf, 1);
+#endif
        }
 };
 
index 2f637bd..bb93b67 100644 (file)
@@ -47,7 +47,7 @@ OPTIONS="
 --enable-avfilter \
 --disable-doc"
 
-./configure --extra-cflags="-fno-common -Iinclude-xbmc-win32/dxva2" --extra-ldflags="-L/xbmc/system/players/dvdplayer" ${OPTIONS} &&
+./configure --extra-cflags="-fno-common -Iinclude-xbmc-win32/dxva2 -DNDEBUG" --extra-ldflags="-L/xbmc/system/players/dvdplayer" ${OPTIONS} &&
  
 make $MAKEFLAGS &&
 cp lib*/*.dll .libs/ &&
index 1db7abd..6390065 100644 (file)
@@ -101,8 +101,12 @@ function fft8_neon
         bx              lr
 endfunc
 
+        .align 4
+pmmp:   .float  +1.0, -1.0, -1.0, +1.0
+mppm:   .float  -M_SQRT1_2, M_SQRT1_2, M_SQRT1_2, -M_SQRT1_2
+
 function fft16_neon
-        movrel          r1, mppm
+        adr             r1, mppm
         vld1.32         {d16-d19}, [r0,:128]!   @ q8{r0,i0,r1,i1} q9{r2,i2,r3,i3}
         pld             [r0, #32]
         vld1.32         {d2-d3}, [r1,:128]
@@ -144,12 +148,16 @@ function fft16_neon
         vswp            d29, d30                @ q14{r12,i12,i14,r15} q15{r13,i13,i15,r14}
         vadd.f32        q0,  q12, q13           @ {t1,t2,t5,t6}
         vadd.f32        q1,  q14, q15           @ {t1a,t2a,t5a,t6a}
-        movrel          r2,  X(ff_cos_16)
+        ldr             r2,  _neon_label
+        ldr             r3,  L$diff1
+        add             r2,  r3
+local_label1:
+        ldr             r2,  [pc, r2]
         vsub.f32        q13, q12, q13           @ {t3,t4,t7,t8}
         vrev64.32       d1,  d1
         vsub.f32        q15, q14, q15           @ {t3a,t4a,t7a,t8a}
         vrev64.32       d3,  d3
-        movrel          r3,  pmmp
+        adr             r3,  pmmp
         vswp            d1,  d26                @ q0{t1,t2,t3,t4} q13{t6,t5,t7,t8}
         vswp            d3,  d30                @ q1{t1a,t2a,t3a,t4a} q15{t6a,t5a,t7a,t8a}
         vadd.f32        q12, q0,  q13           @ {r8,i8,r9,i9}
@@ -214,7 +222,7 @@ function fft_pass_neon
         add             r2,  r2,  r0            @ &z[o2]
         add             r3,  r3,  r0            @ &z[o3]
         vld1.32         {d20-d21},[r2,:128]     @ {z[o2],z[o2+1]}
-        movrel          r12, pmmp
+        adr             r12, pmmp
         vld1.32         {d22-d23},[r3,:128]     @ {z[o3],z[o3+1]}
         add             r5,  r5,  r1            @ wim
         vld1.32         {d6-d7},  [r12,:128]    @ pmmp
@@ -279,6 +287,11 @@ function fft_pass_neon
         pop             {r4-r6,pc}
 endfunc
 
+.set L$offs16, 0
+.macro setTabOffs n, n2
+.set L$offs\n, L$offs\n2 + 4
+.endm
+
 .macro  def_fft n, n2, n4
         .align 6
 function fft\n\()_neon
@@ -291,10 +304,15 @@ function fft\n\()_neon
         bl              fft\n4\()_neon
         mov             r0,  r4
         pop             {r4, lr}
-        movrel          r1,  X(ff_cos_\n)
+        ldr             r1,  _neon_label
+        add             r1,  #L$diff\n
+local_label\n:
+        ldr             r1,  [pc, r1]
         mov             r2,  #\n4/2
         b               fft_pass_neon
 endfunc
+setTabOffs \n, \n2
+.set L$diff\n, _neon_label - local_label\n + L$offs\n - 8
 .endm
 
         def_fft    32,    16,     8
@@ -310,10 +328,14 @@ endfunc
         def_fft 32768, 16384,  8192
         def_fft 65536, 32768, 16384
 
+.set L$diffTab, fft_tab_neon_offs - local_label_tab - 8
 function ff_fft_calc_neon, export=1
         ldr             r2,  [r0]
         sub             r2,  r2,  #2
-        movrel          r3,  fft_tab_neon
+        ldr             r3,  fft_tab_neon_offs
+        add             r3,  #L$diffTab
+local_label_tab:
+        add             r3,  pc
         ldr             r3,  [r3, r2, lsl #2]
         mov             r0,  r1
         bx              r3
@@ -349,9 +371,22 @@ function ff_fft_permute_neon, export=1
         pop             {r4,pc}
 endfunc
 
-        .section .rodata
+
+.global _neon_label
+_neon_label:
+.word _neon_cos_tab - .
+
+L$diff1:
+.word _neon_label - local_label1 - 8
+
+fft_tab_neon_offs:
+.word _fft_tab_neon - .
+
+
+.section .rodata
+               
         .align 4
-fft_tab_neon:
+_fft_tab_neon:
         .word fft4_neon
         .word fft8_neon
         .word fft16_neon
@@ -367,8 +402,20 @@ fft_tab_neon:
         .word fft16384_neon
         .word fft32768_neon
         .word fft65536_neon
-ELF     .size fft_tab_neon, . - fft_tab_neon
-
-        .align 4
-pmmp:   .float  +1.0, -1.0, -1.0, +1.0
-mppm:   .float  -M_SQRT1_2, M_SQRT1_2, M_SQRT1_2, -M_SQRT1_2
+ELF     .size _fft_tab_neon, . - _fft_tab_neon
+               
+               .align 4
+_neon_cos_tab:
+        .word X(ff_cos_16)
+        .word X(ff_cos_32)
+        .word X(ff_cos_64)
+        .word X(ff_cos_128)
+        .word X(ff_cos_256)
+        .word X(ff_cos_512)
+        .word X(ff_cos_1024)
+        .word X(ff_cos_2048)
+        .word X(ff_cos_4096)
+        .word X(ff_cos_8192)
+        .word X(ff_cos_16384)
+        .word X(ff_cos_32768)
+        .word X(ff_cos_65536)
index 6b6a669..8111975 100644 (file)
@@ -97,7 +97,7 @@ function ff_h264_idct_add16_neon, export=1
         mov             r1,  r2
         mov             r2,  r3
         ldr             r6,  [sp, #24]
-        movrel          r7,  scan8
+        adr             r7,  scan8
         mov             ip,  #16
 1:      ldrb            r8,  [r7], #1
         ldr             r0,  [r5], #4
@@ -117,6 +117,16 @@ function ff_h264_idct_add16_neon, export=1
         pop             {r4-r8,pc}
 endfunc
 
+        .align
+scan8:  .byte           4+1*8, 5+1*8, 4+2*8, 5+2*8
+        .byte           6+1*8, 7+1*8, 6+2*8, 7+2*8
+        .byte           4+3*8, 5+3*8, 4+4*8, 5+4*8
+        .byte           6+3*8, 7+3*8, 6+4*8, 7+4*8
+        .byte           1+1*8, 2+1*8
+        .byte           1+2*8, 2+2*8
+        .byte           1+4*8, 2+4*8
+        .byte           1+5*8, 2+5*8
+
 function ff_h264_idct_add16intra_neon, export=1
         push            {r4-r8,lr}
         mov             r4,  r0
@@ -124,7 +134,7 @@ function ff_h264_idct_add16intra_neon, export=1
         mov             r1,  r2
         mov             r2,  r3
         ldr             r6,  [sp, #24]
-        movrel          r7,  scan8
+        adr             r7,  scan8
         mov             ip,  #16
 1:      ldrb            r8,  [r7], #1
         ldr             r0,  [r5], #4
@@ -149,7 +159,7 @@ function ff_h264_idct_add8_neon, export=1
         add             r1,  r2,  #16*32
         mov             r2,  r3
         ldr             r6,  [sp, #32]
-        movrel          r7,  scan8+16
+        adr             r7,  scan8+16
         mov             ip,  #7
 1:      ldrb            r8,  [r7], #1
         ldr             r0,  [r5], #4
@@ -353,7 +363,7 @@ function ff_h264_idct8_add4_neon, export=1
         mov             r1,  r2
         mov             r2,  r3
         ldr             r6,  [sp, #24]
-        movrel          r7,  scan8
+        adr             r7,  scan8
         mov             r12, #16
 1:      ldrb            r8,  [r7], #4
         ldr             r0,  [r5], #16
@@ -372,13 +382,3 @@ function ff_h264_idct8_add4_neon, export=1
         bne             1b
         pop             {r4-r8,pc}
 endfunc
-
-        .section .rodata
-scan8:  .byte           4+1*8, 5+1*8, 4+2*8, 5+2*8
-        .byte           6+1*8, 7+1*8, 6+2*8, 7+2*8
-        .byte           4+3*8, 5+3*8, 4+4*8, 5+4*8
-        .byte           6+3*8, 7+3*8, 6+4*8, 7+4*8
-        .byte           1+1*8, 2+1*8
-        .byte           1+2*8, 2+2*8
-        .byte           1+4*8, 2+4*8
-        .byte           1+5*8, 2+5*8
index 63c96ee..357c10a 100644 (file)
@@ -123,7 +123,7 @@ function ff_pred16x16_plane_neon, export=1
         vaddl.u8        q8,  d2,  d3
         vsubl.u8        q2,  d2,  d0
         vsubl.u8        q3,  d3,  d1
-        movrel          r3,  p16weight
+        adr             r3,  p16weight
         vld1.8          {q0},     [r3,:128]
         vmul.s16        q2,  q2,  q0
         vmul.s16        q3,  q3,  q0
@@ -166,7 +166,6 @@ function ff_pred16x16_plane_neon, export=1
         bx              lr
 endfunc
 
-        .section        .rodata
         .align          4
 p16weight:
         .short          1,2,3,4,5,6,7,8
@@ -207,7 +206,7 @@ function ff_pred8x8_plane_neon, export=1
         vrev32.8        d0,  d0
         vtrn.32         d2,  d3
         vsubl.u8        q2,  d2,  d0
-        movrel          r3,  p16weight
+        adr             r3,  p16weight
         vld1.16         {q0},     [r3,:128]
         vmul.s16        d4,  d4,  d0
         vmul.s16        d5,  d5,  d0
index 17cde58..e61414e 100644 (file)
@@ -239,7 +239,6 @@ function idct_col4_st8_neon
         bx              lr
 endfunc
 
-        .section .rodata
         .align 4
 idct_coeff_neon:
         .short W1, W2, W3, W4, W5, W6, W7, W4c
@@ -249,7 +248,7 @@ idct_coeff_neon:
         pld             [\data]
         pld             [\data, #64]
         vpush           {d8-d15}
-        movrel          r3,  idct_coeff_neon
+        adr             r3,  idct_coeff_neon
         vld1.64         {d0,d1}, [r3,:128]
         .endm
 
index d97ed3d..74bf7ba 100644 (file)
 
 #include "asm.S"
 
-.section .rodata
+.text
 .align 4
 
-vp3_idct_constants:
-.short 64277, 60547, 54491, 46341, 36410, 25080, 12785
-
 #define xC1S7 d0[0]
 #define xC2S6 d0[1]
 #define xC3S5 d0[2]
@@ -34,8 +31,6 @@ vp3_idct_constants:
 #define xC6S2 d1[1]
 #define xC7S1 d1[2]
 
-.text
-
 .macro vp3_loop_filter
     vsubl.u8        q3,  d18, d17
     vsubl.u8        q2,  d16, d19
@@ -109,10 +104,14 @@ function ff_vp3_h_loop_filter_neon, export=1
     bx              lr
 endfunc
 
+.align 4
+vp3_idct_constants:
+.short 64277, 60547, 54491, 46341, 36410, 25080, 12785
+.align 4
 
 function vp3_idct_start_neon
     vpush           {d8-d15}
-    movrel          r3,  vp3_idct_constants
+    adr             r3,  vp3_idct_constants
     vld1.64         {d0-d1},   [r3,:128]
     vld1.64         {d16-d19}, [r2,:128]!
     vld1.64         {d20-d23}, [r2,:128]!
index 7c37915..e8ef8ce 100644 (file)
@@ -1409,6 +1409,7 @@ static int dvbsub_decode(AVCodecContext *avctx,
     int segment_type;
     int page_id;
     int segment_length;
+    int got_segment = 0;
 
 #ifdef DEBUG_PACKET_CONTENTS
     int i;
@@ -1445,21 +1446,26 @@ static int dvbsub_decode(AVCodecContext *avctx,
             switch (segment_type) {
             case DVBSUB_PAGE_SEGMENT:
                 dvbsub_parse_page_segment(avctx, p, segment_length);
+                got_segment |= 1;
                 break;
             case DVBSUB_REGION_SEGMENT:
                 dvbsub_parse_region_segment(avctx, p, segment_length);
+                got_segment |= 2;
                 break;
             case DVBSUB_CLUT_SEGMENT:
                 dvbsub_parse_clut_segment(avctx, p, segment_length);
+                got_segment |= 4;
                 break;
             case DVBSUB_OBJECT_SEGMENT:
                 dvbsub_parse_object_segment(avctx, p, segment_length);
+                got_segment |= 8;
                 break;
             case DVBSUB_DISPLAYDEFINITION_SEGMENT:
                 dvbsub_parse_display_definition_segment(avctx, p, segment_length);
                 break;
             case DVBSUB_DISPLAY_SEGMENT:
                 *data_size = dvbsub_display_end_segment(avctx, p, segment_length, sub);
+                got_segment |= 16;
                 break;
             default:
                 av_dlog(avctx, "Subtitling segment type 0x%x, page id %d, length %d\n",
@@ -1470,6 +1476,10 @@ static int dvbsub_decode(AVCodecContext *avctx,
 
         p += segment_length;
     }
+    // Some streams do not send a display segment but if we have all the other
+    // segments then we need no further data.
+    if (got_segment == 15 && sub)
+        *data_size = dvbsub_display_end_segment(avctx, p, 0, sub);
 
     if (p != p_end) {
         av_dlog(avctx, "Junk at end of packet\n");
index e713e24..6c19e89 100644 (file)
@@ -28,7 +28,7 @@
 typedef struct DVDSubContext
 {
   uint8_t  colormap[4];
-  uint8_t  alpha[4];
+  uint8_t  alpha[256];
   uint32_t palette[16];
   int      has_palette;
 } DVDSubContext;
index 3f14311..0cf99c3 100644 (file)
@@ -21,6 +21,9 @@
  */
 
 #include "dxva2_internal.h"
+#include <unistd.h>
+
+#define MAX_RETRY_ON_PENDING           50
 
 void *ff_dxva2_get_surface(const Picture *picture)
 {
@@ -88,10 +91,17 @@ int ff_dxva2_common_end_frame(AVCodecContext *avctx, MpegEncContext *s,
     DXVA2_DecodeBufferDesc buffer[4];
     DXVA2_DecodeExecuteParams exec;
     int      result;
+    HRESULT  hr;
+    int      tries = 0;
 
-    if (FAILED(IDirectXVideoDecoder_BeginFrame(ctx->decoder,
+    while ((hr=IDirectXVideoDecoder_BeginFrame(ctx->decoder,
                                                ff_dxva2_get_surface(s->current_picture_ptr),
-                                               NULL))) {
+                                               NULL)) == E_PENDING
+           && tries < MAX_RETRY_ON_PENDING) {
+        usleep(1000);
+        tries++;
+    }
+    if (FAILED(hr)) {
         av_log(avctx, AV_LOG_ERROR, "Failed to begin frame\n");
         return -1;
     }
index 6eb494b..12dce47 100644 (file)
@@ -65,6 +65,7 @@ struct dxva_context {
      * Private to the FFmpeg AVHWAccel implementation
      */
     unsigned report_id;
+    unsigned last_slice_count;
 };
 
 #endif /* AVCODEC_DXVA_H */
index 4e3370c..2954b89 100644 (file)
@@ -430,6 +430,14 @@ static int end_frame(AVCodecContext *avctx)
 
     if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
         return -1;
+
+    // Wait for an I-frame before start decoding. Workaround for ATI UVD and UVD+ GPUs
+    if (!h->got_first_iframe) {
+        if (!(ctx_pic->pp.wBitFields & (1 << 15)))
+            return -1;
+        h->got_first_iframe = 1;
+    }
+
     return ff_dxva2_common_end_frame(avctx, s,
                                      &ctx_pic->pp, sizeof(ctx_pic->pp),
                                      &ctx_pic->qm, sizeof(ctx_pic->qm),
index 780542a..2482c2f 100644 (file)
 
 #include "dxva2_internal.h"
 
-#define MAX_SLICES (SLICE_MAX_START_CODE - SLICE_MIN_START_CODE + 1)
 struct dxva2_picture_context {
     DXVA_PictureParameters pp;
     DXVA_QmatrixData       qm;
     unsigned               slice_count;
-    DXVA_SliceInfo         slice[MAX_SLICES];
+    DXVA_SliceInfo         *slice;
+    unsigned int           slice_alloc;
 
     const uint8_t          *bitstream;
     unsigned               bitstream_size;
@@ -220,8 +220,20 @@ static int start_frame(AVCodecContext *avctx,
     fill_quantization_matrices(avctx, ctx, s, &ctx_pic->qm);
 
     ctx_pic->slice_count    = 0;
+    ctx_pic->slice          = NULL;
+    ctx_pic->slice_alloc    = 0;
     ctx_pic->bitstream_size = 0;
     ctx_pic->bitstream      = NULL;
+
+    if (ctx->last_slice_count > 0)
+    {
+        ctx_pic->slice = av_fast_realloc(NULL,
+                                         &ctx_pic->slice_alloc,
+                                         ctx->last_slice_count * sizeof(DXVA_SliceInfo));
+        if (!ctx_pic->slice)
+            return -1;
+    }
+
     return 0;
 }
 
@@ -232,9 +244,14 @@ static int decode_slice(AVCodecContext *avctx,
     struct dxva2_picture_context *ctx_pic =
         s->current_picture_ptr->hwaccel_picture_private;
     unsigned position;
+    DXVA_SliceInfo* slice;
 
-    if (ctx_pic->slice_count >= MAX_SLICES)
+    slice = av_fast_realloc(ctx_pic->slice,
+                            &ctx_pic->slice_alloc,
+                            (ctx_pic->slice_count + 1) * sizeof(DXVA_SliceInfo));
+    if (!slice)
         return -1;
+    ctx_pic->slice = slice;
 
     if (!ctx_pic->bitstream)
         ctx_pic->bitstream = buffer;
@@ -251,6 +268,7 @@ static int end_frame(AVCodecContext *avctx)
     struct MpegEncContext *s = avctx->priv_data;
     struct dxva2_picture_context *ctx_pic =
         s->current_picture_ptr->hwaccel_picture_private;
+    struct dxva_context *ctx = avctx->hwaccel_context;
 
     if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
         return -1;
@@ -258,6 +276,8 @@ static int end_frame(AVCodecContext *avctx)
                                      &ctx_pic->pp, sizeof(ctx_pic->pp),
                                      &ctx_pic->qm, sizeof(ctx_pic->qm),
                                      commit_bitstream_and_slice_buffer);
+    av_freep(ctx_pic->slice);
+    ctx->last_slice_count = ctx_pic->slice_count;
 }
 
 AVHWAccel ff_mpeg2_dxva2_hwaccel = {
index 2b9a690..eca587a 100644 (file)
@@ -38,15 +38,17 @@ static void fill_picture_parameters(AVCodecContext *avctx,
 {
     const MpegEncContext *s = &v->s;
     const Picture *current_picture = s->current_picture_ptr;
+    BYTE bPicIntra = s->pict_type == FF_I_TYPE || v->bi_type == 1;
+    BYTE bPicBackwardPrediction = s->pict_type == FF_B_TYPE && v->bi_type == 0;
 
     memset(pp, 0, sizeof(*pp));
     pp->wDecodedPictureIndex    =
     pp->wDeblockedPictureIndex  = ff_dxva2_get_surface_index(ctx, current_picture);
-    if (s->pict_type != FF_I_TYPE)
-        pp->wForwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, &s->last_picture);
-    else
+    if (bPicIntra)
         pp->wForwardRefPictureIndex = 0xffff;
-    if (s->pict_type == FF_B_TYPE)
+    else
+        pp->wForwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, &s->last_picture);
+    if (bPicBackwardPrediction)
         pp->wBackwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, &s->next_picture);
     else
         pp->wBackwardRefPictureIndex = 0xffff;
@@ -69,8 +71,8 @@ static void fill_picture_parameters(AVCodecContext *avctx,
     if (s->picture_structure & PICT_BOTTOM_FIELD)
         pp->bPicStructure      |= 0x02;
     pp->bSecondField            = v->interlace && v->fcm != 0x03 && !s->first_field;
-    pp->bPicIntra               = s->pict_type == FF_I_TYPE;
-    pp->bPicBackwardPrediction  = s->pict_type == FF_B_TYPE;
+    pp->bPicIntra               = bPicIntra;
+    pp->bPicBackwardPrediction  = bPicBackwardPrediction;
     pp->bBidirectionalAveragingMode = (1                                           << 7) |
                                       ((ctx->cfg->ConfigIntraResidUnsigned != 0)   << 6) |
                                       ((ctx->cfg->ConfigResidDiffAccelerator != 0) << 5) |
@@ -101,14 +103,17 @@ static void fill_picture_parameters(AVCodecContext *avctx,
                                   (v->rangered       << 3) |
                                   (s->max_b_frames       );
     pp->bPicExtrapolation       = (!v->interlace || v->fcm == 0x00) ? 1 : 2;
-    pp->bPicDeblocked           = ((v->profile != PROFILE_ADVANCED && v->rangeredfrm) << 5) |
+    pp->bPicDeblocked           = ((v->overlap == 1 &&
+                                  pp->bPicBackwardPrediction == 0 &&
+                                  ctx->cfg->ConfigResidDiffHost == 0)                 << 6) |
+                                  ((v->profile != PROFILE_ADVANCED && v->rangeredfrm) << 5) |
                                   (s->loop_filter                                     << 1);
     pp->bPicDeblockConfined     = (v->postprocflag             << 7) |
                                   (v->broadcast                << 6) |
                                   (v->interlace                << 5) |
                                   (v->tfcntrflag               << 4) |
                                   (v->finterpflag              << 3) |
-                                  ((s->pict_type != FF_B_TYPE) << 2) |
+                                  ((s->pict_type != FF_B_TYPE) << 2) | //includes BI
                                   (v->psf                      << 1) |
                                   (v->extended_dmv                 );
     if (s->pict_type != FF_I_TYPE)
index b84430a..0e002ce 100644 (file)
@@ -1464,7 +1464,7 @@ static void implicit_weight_table(H264Context *h, int field){
  */
 static void idr(H264Context *h){
     ff_h264_remove_all_refs(h);
-    h->prev_frame_num= 0;
+    h->prev_frame_num= -1;
     h->prev_frame_num_offset= 0;
     h->prev_poc_msb=
     h->prev_poc_lsb= 0;
@@ -1479,6 +1479,7 @@ static void flush_dpb(AVCodecContext *avctx){
             h->delayed_pic[i]->reference= 0;
         h->delayed_pic[i]= NULL;
     }
+    h->got_first_iframe = 0;
     h->outputed_poc= INT_MIN;
     h->prev_interlaced_frame = 1;
     idr(h);
@@ -1796,15 +1797,11 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
     s->mb_height= h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag);
 
     h->b_stride=  s->mb_width*4;
-
-    s->width = 16*s->mb_width - 2*FFMIN(h->sps.crop_right, 7);
-    if(h->sps.frame_mbs_only_flag)
-        s->height= 16*s->mb_height - 2*FFMIN(h->sps.crop_bottom, 7);
-    else
-        s->height= 16*s->mb_height - 4*FFMIN(h->sps.crop_bottom, 7);
+    s->width = 16*s->mb_width;
+    s->height= 16*s->mb_height;
 
     if (s->context_initialized
-        && (   s->width != s->avctx->width || s->height != s->avctx->height
+        && (   s->width != s->avctx->coded_width || s->height != s->avctx->coded_height
             || av_cmp_q(h->sps.sar, s->avctx->sample_aspect_ratio))) {
         if(h != h0)
             return -1;   // width / height changed during parallelized decoding
@@ -1817,6 +1814,13 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
             return -1;  // we cant (re-)initialize context during parallel decoding
 
         avcodec_set_dimensions(s->avctx, s->width, s->height);
+
+        s->avctx->width -= 2*FFMIN(h->sps.crop_right, 7);
+        if(h->sps.frame_mbs_only_flag)
+            s->avctx->height-=2*FFMIN(h->sps.crop_bottom, 7);
+        else
+            s->avctx->height-=4*FFMIN(h->sps.crop_bottom, 7);
+
         s->avctx->sample_aspect_ratio= h->sps.sar;
         av_assert0(s->avctx->sample_aspect_ratio.den);
 
@@ -1848,6 +1852,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
             return -1;
         s->first_field = 0;
         h->prev_interlaced_frame = 1;
+        h->got_first_iframe = 0;
 
         init_scan_tables(h);
         ff_h264_alloc_tables(h);
@@ -1887,7 +1892,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
     h->mb_field_decoding_flag= s->picture_structure != PICT_FRAME;
 
     if(h0->current_slice == 0){
-        while(h->frame_num !=  h->prev_frame_num &&
+        while(h->frame_num !=  h->prev_frame_num && h->prev_frame_num >= 0 &&
               h->frame_num != (h->prev_frame_num+1)%(1<<h->sps.log2_max_frame_num)){
             Picture *prev = h->short_ref_count ? h->short_ref[0] : NULL;
             av_log(h->s.avctx, AV_LOG_DEBUG, "Frame num gap %d %d\n", h->frame_num, h->prev_frame_num);
@@ -1931,11 +1936,9 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
                 s0->first_field = FIELD_PICTURE;
 
             } else {
-                if (h->nal_ref_idc &&
-                        s0->current_picture_ptr->reference &&
-                        s0->current_picture_ptr->frame_num != h->frame_num) {
+                if (s0->current_picture_ptr->frame_num != h->frame_num) {
                     /*
-                     * This and previous field were reference, but had
+                     * This and previous field had
                      * different frame_nums. Consider this field first in
                      * pair. Throw away previous field except for reference
                      * purposes.
@@ -2566,7 +2569,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){
                 return 0;
             }
             if( ret < 0 || h->cabac.bytestream > h->cabac.bytestream_end + 2) {
-                av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%td)\n", s->mb_x, s->mb_y, h->cabac.bytestream_end - h->cabac.bytestream);
+                av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%u)\n", s->mb_x, s->mb_y, h->cabac.bytestream_end - h->cabac.bytestream);
                 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_ERROR|DC_ERROR|MV_ERROR)&part_mask);
                 return -1;
             }
index b403968..bdca237 100644 (file)
@@ -587,6 +587,8 @@ typedef struct H264Context{
     int luma_weight_flag[2];   ///< 7.4.3.2 luma_weight_lX_flag
     int chroma_weight_flag[2]; ///< 7.4.3.2 chroma_weight_lX_flag
 
+    int got_first_iframe;
+
     // Timestamp stuff
     int sei_buffering_period_present;  ///< Buffering period SEI flag
     int initial_cpb_removal_delay[32]; ///< Initial timestamps for CPBs
index 17d82b7..8d456ba 100644 (file)
@@ -109,14 +109,14 @@ static int vaapi_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer
     MpegEncContext * const s = avctx->priv_data;
     VASliceParameterBufferMPEG2 *slice_param;
     GetBitContext gb;
-    uint32_t start_code, quantiser_scale_code, intra_slice_flag, macroblock_offset;
+    uint32_t quantiser_scale_code, intra_slice_flag, macroblock_offset;
 
     av_dlog(avctx, "vaapi_mpeg2_decode_slice(): buffer %p, size %d\n", buffer, size);
 
     /* Determine macroblock_offset */
     init_get_bits(&gb, buffer, 8 * size);
-    start_code = get_bits(&gb, 32);
-    assert((start_code & 0xffffff00) == 0x00000100);
+    if (get_bits_long(&gb, 32) >> 8 != 1) /* start code */
+        return AVERROR_INVALIDDATA;
     quantiser_scale_code = get_bits(&gb, 5);
     intra_slice_flag = get_bits1(&gb);
     if (intra_slice_flag) {
index c61a5bd..a9bcd7b 100644 (file)
@@ -116,6 +116,18 @@ static inline VAMvModeVC1 vc1_get_MVMODE2(VC1Context *v)
     return 0;
 }
 
+/** Reconstruct bitstream TTFRM (7.1.1.41, Table-53) */
+static inline int vc1_get_TTFRM(VC1Context *v)
+{
+    switch (v->ttfrm) {
+    case TT_8X8: return 0;
+    case TT_8X4: return 1;
+    case TT_4X8: return 2;
+    case TT_4X4: return 3;
+    }
+    return 0;
+}
+
 /** Pack FFmpeg bitplanes into a VABitPlaneBuffer element */
 static inline void vc1_pack_bitplanes(uint8_t *bitplane, int n, const uint8_t *ff_bp[3], int x, int y, int stride)
 {
@@ -160,6 +172,9 @@ static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t
     pic_param->sequence_fields.bits.syncmarker                      = s->resync_marker;
     pic_param->sequence_fields.bits.rangered                        = v->rangered;
     pic_param->sequence_fields.bits.max_b_frames                    = s->avctx->max_b_frames;
+#if VA_CHECK_VERSION(0,32,0)
+    pic_param->sequence_fields.bits.profile                         = v->profile;
+#endif
     pic_param->coded_width                                          = s->avctx->coded_width;
     pic_param->coded_height                                         = s->avctx->coded_height;
     pic_param->entrypoint_fields.value                              = 0; /* reset all bits */
@@ -236,7 +251,7 @@ static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t
     pic_param->transform_fields.value                               = 0; /* reset all bits */
     pic_param->transform_fields.bits.variable_sized_transform_flag  = v->vstransform;
     pic_param->transform_fields.bits.mb_level_transform_type_flag   = v->ttmbf;
-    pic_param->transform_fields.bits.frame_level_transform_type     = v->ttfrm;
+    pic_param->transform_fields.bits.frame_level_transform_type     = vc1_get_TTFRM(v);
     pic_param->transform_fields.bits.transform_ac_codingset_idx1    = v->c_ac_table_index;
     pic_param->transform_fields.bits.transform_ac_codingset_idx2    = v->y_ac_table_index;
     pic_param->transform_fields.bits.intra_transform_dc_table       = v->s.dc_table_index;
index d8ceca1..f5af44e 100644 (file)
@@ -398,7 +398,7 @@ static av_noinline void OPNAME ## h264_qpel8or16_v_lowpass_ ## MMX(uint8_t *dst,
             "2:                         \n\t"\
             \
             : "+a"(src), "+c"(dst)\
-            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
+            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
             : "memory"\
         );\
         src += 4-(h+5)*srcStride;\
@@ -446,7 +446,7 @@ static av_always_inline void OPNAME ## h264_qpel8or16_hv1_lowpass_ ## MMX(int16_
             QPEL_H264HV(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, 15*48)\
             "2:                     \n\t"\
             : "+a"(src)\
-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)\
+            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)\
             : "memory"\
             );\
         tmp += 4;\
@@ -823,7 +823,7 @@ static av_noinline void OPNAME ## h264_qpel8or16_v_lowpass_ ## MMX(uint8_t *dst,
         "2:                          \n\t"\
         \
         : "+a"(src), "+c"(dst)\
-        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
+        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
         : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3", \
                        "%xmm4", "%xmm5", "%xmm6", "%xmm7",)\
           "memory"\
@@ -878,7 +878,7 @@ static av_always_inline void put_h264_qpel8or16_hv1_lowpass_sse2(int16_t *tmp, u
             QPEL_H264HV_XMM(%%xmm3, %%xmm4, %%xmm5, %%xmm0, %%xmm1, %%xmm2, 15*48)
             "2:                         \n\t"
             : "+a"(src)
-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)
+            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)
             : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3",
                            "%xmm4", "%xmm5", "%xmm6", "%xmm7",)
               "memory"
index da91600..1ed8807 100644 (file)
@@ -56,42 +56,42 @@ typedef struct {
     AVFilterBufferRef *out;
     void (*filter_line)(uint8_t *dst,
                         uint8_t *prev, uint8_t *cur, uint8_t *next,
-                        int w, int refs, int parity, int mode);
+                        int w, int prefs, int mrefs, int parity, int mode);
 } YADIFContext;
 
 static void filter_line_c(uint8_t *dst,
                           uint8_t *prev, uint8_t *cur, uint8_t *next,
-                          int w, int refs, int parity, int mode)
+                          int w, int prefs, int mrefs, int parity, int mode)
 {
     int x;
     uint8_t *prev2 = parity ? prev : cur ;
     uint8_t *next2 = parity ? cur  : next;
     for (x = 0;  x < w; x++) {
-        int c = cur[-refs];
+        int c = cur[mrefs];
         int d = (prev2[0] + next2[0])>>1;
-        int e = cur[+refs];
+        int e = cur[prefs];
         int temporal_diff0 = FFABS(prev2[0] - next2[0]);
-        int temporal_diff1 =(FFABS(prev[-refs] - c) + FFABS(prev[+refs] - e) )>>1;
-        int temporal_diff2 =(FFABS(next[-refs] - c) + FFABS(next[+refs] - e) )>>1;
+        int temporal_diff1 =(FFABS(prev[mrefs] - c) + FFABS(prev[prefs] - e) )>>1;
+        int temporal_diff2 =(FFABS(next[mrefs] - c) + FFABS(next[prefs] - e) )>>1;
         int diff = FFMAX3(temporal_diff0>>1, temporal_diff1, temporal_diff2);
         int spatial_pred = (c+e)>>1;
-        int spatial_score = FFABS(cur[-refs-1] - cur[+refs-1]) + FFABS(c-e)
-                          + FFABS(cur[-refs+1] - cur[+refs+1]) - 1;
+        int spatial_score = FFABS(cur[mrefs-1] - cur[prefs-1]) + FFABS(c-e)
+                          + FFABS(cur[mrefs+1] - cur[prefs+1]) - 1;
 
 #define CHECK(j)\
-    {   int score = FFABS(cur[-refs-1+j] - cur[+refs-1-j])\
-                  + FFABS(cur[-refs  +j] - cur[+refs  -j])\
-                  + FFABS(cur[-refs+1+j] - cur[+refs+1-j]);\
+    {   int score = FFABS(cur[mrefs-1+j] - cur[prefs-1-j])\
+                  + FFABS(cur[mrefs  +j] - cur[prefs  -j])\
+                  + FFABS(cur[mrefs+1+j] - cur[prefs+1-j]);\
         if (score < spatial_score) {\
             spatial_score= score;\
-            spatial_pred= (cur[-refs  +j] + cur[+refs  -j])>>1;\
+            spatial_pred= (cur[mrefs  +j] + cur[prefs  -j])>>1;\
 
         CHECK(-1) CHECK(-2) }} }}
         CHECK( 1) CHECK( 2) }} }}
 
         if (mode < 2) {
-            int b = (prev2[-2*refs] + next2[-2*refs])>>1;
-            int f = (prev2[+2*refs] + next2[+2*refs])>>1;
+            int b = (prev2[2*mrefs] + next2[2*mrefs])>>1;
+            int f = (prev2[2*prefs] + next2[2*prefs])>>1;
 #if 0
             int a = cur[-3*refs];
             int g = cur[+3*refs];
@@ -139,7 +139,8 @@ static void filter(AVFilterContext *ctx, AVFilterBufferRef *dstpic,
                 uint8_t *cur  = &yadif->cur ->data[i][y*refs];
                 uint8_t *next = &yadif->next->data[i][y*refs];
                 uint8_t *dst  = &dstpic->data[i][y*dstpic->linesize[i]];
-                yadif->filter_line(dst, prev, cur, next, w, refs, parity ^ tff, yadif->mode);
+                int     mode  = y==1 || y+2==h ? 2 : yadif->mode;
+                yadif->filter_line(dst, prev, cur, next, w, y+1<h ? refs : -refs, y ? -refs : refs, parity ^ tff, mode);
             } else {
                 memcpy(&dstpic->data[i][y*dstpic->linesize[i]],
                        &yadif->cur->data[i][y*refs], w);
index 3e520cb..50ea843 100644 (file)
 
 void RENAME(ff_yadif_filter_line)(uint8_t *dst,
                                   uint8_t *prev, uint8_t *cur, uint8_t *next,
-                                  int w, int refs, int parity, int mode)
+                                  int w, int prefs, int mrefs, int parity, int mode)
 {
     DECLARE_ALIGNED(16, uint8_t, tmp0[16]);
     DECLARE_ALIGNED(16, uint8_t, tmp1[16]);
@@ -226,8 +226,8 @@ void RENAME(ff_yadif_filter_line)(uint8_t *dst,
             :[prev] "r"(prev),\
              [cur]  "r"(cur),\
              [next] "r"(next),\
-             [prefs]"r"((x86_reg)refs),\
-             [mrefs]"r"((x86_reg)-refs),\
+             [prefs]"r"((x86_reg)prefs),\
+             [mrefs]"r"((x86_reg)mrefs),\
              [mode] "g"(mode)\
         );\
         __asm__ volatile(MOV" "MM"1, %0" :"=m"(*dst));\
index 072812c..ff574da 100644 (file)
 
 void ff_yadif_filter_line_mmx(uint8_t *dst,
                               uint8_t *prev, uint8_t *cur, uint8_t *next,
-                              int w, int refs, int parity, int mode);
+                              int w, int prefs, int mrefs, int parity, int mode);
 
 void ff_yadif_filter_line_sse2(uint8_t *dst,
                                uint8_t *prev, uint8_t *cur, uint8_t *next,
-                               int w, int refs, int parity, int mode);
+                               int w, int prefs, int mrefs, int parity, int mode);
 
 void ff_yadif_filter_line_ssse3(uint8_t *dst,
                                 uint8_t *prev, uint8_t *cur, uint8_t *next,
-                                int w, int refs, int parity, int mode);
+                                int w, int prefs, int mrefs, int parity, int mode);
 
 #endif /* AVFILTER_YADIF_H */
index 1a87f4a..70489e8 100644 (file)
@@ -1066,19 +1066,21 @@ static void matroska_convert_tags(AVFormatContext *s)
         if (tags[i].target.attachuid) {
             MatroskaAttachement *attachment = matroska->attachments.elem;
             for (j=0; j<matroska->attachments.nb_elem; j++)
-                if (attachment[j].uid == tags[i].target.attachuid)
+                if (attachment[j].uid == tags[i].target.attachuid
+                    && attachment[j].stream)
                     matroska_convert_tag(s, &tags[i].tag,
                                          &attachment[j].stream->metadata, NULL);
         } else if (tags[i].target.chapteruid) {
             MatroskaChapter *chapter = matroska->chapters.elem;
             for (j=0; j<matroska->chapters.nb_elem; j++)
-                if (chapter[j].uid == tags[i].target.chapteruid)
+                if (chapter[j].uid == tags[i].target.chapteruid
+                    && chapter[j].chapter)
                     matroska_convert_tag(s, &tags[i].tag,
                                          &chapter[j].chapter->metadata, NULL);
         } else if (tags[i].target.trackuid) {
             MatroskaTrack *track = matroska->tracks.elem;
             for (j=0; j<matroska->tracks.nb_elem; j++)
-                if (track[j].uid == tags[i].target.trackuid)
+                if (track[j].uid == tags[i].target.trackuid && track[j].stream)
                     matroska_convert_tag(s, &tags[i].tag,
                                          &track[j].stream->metadata, NULL);
         } else {
@@ -1220,7 +1222,7 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
     for (i=0; i < matroska->tracks.nb_elem; i++) {
         MatroskaTrack *track = &tracks[i];
         enum CodecID codec_id = CODEC_ID_NONE;
-        EbmlList *encodings_list = &tracks->encodings;
+        EbmlList *encodings_list = &track->encodings;
         MatroskaTrackEncoding *encodings = encodings_list->elem;
         uint8_t *extradata = NULL;
         int extradata_size = 0;
index 257b973..cc6efa3 100644 (file)
@@ -54,6 +54,7 @@ typedef enum {
 
 typedef struct {
     MMSContext mms;
+    uint8_t location[1024];
     int request_seq;  ///< request packet sequence
     int chunk_seq;    ///< data packet sequence
 } MMSHContext;
@@ -210,10 +211,10 @@ static int get_http_header_data(MMSHContext *mmsh)
     return 0;
 }
 
-static int mmsh_open(URLContext *h, const char *uri, int flags)
+static int mmsh_open_internal(URLContext *h, const char *uri, int flags, int timestamp, int64_t pos)
 {
     int i, port, err;
-    char httpname[256], path[256], host[128], location[1024];
+    char httpname[256], path[256], host[128];
     char *stream_selection = NULL;
     char headers[1024];
     MMSHContext *mmsh;
@@ -224,10 +225,10 @@ static int mmsh_open(URLContext *h, const char *uri, int flags)
         return AVERROR(ENOMEM);
     mmsh->request_seq = h->is_streamed = 1;
     mms = &mmsh->mms;
-    av_strlcpy(location, uri, sizeof(location));
+    av_strlcpy(mmsh->location, uri, sizeof(mmsh->location));
 
     av_url_split(NULL, 0, NULL, 0,
-        host, sizeof(host), &port, path, sizeof(path), location);
+        host, sizeof(host), &port, path, sizeof(path), mmsh->location);
     if (port<0)
         port = 80; // default mmsh protocol port
     ff_url_join(httpname, sizeof(httpname), "http", NULL, host, port, path);
@@ -283,8 +284,9 @@ static int mmsh_open(URLContext *h, const char *uri, int flags)
                    CLIENTGUID
                    "Pragma: stream-switch-count=%d\r\n"
                    "Pragma: stream-switch-entry=%s\r\n"
+                   "Pragma: no-cache,rate=1.000000,stream-time=%u"
                    "Connection: Close\r\n\r\n",
-                   host, port, mmsh->request_seq++, mms->stream_num, stream_selection);
+                   host, port, mmsh->request_seq++, mms->stream_num, stream_selection, timestamp);
     av_freep(&stream_selection);
     if (err < 0) {
         av_log(NULL, AV_LOG_ERROR, "Build play request failed!\n");
@@ -313,6 +315,11 @@ fail:
     return err;
 }
 
+static int mmsh_open(URLContext *h, const char *uri, int flags)
+{
+    return mmsh_open_internal(h, uri, flags, 0, 0);
+}
+
 static int handle_chunk_type(MMSHContext *mmsh)
 {
     MMSContext *mms = &mmsh->mms;
@@ -359,11 +366,45 @@ static int mmsh_read(URLContext *h, uint8_t *buf, int size)
     return res;
 }
 
+static int64_t mmsh_read_seek(URLContext *h, int stream_index,
+                        int64_t timestamp, int flags)
+{
+    MMSHContext *mmsh = h->priv_data;
+    MMSContext *mms   = &mmsh->mms;
+    int ret;
+
+    ret= mmsh_open_internal(h, mmsh->location, 0, FFMAX(timestamp, 0), 0);
+
+    if(ret>=0){
+        if (mms->mms_hd)
+            url_close(mms->mms_hd);
+        av_freep(&mms->streams);
+        av_freep(&mms->asf_header);
+        av_free(mmsh);
+        mmsh = h->priv_data;
+        mms   = &mmsh->mms;
+        mms->asf_header_read_size= mms->asf_header_size;
+    }else
+        h->priv_data= mmsh;
+    return ret;
+}
+
+static int64_t mmsh_seek(URLContext *h, int64_t pos, int whence)
+{
+    MMSHContext *mmsh = h->priv_data;
+    MMSContext *mms   = &mmsh->mms;
+
+    if(pos == 0 && whence == SEEK_CUR)
+        return mms->asf_header_read_size + mms->remaining_in_len + mmsh->chunk_seq * mms->asf_packet_len;
+    return AVERROR(ENOSYS);
+}
+
 URLProtocol ff_mmsh_protocol = {
     .name      = "mmsh",
     .url_open  = mmsh_open,
     .url_read  = mmsh_read,
     .url_write = NULL,
-    .url_seek  = NULL,
+    .url_seek  = mmsh_seek,
     .url_close = mmsh_close,
+    .url_read_seek  = mmsh_read_seek,
 };
index 8464d3b..385f017 100644 (file)
@@ -290,8 +290,7 @@ static MMSSCPacketType get_tcp_server_response(MMSTContext *mmst)
                 return read_result < 0 ? read_result : AVERROR_IO;
             }
             packet_type= AV_RL16(mms->in_buffer+36);
-            hr = AV_RL32(mms->in_buffer + 40);
-            if (hr) {
+            if (read_result >= 44 && (hr = AV_RL32(mms->in_buffer + 40))) {
                 av_log(NULL, AV_LOG_ERROR,
                        "Server sent an error status code: 0x%08x\n", hr);
                 return AVERROR_UNKNOWN;
index df3bccf..5177850 100644 (file)
@@ -18,7 +18,7 @@ index bea2646..e713e24 100644
 +typedef struct DVDSubContext
 +{
 +  uint8_t  colormap[4];
-+  uint8_t  alpha[4];
++  uint8_t  alpha[256];
 +  uint32_t palette[16];
 +  int      has_palette;
 +} DVDSubContext;
diff --git a/lib/ffmpeg/patches/0051-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch b/lib/ffmpeg/patches/0051-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch
new file mode 100644 (file)
index 0000000..00a3c7e
--- /dev/null
@@ -0,0 +1,74 @@
+From 87abcf002b55c8a26b6640ee55a56d3b79dd4740 Mon Sep 17 00:00:00 2001
+From: CrystalP <CrystalP@xbmc.org>
+Date: Wed, 5 Oct 2011 12:38:30 -0400
+Subject: [PATCH 1/6] dxva-mpeg2 Allocate slices array dynamically - fixes videos with > 175 slices.
+ They used to result in images with a black bottom.
+
+sample on team ftp samples/PR471/too_many_slices.ts
+
+Inspired by the vaapi code to reallocate the slices array for each new slice.
+Could be more efficient if the array could be preserved for all frames and
+freed only at the end of the video, but there doesn't seem to be anywhere
+appropriate to free the memory at the end.
+
+Alternative is to allocate the proper size straight away for a new frame,
+instead of realloc'ing for each slice.
+---
+ lib/ffmpeg/libavcodec/dxva2_mpeg2.c |   14 +++++++++++---
+ 1 files changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/dxva2_mpeg2.c b/lib/ffmpeg/libavcodec/dxva2_mpeg2.c
+index 780542a..9ac2d17 100644
+--- a/lib/ffmpeg/libavcodec/dxva2_mpeg2.c
++++ b/lib/ffmpeg/libavcodec/dxva2_mpeg2.c
+@@ -22,12 +22,12 @@
+ #include "dxva2_internal.h"
+-#define MAX_SLICES (SLICE_MAX_START_CODE - SLICE_MIN_START_CODE + 1)
+ struct dxva2_picture_context {
+     DXVA_PictureParameters pp;
+     DXVA_QmatrixData       qm;
+     unsigned               slice_count;
+-    DXVA_SliceInfo         slice[MAX_SLICES];
++    DXVA_SliceInfo         *slice;
++    unsigned int           slice_alloc;
+     const uint8_t          *bitstream;
+     unsigned               bitstream_size;
+@@ -220,6 +220,8 @@ static int start_frame(AVCodecContext *avctx,
+     fill_quantization_matrices(avctx, ctx, s, &ctx_pic->qm);
+     ctx_pic->slice_count    = 0;
++    ctx_pic->slice          = NULL;
++    ctx_pic->slice_alloc    = 0;
+     ctx_pic->bitstream_size = 0;
+     ctx_pic->bitstream      = NULL;
+     return 0;
+@@ -232,9 +234,14 @@ static int decode_slice(AVCodecContext *avctx,
+     struct dxva2_picture_context *ctx_pic =
+         s->current_picture_ptr->hwaccel_picture_private;
+     unsigned position;
++    DXVA_SliceInfo* slice;
+-    if (ctx_pic->slice_count >= MAX_SLICES)
++    slice = av_fast_realloc(ctx_pic->slice,
++                            &ctx_pic->slice_alloc,
++                            (ctx_pic->slice_count + 1) * sizeof(DXVA_SliceInfo));
++    if (!slice)
+         return -1;
++    ctx_pic->slice = slice;
+     if (!ctx_pic->bitstream)
+         ctx_pic->bitstream = buffer;
+@@ -258,6 +265,7 @@ static int end_frame(AVCodecContext *avctx)
+                                      &ctx_pic->pp, sizeof(ctx_pic->pp),
+                                      &ctx_pic->qm, sizeof(ctx_pic->qm),
+                                      commit_bitstream_and_slice_buffer);
++    av_freep(ctx_pic->slice);
+ }
+ AVHWAccel ff_mpeg2_dxva2_hwaccel = {
+-- 
+1.7.3.1.msysgit.0
+
diff --git a/lib/ffmpeg/patches/0052-dxva-mpeg2-speed-up-slice-allocation.patch b/lib/ffmpeg/patches/0052-dxva-mpeg2-speed-up-slice-allocation.patch
new file mode 100644 (file)
index 0000000..21b72cc
--- /dev/null
@@ -0,0 +1,74 @@
+From 191bc00c62691c4e365ae8b56ed36a9002295961 Mon Sep 17 00:00:00 2001
+From: CrystalP <CrystalP@xbmc.org>
+Date: Mon, 10 Oct 2011 19:42:50 -0400
+Subject: [PATCH 2/6] dxva-mpeg2 speed up slice allocation
+
+The number of slices is not very likely to change from frame to frame, so
+at the beginning of a new frame, allocate memory for the amount of slices of
+the previous frame. Saves a lot of reallocation, for some TV capture samples
+there are over 200 slices.
+
+There wasn't anywhere really appropriate to store last_slice_count (needs to
+live from first frame to last frame), so this is likely to cause discussion to
+merge upstream.
+Adding members to dxva_context breaks ABI, which we don't care too much about
+since on Windows we don't support external ffmpeg.
+dxva mpeg2 code also has access to MpegEncContext, but adding there would
+likely break ABI as well.
+---
+ lib/ffmpeg/libavcodec/dxva2.h       |    1 +
+ lib/ffmpeg/libavcodec/dxva2_mpeg2.c |   12 ++++++++++++
+ 2 files changed, 13 insertions(+), 0 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/dxva2.h b/lib/ffmpeg/libavcodec/dxva2.h
+index 6eb494b..12dce47 100644
+--- a/lib/ffmpeg/libavcodec/dxva2.h
++++ b/lib/ffmpeg/libavcodec/dxva2.h
+@@ -65,6 +65,7 @@ struct dxva_context {
+      * Private to the FFmpeg AVHWAccel implementation
+      */
+     unsigned report_id;
++    unsigned last_slice_count;
+ };
+ #endif /* AVCODEC_DXVA_H */
+diff --git a/lib/ffmpeg/libavcodec/dxva2_mpeg2.c b/lib/ffmpeg/libavcodec/dxva2_mpeg2.c
+index 9ac2d17..2482c2f 100644
+--- a/lib/ffmpeg/libavcodec/dxva2_mpeg2.c
++++ b/lib/ffmpeg/libavcodec/dxva2_mpeg2.c
+@@ -224,6 +224,16 @@ static int start_frame(AVCodecContext *avctx,
+     ctx_pic->slice_alloc    = 0;
+     ctx_pic->bitstream_size = 0;
+     ctx_pic->bitstream      = NULL;
++
++    if (ctx->last_slice_count > 0)
++    {
++        ctx_pic->slice = av_fast_realloc(NULL,
++                                         &ctx_pic->slice_alloc,
++                                         ctx->last_slice_count * sizeof(DXVA_SliceInfo));
++        if (!ctx_pic->slice)
++            return -1;
++    }
++
+     return 0;
+ }
+@@ -258,6 +268,7 @@ static int end_frame(AVCodecContext *avctx)
+     struct MpegEncContext *s = avctx->priv_data;
+     struct dxva2_picture_context *ctx_pic =
+         s->current_picture_ptr->hwaccel_picture_private;
++    struct dxva_context *ctx = avctx->hwaccel_context;
+     if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
+         return -1;
+@@ -266,6 +277,7 @@ static int end_frame(AVCodecContext *avctx)
+                                      &ctx_pic->qm, sizeof(ctx_pic->qm),
+                                      commit_bitstream_and_slice_buffer);
+     av_freep(ctx_pic->slice);
++    ctx->last_slice_count = ctx_pic->slice_count;
+ }
+ AVHWAccel ff_mpeg2_dxva2_hwaccel = {
+-- 
+1.7.3.1.msysgit.0
+
diff --git a/lib/ffmpeg/patches/0053-dxva-vc1-Take-BI-into-account-for-forward-and-backwa.patch b/lib/ffmpeg/patches/0053-dxva-vc1-Take-BI-into-account-for-forward-and-backwa.patch
new file mode 100644 (file)
index 0000000..23dd8da
--- /dev/null
@@ -0,0 +1,59 @@
+From 9afd569e13e9c0a823e11f4dd68ba9cb5e3ad3f1 Mon Sep 17 00:00:00 2001
+From: CrystalP <CrystalP@xbmc.org>
+Date: Wed, 5 Oct 2011 12:53:38 -0400
+Subject: [PATCH 3/6] dxva-vc1 Take BI into account for forward and backward pictures
+
+See ticket #11643, sample on team ftp, samples/11643/vc-1 test.wmv
+---
+ lib/ffmpeg/libavcodec/dxva2_vc1.c |   16 +++++++++-------
+ 1 files changed, 9 insertions(+), 7 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/dxva2_vc1.c b/lib/ffmpeg/libavcodec/dxva2_vc1.c
+index 2b9a690..86cdf2f 100644
+--- a/lib/ffmpeg/libavcodec/dxva2_vc1.c
++++ b/lib/ffmpeg/libavcodec/dxva2_vc1.c
+@@ -38,15 +38,17 @@ static void fill_picture_parameters(AVCodecContext *avctx,
+ {
+     const MpegEncContext *s = &v->s;
+     const Picture *current_picture = s->current_picture_ptr;
++    BYTE bPicIntra = s->pict_type == FF_I_TYPE || v->bi_type == 1;
++    BYTE bPicBackwardPrediction = s->pict_type == FF_B_TYPE && v->bi_type == 0;
+     memset(pp, 0, sizeof(*pp));
+     pp->wDecodedPictureIndex    =
+     pp->wDeblockedPictureIndex  = ff_dxva2_get_surface_index(ctx, current_picture);
+-    if (s->pict_type != FF_I_TYPE)
+-        pp->wForwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, &s->last_picture);
+-    else
++    if (bPicIntra)
+         pp->wForwardRefPictureIndex = 0xffff;
+-    if (s->pict_type == FF_B_TYPE)
++    else
++        pp->wForwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, &s->last_picture);
++    if (bPicBackwardPrediction)
+         pp->wBackwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, &s->next_picture);
+     else
+         pp->wBackwardRefPictureIndex = 0xffff;
+@@ -69,8 +71,8 @@ static void fill_picture_parameters(AVCodecContext *avctx,
+     if (s->picture_structure & PICT_BOTTOM_FIELD)
+         pp->bPicStructure      |= 0x02;
+     pp->bSecondField            = v->interlace && v->fcm != 0x03 && !s->first_field;
+-    pp->bPicIntra               = s->pict_type == FF_I_TYPE;
+-    pp->bPicBackwardPrediction  = s->pict_type == FF_B_TYPE;
++    pp->bPicIntra               = bPicIntra;
++    pp->bPicBackwardPrediction  = bPicBackwardPrediction;
+     pp->bBidirectionalAveragingMode = (1                                           << 7) |
+                                       ((ctx->cfg->ConfigIntraResidUnsigned != 0)   << 6) |
+                                       ((ctx->cfg->ConfigResidDiffAccelerator != 0) << 5) |
+@@ -108,7 +110,7 @@ static void fill_picture_parameters(AVCodecContext *avctx,
+                                   (v->interlace                << 5) |
+                                   (v->tfcntrflag               << 4) |
+                                   (v->finterpflag              << 3) |
+-                                  ((s->pict_type != FF_B_TYPE) << 2) |
++                                  ((s->pict_type != FF_B_TYPE) << 2) | //includes BI
+                                   (v->psf                      << 1) |
+                                   (v->extended_dmv                 );
+     if (s->pict_type != FF_I_TYPE)
+-- 
+1.7.3.1.msysgit.0
+
diff --git a/lib/ffmpeg/patches/0054-dxva-vc1-Pass-overlapping-transforms-hint.patch b/lib/ffmpeg/patches/0054-dxva-vc1-Pass-overlapping-transforms-hint.patch
new file mode 100644 (file)
index 0000000..995de5e
--- /dev/null
@@ -0,0 +1,29 @@
+From 537d5999337500cac1c521f45de0a921b9aab5ac Mon Sep 17 00:00:00 2001
+From: CrystalP <CrystalP@xbmc.org>
+Date: Thu, 6 Oct 2011 20:23:31 -0400
+Subject: [PATCH 4/6] dxva-vc1 Pass overlapping transforms hint
+
+see ticket #11643
+---
+ lib/ffmpeg/libavcodec/dxva2_vc1.c |    5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/dxva2_vc1.c b/lib/ffmpeg/libavcodec/dxva2_vc1.c
+index 86cdf2f..eca587a 100644
+--- a/lib/ffmpeg/libavcodec/dxva2_vc1.c
++++ b/lib/ffmpeg/libavcodec/dxva2_vc1.c
+@@ -103,7 +103,10 @@ static void fill_picture_parameters(AVCodecContext *avctx,
+                                   (v->rangered       << 3) |
+                                   (s->max_b_frames       );
+     pp->bPicExtrapolation       = (!v->interlace || v->fcm == 0x00) ? 1 : 2;
+-    pp->bPicDeblocked           = ((v->profile != PROFILE_ADVANCED && v->rangeredfrm) << 5) |
++    pp->bPicDeblocked           = ((v->overlap == 1 &&
++                                  pp->bPicBackwardPrediction == 0 &&
++                                  ctx->cfg->ConfigResidDiffHost == 0)                 << 6) |
++                                  ((v->profile != PROFILE_ADVANCED && v->rangeredfrm) << 5) |
+                                   (s->loop_filter                                     << 1);
+     pp->bPicDeblockConfined     = (v->postprocflag             << 7) |
+                                   (v->broadcast                << 6) |
+-- 
+1.7.3.1.msysgit.0
+
diff --git a/lib/ffmpeg/patches/0055-dxva-h264-Fix-dxva-playback-of-streams-that-don-t-st.patch b/lib/ffmpeg/patches/0055-dxva-h264-Fix-dxva-playback-of-streams-that-don-t-st.patch
new file mode 100644 (file)
index 0000000..ccace31
--- /dev/null
@@ -0,0 +1,74 @@
+From 6328fc9c25a19f1cba3fae56eeff1eaf69ec6d50 Mon Sep 17 00:00:00 2001
+From: CrystalP <CrystalP@xbmc.org>
+Date: Wed, 5 Oct 2011 13:13:25 -0400
+Subject: [PATCH 5/6] dxva-h264 Fix dxva playback of streams that don't start with an I-Frame.
+
+GPUs with ATI UVDa and UVD+ have trouble when decoding doesn't start on an
+I-Frame, and they don't recover on later I-Frames.
+
+The variable to track the first I-Frame is in H264Context so that it can be
+reset by code in h264 when initializing the context or flushing.
+
+credits isidrogar, see ticket #11772.
+sample on team ftp, samples/11772/CSI_ New York - TV3 - 2008-09-16_1.ts
+---
+ lib/ffmpeg/libavcodec/dxva2_h264.c |    8 ++++++++
+ lib/ffmpeg/libavcodec/h264.c       |    2 ++
+ lib/ffmpeg/libavcodec/h264.h       |    2 ++
+ 3 files changed, 12 insertions(+), 0 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/dxva2_h264.c b/lib/ffmpeg/libavcodec/dxva2_h264.c
+index 4e3370c..2954b89 100644
+--- a/lib/ffmpeg/libavcodec/dxva2_h264.c
++++ b/lib/ffmpeg/libavcodec/dxva2_h264.c
+@@ -430,6 +430,14 @@ static int end_frame(AVCodecContext *avctx)
+     if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
+         return -1;
++
++    // Wait for an I-frame before start decoding. Workaround for ATI UVD and UVD+ GPUs
++    if (!h->got_first_iframe) {
++        if (!(ctx_pic->pp.wBitFields & (1 << 15)))
++            return -1;
++        h->got_first_iframe = 1;
++    }
++
+     return ff_dxva2_common_end_frame(avctx, s,
+                                      &ctx_pic->pp, sizeof(ctx_pic->pp),
+                                      &ctx_pic->qm, sizeof(ctx_pic->qm),
+diff --git a/lib/ffmpeg/libavcodec/h264.c b/lib/ffmpeg/libavcodec/h264.c
+index b84430a..a4d35ae 100644
+--- a/lib/ffmpeg/libavcodec/h264.c
++++ b/lib/ffmpeg/libavcodec/h264.c
+@@ -1479,6 +1479,7 @@ static void flush_dpb(AVCodecContext *avctx){
+             h->delayed_pic[i]->reference= 0;
+         h->delayed_pic[i]= NULL;
+     }
++    h->got_first_iframe = 0;
+     h->outputed_poc= INT_MIN;
+     h->prev_interlaced_frame = 1;
+     idr(h);
+@@ -1848,6 +1849,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+             return -1;
+         s->first_field = 0;
+         h->prev_interlaced_frame = 1;
++        h->got_first_iframe = 0;
+         init_scan_tables(h);
+         ff_h264_alloc_tables(h);
+diff --git a/lib/ffmpeg/libavcodec/h264.h b/lib/ffmpeg/libavcodec/h264.h
+index b403968..bdca237 100644
+--- a/lib/ffmpeg/libavcodec/h264.h
++++ b/lib/ffmpeg/libavcodec/h264.h
+@@ -587,6 +587,8 @@ typedef struct H264Context{
+     int luma_weight_flag[2];   ///< 7.4.3.2 luma_weight_lX_flag
+     int chroma_weight_flag[2]; ///< 7.4.3.2 chroma_weight_lX_flag
++    int got_first_iframe;
++
+     // Timestamp stuff
+     int sei_buffering_period_present;  ///< Buffering period SEI flag
+     int initial_cpb_removal_delay[32]; ///< Initial timestamps for CPBs
+-- 
+1.7.3.1.msysgit.0
+
diff --git a/lib/ffmpeg/patches/0056-Changed-format-string-td-not-supported-by-our-MingW-.patch b/lib/ffmpeg/patches/0056-Changed-format-string-td-not-supported-by-our-MingW-.patch
new file mode 100644 (file)
index 0000000..d57c6f4
--- /dev/null
@@ -0,0 +1,25 @@
+From a584fbd0039270ae30ce08603ef6e819c61c908a Mon Sep 17 00:00:00 2001
+From: CrystalP <CrystalP@xbmc.org>
+Date: Thu, 6 Oct 2011 13:25:28 -0400
+Subject: [PATCH 6/6] Changed format string - %td not supported by our MingW environment.
+
+---
+ lib/ffmpeg/libavcodec/h264.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/h264.c b/lib/ffmpeg/libavcodec/h264.c
+index a4d35ae..31d43df 100644
+--- a/lib/ffmpeg/libavcodec/h264.c
++++ b/lib/ffmpeg/libavcodec/h264.c
+@@ -2568,7 +2568,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){
+                 return 0;
+             }
+             if( ret < 0 || h->cabac.bytestream > h->cabac.bytestream_end + 2) {
+-                av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%td)\n", s->mb_x, s->mb_y, h->cabac.bytestream_end - h->cabac.bytestream);
++                av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%u)\n", s->mb_x, s->mb_y, h->cabac.bytestream_end - h->cabac.bytestream);
+                 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_ERROR|DC_ERROR|MV_ERROR)&part_mask);
+                 return -1;
+             }
+-- 
+1.7.3.1.msysgit.0
+
diff --git a/lib/ffmpeg/patches/0057-Fixes-neon-usage-under-iOS5.patch b/lib/ffmpeg/patches/0057-Fixes-neon-usage-under-iOS5.patch
new file mode 100644 (file)
index 0000000..7b55691
--- /dev/null
@@ -0,0 +1,307 @@
+diff --git a/lib/ffmpeg/libavcodec/arm/fft_neon.S b/lib/ffmpeg/libavcodec/arm/fft_neon.S
+index 1db7abd..6390065 100644
+--- a/lib/ffmpeg/libavcodec/arm/fft_neon.S
++++ b/lib/ffmpeg/libavcodec/arm/fft_neon.S
+@@ -101,8 +101,12 @@ function fft8_neon
+         bx              lr
+ endfunc
++        .align 4
++pmmp:   .float  +1.0, -1.0, -1.0, +1.0
++mppm:   .float  -M_SQRT1_2, M_SQRT1_2, M_SQRT1_2, -M_SQRT1_2
++
+ function fft16_neon
+-        movrel          r1, mppm
++        adr             r1, mppm
+         vld1.32         {d16-d19}, [r0,:128]!   @ q8{r0,i0,r1,i1} q9{r2,i2,r3,i3}
+         pld             [r0, #32]
+         vld1.32         {d2-d3}, [r1,:128]
+@@ -144,12 +148,16 @@ function fft16_neon
+         vswp            d29, d30                @ q14{r12,i12,i14,r15} q15{r13,i13,i15,r14}
+         vadd.f32        q0,  q12, q13           @ {t1,t2,t5,t6}
+         vadd.f32        q1,  q14, q15           @ {t1a,t2a,t5a,t6a}
+-        movrel          r2,  X(ff_cos_16)
++        ldr             r2,  _neon_label
++        ldr             r3,  L$diff1
++        add             r2,  r3
++local_label1:
++        ldr             r2,  [pc, r2]
+         vsub.f32        q13, q12, q13           @ {t3,t4,t7,t8}
+         vrev64.32       d1,  d1
+         vsub.f32        q15, q14, q15           @ {t3a,t4a,t7a,t8a}
+         vrev64.32       d3,  d3
+-        movrel          r3,  pmmp
++        adr             r3,  pmmp
+         vswp            d1,  d26                @ q0{t1,t2,t3,t4} q13{t6,t5,t7,t8}
+         vswp            d3,  d30                @ q1{t1a,t2a,t3a,t4a} q15{t6a,t5a,t7a,t8a}
+         vadd.f32        q12, q0,  q13           @ {r8,i8,r9,i9}
+@@ -214,7 +222,7 @@ function fft_pass_neon
+         add             r2,  r2,  r0            @ &z[o2]
+         add             r3,  r3,  r0            @ &z[o3]
+         vld1.32         {d20-d21},[r2,:128]     @ {z[o2],z[o2+1]}
+-        movrel          r12, pmmp
++        adr             r12, pmmp
+         vld1.32         {d22-d23},[r3,:128]     @ {z[o3],z[o3+1]}
+         add             r5,  r5,  r1            @ wim
+         vld1.32         {d6-d7},  [r12,:128]    @ pmmp
+@@ -279,6 +287,11 @@ function fft_pass_neon
+         pop             {r4-r6,pc}
+ endfunc
++.set L$offs16, 0
++.macro setTabOffs n, n2
++.set L$offs\n, L$offs\n2 + 4
++.endm
++
+ .macro  def_fft n, n2, n4
+         .align 6
+ function fft\n\()_neon
+@@ -291,10 +304,15 @@ function fft\n\()_neon
+         bl              fft\n4\()_neon
+         mov             r0,  r4
+         pop             {r4, lr}
+-        movrel          r1,  X(ff_cos_\n)
++        ldr             r1,  _neon_label
++        add             r1,  #L$diff\n
++local_label\n:
++        ldr             r1,  [pc, r1]
+         mov             r2,  #\n4/2
+         b               fft_pass_neon
+ endfunc
++setTabOffs \n, \n2
++.set L$diff\n, _neon_label - local_label\n + L$offs\n - 8
+ .endm
+         def_fft    32,    16,     8
+@@ -310,10 +328,14 @@ endfunc
+         def_fft 32768, 16384,  8192
+         def_fft 65536, 32768, 16384
++.set L$diffTab, fft_tab_neon_offs - local_label_tab - 8
+ function ff_fft_calc_neon, export=1
+         ldr             r2,  [r0]
+         sub             r2,  r2,  #2
+-        movrel          r3,  fft_tab_neon
++        ldr             r3,  fft_tab_neon_offs
++        add             r3,  #L$diffTab
++local_label_tab:
++        add             r3,  pc
+         ldr             r3,  [r3, r2, lsl #2]
+         mov             r0,  r1
+         bx              r3
+@@ -349,9 +371,22 @@ function ff_fft_permute_neon, export=1
+         pop             {r4,pc}
+ endfunc
+-        .section .rodata
++
++.global _neon_label
++_neon_label:
++.word _neon_cos_tab - .
++
++L$diff1:
++.word _neon_label - local_label1 - 8
++
++fft_tab_neon_offs:
++.word _fft_tab_neon - .
++
++
++.section .rodata
++              
+         .align 4
+-fft_tab_neon:
++_fft_tab_neon:
+         .word fft4_neon
+         .word fft8_neon
+         .word fft16_neon
+@@ -367,8 +402,20 @@ fft_tab_neon:
+         .word fft16384_neon
+         .word fft32768_neon
+         .word fft65536_neon
+-ELF     .size fft_tab_neon, . - fft_tab_neon
+-
+-        .align 4
+-pmmp:   .float  +1.0, -1.0, -1.0, +1.0
+-mppm:   .float  -M_SQRT1_2, M_SQRT1_2, M_SQRT1_2, -M_SQRT1_2
++ELF     .size _fft_tab_neon, . - _fft_tab_neon
++              
++              .align 4
++_neon_cos_tab:
++        .word X(ff_cos_16)
++        .word X(ff_cos_32)
++        .word X(ff_cos_64)
++        .word X(ff_cos_128)
++        .word X(ff_cos_256)
++        .word X(ff_cos_512)
++        .word X(ff_cos_1024)
++        .word X(ff_cos_2048)
++        .word X(ff_cos_4096)
++        .word X(ff_cos_8192)
++        .word X(ff_cos_16384)
++        .word X(ff_cos_32768)
++        .word X(ff_cos_65536)
+diff --git a/lib/ffmpeg/libavcodec/arm/h264idct_neon.S b/lib/ffmpeg/libavcodec/arm/h264idct_neon.S
+index 6b6a669..8111975 100644
+--- a/lib/ffmpeg/libavcodec/arm/h264idct_neon.S
++++ b/lib/ffmpeg/libavcodec/arm/h264idct_neon.S
+@@ -97,7 +97,7 @@ function ff_h264_idct_add16_neon, export=1
+         mov             r1,  r2
+         mov             r2,  r3
+         ldr             r6,  [sp, #24]
+-        movrel          r7,  scan8
++        adr             r7,  scan8
+         mov             ip,  #16
+ 1:      ldrb            r8,  [r7], #1
+         ldr             r0,  [r5], #4
+@@ -117,6 +117,16 @@ function ff_h264_idct_add16_neon, export=1
+         pop             {r4-r8,pc}
+ endfunc
++        .align
++scan8:  .byte           4+1*8, 5+1*8, 4+2*8, 5+2*8
++        .byte           6+1*8, 7+1*8, 6+2*8, 7+2*8
++        .byte           4+3*8, 5+3*8, 4+4*8, 5+4*8
++        .byte           6+3*8, 7+3*8, 6+4*8, 7+4*8
++        .byte           1+1*8, 2+1*8
++        .byte           1+2*8, 2+2*8
++        .byte           1+4*8, 2+4*8
++        .byte           1+5*8, 2+5*8
++
+ function ff_h264_idct_add16intra_neon, export=1
+         push            {r4-r8,lr}
+         mov             r4,  r0
+@@ -124,7 +134,7 @@ function ff_h264_idct_add16intra_neon, export=1
+         mov             r1,  r2
+         mov             r2,  r3
+         ldr             r6,  [sp, #24]
+-        movrel          r7,  scan8
++        adr             r7,  scan8
+         mov             ip,  #16
+ 1:      ldrb            r8,  [r7], #1
+         ldr             r0,  [r5], #4
+@@ -149,7 +159,7 @@ function ff_h264_idct_add8_neon, export=1
+         add             r1,  r2,  #16*32
+         mov             r2,  r3
+         ldr             r6,  [sp, #32]
+-        movrel          r7,  scan8+16
++        adr             r7,  scan8+16
+         mov             ip,  #7
+ 1:      ldrb            r8,  [r7], #1
+         ldr             r0,  [r5], #4
+@@ -353,7 +363,7 @@ function ff_h264_idct8_add4_neon, export=1
+         mov             r1,  r2
+         mov             r2,  r3
+         ldr             r6,  [sp, #24]
+-        movrel          r7,  scan8
++        adr             r7,  scan8
+         mov             r12, #16
+ 1:      ldrb            r8,  [r7], #4
+         ldr             r0,  [r5], #16
+@@ -372,13 +382,3 @@ function ff_h264_idct8_add4_neon, export=1
+         bne             1b
+         pop             {r4-r8,pc}
+ endfunc
+-
+-        .section .rodata
+-scan8:  .byte           4+1*8, 5+1*8, 4+2*8, 5+2*8
+-        .byte           6+1*8, 7+1*8, 6+2*8, 7+2*8
+-        .byte           4+3*8, 5+3*8, 4+4*8, 5+4*8
+-        .byte           6+3*8, 7+3*8, 6+4*8, 7+4*8
+-        .byte           1+1*8, 2+1*8
+-        .byte           1+2*8, 2+2*8
+-        .byte           1+4*8, 2+4*8
+-        .byte           1+5*8, 2+5*8
+diff --git a/lib/ffmpeg/libavcodec/arm/h264pred_neon.S b/lib/ffmpeg/libavcodec/arm/h264pred_neon.S
+index 63c96ee..357c10a 100644
+--- a/lib/ffmpeg/libavcodec/arm/h264pred_neon.S
++++ b/lib/ffmpeg/libavcodec/arm/h264pred_neon.S
+@@ -123,7 +123,7 @@ function ff_pred16x16_plane_neon, export=1
+         vaddl.u8        q8,  d2,  d3
+         vsubl.u8        q2,  d2,  d0
+         vsubl.u8        q3,  d3,  d1
+-        movrel          r3,  p16weight
++        adr             r3,  p16weight
+         vld1.8          {q0},     [r3,:128]
+         vmul.s16        q2,  q2,  q0
+         vmul.s16        q3,  q3,  q0
+@@ -166,7 +166,6 @@ function ff_pred16x16_plane_neon, export=1
+         bx              lr
+ endfunc
+-        .section        .rodata
+         .align          4
+ p16weight:
+         .short          1,2,3,4,5,6,7,8
+@@ -207,7 +206,7 @@ function ff_pred8x8_plane_neon, export=1
+         vrev32.8        d0,  d0
+         vtrn.32         d2,  d3
+         vsubl.u8        q2,  d2,  d0
+-        movrel          r3,  p16weight
++        adr             r3,  p16weight
+         vld1.16         {q0},     [r3,:128]
+         vmul.s16        d4,  d4,  d0
+         vmul.s16        d5,  d5,  d0
+diff --git a/lib/ffmpeg/libavcodec/arm/simple_idct_neon.S b/lib/ffmpeg/libavcodec/arm/simple_idct_neon.S
+index 17cde58..e61414e 100644
+--- a/lib/ffmpeg/libavcodec/arm/simple_idct_neon.S
++++ b/lib/ffmpeg/libavcodec/arm/simple_idct_neon.S
+@@ -239,7 +239,6 @@ function idct_col4_st8_neon
+         bx              lr
+ endfunc
+-        .section .rodata
+         .align 4
+ idct_coeff_neon:
+         .short W1, W2, W3, W4, W5, W6, W7, W4c
+@@ -249,7 +248,7 @@ idct_coeff_neon:
+         pld             [\data]
+         pld             [\data, #64]
+         vpush           {d8-d15}
+-        movrel          r3,  idct_coeff_neon
++        adr             r3,  idct_coeff_neon
+         vld1.64         {d0,d1}, [r3,:128]
+         .endm
+diff --git a/lib/ffmpeg/libavcodec/arm/vp3dsp_neon.S b/lib/ffmpeg/libavcodec/arm/vp3dsp_neon.S
+index d97ed3d..74bf7ba 100644
+--- a/lib/ffmpeg/libavcodec/arm/vp3dsp_neon.S
++++ b/lib/ffmpeg/libavcodec/arm/vp3dsp_neon.S
+@@ -20,12 +20,9 @@
+ #include "asm.S"
+-.section .rodata
++.text
+ .align 4
+-vp3_idct_constants:
+-.short 64277, 60547, 54491, 46341, 36410, 25080, 12785
+-
+ #define xC1S7 d0[0]
+ #define xC2S6 d0[1]
+ #define xC3S5 d0[2]
+@@ -34,8 +31,6 @@ vp3_idct_constants:
+ #define xC6S2 d1[1]
+ #define xC7S1 d1[2]
+-.text
+-
+ .macro vp3_loop_filter
+     vsubl.u8        q3,  d18, d17
+     vsubl.u8        q2,  d16, d19
+@@ -109,10 +104,14 @@ function ff_vp3_h_loop_filter_neon, export=1
+     bx              lr
+ endfunc
++.align 4
++vp3_idct_constants:
++.short 64277, 60547, 54491, 46341, 36410, 25080, 12785
++.align 4
+ function vp3_idct_start_neon
+     vpush           {d8-d15}
+-    movrel          r3,  vp3_idct_constants
++    adr             r3,  vp3_idct_constants
+     vld1.64         {d0-d1},   [r3,:128]
+     vld1.64         {d16-d19}, [r2,:128]!
+     vld1.64         {d20-d23}, [r2,:128]!
diff --git a/lib/ffmpeg/patches/0058-fixed-seeks-in-mmsh.patch b/lib/ffmpeg/patches/0058-fixed-seeks-in-mmsh.patch
new file mode 100644 (file)
index 0000000..c8a630c
--- /dev/null
@@ -0,0 +1,124 @@
+From 4e8274d070a598e60a953c6aed2dd9f4710cd2b4 Mon Sep 17 00:00:00 2001
+From: spiff <spiff@xbmc.org>
+Date: Tue, 1 Nov 2011 13:14:09 +0100
+Subject: [PATCH] fixed: seeks in mmsh
+
+this backports upstream commits aedb87c57, 86a4e55e6, 8475ec190,
+60fcc19bff (partially), 237bcaa27518, 33789862, 8af4ac5272, 26b64550d6
+
+thanks a million to michael niedermayer for giving this priority!
+---
+ lib/ffmpeg/libavformat/mmsh.c |   53 ++++++++++++++++++++++++++++++++++++----
+ 1 files changed, 47 insertions(+), 6 deletions(-)
+
+diff --git a/lib/ffmpeg/libavformat/mmsh.c b/lib/ffmpeg/libavformat/mmsh.c
+index 257b973..3ae886f 100644
+--- a/lib/ffmpeg/libavformat/mmsh.c
++++ b/lib/ffmpeg/libavformat/mmsh.c
+@@ -54,6 +54,7 @@ typedef enum {
+ typedef struct {
+     MMSContext mms;
++    uint8_t location[1024];
+     int request_seq;  ///< request packet sequence
+     int chunk_seq;    ///< data packet sequence
+ } MMSHContext;
+@@ -210,10 +211,10 @@ static int get_http_header_data(MMSHContext *mmsh)
+     return 0;
+ }
+-static int mmsh_open(URLContext *h, const char *uri, int flags)
++static int mmsh_open_internal(URLContext *h, const char *uri, int flags, int timestamp, int64_t pos)
+ {
+     int i, port, err;
+-    char httpname[256], path[256], host[128], location[1024];
++    char httpname[256], path[256], host[128];
+     char *stream_selection = NULL;
+     char headers[1024];
+     MMSHContext *mmsh;
+@@ -224,10 +225,10 @@ static int mmsh_open(URLContext *h, const char *uri, int flags)
+         return AVERROR(ENOMEM);
+     mmsh->request_seq = h->is_streamed = 1;
+     mms = &mmsh->mms;
+-    av_strlcpy(location, uri, sizeof(location));
++    av_strlcpy(mmsh->location, uri, sizeof(mmsh->location));
+     av_url_split(NULL, 0, NULL, 0,
+-        host, sizeof(host), &port, path, sizeof(path), location);
++        host, sizeof(host), &port, path, sizeof(path), mmsh->location);
+     if (port<0)
+         port = 80; // default mmsh protocol port
+     ff_url_join(httpname, sizeof(httpname), "http", NULL, host, port, path);
+@@ -283,8 +284,9 @@ static int mmsh_open(URLContext *h, const char *uri, int flags)
+                    CLIENTGUID
+                    "Pragma: stream-switch-count=%d\r\n"
+                    "Pragma: stream-switch-entry=%s\r\n"
++                   "Pragma: no-cache,rate)1.000000,stream-time=%u"
+                    "Connection: Close\r\n\r\n",
+-                   host, port, mmsh->request_seq++, mms->stream_num, stream_selection);
++                   host, port, mmsh->request_seq++, mms->stream_num, stream_selection, timestamp);
+     av_freep(&stream_selection);
+     if (err < 0) {
+         av_log(NULL, AV_LOG_ERROR, "Build play request failed!\n");
+@@ -313,6 +315,11 @@ fail:
+     return err;
+ }
++static int mmsh_open(URLContext *h, const char *uri, int flags)
++{
++    return mmsh_open_internal(h, uri, flags, 0, 0);
++}
++
+ static int handle_chunk_type(MMSHContext *mmsh)
+ {
+     MMSContext *mms = &mmsh->mms;
+@@ -359,11 +366,45 @@ static int mmsh_read(URLContext *h, uint8_t *buf, int size)
+     return res;
+ }
++static int64_t mmsh_read_seek(URLContext *h, int stream_index,
++                        int64_t timestamp, int flags)
++{
++    MMSHContext *mmsh = h->priv_data;
++    MMSContext *mms   = &mmsh->mms;
++    int ret;
++
++    ret= mmsh_open_internal(h, mmsh->location, 0, FFMAX(timestamp, 0), 0);
++
++    if(ret>=0){
++        if (mms->mms_hd)
++            url_close(mms->mms_hd);
++        av_freep(&mms->streams);
++        av_freep(&mms->asf_header);
++        av_free(mmsh);
++        mmsh = h->priv_data;
++        mms   = &mmsh->mms;
++        mms->asf_header_read_size= mms->asf_header_size;
++    }else
++        h->priv_data= mmsh;
++    return ret;
++}
++
++static int64_t mmsh_seek(URLContext *h, int64_t pos, int whence)
++{
++    MMSHContext *mmsh = h->priv_data;
++    MMSContext *mms   = &mmsh->mms;
++
++    if(pos == 0 && whence == SEEK_CUR)
++        return mms->asf_header_read_size + mms->remaining_in_len + mmsh->chunk_seq * mms->asf_packet_len;
++    return AVERROR(ENOSYS);
++}
++
+ URLProtocol ff_mmsh_protocol = {
+     .name      = "mmsh",
+     .url_open  = mmsh_open,
+     .url_read  = mmsh_read,
+     .url_write = NULL,
+-    .url_seek  = NULL,
++    .url_seek  = mmsh_seek,
+     .url_close = mmsh_close,
++    .url_read_seek  = mmsh_read_seek,
+ };
+-- 
+1.7.5
+
diff --git a/lib/ffmpeg/patches/0059-fix-h264-decode-size.patch b/lib/ffmpeg/patches/0059-fix-h264-decode-size.patch
new file mode 100644 (file)
index 0000000..9328ac6
--- /dev/null
@@ -0,0 +1,43 @@
+backport of upstream commits 23acfcd9 and 29a29226
+
+Slightly modified because of differences between upstream code and ours.
+
+---
+
+diff --git a/lib/ffmpeg/libavcodec/h264.c b/lib/ffmpeg/libavcodec/h264.c
+index 31d43df..47b0073 100644
+--- a/lib/ffmpeg/libavcodec/h264.c
++++ b/lib/ffmpeg/libavcodec/h264.c
+@@ -1797,15 +1797,11 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+     s->mb_height= h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag);
+     h->b_stride=  s->mb_width*4;
+-
+-    s->width = 16*s->mb_width - 2*FFMIN(h->sps.crop_right, 7);
+-    if(h->sps.frame_mbs_only_flag)
+-        s->height= 16*s->mb_height - 2*FFMIN(h->sps.crop_bottom, 7);
+-    else
+-        s->height= 16*s->mb_height - 4*FFMIN(h->sps.crop_bottom, 7);
++    s->width = 16*s->mb_width;
++    s->height= 16*s->mb_height;
+     if (s->context_initialized
+-        && (   s->width != s->avctx->width || s->height != s->avctx->height
++        && (   s->width != s->avctx->coded_width || s->height != s->avctx->coded_height
+             || av_cmp_q(h->sps.sar, s->avctx->sample_aspect_ratio))) {
+         if(h != h0)
+             return -1;   // width / height changed during parallelized decoding
+@@ -1818,6 +1814,13 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+             return -1;  // we cant (re-)initialize context during parallel decoding
+         avcodec_set_dimensions(s->avctx, s->width, s->height);
++
++        s->avctx->width -= 2*FFMIN(h->sps.crop_right, 7);
++        if(h->sps.frame_mbs_only_flag)
++            s->avctx->height-=2*FFMIN(h->sps.crop_bottom, 7);
++        else
++            s->avctx->height-=4*FFMIN(h->sps.crop_bottom, 7);
++
+         s->avctx->sample_aspect_ratio= h->sps.sar;
+         av_assert0(s->avctx->sample_aspect_ratio.den);
diff --git a/lib/ffmpeg/patches/0060-DXVA-Handle-return-value-of-BeginFrame-better.patch b/lib/ffmpeg/patches/0060-DXVA-Handle-return-value-of-BeginFrame-better.patch
new file mode 100644 (file)
index 0000000..c7dcc0b
--- /dev/null
@@ -0,0 +1,51 @@
+From dd2e3a9656477f19891ae37846018da0d72c3574 Mon Sep 17 00:00:00 2001
+From: CrystalP <CrystalP@xbmc.org>
+Date: Fri, 11 Nov 2011 19:10:54 -0500
+Subject: [PATCH] [DXVA] Handle return value of BeginFrame better.
+
+The nVidia cards sometimes return E_PENDING and need time before they can start
+decoding a new frame.
+
+Helps nVidia cards with blocky pictures/pixellation artifacts after skip or
+when CPU is busy.
+---
+ lib/ffmpeg/libavcodec/dxva2.c |   14 ++++++++++++--
+ 1 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/dxva2.c b/lib/ffmpeg/libavcodec/dxva2.c
+index 3f14311..0cf99c3 100644
+--- a/lib/ffmpeg/libavcodec/dxva2.c
++++ b/lib/ffmpeg/libavcodec/dxva2.c
+@@ -21,6 +21,9 @@
+  */
+ #include "dxva2_internal.h"
++#include <unistd.h>
++
++#define MAX_RETRY_ON_PENDING          50
+ void *ff_dxva2_get_surface(const Picture *picture)
+ {
+@@ -88,10 +91,17 @@ int ff_dxva2_common_end_frame(AVCodecContext *avctx, MpegEncContext *s,
+     DXVA2_DecodeBufferDesc buffer[4];
+     DXVA2_DecodeExecuteParams exec;
+     int      result;
++    HRESULT  hr;
++    int      tries = 0;
+-    if (FAILED(IDirectXVideoDecoder_BeginFrame(ctx->decoder,
++    while ((hr=IDirectXVideoDecoder_BeginFrame(ctx->decoder,
+                                                ff_dxva2_get_surface(s->current_picture_ptr),
+-                                               NULL))) {
++                                               NULL)) == E_PENDING
++           && tries < MAX_RETRY_ON_PENDING) {
++        usleep(1000);
++        tries++;
++    }
++    if (FAILED(hr)) {
+         av_log(avctx, AV_LOG_ERROR, "Failed to begin frame\n");
+         return -1;
+     }
+-- 
+1.7.3.1.msysgit.0
+
diff --git a/lib/ffmpeg/patches/0061-fix-vc1-vaapi-intel-sandy-bridge.patch b/lib/ffmpeg/patches/0061-fix-vc1-vaapi-intel-sandy-bridge.patch
new file mode 100644 (file)
index 0000000..8739f41
--- /dev/null
@@ -0,0 +1,48 @@
+This patch backports 53efb758c045900f512c947074900c0dbc988685 and a18e7b4fb77d3799cf21110b5e6dda4691a295b3
+
+Written by Gwenole Beauchesne <gwenole.beauchesne@intel.com>
+and fixes vc1 decoding with vaapi on Intel Sandy Bridge GPUs.
+
+
+diff --git a/lib/ffmpeg/libavcodec/vaapi_vc1.c b/lib/ffmpeg/libavcodec/vaapi_vc1.c
+index c61a5bd..a9bcd7b 100644
+--- a/lib/ffmpeg/libavcodec/vaapi_vc1.c
++++ b/lib/ffmpeg/libavcodec/vaapi_vc1.c
+@@ -116,6 +116,18 @@ static inline VAMvModeVC1 vc1_get_MVMODE2(VC1Context *v)
+     return 0;
+ }
++/** Reconstruct bitstream TTFRM (7.1.1.41, Table-53) */
++static inline int vc1_get_TTFRM(VC1Context *v)
++{
++    switch (v->ttfrm) {
++    case TT_8X8: return 0;
++    case TT_8X4: return 1;
++    case TT_4X8: return 2;
++    case TT_4X4: return 3;
++    }
++    return 0;
++}
++
+ /** Pack FFmpeg bitplanes into a VABitPlaneBuffer element */
+ static inline void vc1_pack_bitplanes(uint8_t *bitplane, int n, const uint8_t *ff_bp[3], int x, int y, int stride)
+ {
+@@ -160,6 +172,9 @@ static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t
+     pic_param->sequence_fields.bits.syncmarker                      = s->resync_marker;
+     pic_param->sequence_fields.bits.rangered                        = v->rangered;
+     pic_param->sequence_fields.bits.max_b_frames                    = s->avctx->max_b_frames;
++#if VA_CHECK_VERSION(0,32,0)
++    pic_param->sequence_fields.bits.profile                         = v->profile;
++#endif
+     pic_param->coded_width                                          = s->avctx->coded_width;
+     pic_param->coded_height                                         = s->avctx->coded_height;
+     pic_param->entrypoint_fields.value                              = 0; /* reset all bits */
+@@ -236,7 +251,7 @@ static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t
+     pic_param->transform_fields.value                               = 0; /* reset all bits */
+     pic_param->transform_fields.bits.variable_sized_transform_flag  = v->vstransform;
+     pic_param->transform_fields.bits.mb_level_transform_type_flag   = v->ttmbf;
+-    pic_param->transform_fields.bits.frame_level_transform_type     = v->ttfrm;
++    pic_param->transform_fields.bits.frame_level_transform_type     = vc1_get_TTFRM(v);
+     pic_param->transform_fields.bits.transform_ac_codingset_idx1    = v->c_ac_table_index;
+     pic_param->transform_fields.bits.transform_ac_codingset_idx2    = v->y_ac_table_index;
+     pic_param->transform_fields.bits.intra_transform_dc_table       = v->s.dc_table_index;
diff --git a/lib/ffmpeg/patches/0062-fixed-crash-in-ffmpeg-matroskadec-with-some-files-fi.patch b/lib/ffmpeg/patches/0062-fixed-crash-in-ffmpeg-matroskadec-with-some-files-fi.patch
new file mode 100644 (file)
index 0000000..00260c7
--- /dev/null
@@ -0,0 +1,50 @@
+From e138f82d2b066a47262ce0f06df106665761ac43 Mon Sep 17 00:00:00 2001
+From: Anssi Hannula <anssi@xbmc.org>
+Date: Wed, 7 Mar 2012 15:08:41 +0200
+Subject: [PATCH] fixed: crash in ffmpeg matroskadec with some files (fixes
+ #12741)
+
+Backport 2851b1f6566580485dceb67cbb6b93f64ee9a9bd from upstream FFmpeg,
+it fixes a rare matroskadec crash:
+
+matroskadec: check that pointers were initialized before accessing them
+
+fix ticket #14
+
+Signed-off-by: Aurelien Jacobs <aurel@gnuage.org>
+---
+ lib/ffmpeg/libavformat/matroskadec.c |    8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/lib/ffmpeg/libavformat/matroskadec.c b/lib/ffmpeg/libavformat/matroskadec.c
+index 14b96d4..70489e8 100644
+--- a/lib/ffmpeg/libavformat/matroskadec.c
++++ b/lib/ffmpeg/libavformat/matroskadec.c
+@@ -1066,19 +1066,21 @@ static void matroska_convert_tags(AVFormatContext *s)
+         if (tags[i].target.attachuid) {
+             MatroskaAttachement *attachment = matroska->attachments.elem;
+             for (j=0; j<matroska->attachments.nb_elem; j++)
+-                if (attachment[j].uid == tags[i].target.attachuid)
++                if (attachment[j].uid == tags[i].target.attachuid
++                    && attachment[j].stream)
+                     matroska_convert_tag(s, &tags[i].tag,
+                                          &attachment[j].stream->metadata, NULL);
+         } else if (tags[i].target.chapteruid) {
+             MatroskaChapter *chapter = matroska->chapters.elem;
+             for (j=0; j<matroska->chapters.nb_elem; j++)
+-                if (chapter[j].uid == tags[i].target.chapteruid)
++                if (chapter[j].uid == tags[i].target.chapteruid
++                    && chapter[j].chapter)
+                     matroska_convert_tag(s, &tags[i].tag,
+                                          &chapter[j].chapter->metadata, NULL);
+         } else if (tags[i].target.trackuid) {
+             MatroskaTrack *track = matroska->tracks.elem;
+             for (j=0; j<matroska->tracks.nb_elem; j++)
+-                if (track[j].uid == tags[i].target.trackuid)
++                if (track[j].uid == tags[i].target.trackuid && track[j].stream)
+                     matroska_convert_tag(s, &tags[i].tag,
+                                          &track[j].stream->metadata, NULL);
+         } else {
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0063-fixed-playing-mpegts-over-rtsp-caused-ffmpeg-to-read.patch b/lib/ffmpeg/patches/0063-fixed-playing-mpegts-over-rtsp-caused-ffmpeg-to-read.patch
new file mode 100644 (file)
index 0000000..4b50b5e
--- /dev/null
@@ -0,0 +1,29 @@
+From 8ec66e240fe0a9f672d7ff1932022f22f8332ffb Mon Sep 17 00:00:00 2001
+From: Joakim Plate <elupus@xbmc.org>
+Date: Mon, 7 Mar 2011 22:53:30 +0100
+Subject: [PATCH] fixed: playing mpegts over rtsp caused ffmpeg to read
+ uninitialized stack values
+
+This is an amendment to cdfab91b9c4b7ed2560071f5630567db174d6084 the memleak
+fix for mpegts. It's questionable if that change is needed. Since
+the main issue it was for has been fixed correctly. However it
+doesn't hurt to avoid potential memleaks this way.
+---
+ lib/ffmpeg/libavformat/mpegts.c |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/lib/ffmpeg/libavformat/mpegts.c b/lib/ffmpeg/libavformat/mpegts.c
+index 9c25e37..2dbd07e 100644
+--- a/lib/ffmpeg/libavformat/mpegts.c
++++ b/lib/ffmpeg/libavformat/mpegts.c
+@@ -1879,6 +1879,7 @@ int ff_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt,
+     len1 = len;
+     ts->pkt = pkt;
++    ts->pkt->data = NULL;
+     ts->stop_parse = 0;
+     for(;;) {
+         if (ts->stop_parse>0)
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0064-ffmpeg-add-missing-check-for-NULL-pointer.patch b/lib/ffmpeg/patches/0064-ffmpeg-add-missing-check-for-NULL-pointer.patch
new file mode 100644 (file)
index 0000000..a1ff8e2
--- /dev/null
@@ -0,0 +1,28 @@
+From 54fd0c0596e8bd47adb9ac325ddb93d99647fe83 Mon Sep 17 00:00:00 2001
+From: Marcel Groothuis <margro.xbmc@gmail.com>
+Date: Sat, 12 Mar 2011 23:02:06 +0100
+Subject: [PATCH] ffmpeg: add missing check for NULL pointer Extends commit
+ 8ec66e240fe0a9f672d7ff1932022f22f8332ffb (fixed: playing
+ mpegts over rtsp caused ffmpeg to read uninitialized stack
+ values)
+
+---
+ lib/ffmpeg/libavformat/utils.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/lib/ffmpeg/libavformat/utils.c b/lib/ffmpeg/libavformat/utils.c
+index bee0475..d3c11e2 100644
+--- a/lib/ffmpeg/libavformat/utils.c
++++ b/lib/ffmpeg/libavformat/utils.c
+@@ -1092,7 +1092,7 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
+                     av_add_index_entry(st, pkt->pos, pkt->dts, 0, 0, AVINDEX_KEYFRAME);
+                 }
+                 break;
+-            } else if (st->cur_len > 0 && st->discard < AVDISCARD_ALL) {
++            } else if (st->cur_len > 0 && st->cur_ptr && st->discard < AVDISCARD_ALL) {
+                 len = av_parser_parse2(st->parser, st->codec, &pkt->data, &pkt->size,
+                                        st->cur_ptr, st->cur_len,
+                                        st->cur_pkt.pts, st->cur_pkt.dts,
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0065-changed-allow-yadif-deinterlacer-to-enable-and-disab.patch b/lib/ffmpeg/patches/0065-changed-allow-yadif-deinterlacer-to-enable-and-disab.patch
new file mode 100644 (file)
index 0000000..30b27f4
--- /dev/null
@@ -0,0 +1,106 @@
+From c174f74181bcfa169aa8284f9524cd9db0f4cdda Mon Sep 17 00:00:00 2001
+From: elupus <elupus@xbmc.org>
+Date: Fri, 24 Jun 2011 01:23:48 +0200
+Subject: [PATCH] changed: allow yadif deinterlacer to enable and disable
+ based on input interlaced flag
+
+---
+ lib/ffmpeg/libavfilter/vf_yadif.c                  |   34 ++++++++++++++++++--
+ .../DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp        |    4 ++
+ 2 files changed, 35 insertions(+), 3 deletions(-)
+
+diff --git a/lib/ffmpeg/libavfilter/vf_yadif.c b/lib/ffmpeg/libavfilter/vf_yadif.c
+index bd0a9de..28b1d3e 100644
+--- a/lib/ffmpeg/libavfilter/vf_yadif.c
++++ b/lib/ffmpeg/libavfilter/vf_yadif.c
+@@ -43,6 +43,13 @@ typedef struct {
+     int parity;
+     int frame_pending;
++    int skip;
++
++    /**
++     *  0: deinterlace all frames
++     *  1: only deinterlace frames marked as interlaced
++     */
++    int auto_enable;
+     AVFilterBufferRef *cur;
+     AVFilterBufferRef *next;
+@@ -212,10 +219,21 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
+     yadif->prev = yadif->cur;
+     yadif->cur  = yadif->next;
+     yadif->next = picref;
++    yadif->skip = 0;
+     if (!yadif->cur)
+         return;
++    if (yadif->auto_enable && !yadif->cur->video->interlaced) {
++        yadif->out  = yadif->cur;
++        avfilter_unref_buffer(yadif->prev);
++        yadif->cur  = NULL;
++        yadif->prev = NULL;
++        yadif->skip = 1;
++        avfilter_start_frame(ctx->outputs[0], yadif->out);
++        return;
++    }
++
+     if (!yadif->prev)
+         yadif->prev = avfilter_ref_buffer(yadif->cur, AV_PERM_READ);
+@@ -232,6 +250,12 @@ static void end_frame(AVFilterLink *link)
+     AVFilterContext *ctx = link->dst;
+     YADIFContext *yadif = ctx->priv;
++    if (yadif->skip) {
++        avfilter_draw_slice(ctx->outputs[0], 0, link->h, 1);
++        avfilter_end_frame(ctx->outputs[0]);
++        return;
++    }
++
+     if (!yadif->out)
+         return;
+@@ -253,7 +277,7 @@ static int request_frame(AVFilterLink *link)
+         if ((ret = avfilter_request_frame(link->src->inputs[0])))
+             return ret;
+-    } while (!yadif->cur);
++    } while (!yadif->out);
+     return 0;
+ }
+@@ -275,6 +299,9 @@ static int poll_frame(AVFilterLink *link)
+     }
+     assert(yadif->next);
++    if (yadif->skip)
++        return val;
++
+     return val * ((yadif->mode&1)+1);
+ }
+@@ -307,8 +334,9 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
+     yadif->mode = 0;
+     yadif->parity = -1;
++    yadif->auto_enable = 0;
+-    if (args) sscanf(args, "%d:%d", &yadif->mode, &yadif->parity);
++    if (args) sscanf(args, "%d:%d:%d", &yadif->mode, &yadif->parity, &yadif->auto_enable);
+     yadif->filter_line = filter_line_c;
+     if (HAVE_SSSE3 && cpu_flags & AV_CPU_FLAG_SSSE3)
+@@ -318,7 +346,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
+     else if (HAVE_MMX && cpu_flags & AV_CPU_FLAG_MMX)
+         yadif->filter_line = ff_yadif_filter_line_mmx;
+-    av_log(ctx, AV_LOG_INFO, "mode:%d parity:%d\n", yadif->mode, yadif->parity);
++    av_log(ctx, AV_LOG_INFO, "mode:%d parity:%d auto_enable:%d\n", yadif->mode, yadif->parity, yadif->auto_enable);
+     return 0;
+ }
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0066-changed-updated-yadif-patch-to-same-as-will-be-appli.patch b/lib/ffmpeg/patches/0066-changed-updated-yadif-patch-to-same-as-will-be-appli.patch
new file mode 100644 (file)
index 0000000..e5c3113
--- /dev/null
@@ -0,0 +1,82 @@
+From 91efb0af6f80d82b104a810a1ccdc0ae6702d022 Mon Sep 17 00:00:00 2001
+From: elupus <elupus@xbmc.org>
+Date: Sun, 3 Jul 2011 17:06:42 +0200
+Subject: [PATCH] changed: updated yadif patch to same as will be applied
+ upstream
+
+---
+ lib/ffmpeg/libavfilter/vf_yadif.c |   18 +++++++-----------
+ 1 files changed, 7 insertions(+), 11 deletions(-)
+
+diff --git a/lib/ffmpeg/libavfilter/vf_yadif.c b/lib/ffmpeg/libavfilter/vf_yadif.c
+index 28b1d3e..d7bed90 100644
+--- a/lib/ffmpeg/libavfilter/vf_yadif.c
++++ b/lib/ffmpeg/libavfilter/vf_yadif.c
+@@ -43,7 +43,6 @@ typedef struct {
+     int parity;
+     int frame_pending;
+-    int skip;
+     /**
+      *  0: deinterlace all frames
+@@ -219,17 +218,14 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
+     yadif->prev = yadif->cur;
+     yadif->cur  = yadif->next;
+     yadif->next = picref;
+-    yadif->skip = 0;
+     if (!yadif->cur)
+         return;
+     if (yadif->auto_enable && !yadif->cur->video->interlaced) {
+-        yadif->out  = yadif->cur;
++        yadif->out  = avfilter_ref_buffer(yadif->cur, AV_PERM_READ);
+         avfilter_unref_buffer(yadif->prev);
+-        yadif->cur  = NULL;
+         yadif->prev = NULL;
+-        yadif->skip = 1;
+         avfilter_start_frame(ctx->outputs[0], yadif->out);
+         return;
+     }
+@@ -250,15 +246,15 @@ static void end_frame(AVFilterLink *link)
+     AVFilterContext *ctx = link->dst;
+     YADIFContext *yadif = ctx->priv;
+-    if (yadif->skip) {
++    if (!yadif->out)
++        return;
++
++    if (yadif->auto_enable && !yadif->cur->video->interlaced) {
+         avfilter_draw_slice(ctx->outputs[0], 0, link->h, 1);
+         avfilter_end_frame(ctx->outputs[0]);
+         return;
+     }
+-    if (!yadif->out)
+-        return;
+-
+     return_frame(ctx, 0);
+ }
+@@ -277,7 +273,7 @@ static int request_frame(AVFilterLink *link)
+         if ((ret = avfilter_request_frame(link->src->inputs[0])))
+             return ret;
+-    } while (!yadif->out);
++    } while (!yadif->cur);
+     return 0;
+ }
+@@ -299,7 +295,7 @@ static int poll_frame(AVFilterLink *link)
+     }
+     assert(yadif->next);
+-    if (yadif->skip)
++    if (yadif->auto_enable && yadif->next && !yadif->next->video->interlaced)
+         return val;
+     return val * ((yadif->mode&1)+1);
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0067-changed-updated-dxva-zigzag-workaround-for-ATI-based.patch b/lib/ffmpeg/patches/0067-changed-updated-dxva-zigzag-workaround-for-ATI-based.patch
new file mode 100644 (file)
index 0000000..8854f7a
--- /dev/null
@@ -0,0 +1,92 @@
+From 321c5e668f2c213a33cef6c7c9fe11ee2850665f Mon Sep 17 00:00:00 2001
+From: elupus <elupus@xbmc.org>
+Date: Tue, 5 Jul 2011 00:14:52 +0200
+Subject: [PATCH] changed: updated dxva zigzag workaround for ATI based on
+ comments on xbmc.org and ffmpeg.org
+
+---
+ lib/ffmpeg/libavcodec/avcodec.h               |    1 -
+ lib/ffmpeg/libavcodec/dxva2.h                 |    2 ++
+ lib/ffmpeg/libavcodec/dxva2_h264.c            |   23 +++++++++++++----------
+ xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.cpp |   14 +++-----------
+ 4 files changed, 18 insertions(+), 22 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/avcodec.h b/lib/ffmpeg/libavcodec/avcodec.h
+index cb96c6f..4745980 100644
+--- a/lib/ffmpeg/libavcodec/avcodec.h
++++ b/lib/ffmpeg/libavcodec/avcodec.h
+@@ -1429,7 +1429,6 @@ typedef struct AVCodecContext {
+ #define FF_BUG_DC_CLIP          4096
+ #define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
+ #define FF_BUG_TRUNCATED       16384
+-#define FF_BUG_DXVA2_SCALING_LIST_ZIGZAG 32768 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards
+ //#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%.
+     /**
+diff --git a/lib/ffmpeg/libavcodec/dxva2.h b/lib/ffmpeg/libavcodec/dxva2.h
+index 5c5fe21..6eb494b 100644
+--- a/lib/ffmpeg/libavcodec/dxva2.h
++++ b/lib/ffmpeg/libavcodec/dxva2.h
+@@ -27,6 +27,8 @@
+ #include <dxva2api.h>
++#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards
++
+ /**
+  * This structure is used to provides the necessary configurations and data
+  * to the DXVA2 FFmpeg HWAccel implementation.
+diff --git a/lib/ffmpeg/libavcodec/dxva2_h264.c b/lib/ffmpeg/libavcodec/dxva2_h264.c
+index 7b81c8e..4e3370c 100644
+--- a/lib/ffmpeg/libavcodec/dxva2_h264.c
++++ b/lib/ffmpeg/libavcodec/dxva2_h264.c
+@@ -113,6 +113,9 @@ static void fill_picture_parameters(struct dxva_context *ctx, const H264Context
+     pp->bit_depth_luma_minus8         = h->sps.bit_depth_luma - 8;
+     pp->bit_depth_chroma_minus8       = h->sps.bit_depth_chroma - 8;
++    if (ctx->workaround & FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG)
++        pp->Reserved16Bits            = 0;
++    else
+     pp->Reserved16Bits                = 3; /* FIXME is there a way to detect the right mode ? */
+     pp->StatusReportFeedbackNumber    = 1 + ctx->report_id++;
+     pp->CurrFieldOrderCnt[0] = 0;
+@@ -150,18 +153,18 @@ static void fill_picture_parameters(struct dxva_context *ctx, const H264Context
+     //pp->SliceGroupMap[810];               /* XXX not implemented by FFmpeg */
+ }
+-static void fill_scaling_lists(AVCodecContext *avctx, const H264Context *h, DXVA_Qmatrix_H264 *qm)
++static void fill_scaling_lists(struct dxva_context *ctx, const H264Context *h, DXVA_Qmatrix_H264 *qm)
+ {
+     unsigned i, j;
+     memset(qm, 0, sizeof(*qm));
+-    if (avctx->workaround_bugs & FF_BUG_DXVA2_SCALING_LIST_ZIGZAG) {  // For old UVD/UVD+ ATI cards
+-    for (i = 0; i < 6; i++)
+-        for (j = 0; j < 16; j++)
+-            qm->bScalingLists4x4[i][j] = h->pps.scaling_matrix4[i][j];
+-
+-    for (i = 0; i < 2; i++)
+-        for (j = 0; j < 64; j++)
+-            qm->bScalingLists8x8[i][j] = h->pps.scaling_matrix8[i][j];
++    if (ctx->workaround & FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG) {
++        for (i = 0; i < 6; i++)
++            for (j = 0; j < 16; j++)
++                qm->bScalingLists4x4[i][j] = h->pps.scaling_matrix4[i][j];
++
++        for (i = 0; i < 2; i++)
++            for (j = 0; j < 64; j++)
++                qm->bScalingLists8x8[i][j] = h->pps.scaling_matrix8[i][j];
+     } else {
+     for (i = 0; i < 6; i++)
+         for (j = 0; j < 16; j++)
+@@ -380,7 +383,7 @@ static int start_frame(AVCodecContext *avctx,
+     fill_picture_parameters(ctx, h, &ctx_pic->pp);
+     /* Fill up DXVA_Qmatrix_H264 */
+-    fill_scaling_lists(avctx, h, &ctx_pic->qm);
++    fill_scaling_lists(ctx, h, &ctx_pic->qm);
+     ctx_pic->slice_count    = 0;
+     ctx_pic->bitstream_size = 0;
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0068-fixed-yadif-should-copy-frame-properties-of-second-f.patch b/lib/ffmpeg/patches/0068-fixed-yadif-should-copy-frame-properties-of-second-f.patch
new file mode 100644 (file)
index 0000000..a5b3a7c
--- /dev/null
@@ -0,0 +1,31 @@
+From 793f3e0bfcaadaccd0b5db2a37a60da42a6b207e Mon Sep 17 00:00:00 2001
+From: elupus <elupus@xbmc.org>
+Date: Thu, 14 Jul 2011 22:07:22 +0200
+Subject: [PATCH] fixed: yadif should copy frame properties of second frame as
+ well
+
+---
+ lib/ffmpeg/libavfilter/vf_yadif.c |    5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+diff --git a/lib/ffmpeg/libavfilter/vf_yadif.c b/lib/ffmpeg/libavfilter/vf_yadif.c
+index d7bed90..da91600 100644
+--- a/lib/ffmpeg/libavfilter/vf_yadif.c
++++ b/lib/ffmpeg/libavfilter/vf_yadif.c
+@@ -182,9 +182,12 @@ static void return_frame(AVFilterContext *ctx, int is_second)
+         tff = yadif->parity^1;
+     }
+-    if (is_second)
++    if (is_second) {
+         yadif->out = avfilter_get_video_buffer(link, AV_PERM_WRITE | AV_PERM_PRESERVE |
+                                                AV_PERM_REUSE, link->w, link->h);
++        avfilter_copy_buffer_ref_props(yadif->out, yadif->cur);
++        yadif->out->video->interlaced = 0;
++    }
+     filter(ctx, yadif->out, tff ^ !is_second, tff);
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0069-ffmpeg-silence-compiler-warnings.patch b/lib/ffmpeg/patches/0069-ffmpeg-silence-compiler-warnings.patch
new file mode 100644 (file)
index 0000000..1ee77d7
--- /dev/null
@@ -0,0 +1,24 @@
+From 5542a0c7e68d123b86f168ace00f7320b294fc39 Mon Sep 17 00:00:00 2001
+From: davilla <davilla@4pi.com>
+Date: Wed, 7 Sep 2011 00:14:34 -0400
+Subject: [PATCH] [ffmpeg] silence compiler warnings
+
+---
+ lib/ffmpeg/libavfilter/avfilter.h |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/lib/ffmpeg/libavfilter/avfilter.h b/lib/ffmpeg/libavfilter/avfilter.h
+index ad8b1e5..daf43dc 100644
+--- a/lib/ffmpeg/libavfilter/avfilter.h
++++ b/lib/ffmpeg/libavfilter/avfilter.h
+@@ -159,6 +159,7 @@ static inline void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilt
+     switch (src->type) {
+     case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break;
+     case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break;
++    default: break;
+     }
+ }
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0070-matroskadec-use-correct-compression-parameters-for-c.patch b/lib/ffmpeg/patches/0070-matroskadec-use-correct-compression-parameters-for-c.patch
new file mode 100644 (file)
index 0000000..6042ffa
--- /dev/null
@@ -0,0 +1,33 @@
+From 8efe4d01dcd2f89ad012b8f1dd71192e09fa3e82 Mon Sep 17 00:00:00 2001
+From: CrystalP <CrystalP@xbmc.org>
+Date: Sun, 16 Oct 2011 03:16:26 -0400
+Subject: [PATCH] matroskadec: use correct compression parameters for current
+ track CodecPrivate
+
+backport of ffmpeg dc6c36ce46d4c4d7cb63503afc2ee44f00bf3725 on 2011-08-17
+
+fixes a bitmap sub color problem exposed by mkclean --optimize foo.mkv.
+The compressed private data could not be extracted, resulting in a bad color
+palette and wrong colors on screen.
+
+problem described in forum thread http://forum.xbmc.org/showthread.php?t=108942
+---
+ lib/ffmpeg/libavformat/matroskadec.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/lib/ffmpeg/libavformat/matroskadec.c b/lib/ffmpeg/libavformat/matroskadec.c
+index 1a87f4a..14b96d4 100644
+--- a/lib/ffmpeg/libavformat/matroskadec.c
++++ b/lib/ffmpeg/libavformat/matroskadec.c
+@@ -1220,7 +1220,7 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
+     for (i=0; i < matroska->tracks.nb_elem; i++) {
+         MatroskaTrack *track = &tracks[i];
+         enum CodecID codec_id = CODEC_ID_NONE;
+-        EbmlList *encodings_list = &tracks->encodings;
++        EbmlList *encodings_list = &track->encodings;
+         MatroskaTrackEncoding *encodings = encodings_list->elem;
+         uint8_t *extradata = NULL;
+         int extradata_size = 0;
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0071-fixed-Typo.patch b/lib/ffmpeg/patches/0071-fixed-Typo.patch
new file mode 100644 (file)
index 0000000..dcb5eda
--- /dev/null
@@ -0,0 +1,25 @@
+From dc0509f7a6341a72ca4399fee37e30c91fddc222 Mon Sep 17 00:00:00 2001
+From: arnova <nospam@void.org>
+Date: Tue, 8 Nov 2011 08:35:59 +0100
+Subject: [PATCH] fixed: Typo
+
+---
+ lib/ffmpeg/libavformat/mmsh.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/lib/ffmpeg/libavformat/mmsh.c b/lib/ffmpeg/libavformat/mmsh.c
+index 3ae886f..cc6efa3 100644
+--- a/lib/ffmpeg/libavformat/mmsh.c
++++ b/lib/ffmpeg/libavformat/mmsh.c
+@@ -284,7 +284,7 @@ static int mmsh_open_internal(URLContext *h, const char *uri, int flags, int tim
+                    CLIENTGUID
+                    "Pragma: stream-switch-count=%d\r\n"
+                    "Pragma: stream-switch-entry=%s\r\n"
+-                   "Pragma: no-cache,rate)1.000000,stream-time=%u"
++                   "Pragma: no-cache,rate=1.000000,stream-time=%u"
+                    "Connection: Close\r\n\r\n",
+                    host, port, mmsh->request_seq++, mms->stream_num, stream_selection, timestamp);
+     av_freep(&stream_selection);
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0072-h264-Use-mismatching-frame-numbers-in-fields-to-sync.patch b/lib/ffmpeg/patches/0072-h264-Use-mismatching-frame-numbers-in-fields-to-sync.patch
new file mode 100644 (file)
index 0000000..a05dfff
--- /dev/null
@@ -0,0 +1,33 @@
+From 2ac62404c2f833d5aa64947819538ac354966ef0 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sat, 12 Nov 2011 21:10:15 +0100
+Subject: [PATCH] h264: Use mismatching frame numbers in fields to synchronize
+ the first/second field state independant of them being
+ reference or not. Fixes Ticket354
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ lib/ffmpeg/libavcodec/h264.c |    6 ++----
+ 1 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/h264.c b/lib/ffmpeg/libavcodec/h264.c
+index 47b0073..87ec292 100644
+--- a/lib/ffmpeg/libavcodec/h264.c
++++ b/lib/ffmpeg/libavcodec/h264.c
+@@ -1936,11 +1936,9 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+                 s0->first_field = FIELD_PICTURE;
+             } else {
+-                if (h->nal_ref_idc &&
+-                        s0->current_picture_ptr->reference &&
+-                        s0->current_picture_ptr->frame_num != h->frame_num) {
++                if (s0->current_picture_ptr->frame_num != h->frame_num) {
+                     /*
+-                     * This and previous field were reference, but had
++                     * This and previous field had
+                      * different frame_nums. Consider this field first in
+                      * pair. Throw away previous field except for reference
+                      * purposes.
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0073-Don-t-fill-in-frame-gaps-with-copied-refs-after-flus.patch b/lib/ffmpeg/patches/0073-Don-t-fill-in-frame-gaps-with-copied-refs-after-flus.patch
new file mode 100644 (file)
index 0000000..d919336
--- /dev/null
@@ -0,0 +1,36 @@
+From 46d99a89aa16db1981441bf7103a30e7d28e5e26 Mon Sep 17 00:00:00 2001
+From: Joakim Plate <elupus@ecce.se>
+Date: Fri, 18 Nov 2011 20:36:13 +0100
+Subject: [PATCH] Don't fill in frame gaps with copied refs after flush
+
+The filled in refs cause corruptions in the video frame
+for a long time after it should have recovered.
+---
+ lib/ffmpeg/libavcodec/h264.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/h264.c b/lib/ffmpeg/libavcodec/h264.c
+index 87ec292..0e002ce 100644
+--- a/lib/ffmpeg/libavcodec/h264.c
++++ b/lib/ffmpeg/libavcodec/h264.c
+@@ -1464,7 +1464,7 @@ static void implicit_weight_table(H264Context *h, int field){
+  */
+ static void idr(H264Context *h){
+     ff_h264_remove_all_refs(h);
+-    h->prev_frame_num= 0;
++    h->prev_frame_num= -1;
+     h->prev_frame_num_offset= 0;
+     h->prev_poc_msb=
+     h->prev_poc_lsb= 0;
+@@ -1892,7 +1892,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+     h->mb_field_decoding_flag= s->picture_structure != PICT_FRAME;
+     if(h0->current_slice == 0){
+-        while(h->frame_num !=  h->prev_frame_num &&
++        while(h->frame_num !=  h->prev_frame_num && h->prev_frame_num >= 0 &&
+               h->frame_num != (h->prev_frame_num+1)%(1<<h->sps.log2_max_frame_num)){
+             Picture *prev = h->short_ref_count ? h->short_ref[0] : NULL;
+             av_log(h->s.avctx, AV_LOG_DEBUG, "Frame num gap %d %d\n", h->frame_num, h->prev_frame_num);
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0074-vaapi-do-not-assert-on-value-read-from-input-bitstre.patch b/lib/ffmpeg/patches/0074-vaapi-do-not-assert-on-value-read-from-input-bitstre.patch
new file mode 100644 (file)
index 0000000..d7b2285
--- /dev/null
@@ -0,0 +1,41 @@
+From 425b9a373384813d2fe513d42b1d585ecbea6ca5 Mon Sep 17 00:00:00 2001
+From: Diego Biurrun <diego@biurrun.de>
+Date: Fri, 15 Jul 2011 01:06:16 +0200
+Subject: [PATCH] vaapi: do not assert on value read from input bitstream
+
+User-provided data should never trigger an assert; return error instead.
+Also fix an instance of get_bits where get_bits_long should have been used.
+
+This eliminates the following warning:
+libavcodec/vaapi_mpeg2.c:112:14: warning: variable 'start_code' set but not used
+
+Signed-off-by: elupus <elupus@xbmc.org>
+---
+ lib/ffmpeg/libavcodec/vaapi_mpeg2.c |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/vaapi_mpeg2.c b/lib/ffmpeg/libavcodec/vaapi_mpeg2.c
+index 17d82b7..8d456ba 100644
+--- a/lib/ffmpeg/libavcodec/vaapi_mpeg2.c
++++ b/lib/ffmpeg/libavcodec/vaapi_mpeg2.c
+@@ -109,14 +109,14 @@ static int vaapi_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer
+     MpegEncContext * const s = avctx->priv_data;
+     VASliceParameterBufferMPEG2 *slice_param;
+     GetBitContext gb;
+-    uint32_t start_code, quantiser_scale_code, intra_slice_flag, macroblock_offset;
++    uint32_t quantiser_scale_code, intra_slice_flag, macroblock_offset;
+     av_dlog(avctx, "vaapi_mpeg2_decode_slice(): buffer %p, size %d\n", buffer, size);
+     /* Determine macroblock_offset */
+     init_get_bits(&gb, buffer, 8 * size);
+-    start_code = get_bits(&gb, 32);
+-    assert((start_code & 0xffffff00) == 0x00000100);
++    if (get_bits_long(&gb, 32) >> 8 != 1) /* start code */
++        return AVERROR_INVALIDDATA;
+     quantiser_scale_code = get_bits(&gb, 5);
+     intra_slice_flag = get_bits1(&gb);
+     if (intra_slice_flag) {
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0075-fixed-playback-from-mmst-urls-would-halt-after-some-.patch b/lib/ffmpeg/patches/0075-fixed-playback-from-mmst-urls-would-halt-after-some-.patch
new file mode 100644 (file)
index 0000000..cd5412b
--- /dev/null
@@ -0,0 +1,30 @@
+From 919a875b4bc4ea2a8ddc0aab98ea74c6475f9525 Mon Sep 17 00:00:00 2001
+From: spiff <spiff@xbmc.org>
+Date: Tue, 17 Jan 2012 22:47:36 +0100
+Subject: [PATCH] fixed: playback from mmst:// urls would halt after some
+ time.
+
+this backports upstream 275189a2bd71cf49d66374c44d3de2262d323460
+
+thanks to johoja for doing the ground work
+---
+ lib/ffmpeg/libavformat/mmst.c |    3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+diff --git a/lib/ffmpeg/libavformat/mmst.c b/lib/ffmpeg/libavformat/mmst.c
+index 8464d3b..385f017 100644
+--- a/lib/ffmpeg/libavformat/mmst.c
++++ b/lib/ffmpeg/libavformat/mmst.c
+@@ -290,8 +290,7 @@ static MMSSCPacketType get_tcp_server_response(MMSTContext *mmst)
+                 return read_result < 0 ? read_result : AVERROR_IO;
+             }
+             packet_type= AV_RL16(mms->in_buffer+36);
+-            hr = AV_RL32(mms->in_buffer + 40);
+-            if (hr) {
++            if (read_result >= 44 && (hr = AV_RL32(mms->in_buffer + 40))) {
+                 av_log(NULL, AV_LOG_ERROR,
+                        "Server sent an error status code: 0x%08x\n", hr);
+                 return AVERROR_UNKNOWN;
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0076-Fix-dvb-subtitle-decoding-when-display-segment-is-mi.patch b/lib/ffmpeg/patches/0076-Fix-dvb-subtitle-decoding-when-display-segment-is-mi.patch
new file mode 100644 (file)
index 0000000..dbeca1a
--- /dev/null
@@ -0,0 +1,63 @@
+From 6373f33e5b12eb06e37d670c9bba4e7041cded79 Mon Sep 17 00:00:00 2001
+From: Paul Kendall <paul@kcbbs.gen.nz>
+Date: Sun, 29 Jan 2012 14:50:19 +0100
+Subject: [PATCH] Fix dvb subtitle decoding when display segment is missing.
+
+closes ticket #8504
+---
+ lib/ffmpeg/libavcodec/dvbsubdec.c |   10 ++++++++++
+ 1 files changed, 10 insertions(+), 0 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/dvbsubdec.c b/lib/ffmpeg/libavcodec/dvbsubdec.c
+index 7c37915..e8ef8ce 100644
+--- a/lib/ffmpeg/libavcodec/dvbsubdec.c
++++ b/lib/ffmpeg/libavcodec/dvbsubdec.c
+@@ -1409,6 +1409,7 @@ static int dvbsub_decode(AVCodecContext *avctx,
+     int segment_type;
+     int page_id;
+     int segment_length;
++    int got_segment = 0;
+ #ifdef DEBUG_PACKET_CONTENTS
+     int i;
+@@ -1445,21 +1446,26 @@ static int dvbsub_decode(AVCodecContext *avctx,
+             switch (segment_type) {
+             case DVBSUB_PAGE_SEGMENT:
+                 dvbsub_parse_page_segment(avctx, p, segment_length);
++                got_segment |= 1;
+                 break;
+             case DVBSUB_REGION_SEGMENT:
+                 dvbsub_parse_region_segment(avctx, p, segment_length);
++                got_segment |= 2;
+                 break;
+             case DVBSUB_CLUT_SEGMENT:
+                 dvbsub_parse_clut_segment(avctx, p, segment_length);
++                got_segment |= 4;
+                 break;
+             case DVBSUB_OBJECT_SEGMENT:
+                 dvbsub_parse_object_segment(avctx, p, segment_length);
++                got_segment |= 8;
+                 break;
+             case DVBSUB_DISPLAYDEFINITION_SEGMENT:
+                 dvbsub_parse_display_definition_segment(avctx, p, segment_length);
+                 break;
+             case DVBSUB_DISPLAY_SEGMENT:
+                 *data_size = dvbsub_display_end_segment(avctx, p, segment_length, sub);
++                got_segment |= 16;
+                 break;
+             default:
+                 av_dlog(avctx, "Subtitling segment type 0x%x, page id %d, length %d\n",
+@@ -1470,6 +1476,10 @@ static int dvbsub_decode(AVCodecContext *avctx,
+         p += segment_length;
+     }
++    // Some streams do not send a display segment but if we have all the other
++    // segments then we need no further data.
++    if (got_segment == 15 && sub)
++        *data_size = dvbsub_display_end_segment(avctx, p, 0, sub);
+     if (p != p_end) {
+         av_dlog(avctx, "Junk at end of packet\n");
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0077-Change-yadif-to-not-use-out-of-picture-lines.-Fixes-.patch b/lib/ffmpeg/patches/0077-Change-yadif-to-not-use-out-of-picture-lines.-Fixes-.patch
new file mode 100644 (file)
index 0000000..d7d4ec9
--- /dev/null
@@ -0,0 +1,133 @@
+From 42bedafe92b2921ec63024a825d4297ba39888e9 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 18 Feb 2011 19:10:33 +0100
+Subject: [PATCH] Change yadif to not use out of picture lines. Fixes
+ issue2272.
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ lib/ffmpeg/libavfilter/vf_yadif.c           |   31 ++++++++++++++-------------
+ lib/ffmpeg/libavfilter/x86/yadif_template.c |    6 ++--
+ lib/ffmpeg/libavfilter/yadif.h              |    6 ++--
+ 3 files changed, 22 insertions(+), 21 deletions(-)
+
+diff --git a/lib/ffmpeg/libavfilter/vf_yadif.c b/lib/ffmpeg/libavfilter/vf_yadif.c
+index da91600..1ed8807 100644
+--- a/lib/ffmpeg/libavfilter/vf_yadif.c
++++ b/lib/ffmpeg/libavfilter/vf_yadif.c
+@@ -56,42 +56,42 @@ typedef struct {
+     AVFilterBufferRef *out;
+     void (*filter_line)(uint8_t *dst,
+                         uint8_t *prev, uint8_t *cur, uint8_t *next,
+-                        int w, int refs, int parity, int mode);
++                        int w, int prefs, int mrefs, int parity, int mode);
+ } YADIFContext;
+ static void filter_line_c(uint8_t *dst,
+                           uint8_t *prev, uint8_t *cur, uint8_t *next,
+-                          int w, int refs, int parity, int mode)
++                          int w, int prefs, int mrefs, int parity, int mode)
+ {
+     int x;
+     uint8_t *prev2 = parity ? prev : cur ;
+     uint8_t *next2 = parity ? cur  : next;
+     for (x = 0;  x < w; x++) {
+-        int c = cur[-refs];
++        int c = cur[mrefs];
+         int d = (prev2[0] + next2[0])>>1;
+-        int e = cur[+refs];
++        int e = cur[prefs];
+         int temporal_diff0 = FFABS(prev2[0] - next2[0]);
+-        int temporal_diff1 =(FFABS(prev[-refs] - c) + FFABS(prev[+refs] - e) )>>1;
+-        int temporal_diff2 =(FFABS(next[-refs] - c) + FFABS(next[+refs] - e) )>>1;
++        int temporal_diff1 =(FFABS(prev[mrefs] - c) + FFABS(prev[prefs] - e) )>>1;
++        int temporal_diff2 =(FFABS(next[mrefs] - c) + FFABS(next[prefs] - e) )>>1;
+         int diff = FFMAX3(temporal_diff0>>1, temporal_diff1, temporal_diff2);
+         int spatial_pred = (c+e)>>1;
+-        int spatial_score = FFABS(cur[-refs-1] - cur[+refs-1]) + FFABS(c-e)
+-                          + FFABS(cur[-refs+1] - cur[+refs+1]) - 1;
++        int spatial_score = FFABS(cur[mrefs-1] - cur[prefs-1]) + FFABS(c-e)
++                          + FFABS(cur[mrefs+1] - cur[prefs+1]) - 1;
+ #define CHECK(j)\
+-    {   int score = FFABS(cur[-refs-1+j] - cur[+refs-1-j])\
+-                  + FFABS(cur[-refs  +j] - cur[+refs  -j])\
+-                  + FFABS(cur[-refs+1+j] - cur[+refs+1-j]);\
++    {   int score = FFABS(cur[mrefs-1+j] - cur[prefs-1-j])\
++                  + FFABS(cur[mrefs  +j] - cur[prefs  -j])\
++                  + FFABS(cur[mrefs+1+j] - cur[prefs+1-j]);\
+         if (score < spatial_score) {\
+             spatial_score= score;\
+-            spatial_pred= (cur[-refs  +j] + cur[+refs  -j])>>1;\
++            spatial_pred= (cur[mrefs  +j] + cur[prefs  -j])>>1;\
+         CHECK(-1) CHECK(-2) }} }}
+         CHECK( 1) CHECK( 2) }} }}
+         if (mode < 2) {
+-            int b = (prev2[-2*refs] + next2[-2*refs])>>1;
+-            int f = (prev2[+2*refs] + next2[+2*refs])>>1;
++            int b = (prev2[2*mrefs] + next2[2*mrefs])>>1;
++            int f = (prev2[2*prefs] + next2[2*prefs])>>1;
+ #if 0
+             int a = cur[-3*refs];
+             int g = cur[+3*refs];
+@@ -139,7 +139,8 @@ static void filter(AVFilterContext *ctx, AVFilterBufferRef *dstpic,
+                 uint8_t *cur  = &yadif->cur ->data[i][y*refs];
+                 uint8_t *next = &yadif->next->data[i][y*refs];
+                 uint8_t *dst  = &dstpic->data[i][y*dstpic->linesize[i]];
+-                yadif->filter_line(dst, prev, cur, next, w, refs, parity ^ tff, yadif->mode);
++                int     mode  = y==1 || y+2==h ? 2 : yadif->mode;
++                yadif->filter_line(dst, prev, cur, next, w, y+1<h ? refs : -refs, y ? -refs : refs, parity ^ tff, mode);
+             } else {
+                 memcpy(&dstpic->data[i][y*dstpic->linesize[i]],
+                        &yadif->cur->data[i][y*refs], w);
+diff --git a/lib/ffmpeg/libavfilter/x86/yadif_template.c b/lib/ffmpeg/libavfilter/x86/yadif_template.c
+index 3e520cb..50ea843 100644
+--- a/lib/ffmpeg/libavfilter/x86/yadif_template.c
++++ b/lib/ffmpeg/libavfilter/x86/yadif_template.c
+@@ -105,7 +105,7 @@
+ void RENAME(ff_yadif_filter_line)(uint8_t *dst,
+                                   uint8_t *prev, uint8_t *cur, uint8_t *next,
+-                                  int w, int refs, int parity, int mode)
++                                  int w, int prefs, int mrefs, int parity, int mode)
+ {
+     DECLARE_ALIGNED(16, uint8_t, tmp0[16]);
+     DECLARE_ALIGNED(16, uint8_t, tmp1[16]);
+@@ -226,8 +226,8 @@ void RENAME(ff_yadif_filter_line)(uint8_t *dst,
+             :[prev] "r"(prev),\
+              [cur]  "r"(cur),\
+              [next] "r"(next),\
+-             [prefs]"r"((x86_reg)refs),\
+-             [mrefs]"r"((x86_reg)-refs),\
++             [prefs]"r"((x86_reg)prefs),\
++             [mrefs]"r"((x86_reg)mrefs),\
+              [mode] "g"(mode)\
+         );\
+         __asm__ volatile(MOV" "MM"1, %0" :"=m"(*dst));\
+diff --git a/lib/ffmpeg/libavfilter/yadif.h b/lib/ffmpeg/libavfilter/yadif.h
+index 072812c..ff574da 100644
+--- a/lib/ffmpeg/libavfilter/yadif.h
++++ b/lib/ffmpeg/libavfilter/yadif.h
+@@ -23,14 +23,14 @@
+ void ff_yadif_filter_line_mmx(uint8_t *dst,
+                               uint8_t *prev, uint8_t *cur, uint8_t *next,
+-                              int w, int refs, int parity, int mode);
++                              int w, int prefs, int mrefs, int parity, int mode);
+ void ff_yadif_filter_line_sse2(uint8_t *dst,
+                                uint8_t *prev, uint8_t *cur, uint8_t *next,
+-                               int w, int refs, int parity, int mode);
++                               int w, int prefs, int mrefs, int parity, int mode);
+ void ff_yadif_filter_line_ssse3(uint8_t *dst,
+                                 uint8_t *prev, uint8_t *cur, uint8_t *next,
+-                                int w, int refs, int parity, int mode);
++                                int w, int prefs, int mrefs, int parity, int mode);
+ #endif /* AVFILTER_YADIF_H */
+-- 
+1.7.7.2
+
diff --git a/lib/ffmpeg/patches/0078-fixed-ffmpeg-build-with-gcc-4.7-on-x86.patch b/lib/ffmpeg/patches/0078-fixed-ffmpeg-build-with-gcc-4.7-on-x86.patch
new file mode 100644 (file)
index 0000000..6fe3958
--- /dev/null
@@ -0,0 +1,68 @@
+From 400b84bb8d3d2a9c202fa3da4fb01279230a87ce Mon Sep 17 00:00:00 2001
+From: Anssi Hannula <anssi@xbmc.org>
+Date: Wed, 7 Mar 2012 23:08:54 +0200
+Subject: [PATCH] fixed: ffmpeg build with gcc 4.7 on x86
+
+Backport da4c7cce2100a4e4f9276b4f17e260be47b53f41 from FFmpeg git:
+
+> From: Mans Rullgard <mans@mansr.com>
+> Date: Tue, 26 Jul 2011 11:23:43 +0000 (+0100)
+>
+> x86: fix build with gcc 4.7
+>
+> The upcoming gcc 4.7 has more advanced constant propagation
+> resulting some inline asm operands becoming constants and thus
+> emitted as literals, sometimes in contexts where this results
+> in invalid instructions.
+>
+> This patch changes the constraints of the relevant operands
+> to "rm" thus forcing a valid type.  While obviously suboptimal,
+> this is what older gcc versions already did, and there is no
+> change to the code generated with these.
+---
+ lib/ffmpeg/libavcodec/x86/h264_qpel_mmx.c |    8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/lib/ffmpeg/libavcodec/x86/h264_qpel_mmx.c b/lib/ffmpeg/libavcodec/x86/h264_qpel_mmx.c
+index d8ceca1..f5af44e 100644
+--- a/lib/ffmpeg/libavcodec/x86/h264_qpel_mmx.c
++++ b/lib/ffmpeg/libavcodec/x86/h264_qpel_mmx.c
+@@ -398,7 +398,7 @@ static av_noinline void OPNAME ## h264_qpel8or16_v_lowpass_ ## MMX(uint8_t *dst,
+             "2:                         \n\t"\
+             \
+             : "+a"(src), "+c"(dst)\
+-            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
++            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
+             : "memory"\
+         );\
+         src += 4-(h+5)*srcStride;\
+@@ -446,7 +446,7 @@ static av_always_inline void OPNAME ## h264_qpel8or16_hv1_lowpass_ ## MMX(int16_
+             QPEL_H264HV(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, 15*48)\
+             "2:                     \n\t"\
+             : "+a"(src)\
+-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)\
++            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)\
+             : "memory"\
+             );\
+         tmp += 4;\
+@@ -823,7 +823,7 @@ static av_noinline void OPNAME ## h264_qpel8or16_v_lowpass_ ## MMX(uint8_t *dst,
+         "2:                          \n\t"\
+         \
+         : "+a"(src), "+c"(dst)\
+-        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
++        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
+         : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3", \
+                        "%xmm4", "%xmm5", "%xmm6", "%xmm7",)\
+           "memory"\
+@@ -878,7 +878,7 @@ static av_always_inline void put_h264_qpel8or16_hv1_lowpass_sse2(int16_t *tmp, u
+             QPEL_H264HV_XMM(%%xmm3, %%xmm4, %%xmm5, %%xmm0, %%xmm1, %%xmm2, 15*48)
+             "2:                         \n\t"
+             : "+a"(src)
+-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)
++            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)
+             : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                            "%xmm4", "%xmm5", "%xmm6", "%xmm7",)
+               "memory"
+-- 
+1.7.7.2
+
index 66cbef8..de56f9f 100644 (file)
@@ -240,8 +240,43 @@ PLT_Service::SetSCPDXML(const char* scpd)
                 PLT_XmlHelper::GetChildText(allowedValueRange, "maximum", max);
                 PLT_XmlHelper::GetChildText(allowedValueRange, "step", step);
 
-                if (min.GetLength() == 0 || max.GetLength() == 0) {
-                    NPT_CHECK_LABEL_SEVERE(NPT_ERROR_INVALID_SYNTAX, failure);
+                // these are required but try to be nice
+                // in case bad devices provide nothing
+                if (min.GetLength() == 0) {
+                    if (variable->m_DataType == "ui1" ||
+                        variable->m_DataType == "ui2" ||
+                        variable->m_DataType == "ui4") {
+                        min = NPT_String::FromInteger(0);
+                    } else if (variable->m_DataType == "i1") {
+                        min = NPT_String::FromInteger(-128);
+                    } else if (variable->m_DataType == "i2") {
+                        min = NPT_String::FromInteger(-32768);
+                    } else if (variable->m_DataType == "i4" ||
+                               variable->m_DataType == "int") {
+                        min = NPT_String::FromInteger(-2147483647 - 1);
+                    } else {
+                        NPT_LOG_SEVERE_1("Invalid variable data type %s", variable->m_DataType.GetChars());
+                        NPT_CHECK_LABEL_SEVERE(NPT_ERROR_INVALID_SYNTAX, failure);
+                    }
+                }
+                if (max.GetLength() == 0) {
+                    if (variable->m_DataType == "ui1") {
+                        max = NPT_String::FromInteger(0xff);
+                    } else if (variable->m_DataType == "ui2") {
+                        max = NPT_String::FromInteger(0xffff);
+                    } else if (variable->m_DataType == "ui4") {
+                        max = NPT_String::FromInteger(0xffffffff);
+                    } else if (variable->m_DataType == "i1") {
+                        max = NPT_String::FromInteger(0x7f);
+                    } else if (variable->m_DataType == "i2") {
+                        max = NPT_String::FromInteger(0x7fff);
+                    } else if (variable->m_DataType == "i4" ||
+                               variable->m_DataType == "int") {
+                        max = NPT_String::FromInteger(0x7fffffff);
+                    } else {
+                        NPT_LOG_SEVERE_1("Invalid variable data type %s", variable->m_DataType.GetChars());
+                        NPT_CHECK_LABEL_SEVERE(NPT_ERROR_INVALID_SYNTAX, failure);
+                    }
                 }
 
                 variable->m_AllowedValueRange = new NPT_AllowedValueRange;
@@ -706,7 +741,7 @@ PLT_Service::UpdateLastChange(NPT_List<PLT_StateVariable*>& vars)
         return NPT_SUCCESS;
     }
 
-    NPT_XmlElementNode* top = new NPT_XmlElementNode("Event");
+    NPT_Reference<NPT_XmlElementNode> top(new NPT_XmlElementNode("Event"));
     NPT_CHECK_SEVERE(top->SetNamespaceUri("", m_LastChangeNamespace));
 
     NPT_XmlElementNode* instance = new NPT_XmlElementNode("InstanceID");
@@ -719,7 +754,6 @@ PLT_Service::UpdateLastChange(NPT_List<PLT_StateVariable*>& vars)
     // serialize node
     NPT_String value;
     NPT_CHECK_SEVERE(PLT_XmlHelper::Serialize(*top, value, false));
-    delete top;
 
     // set the state change direcly instead of calling SetValue
     // to avoid recursive lock, instead add var to publish here directly
index 4c2bb0c..6a18c26 100644 (file)
@@ -95,7 +95,7 @@ public:
                               NPT_UInt32               start_index,
                               NPT_UInt32               count = 30, // DLNA recommendations
                               bool                     browse_metadata = false,
-                              const char*              filter = "dc:date,upnp:genre,res@duration,res@size,upnp:albumArtURI,upnp:album,upnp:artist,upnp:author",
+                              const char*              filter = "dc:date,upnp:genre,res,res@duration,res@size,upnp:albumArtURI,upnp:album,upnp:artist,upnp:author",
                               const char*              sort_criteria = "",
                               void*                    userdata = NULL);
 
@@ -104,7 +104,7 @@ public:
                                                          const char*              search_criteria,
                                              NPT_UInt32               start_index,
                                                  NPT_UInt32               count = 30, // DLNA recommendations
-                                                     const char*              filter = "dc:date,upnp:genre,res@duration,res@size,upnp:albumArtURI,upnp:album,upnp:artist,upnp:author",
+                                                     const char*              filter = "dc:date,upnp:genre,res,res@duration,res@size,upnp:albumArtURI,upnp:album,upnp:artist,upnp:author",
                                                          void*                    userdata = NULL);
        //BBMOD END
 
index e5d5a1b..00e3df3 100644 (file)
@@ -237,12 +237,13 @@ PLT_SyncMediaBrowser::BrowseSync(PLT_DeviceDataReference&      device,
 {
     NPT_Result res = NPT_FAILURE;
     NPT_Int32  index = start;
+    bool       cache = m_UseCache && metadata && start == 0 && max_results == 0;
 
     // reset output params
     list = NULL;
 
     // look into cache first
-    if (m_UseCache && NPT_SUCCEEDED(m_Cache.Get(device->GetUUID(), object_id, list))) return NPT_SUCCESS;
+    if (cache && NPT_SUCCEEDED(m_Cache.Get(device->GetUUID(), object_id, list))) return NPT_SUCCESS;
 
     do {       
         PLT_BrowseDataReference browse_data(new PLT_BrowseData());
@@ -283,7 +284,7 @@ PLT_SyncMediaBrowser::BrowseSync(PLT_DeviceDataReference&      device,
         // nothing is returned back by the server.
         // Unless we were told to stop after reaching a certain amount to avoid
         // length delays
-        if ((browse_data->info.tm && browse_data->info.tm == list->GetItemCount()) ||
+        if ((browse_data->info.tm && browse_data->info.tm <= list->GetItemCount()) ||
             (max_results && list->GetItemCount() >= max_results))
             break;
 
@@ -293,7 +294,7 @@ PLT_SyncMediaBrowser::BrowseSync(PLT_DeviceDataReference&      device,
 
 done:
     // cache the result
-    if (m_UseCache && NPT_SUCCEEDED(res) && !list.IsNull() && list->GetItemCount()) {
+    if (cache && NPT_SUCCEEDED(res) && !list.IsNull() && list->GetItemCount()) {
         m_Cache.Put(device->GetUUID(), object_id, list);
     }
 
index ddec6e5..50ddcd4 100644 (file)
@@ -606,6 +606,8 @@ static int Priv_DAAP_ClientHost_GetDatabaseItems(DAAP_SClientHost *pCHThis,
     HTTP_RETURN_IF_FAILED(httpRes);
 
     items.h.expecting = QUERY_GENERICLISTING;
+    items.returnedcount = 0;
+    items.listitems = 0;
     dmap_parseProtocolData(httpRes->contentlen, httpRes->data,
                            (protoParseResult*)&items);
 
diff --git a/lib/libapetag/install-sh b/lib/libapetag/install-sh
deleted file mode 100755 (executable)
index 6781b98..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2009-04-28.21; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" ""       $nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
-  test "$posix_glob" != "?" || {
-    if (set -f) 2>/dev/null; then
-      posix_glob=
-    else
-      posix_glob=:
-    fi
-  }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
-     --help     display this help and exit.
-     --version  display version info and exit.
-
-  -c            (ignored)
-  -C            install only if different (preserve the last data modification time)
-  -d            create directories instead of installing files.
-  -g GROUP      $chgrpprog installed files to GROUP.
-  -m MODE       $chmodprog installed files to MODE.
-  -o USER       $chownprog installed files to USER.
-  -s            $stripprog installed files.
-  -t DIRECTORY  install into DIRECTORY.
-  -T            report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
-  RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
-  case $1 in
-    -c) ;;
-
-    -C) copy_on_change=true;;
-
-    -d) dir_arg=true;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-       shift;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) mode=$2
-       case $mode in
-         *' '* | *'    '* | *'
-'*       | *'*'* | *'?'* | *'['*)
-           echo "$0: invalid mode: $mode" >&2
-           exit 1;;
-       esac
-       shift;;
-
-    -o) chowncmd="$chownprog $2"
-       shift;;
-
-    -s) stripcmd=$stripprog;;
-
-    -t) dst_arg=$2
-       shift;;
-
-    -T) no_target_directory=true;;
-
-    --version) echo "$0 $scriptversion"; exit $?;;
-
-    --)        shift
-       break;;
-
-    -*)        echo "$0: invalid option: $1" >&2
-       exit 1;;
-
-    *)  break;;
-  esac
-  shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
-  # When -d is used, all remaining arguments are directories to create.
-  # When -t is used, the destination is already specified.
-  # Otherwise, the last argument is the destination.  Remove it from $@.
-  for arg
-  do
-    if test -n "$dst_arg"; then
-      # $@ is not empty: it contains at least $arg.
-      set fnord "$@" "$dst_arg"
-      shift # fnord
-    fi
-    shift # arg
-    dst_arg=$arg
-  done
-fi
-
-if test $# -eq 0; then
-  if test -z "$dir_arg"; then
-    echo "$0: no input file specified." >&2
-    exit 1
-  fi
-  # It's OK to call `install-sh -d' without argument.
-  # This can happen when creating conditional directories.
-  exit 0
-fi
-
-if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
-
-  # Set umask so as not to create temps with too-generous modes.
-  # However, 'strip' requires both read and write access to temps.
-  case $mode in
-    # Optimize common cases.
-    *644) cp_umask=133;;
-    *755) cp_umask=22;;
-
-    *[0-7])
-      if test -z "$stripcmd"; then
-       u_plus_rw=
-      else
-       u_plus_rw='% 200'
-      fi
-      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
-    *)
-      if test -z "$stripcmd"; then
-       u_plus_rw=
-      else
-       u_plus_rw=,u+rw
-      fi
-      cp_umask=$mode$u_plus_rw;;
-  esac
-fi
-
-for src
-do
-  # Protect names starting with `-'.
-  case $src in
-    -*) src=./$src;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    dstdir=$dst
-    test -d "$dstdir"
-    dstdir_status=$?
-  else
-
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-    # might cause directories to be created, which would be especially bad
-    # if $src (and thus $dsttmp) contains '*'.
-    if test ! -f "$src" && test ! -d "$src"; then
-      echo "$0: $src does not exist." >&2
-      exit 1
-    fi
-
-    if test -z "$dst_arg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-
-    dst=$dst_arg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst;;
-    esac
-
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-       echo "$0: $dst_arg: Is a directory" >&2
-       exit 1
-      fi
-      dstdir=$dst
-      dst=$dstdir/`basename "$src"`
-      dstdir_status=0
-    else
-      # Prefer dirname, but fall back on a substitute if dirname fails.
-      dstdir=`
-       (dirname "$dst") 2>/dev/null ||
-       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-            X"$dst" : 'X\(//\)[^/]' \| \
-            X"$dst" : 'X\(//\)$' \| \
-            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-       echo X"$dst" |
-           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\/\)[^/].*/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\/\)$/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\).*/{
-                  s//\1/
-                  q
-                }
-                s/.*/./; q'
-      `
-
-      test -d "$dstdir"
-      dstdir_status=$?
-    fi
-  fi
-
-  obsolete_mkdir_used=false
-
-  if test $dstdir_status != 0; then
-    case $posix_mkdir in
-      '')
-       # Create intermediate dirs using mode 755 as modified by the umask.
-       # This is like FreeBSD 'install' as of 1997-10-28.
-       umask=`umask`
-       case $stripcmd.$umask in
-         # Optimize common cases.
-         *[2367][2367]) mkdir_umask=$umask;;
-         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-         *[0-7])
-           mkdir_umask=`expr $umask + 22 \
-             - $umask % 100 % 40 + $umask % 20 \
-             - $umask % 10 % 4 + $umask % 2
-           `;;
-         *) mkdir_umask=$umask,go-w;;
-       esac
-
-       # With -d, create the new directory with the user-specified mode.
-       # Otherwise, rely on $mkdir_umask.
-       if test -n "$dir_arg"; then
-         mkdir_mode=-m$mode
-       else
-         mkdir_mode=
-       fi
-
-       posix_mkdir=false
-       case $umask in
-         *[123567][0-7][0-7])
-           # POSIX mkdir -p sets u+wx bits regardless of umask, which
-           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-           ;;
-         *)
-           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-           if (umask $mkdir_umask &&
-               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-           then
-             if test -z "$dir_arg" || {
-                  # Check for POSIX incompatibilities with -m.
-                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                  # other-writeable bit of parent directory when it shouldn't.
-                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
-                  case $ls_ld_tmpdir in
-                    d????-?r-*) different_mode=700;;
-                    d????-?--*) different_mode=755;;
-                    *) false;;
-                  esac &&
-                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                  }
-                }
-             then posix_mkdir=:
-             fi
-             rmdir "$tmpdir/d" "$tmpdir"
-           else
-             # Remove any dirs left behind by ancient mkdir implementations.
-             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-           fi
-           trap '' 0;;
-       esac;;
-    esac
-
-    if
-      $posix_mkdir && (
-       umask $mkdir_umask &&
-       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
-      )
-    then :
-    else
-
-      # The umask is ridiculous, or mkdir does not conform to POSIX,
-      # or it failed possibly due to a race condition.  Create the
-      # directory the slow way, step by step, checking for races as we go.
-
-      case $dstdir in
-       /*) prefix='/';;
-       -*) prefix='./';;
-       *)  prefix='';;
-      esac
-
-      eval "$initialize_posix_glob"
-
-      oIFS=$IFS
-      IFS=/
-      $posix_glob set -f
-      set fnord $dstdir
-      shift
-      $posix_glob set +f
-      IFS=$oIFS
-
-      prefixes=
-
-      for d
-      do
-       test -z "$d" && continue
-
-       prefix=$prefix$d
-       if test -d "$prefix"; then
-         prefixes=
-       else
-         if $posix_mkdir; then
-           (umask=$mkdir_umask &&
-            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-           # Don't fail if two instances are running concurrently.
-           test -d "$prefix" || exit 1
-         else
-           case $prefix in
-             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-             *) qprefix=$prefix;;
-           esac
-           prefixes="$prefixes '$qprefix'"
-         fi
-       fi
-       prefix=$prefix/
-      done
-
-      if test -n "$prefixes"; then
-       # Don't fail if two instances are running concurrently.
-       (umask $mkdir_umask &&
-        eval "\$doit_exec \$mkdirprog $prefixes") ||
-         test -d "$dstdir" || exit 1
-       obsolete_mkdir_used=true
-      fi
-    fi
-  fi
-
-  if test -n "$dir_arg"; then
-    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
-    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
-      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
-  else
-
-    # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
-
-    # Trap to clean up those temp files at exit.
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
-    # Copy the file name to the temp name.
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
-    # and set any options; do chmod last to preserve setuid bits.
-    #
-    # If any of these fail, we abort the whole thing.  If we want to
-    # ignore errors from any of these, just make sure not to ignore
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
-    #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
-    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
-    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
-    # If -C, don't bother to copy if it wouldn't change the file.
-    if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
-       set X $old && old=:$2:$4:$5:$6 &&
-       set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
-       test "$old" = "$new" &&
-       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
-    then
-      rm -f "$dsttmp"
-    else
-      # Rename the file to the real destination.
-      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
-      # The rename failed, perhaps because mv can't rename something else
-      # to itself, or perhaps because mv is so ancient that it does not
-      # support -f.
-      {
-       # Now remove or move aside any old file at destination location.
-       # We try this two ways since rm can't unlink itself on some
-       # systems and the destination file might be busy for other
-       # reasons.  In this case, the final cleanup might fail but the new
-       # file should still install successfully.
-       {
-         test ! -f "$dst" ||
-         $doit $rmcmd -f "$dst" 2>/dev/null ||
-         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-         } ||
-         { echo "$0: cannot unlink or rename $dst" >&2
-           (exit 1); exit 1
-         }
-       } &&
-
-       # Now rename the file to the real destination.
-       $doit $mvcmd "$dsttmp" "$dst"
-      }
-    fi || exit 1
-
-    trap '' 0
-  fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
index 52089c7..7758427 100644 (file)
@@ -51,9 +51,7 @@ is_id3v1 (ape_file * fp)
 {
     int n=0;
     char buf[16];
-    size_t savedFilePosition;
     
-    savedFilePosition = ape_ftell(fp);
     ape_fseek (fp, 0, SEEK_END);
     do {
         n++;
@@ -63,8 +61,7 @@ is_id3v1 (ape_file * fp)
         if (memcmp (buf, "APETAGEX",8) == 0) /*APE.TAG.EX*/
         break;
     } while (memcmp (buf+3, "TAG", 3) == 0);
-    
-    ape_fseek (fp, savedFilePosition, SEEK_SET);
+
     return (n-1)*128;
 }
 
@@ -83,7 +80,6 @@ is_id3v2 (ape_file * fp)
     size_t savedFilePosition;
     long id3v2size=0;
         
-    savedFilePosition = ape_ftell (fp);
     ape_fseek (fp, 0, SEEK_SET);
     do {    
         memset (buf, 0, sizeof (buf));
@@ -97,7 +93,6 @@ is_id3v2 (ape_file * fp)
         ((long) (buf[7]) << 14) | ((long) (buf[6]) << 21));
     } while(memcmp (buf, "ID3", 3) == 0);
     
-    ape_fseek (fp, savedFilePosition, SEEK_SET);
     return (int) id3v2size;
 }
 
@@ -112,19 +107,14 @@ int
 is_ape_ver (ape_file * fp)
 {
     char unsigned buf[32];
-    size_t savedFilePosition;
-        
-    savedFilePosition = ape_ftell (fp);
     memset (buf, 0, sizeof (buf));
         
     ape_fseek (fp, (is_id3v1 (fp) ? -32 - 128 : -32), SEEK_END);
     ape_fread (&buf, 1, sizeof (buf), fp);
     if (memcmp (buf, "APETAGEX", 8) != 0) {
-        ape_fseek (fp, savedFilePosition, SEEK_SET);
         return 0;
     }
         
-    ape_fseek (fp, savedFilePosition, SEEK_SET);
     return (int) is_tag_ape2long (buf + 8);
 }
 
@@ -140,19 +130,14 @@ int
 is_ape (ape_file * fp)
 {
     char unsigned buf[32];
-    size_t savedFilePosition;
-        
-    savedFilePosition = ape_ftell(fp);
     memset (buf, 0, sizeof (buf));
         
     ape_fseek (fp, (is_id3v1 (fp) ? -32 - 128 : -32), SEEK_END);
     ape_fread (&buf, 1, sizeof (buf), fp);
     if (memcmp (buf, "APETAGEX", 8) != 0) {
-        ape_fseek (fp, savedFilePosition, SEEK_SET);
         return 0;
     }
         
-    ape_fseek (fp, savedFilePosition, SEEK_SET);
     /* WARNING! macabra code */
     return (int) (is_tag_ape2long (buf + 8 + 4) +
         ( 
diff --git a/lib/libcec/Makefile b/lib/libcec/Makefile
new file mode 100644 (file)
index 0000000..ec307c4
--- /dev/null
@@ -0,0 +1,54 @@
+#  Download and build libCEC
+#
+#  Usage:
+#    make
+#    sudo make install
+#    make clean
+
+# lib name, version
+LIBNAME=libcec
+VERSION=latest
+SOURCE=$(LIBNAME)-$(VERSION)
+
+# download location and format
+BASE_URL=http://packages.pulse-eight.net/pulse/sources/libcec
+ARCHIVE=$(SOURCE).tar.bz2 
+TARBALLS_LOCATION=.
+RETRIEVE_TOOL=/usr/bin/curl
+RETRIEVE_TOOL_FLAGS=-Ls --create-dirs --output $(TARBALLS_LOCATION)/$(ARCHIVE)
+ARCHIVE_TOOL=tar
+ARCHIVE_TOOL_FLAGS=jxf
+
+PREFIX ?= /usr/local
+LIBCEC_CONFIGOPTS ?= --prefix=$(PREFIX)
+
+# configuration settings
+CONFIGURE=./configure CFLAGS=-D_FILE_OFFSET_BITS=64 $(LIBCEC_CONFIGOPTS)
+
+SO_NAME=$(LIBNAME)/.libs/$(LIBNAME).so
+
+all: $(SO_NAME)
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+       $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(LIBNAME): $(TARBALLS_LOCATION)/$(ARCHIVE)
+       rm -rf $(LIBNAME)
+       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       echo $(LIBNAME) > .gitignore
+       cd $(LIBNAME); autoreconf -vif
+       cd $(LIBNAME); $(CONFIGURE)
+
+$(SO_NAME): $(LIBNAME)
+       make -j 1 -C $(LIBNAME)
+
+install:
+       make -C $(LIBNAME) install
+       ldconfig
+
+clean:
+       rm -rf $(LIBNAME)
+
+distclean::
+       rm -rf $(LIBNAME)
+
index 686b407..1534f33 100644 (file)
@@ -66,15 +66,15 @@ $(SYSDIR)/libdvdnav-$(ARCH).so: $(WRAPPER) $(DVDCSS_A) libdvdread/obj/libdvdread
 
 endif
 
-libdvdcss/src/.libs/libdvdcss.a: libdvdcss
+libdvdcss/src/.libs/libdvdcss.a: libdvdcss;
 libdvdcss: compile
        $(MAKE) -C $@
 
-libdvdread/obj/libdvdread.a: libdvdread
+libdvdread/obj/libdvdread.a: libdvdread;
 libdvdread: compile
        $(MAKE) -C $@
 
-libdvdnav/obj/libdvdnav.a: libdvdnav
+libdvdnav/obj/libdvdnav.a: libdvdnav;
 libdvdnav: compile
        $(MAKE) -C $@
 
index 0d3475e..ed66bf4 100644 (file)
@@ -224,14 +224,9 @@ timemapdone:
 
     if(found) {
 
-      length = cell->last_sector - cell->first_sector + 1;
-      if (target >= length) {
-        target -= length;
-      } else {
-        /* convert the target sector from Cell-relative to absolute physical sector */
-        target += cell->first_sector;
-        break;
-      }
+      if (target >= cell->first_sector
+      &&  target <= cell->last_sector)
+         break;
 
     } else {
 
index 732a2f3..9b21c64 100644 (file)
@@ -107,7 +107,7 @@ bool CIptcParse::Process (const unsigned char* const Data, const unsigned short
 
   // Get length (Motorola format)
   unsigned long length = CExifParse::Get32(pos);
-  pos += sizeof(long);                        // move data pointer to the next field
+  pos += 4;                                   // move data pointer to the next field
 
   // Now read IPTC data
   while (pos < (char*)(Data + itemlen-5))
index dd7e9d2..5fe233b 100644 (file)
@@ -99,20 +99,20 @@ $(srcdir)/frametype.c: $(srcdir)/frametype.gperf Makefile.am
        cd $(srcdir) &&  \
        gperf -tCcTonD -K id -N id3_frametype_lookup -s -3 -k '*'  \
                frametype.gperf |  \
-       sed -e 's/\(struct id3_frametype\);/\1/' |  \
-       sed -e '/\$$''Id: /s/\$$//g' >frametype.c
+       $(SED) -e 's/\(struct id3_frametype\);/\1/' |  \
+       $(SED) -e '/\$$''Id: /s/\$$//g' >frametype.c
 
 $(srcdir)/compat.c: $(srcdir)/compat.gperf Makefile.am
        cd $(srcdir) &&  \
        gperf -tCcTonD -K id -N id3_compat_lookup -s -3 -k '*'  \
                compat.gperf |  \
-       sed -e 's/\(struct id3_compat\);/\1/' |  \
-       sed -e '/\$$''Id: /s/\$$//g' >compat.c
+       $(SED) -e 's/\(struct id3_compat\);/\1/' |  \
+       $(SED) -e '/\$$''Id: /s/\$$//g' >compat.c
 
 $(srcdir)/genre.dat: $(srcdir)/genre.dat.in $(srcdir)/genre.dat.sed Makefile.am
        cd $(srcdir) &&  \
-       sed -n -f genre.dat.sed genre.dat.in |  \
-       sed -e '/\$$''Id: /s/\$$//g' >genre.dat
+       $(SED) -n -f genre.dat.sed genre.dat.in |  \
+       $(SED) -e '/\$$''Id: /s/\$$//g' >genre.dat
 
 libtool: $(LIBTOOL_DEPS)
        $(SHELL) ./config.status --recheck
index 8f02398..35cb4f6 100644 (file)
@@ -141,7 +141,7 @@ int translate_APIC(struct id3_frame *frame, char const *oldid,
                   id3_byte_t const *data, id3_length_t length)
 {
   id3_byte_t const *end;
-  char type[3];
+  char type[4];
   enum id3_field_textencoding encoding;
   int result = 0;
   
index 8b7d43f..bc758f5 100644 (file)
@@ -76,6 +76,7 @@ error "gperf generated tables don't work with this execution character set. Plea
 # define TX(id)    #id, translate_##id
 
 static id3_compat_func_t translate_TCON;
+static id3_compat_func_t translate_APIC;
 
 #define TOTAL_KEYWORDS 75
 #define MIN_WORD_LENGTH 3
@@ -276,7 +277,7 @@ id3_compat_lookup (str, len)
 #line 96 "compat.gperf"
       {"TIME", OBSOLETE  /* Time [obsolete] */},
 #line 75 "compat.gperf"
-      {"PIC",  EQ(APIC)  /* Attached picture */},
+      {"PIC",  TX(APIC)  /* Attached picture */},
 #line 127 "compat.gperf"
       {"UFI",  EQ(UFID)  /* Unique file identifier */},
 #line 72 "compat.gperf"
@@ -346,7 +347,7 @@ int translate_APIC(struct id3_frame *frame, char const *oldid,
                   id3_byte_t const *data, id3_length_t length)
 {
   id3_byte_t const *end;
-  char type[3];
+  char type[4];
   enum id3_field_textencoding encoding;
   int result = 0;
   
index c906db7..7dee1e0 100644 (file)
@@ -298,27 +298,47 @@ const id3_ucs4_t* id3_metadata_getcomment(const struct id3_tag* tag, enum id3_fi
 {
   union id3_field const *field;
   struct id3_frame const *frame;
-  const id3_ucs4_t* ucs4 = 0;
   int commentNumber = 0;
+  const id3_ucs4_t* ucs4 = 0;
 
   // return the first non-empty comment
   do
   {
     frame = id3_tag_findframe(tag, ID3_FRAME_COMMENT, commentNumber++);
-    if (frame == 0)
-           return id3_ucs4_empty;
-
-    *encoding = id3_field_gettextencoding(id3_frame_field(frame, 0));
 
-    field = id3_frame_field(frame, 3);
-    if (field == 0)
-      return id3_ucs4_empty;
+    if (frame && frame->nfields == 4)
+    {
+      //get short description
+      field = id3_frame_field(frame, 2);
+      if (field == 0)
+        continue;
+      
+      ucs4 = id3_field_getstring(field);
+
+      // Multiple values are allowed per comment field, but storing different comment
+      // frames requires a different description for each frame. The first COMM frame
+      // encountered without a description will be used as the comment field.
+      // Source http://puddletag.sourceforge.net/source/id3.html
+      if (ucs4 && *ucs4 == 0)//if short description on this frame is empty - consider this the wanted comment frame
+      {
+        //fetch encoding of the frame
+        field = id3_frame_field(frame, 0);
+        
+        if(field == 0)
+          continue;
+          
+        *encoding = id3_field_gettextencoding(field);
+
+        //finally fetch the comment
+        field = id3_frame_field(frame, 3);
+        if (field == 0)
+          continue;
     
-    ucs4 = id3_field_getfullstring(field);
-    if (!ucs4)
-      return id3_ucs4_empty;
+        return id3_field_getfullstring(field);
+      }
+    }
   }
-  while (*ucs4 == 0);
+  while (frame);
   return ucs4;
 }
 
@@ -330,7 +350,7 @@ int id3_metadata_setcomment(struct id3_tag* tag, id3_ucs4_t* value)
   frame = id3_tag_findframe(tag, ID3_FRAME_COMMENT, 0);
   if (frame == 0)
   {
-         frame = id3_frame_new(ID3_FRAME_COMMENT);
+    frame = id3_frame_new(ID3_FRAME_COMMENT);
     id3_tag_attachframe(tag, frame);
   }
 
diff --git a/lib/libnfs/001_fix_hanewin.patch b/lib/libnfs/001_fix_hanewin.patch
new file mode 100644 (file)
index 0000000..507fbe6
--- /dev/null
@@ -0,0 +1,12 @@
+--- lib/libnfs.c       2011-09-02 12:45:30.000000000 +0200
++++ lib/libnfs.c       2011-12-04 21:16:07.000000000 +0100
+@@ -666,6 +666,9 @@
+       if (res->GETATTR3res_u.resok.obj_attributes.type == NF3DIR) {
+               st.st_mode |= S_IFDIR ;
+       }
++       if (res->GETATTR3res_u.resok.obj_attributes.type == NF3REG) {                                                                                                                                            
++              st.st_mode |= S_IFREG ;                                                                                                                                                                          
++        } 
+         st.st_nlink   = res->GETATTR3res_u.resok.obj_attributes.nlink;
+         st.st_uid     = res->GETATTR3res_u.resok.obj_attributes.uid;
+         st.st_gid     = res->GETATTR3res_u.resok.obj_attributes.gid;
index 266a3e2..9bd186c 100644 (file)
@@ -35,6 +35,7 @@ $(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
        rm -rf $(SOURCE)
        $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
        echo $(SOURCE) > .gitignore
+       cd $(SOURCE); patch -p0 < ../001_fix_hanewin.patch
        cd $(SOURCE);./bootstrap;$(CONFIGURE)
 
 $(SO_NAME): $(SOURCE)
diff --git a/lib/libshairport/007_fix_syslog_defines.patch b/lib/libshairport/007_fix_syslog_defines.patch
new file mode 100644 (file)
index 0000000..4d9b834
--- /dev/null
@@ -0,0 +1,24 @@
+--- src/shairport.h    2011-10-01 04:09:16.000000000 +0200
++++ src/shairport.h    2011-11-07 18:05:05.000000000 +0100
+@@ -16,10 +16,17 @@
+ #define HWID_SIZE 6
+ #define SHAIRPORT_LOG 1
+-#define LOG_INFO     1
+-#define LOG_DEBUG    5
+-#define LOG_DEBUG_V  6
+-#define LOG_DEBUG_VV 7
++
++#ifndef LOG_INFO
++#define LOG_INFO     5
++#endif
++
++#ifndef LOG_DEBUG
++#define LOG_DEBUG    6
++#endif
++
++#define LOG_DEBUG_V  7
++#define LOG_DEBUG_VV 8
+ struct shairbuffer
+ {
diff --git a/lib/libshairport/008-add-missing-libs.patch b/lib/libshairport/008-add-missing-libs.patch
new file mode 100644 (file)
index 0000000..6efd302
--- /dev/null
@@ -0,0 +1,21 @@
+--- configure.in-org   2011-11-08 11:53:42.802419355 -0500
++++ configure.in       2011-11-08 11:55:38.082419413 -0500
+@@ -11,8 +11,9 @@ AC_PROG_LIBTOOL
+ # Checks for libraries.
+ #AC_CHECK_LIB([c],   [main])
+-#AC_CHECK_LIB([m],   [main])
++AC_CHECK_LIB([m],   [main])
+ AC_CHECK_LIB([ssl], [main],, AC_MSG_ERROR($missing_library))
++AC_CHECK_LIB([crypto], [main],, AC_MSG_ERROR($missing_library))
+ AC_CHECK_LIB([pthread], [main],, AC_MSG_ERROR($missing_library))
+ OUTPUT_FILES="Makefile"
+@@ -21,4 +22,4 @@ LIBDIR=$PREFIX
+ AC_CONFIG_FILES([${OUTPUT_FILES}])
+ AC_OUTPUT(Makefile src/Makefile)
+-AC_OUTPUT
+\ No newline at end of file
++AC_OUTPUT
+
diff --git a/lib/libshairport/009_fix_ipv6.patch b/lib/libshairport/009_fix_ipv6.patch
new file mode 100644 (file)
index 0000000..01ff026
--- /dev/null
@@ -0,0 +1,22 @@
+--- src/socketlib.c    2012-01-04 20:41:05.000000000 +0100
++++ src/socketlib.c    2012-01-04 20:35:53.000000000 +0100
+@@ -48,7 +48,7 @@
+   if((tSock==-1) && (pAddrInfo->ai_family == AF_INET6) && (errno == EAFNOSUPPORT))
+   {
+     //Fallback to ipv4
+-    perror("Failed to create ipv6 socket. Trying ipv4");
++    xprintf("Failed to create ipv6 socket. Trying ipv4");
+     pAddrInfo->ai_family = AF_INET;
+     tSock = socket(pAddrInfo->ai_family, pAddrInfo->ai_socktype, 0);
+   }
+@@ -158,8 +158,8 @@
+     sprintf(tService, "%d", pPort); // copies port to string
+     int tFamily = AF_INET;
+     #ifdef AF_INET6
+-    //printf("Listening on IPv6 Socket\n");
+-    //tFamily = AF_INET6;
++    xprintf("Listening on IPv6 Socket\n");
++    tFamily = AF_INET6;
+     #else
+     //printf("Listening on IPv4 Socket");
+     #endif
index b977104..62ee95c 100644 (file)
@@ -42,6 +42,9 @@ $(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
        cd $(SOURCE); patch -p0 < ../004_fix_bad_access.patch
        cd $(SOURCE); patch -p0 < ../005_fix_shutdown.patch
        cd $(SOURCE); patch -p0 < ../006_no_printf.patch
+       cd $(SOURCE); patch -p0 < ../007_fix_syslog_defines.patch
+       cd $(SOURCE); patch -p0 < ../008-add-missing-libs.patch
+       cd $(SOURCE); patch -p0 < ../009_fix_ipv6.patch
        cd $(SOURCE); autoreconf -vif
        cd $(SOURCE); $(CONFIGURE)
 
@@ -50,10 +53,11 @@ $(SO_NAME): $(SOURCE)
 
 install:
        make -C $(SOURCE) install
+       ldconfig
 
 clean:
-       make -C $(SOURCE) clean
+       rm -rf $(SOURCE)
+       #make -C $(SOURCE) clean
 
 distclean::
        rm -rf $(SOURCE)
-
index bb3991c..013c951 100644 (file)
Binary files a/media/Splash.png and b/media/Splash.png differ
index 51ee6ad..a57be50 100644 (file)
Binary files a/media/weather.zip and b/media/weather.zip differ
index 18605e0..4392867 100644 (file)
@@ -1,5 +1,5 @@
 ; filename                          mirror of the file
-boost-1_46_1-xbmc-win32.7z                     http://mirrors.xbmc.org/build-deps/win32/
+boost-1_46_1-xbmc-win32-1.7z                   http://mirrors.xbmc.org/build-deps/win32/
 ;boost_1_46_1-headers-win32.7z      http://mirrors.xbmc.org/build-deps/win32/
 ;boost_1_46_1-libs-win32.7z         http://mirrors.xbmc.org/build-deps/win32/
 ;boost_1_46_1-debug-libs-win32.7z   http://mirrors.xbmc.org/build-deps/win32/
index 94554c2..1cf948c 100644 (file)
@@ -20,7 +20,7 @@ xcopy lib\* "%MINGW_INSTALL_PATH%\lib" /E /Q /I /Y
 xcopy share\* "%MINGW_INSTALL_PATH%\share" /E /Q /I /Y
 xcopy libexec\* "%MINGW_INSTALL_PATH%\libexec" /E /Q /I /Y
 xcopy mingw32\* "%MINGW_INSTALL_PATH%\mingw32" /E /Q /I /Y
-copy yasm-1.1.0-win32.exe "%MINGW_INSTALL_PATH%\bin\yasm.exe" /Y
+copy yasm-1.2.0-win32.exe "%MINGW_INSTALL_PATH%\bin\yasm.exe" /Y
 copy xasm.exe "%MINGW_INSTALL_PATH%\bin\xasm.exe" /Y
 copy mads.exe "%MINGW_INSTALL_PATH%\bin\mads.exe" /Y
 rem xcopy curl-7.21.0-devel-mingw32\include\curl "%CUR_PATH%\include\curl" /E /Q /I /Y
index 8229629..7a52d8b 100644 (file)
@@ -1,13 +1,13 @@
 ; filename                                  mirror                                                      source of the file
-mingwrt-3.18-mingw32-dev.tar.gz             http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.18/
-mingwrt-3.18-mingw32-dll.tar.gz             http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.18/
+mingwrt-3.20-mingw32-dev.tar.gz             http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.20/
+mingwrt-3.20-mingw32-dll.tar.gz             http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.20/
 w32api-3.17-2-mingw32-dev.tar.lzma          http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/Win32-API/w32api-3.17/
-gcc-core-4.5.2-1-mingw32-bin.tar.lzma       http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.5.2-1/
-gcc-c++-4.5.2-1-mingw32-bin.tar.lzma        http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.5.2-1/
-libstdc++-4.5.2-1-mingw32-dll-6.tar.lzma    http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.5.2-1/
-binutils-2.21-3-mingw32-bin.tar.lzma        http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/GNU-Binutils/binutils-2.21/
-yasm-1.1.0-win32.exe                        http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://www.tortall.net/projects/yasm/releases/
-dlfcn-win32-static-r19.tar.bz2              http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://dlfcn-win32.googlecode.com/files/
+gcc-core-4.6.2-1-mingw32-bin.tar.lzma       http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.6.2-1/
+gcc-c++-4.6.2-1-mingw32-bin.tar.lzma        http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.6.2-1/
+libstdc++-4.6.2-1-mingw32-dll-6.tar.lzma    http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.6.2-1/
+binutils-2.22-1-mingw32-bin.tar.lzma        http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/GNU-Binutils/binutils-2.22/
+yasm-1.2.0-win32.exe                        http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://www.tortall.net/projects/yasm/releases/
+dlfcn-win32-static-r19.tar.bz2              http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://code.google.com/p/dlfcn-win32/downloads/list
 libexpat-2.0.1-1-mingw32-dev.tar.gz         http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/expat/expat-2.0.1-1/
 libz-1.2.5-1-mingw32-dev.tar.lzma           http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/zlib/zlib-1.2.5-1-mingw32/
 libgmp-5.0.1-1-mingw32-dll-10.tar.lzma      http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/gmp/gmp-5.0.1-1/
@@ -15,12 +15,13 @@ libmpc-0.8.1-1-mingw32-dll-2.tar.lzma       http://mirrors.xbmc.org/build-deps/w
 libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma      http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/mpfr/mpfr-2.4.1-1/
 automake1.11-1.11.1-1-mingw32-bin.tar.lzma  http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/automake/automake1.11/automake1.11-1.11.1-1/
 libtool-2.4-1-mingw32-bin.tar.lzma          http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/libtool/libtool-2.4-1/
-mads_1.9.2.7z                               http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://mads.atari8.info/
+mads_1.9.3.7z                               http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://mads.atari8.info/
 xasm-3.0.2-windows.zip                      http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://atariarea.krap.pl/x-asm/
+plibc-0.1.6.zip                             http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://sourceforge.net/projects/plibc/files/plibc/0.1.6/
+pthreads-w32-2.9.0-mingw32-pre-20110507-2-dev.tar.lzma   http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/pthreads-w32/pthreads-w32-2.9.0-pre-20110507-2/pthreads-w32-2.9.0-mingw32-pre-20110507-2-dev.tar.lzma
+libpthreadgc-2.9.0-mingw32-pre-20110507-2-dll-2.tar.lzma       http://mirrors.xbmc.org/build-deps/win32/mingw-msys/    http://downloads.sourceforge.net/project/mingw/MinGW/Base/pthreads-w32/pthreads-w32-2.9.0-pre-20110507-2/libpthreadgc-2.9.0-mingw32-pre-20110507-2-dll-2.tar.lzma
+gnutls-dev_2.4.2-1_win32.zip                http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/gnutls-dev_2.4.2-1_win32.zip
+gettext-0.17-1-mingw32-dev.tar.lzma         http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/gettext/gettext-0.17-1/gettext-0.17-1-mingw32-dev.tar.lzma
 libintl-0.17-1-mingw32-dll-8.tar.lzma       http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://sourceforge.net/projects/mingw/files/MinGW/gettext/gettext-0.17-1/
 libiconv-1.13.1-1-mingw32-dll-2.tar.lzma    http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://sourceforge.net/projects/mingw/files/MinGW/libiconv/libiconv-1.13.1-1/
-libiconv-1.13.1-1-mingw32-dev.tar.lzma      http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://sourceforge.net/projects/mingw/files/MinGW/libiconv/libiconv-1.13.1-1/
-plibc-0.1.5.zip                             http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://sourceforge.net/projects/plibc/files/plibc/0.1.5/
-pthreads-w32-2.8.0-3-mingw32-dev.tar.lzma   http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/pthreads-w32/pthreads-w32-2.8.0-3/pthreads-w32-2.8.0-3-mingw32-dev.tar.lzma
-gnutls-dev_2.4.2-1_win32.zip                http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/gnutls-dev_2.4.2-1_win32.zip
-gettext-0.17-1-mingw32-dev.tar.lzma         http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://downloads.sourceforge.net/project/mingw/MinGW/gettext/gettext-0.17-1/gettext-0.17-1-mingw32-dev.tar.lzma
\ No newline at end of file
+libiconv-1.13.1-1-mingw32-dev.tar.lzma      http://mirrors.xbmc.org/build-deps/win32/mingw-msys/        http://sourceforge.net/projects/mingw/files/MinGW/libiconv/libiconv-1.13.1-1/
\ No newline at end of file
index 4613672..1be8257 100644 (file)
@@ -20,7 +20,7 @@ xz-4.999.9beta_20100401-1-msys-1.0.13-bin.tar.gz        http://mirrors.xbmc.org/
 patch-2.6.1-1-msys-1.0.13-bin.tar.lzma                  http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/patch/patch-2.6.1-1/
 perl-5.6.1_2-2-msys-1.0.13-bin.tar.lzma                 http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/perl/perl-5.6.1_2-2/
 libcrypt-1.1_1-3-msys-1.0.13-dll-0.tar.lzma             http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/crypt/crypt-1.1_1-3/
-autoconf-2.67-1-msys-1.0.15-bin.tar.lzma                http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/autoconf/autoconf-2.67-1/
+autoconf-2.68-1-msys-1.0.17-bin.tar.lzma                http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/autoconf/autoconf-2.68-1/
 m4-1.4.14-1-msys-1.0.13-bin.tar.lzma                    http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/m4/m4-1.4.14-1/
 ; to get pr.exe
 coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2             http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://www.finalmediaplayer.com/downloads/3rdparty/
@@ -29,4 +29,4 @@ findutils-4.4.2-2-msys-1.0.13-bin.tar.lzma              http://mirrors.xbmc.org/
 automake-1.11.1-1-msys-1.0.13-bin.tar.lzma              http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/automake/automake-1.11.1-1/
 mktemp-1.6-2-msys-1.0.13-bin.tar.lzma                   http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/mktemp/mktemp-1.6-2/
 texinfo-4.13a-2-msys-1.0.13-bin.tar.lzma                               http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/texinfo/texinfo-4.13a-2/
-libtool-2.4-1-msys-1.0.15-bin.tar.lzm                   http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/libtool/libtool-2.4-1/libtool-2.4-1-msys-1.0.15-bin.tar.lzma
\ No newline at end of file
+libtool-2.4-1-msys-1.0.15-bin.tar.lzma                  http://mirrors.xbmc.org/build-deps/win32/mingw-msys/      http://downloads.sourceforge.net/project/mingw/MSYS/libtool/libtool-2.4-1/libtool-2.4-1-msys-1.0.15-bin.tar.lzma
\ No newline at end of file
index cf5faf6..7a2f8e3 100644 (file)
@@ -7,7 +7,7 @@ CALL dlextract.bat libbluray %FILES%
 
 cd %TMP_PATH%
 
-xcopy libbluray-8e5d24-win32\include\libbluray "%CUR_PATH%\include\libbluray" /E /Q /I /Y
-copy libbluray-8e5d24-win32\bin\libbluray.dll "%XBMC_PATH%\system\players\dvdplayer\" /Y
+xcopy libbluray-0.2.1-win32\include\libbluray "%CUR_PATH%\include\libbluray" /E /Q /I /Y
+copy libbluray-0.2.1-win32\bin\libbluray.dll "%XBMC_PATH%\system\players\dvdplayer\" /Y
 
 cd %LOC_PATH%
index 3d38ed0..5362ebd 100644 (file)
@@ -1,2 +1,2 @@
 ; filename                          source of the file
-libbluray-8e5d24-win32.7z           http://mirrors.xbmc.org/build-deps/win32/
+libbluray-0.2.1-win32.7z            http://mirrors.xbmc.org/build-deps/win32/
index bfd63f9..2698b9a 100644 (file)
@@ -7,11 +7,13 @@ CALL dlextract.bat libcdio %FILES%
 
 cd %TMP_PATH%
 
-xcopy libcdio-0.83git-win32\include\* "%CUR_PATH%\include\" /E /Q /I /Y
-copy libcdio-0.83git-win32\lib\libcdio.dll.lib "%CUR_PATH%\lib\" /Y
-copy libcdio-0.83git-win32\lib\libcdio-12.dll "%XBMC_PATH%\project\Win32BuildSetup\dependencies\" /Y
+xcopy libcdio-0.83-win32\include\* "%CUR_PATH%\include\" /E /Q /I /Y
+copy libcdio-0.83-win32\lib\libcdio.dll.lib "%CUR_PATH%\lib\" /Y
+copy libcdio-0.83-win32\bin\libcdio-13.dll "%XBMC_PATH%\project\Win32BuildSetup\dependencies\" /Y
+copy libcdio-0.83-win32\bin\libiconv-2.dll "%XBMC_PATH%\project\Win32BuildSetup\dependencies\" /Y
 
 rem for debugging
-copy libcdio-0.83git-win32\lib\libcdio-12.dll "%XBMC_PATH%\project\VS2010Express\XBMC\Debug (DirectX)\" /Y
+copy libcdio-0.83-win32\bin\libcdio-13.dll "%XBMC_PATH%\project\VS2010Express\XBMC\Debug (DirectX)\" /Y
+copy libcdio-0.83-win32\bin\libiconv-2.dll "%XBMC_PATH%\project\VS2010Express\XBMC\Debug (DirectX)\" /Y
 
 cd %LOC_PATH%
index 76e70f2..ab52618 100644 (file)
@@ -1,2 +1,2 @@
 ; filename                     mirror of the file
-libcdio-0.83git-win32.7z               http://mirrors.xbmc.org/build-deps/win32/
+libcdio-0.83-win32.7z          http://mirrors.xbmc.org/build-deps/win32/
index 2a776bc..86a2797 100644 (file)
@@ -7,8 +7,10 @@ CALL dlextract.bat libcec %FILES%
 
 cd %TMP_PATH%
 
-xcopy libcec\include\* "%CUR_PATH%\include\libcec" /E /Q /I /Y
-xcopy libcec\*.dll "%CUR_PATH%\lib\." /Y
-xcopy libcec\*.lib "%CUR_PATH%\lib\." /Y
+mkdir "%CUR_PATH%\include\libcec"
+xcopy libcec\include\* "%CUR_PATH%\include\libcec\." /E /Q /I /Y
 
-cd %LOC_PATH%
\ No newline at end of file
+copy libcec\libcec.dll "%XBMC_PATH%\system\."
+copy libcec\pthreadVC2.dll "%XBMC_PATH%\system\."
+
+cd %LOC_PATH%
index 9019c8b..daa4e75 100644 (file)
@@ -1,2 +1,3 @@
-; filename                        mirror                                      source of the file
-libcec2.zip                       http://xbmc.opdenkamp.eu/                   http://packages.pulse-eight.net/
+; filename                        source of the file
+
+libcec-latest.zip                 http://packages.pulse-eight.net/windows/
index 1141624..ed08aa9 100644 (file)
@@ -9,9 +9,9 @@ cd %TMP_PATH%
 
 rem we are using zlib1.dll from the zlib package
 rem I found no reference to zlib1.dll in any curl dll
-del curl-7.21.1-devel-mingw32\bin\zlib1.dll
+del curl-7.21.6-devel-mingw32\bin\zlib1.dll
 
-xcopy curl-7.21.1-devel-mingw32\include\curl "%CUR_PATH%\include\curl" /E /Q /I /Y
-copy curl-7.21.1-devel-mingw32\bin\*.dll "%XBMC_PATH%\system\" /Y
+xcopy curl-7.21.6-devel-mingw32\include\curl "%CUR_PATH%\include\curl" /E /Q /I /Y
+copy curl-7.21.6-devel-mingw32\bin\*.dll "%XBMC_PATH%\system\" /Y
 
 cd %LOC_PATH%
index 5eedab1..371cf72 100644 (file)
@@ -1,2 +1,2 @@
 ; filename                        mirror                                      source of the file
-curl-7.21.1-devel-mingw32.zip     http://mirrors.xbmc.org/build-deps/win32/   http://www.gknw.de/mirror/curl/win32/old_releases/
+curl-7.21.6-devel-mingw32.zip     http://mirrors.xbmc.org/build-deps/win32/   http://www.gknw.de/mirror/curl/win32/old_releases/
index 1e272f7..b7d39d2 100644 (file)
@@ -7,7 +7,7 @@ CALL dlextract.bat libnfs %FILES%
 
 cd %TMP_PATH%
 
-xcopy libnfs-20110911-win32\include\* "%CUR_PATH%\include\" /E /Q /I /Y
-copy libnfs-20110911-win32\bin\libnfs.dll "%XBMC_PATH%\system\" /Y
+xcopy libnfs-20120112-win32\include\* "%CUR_PATH%\include\" /E /Q /I /Y
+copy libnfs-20120112-win32\bin\libnfs.dll "%XBMC_PATH%\system\" /Y
 
 cd %LOC_PATH%
index 13c3234..bfd1a04 100644 (file)
@@ -1,2 +1,2 @@
 ; filename                          source of the file
-libnfs-20110911-win32.7z            http://mirrors.xbmc.org/build-deps/win32/
+libnfs-20120112-win32.7z            http://mirrors.xbmc.org/build-deps/win32/
index ee54a23..f0061b6 100644 (file)
@@ -7,7 +7,7 @@ CALL dlextract.bat libplist %FILES%
 
 cd %TMP_PATH%
 
-xcopy libplist-1.7-win32\include\* "%CUR_PATH%\include\" /E /Q /I /Y
-xcopy libplist-1.7-win32\bin\* "%XBMC_PATH%\system\" /E /Q /I /Y
+xcopy libplist-1.7-win32-2\include\* "%CUR_PATH%\include\" /E /Q /I /Y
+xcopy libplist-1.7-win32-2\bin\* "%XBMC_PATH%\system\" /E /Q /I /Y
 
 cd %LOC_PATH%
index 5edc4f4..affb546 100644 (file)
@@ -1,2 +1,2 @@
 ; filename                          source of the file
-libplist-1.7-win32.7z               http://mirrors.xbmc.org/build-deps/win32/
+libplist-1.7-win32-2.7z               http://mirrors.xbmc.org/build-deps/win32/
index d564a39..b229bee 100644 (file)
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\win32\;..\..\xbmc\cores\dvdplayer;..\..\lib;..\..\lib\ffmpeg;..\..\lib\ffmpeg\include-xbmc-win32;..\..\lib\liblame\include;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WINDOWS;_MSVC;WIN32;_DEBUG;_WIN32_WINNT=0x0501;NTDDI_VERSION=0x05010300;NOMINMAX;_USE_32BIT_TIME_T;HAS_GL;__STDC_CONSTANT_MACROS;HAVE_LIBCEC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>TARGET_WINDOWS;_WINDOWS;_MSVC;WIN32;_DEBUG;_WIN32_WINNT=0x0501;NTDDI_VERSION=0x05010300;NOMINMAX;_USE_32BIT_TIME_T;HAS_GL;__STDC_CONSTANT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>false</MinimalRebuild>
       <ExceptionHandling>Async</ExceptionHandling>
       <BasicRuntimeChecks>Default</BasicRuntimeChecks>
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDCodecs\Video\CrystalHD.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDInputStreams\DVDInputStreamBluray.cpp" />
     <ClCompile Include="..\..\xbmc\cores\paplayer\BXAcodec.cpp" />
+    <ClCompile Include="..\..\xbmc\cores\paplayer\PCMCodec.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\RenderCapture.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\WinVideoFilter.cpp" />
     <ClCompile Include="..\..\xbmc\CueDocument.cpp" />
     <ClCompile Include="..\..\xbmc\filesystem\CacheCircular.cpp" />
     <ClCompile Include="..\..\xbmc\filesystem\FileNFS.cpp" />
     <ClCompile Include="..\..\xbmc\filesystem\FilePipe.cpp" />
+    <ClCompile Include="..\..\xbmc\filesystem\FileUPnP.cpp" />
     <ClCompile Include="..\..\xbmc\FileSystem\iso9660.cpp" />
     <ClCompile Include="..\..\xbmc\FileSystem\ISO9660Directory.cpp" />
     <ClCompile Include="..\..\xbmc\FileSystem\FileUDF.cpp" />
     <ClCompile Include="..\..\xbmc\FileSystem\udf25.cpp" />
     <ClCompile Include="..\..\xbmc\FileSystem\UDFDirectory.cpp" />
     <ClCompile Include="..\..\xbmc\FileSystem\VideoDatabaseDirectory\DirectoryNodeCountry.cpp" />
+    <ClCompile Include="..\..\xbmc\filesystem\windows\WINFileSMB.cpp" />
+    <ClCompile Include="..\..\xbmc\filesystem\windows\WINSMBDirectory.cpp" />
     <ClCompile Include="..\..\xbmc\filesystem\ZeroconfDirectory.cpp" />
     <ClCompile Include="..\..\xbmc\GUIInfoManager.cpp" />
     <ClCompile Include="..\..\xbmc\GUILargeTextureManager.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\DirectXGraphics.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\DirtyRegionSolvers.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\DirtyRegionTracker.cpp" />
-    <ClCompile Include="..\..\xbmc\guilib\FrameBufferObject.cpp" />
+    <ClCompile Include="..\..\xbmc\guilib\FrameBufferObject.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\guilib\GraphicContext.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIAction.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIAudioManager.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIFontManager.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIFontTTF.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIFontTTFDX.cpp" />
-    <ClCompile Include="..\..\xbmc\guilib\GUIFontTTFGL.cpp" />
+    <ClCompile Include="..\..\xbmc\guilib\GUIFontTTFGL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\guilib\GUIImage.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIIncludes.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIInfoTypes.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUITextLayout.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUITexture.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUITextureD3D.cpp" />
-    <ClCompile Include="..\..\xbmc\guilib\GUITextureGL.cpp" />
-    <ClCompile Include="..\..\xbmc\guilib\GUITextureGLES.cpp" />
+    <ClCompile Include="..\..\xbmc\guilib\GUITextureGL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\guilib\GUITextureGLES.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\guilib\GUIToggleButtonControl.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIVideoControl.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\GUIVisualisationControl.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\Key.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\LocalizeStrings.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\MatrixGLES.cpp" />
-    <ClCompile Include="..\..\xbmc\guilib\Shader.cpp" />
+    <ClCompile Include="..\..\xbmc\guilib\Shader.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\guilib\Texture.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\TextureBundle.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\TextureBundleXBT.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\TextureBundleXPR.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\TextureDX.cpp" />
-    <ClCompile Include="..\..\xbmc\guilib\TextureGL.cpp" />
+    <ClCompile Include="..\..\xbmc\guilib\TextureGL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\guilib\TextureManager.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\VisibleEffect.cpp" />
     <ClCompile Include="..\..\xbmc\guilib\XBTF.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\AudioLibrary.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\FileItemHandler.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\FileOperations.cpp" />
+    <ClCompile Include="..\..\xbmc\interfaces\json-rpc\GUIOperations.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\InputOperations.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\JSONRPC.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\JSONServiceDescription.cpp" />
     <ClCompile Include="..\..\xbmc\network\UdpClient.cpp" />
     <ClCompile Include="..\..\xbmc\network\UPnP.cpp" />
     <ClCompile Include="..\..\xbmc\network\WebServer.cpp" />
+    <ClCompile Include="..\..\xbmc\network\websocket\WebSocket.cpp" />
+    <ClCompile Include="..\..\xbmc\network\websocket\WebSocketManager.cpp" />
+    <ClCompile Include="..\..\xbmc\network\websocket\WebSocketV13.cpp" />
+    <ClCompile Include="..\..\xbmc\network\websocket\WebSocketV8.cpp" />
     <ClCompile Include="..\..\xbmc\network\windows\NetworkWin32.cpp" />
     <ClCompile Include="..\..\xbmc\network\windows\ZeroconfWIN.cpp" />
     <ClCompile Include="..\..\xbmc\network\Zeroconf.cpp" />
     <ClCompile Include="..\..\xbmc\programs\Shortcut.cpp" />
     <ClCompile Include="..\..\xbmc\rendering\dx\GUIWindowTestPatternDX.cpp" />
     <ClCompile Include="..\..\xbmc\rendering\dx\RenderSystemDX.cpp" />
-    <ClCompile Include="..\..\xbmc\rendering\gl\GUIWindowTestPatternGL.cpp" />
-    <ClCompile Include="..\..\xbmc\rendering\gl\RenderSystemGL.cpp" />
+    <ClCompile Include="..\..\xbmc\rendering\gl\GUIWindowTestPatternGL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\rendering\gl\RenderSystemGL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\rendering\RenderSystem.cpp" />
     <ClCompile Include="..\..\xbmc\SectionLoader.cpp" />
     <ClCompile Include="..\..\xbmc\settings\AdvancedSettings.cpp" />
     <ClCompile Include="..\..\xbmc\threads\Event.cpp" />
     <ClCompile Include="..\..\xbmc\threads\LockFree.cpp" />
     <ClCompile Include="..\..\xbmc\threads\platform\Implementation.cpp" />
+    <ClInclude Include="..\..\xbmc\cores\AudioRenderers\IAudioRenderer.h" />
+    <ClInclude Include="..\..\xbmc\cores\paplayer\PCMCodec.h" />
+    <ClInclude Include="..\..\xbmc\filesystem\FileUPnP.h" />
+    <ClInclude Include="..\..\xbmc\filesystem\windows\WINFileSMB.h" />
+    <ClInclude Include="..\..\xbmc\filesystem\windows\WINSMBDirectory.h" />
+    <ClInclude Include="..\..\xbmc\interfaces\python\xbmcmodule\pythreadstate.h" />
+    <ClInclude Include="..\..\xbmc\network\websocket\WebSocket.h" />
+    <ClInclude Include="..\..\xbmc\network\websocket\WebSocketManager.h" />
+    <ClInclude Include="..\..\xbmc\network\websocket\WebSocketV13.h" />
+    <ClInclude Include="..\..\xbmc\network\websocket\WebSocketV8.h" />
+    <ClInclude Include="..\..\xbmc\interfaces\json-rpc\IJSONRPCAnnouncer.h" />
+    <ClInclude Include="..\..\xbmc\interfaces\json-rpc\JSONRPCUtils.h" />
+    <ClInclude Include="..\..\xbmc\interfaces\json-rpc\GUIOperations.h" />
     <ClInclude Include="..\..\xbmc\threads\platform\win\Implementation.cpp" />
     <ClCompile Include="..\..\xbmc\threads\SystemClock.cpp" />
     <ClCompile Include="..\..\xbmc\threads\Thread.cpp" />
     <ClCompile Include="..\..\xbmc\utils\Archive.cpp" />
     <ClCompile Include="..\..\xbmc\utils\AsyncFileCopy.cpp" />
     <ClCompile Include="..\..\xbmc\utils\AutoPtrHandle.cpp" />
+    <ClCompile Include="..\..\xbmc\utils\Base64.cpp" />
     <ClCompile Include="..\..\xbmc\utils\BitstreamStats.cpp" />
     <ClCompile Include="..\..\xbmc\utils\CharsetConverter.cpp" />
     <ClCompile Include="..\..\xbmc\utils\CPUInfo.cpp" />
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">CompileAsCpp</CompileAs>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\utils\GLUtils.cpp" />
+    <ClCompile Include="..\..\xbmc\utils\GLUtils.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\utils\HTMLTable.cpp" />
     <ClCompile Include="..\..\xbmc\utils\HTMLUtil.cpp" />
     <ClCompile Include="..\..\xbmc\utils\HttpHeader.cpp" />
     <ClCompile Include="..\..\xbmc\utils\HttpParser.cpp" />
+    <ClCompile Include="..\..\xbmc\utils\HttpResponse.cpp" />
     <ClCompile Include="..\..\xbmc\utils\InfoLoader.cpp" />
     <ClCompile Include="..\..\xbmc\utils\JobManager.cpp" />
     <ClCompile Include="..\..\xbmc\utils\JSONVariantParser.cpp" />
     <ClCompile Include="..\..\xbmc\utils\LCD.cpp" />
     <ClCompile Include="..\..\xbmc\utils\log.cpp" />
     <ClCompile Include="..\..\xbmc\utils\md5.cpp" />
+    <ClCompile Include="..\..\xbmc\utils\Mime.cpp" />
     <ClCompile Include="..\..\xbmc\utils\PCMAmplifier.cpp" />
     <ClCompile Include="..\..\xbmc\utils\PerformanceSample.cpp" />
     <ClCompile Include="..\..\xbmc\utils\PerformanceStats.cpp" />
     <ClCompile Include="..\..\xbmc\win32\WIN32Util.cpp" />
     <ClCompile Include="..\..\xbmc\win32\WINDirectSound.cpp" />
     <ClCompile Include="..\..\xbmc\win32\WindowHelper.cpp" />
-    <ClCompile Include="..\..\xbmc\win32\WINFileSMB.cpp" />
-    <ClCompile Include="..\..\xbmc\win32\WINSMBDirectory.cpp" />
     <ClCompile Include="..\..\xbmc\win32\XBMC_PC.cpp" />
     <ClCompile Include="..\..\xbmc\cores\DummyVideoPlayer.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDAudio.cpp" />
     </ClCompile>
     <ClCompile Include="..\..\xbmc\cores\DllLoader\exports\util\EmuFileWrapper.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\BaseRenderer.cpp" />
-    <ClCompile Include="..\..\xbmc\cores\VideoRenderers\LinuxRendererGL.cpp" />
+    <ClCompile Include="..\..\xbmc\cores\VideoRenderers\LinuxRendererGL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\OverlayRenderer.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererDX.cpp" />
-    <ClCompile Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererGL.cpp" />
+    <ClCompile Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererGL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererUtil.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\RenderManager.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\WinRenderer.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\ConvolutionKernels.cpp" />
-    <ClCompile Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\VideoFilterShader.cpp" />
+    <ClCompile Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\VideoFilterShader.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\YUV2RGBShader.cpp" />
     <ClCompile Include="..\..\xbmc\cores\AudioRenderers\AudioRendererFactory.cpp" />
     <ClCompile Include="..\..\xbmc\cores\AudioRenderers\NullDirectSound.cpp" />
     <ClCompile Include="..\..\xbmc\windowing\windows\WinEventsWin32.cpp" />
     <ClCompile Include="..\..\xbmc\windowing\windows\WinSystemWin32.cpp" />
     <ClCompile Include="..\..\xbmc\windowing\windows\WinSystemWin32DX.cpp" />
-    <ClCompile Include="..\..\xbmc\windowing\windows\WinSystemWin32GL.cpp" />
+    <ClCompile Include="..\..\xbmc\windowing\windows\WinSystemWin32GL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\windowing\WinEventsSDL.cpp" />
     <ClCompile Include="..\..\xbmc\windowing\WinSystem.cpp" />
     <ClCompile Include="..\..\xbmc\windows\GUIMediaWindow.cpp" />
     <ClInclude Include="..\..\xbmc\guilib\DirtyRegion.h" />
     <ClInclude Include="..\..\xbmc\guilib\DirtyRegionSolvers.h" />
     <ClInclude Include="..\..\xbmc\guilib\DirtyRegionTracker.h" />
-    <ClInclude Include="..\..\xbmc\guilib\FrameBufferObject.h" />
+    <ClInclude Include="..\..\xbmc\guilib\FrameBufferObject.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\guilib\Geometry.h" />
     <ClInclude Include="..\..\xbmc\guilib\GraphicContext.h" />
     <ClInclude Include="..\..\xbmc\guilib\gui3d.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUIFontManager.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUIFontTTF.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUIFontTTFDX.h" />
-    <ClInclude Include="..\..\xbmc\guilib\GUIFontTTFGL.h" />
+    <ClInclude Include="..\..\xbmc\guilib\GUIFontTTFGL.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\guilib\GUIImage.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUIIncludes.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUIInfoTypes.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUITextLayout.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUITexture.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUITextureD3D.h" />
-    <ClInclude Include="..\..\xbmc\guilib\GUITextureGL.h" />
-    <ClInclude Include="..\..\xbmc\guilib\GUITextureGLES.h" />
+    <ClInclude Include="..\..\xbmc\guilib\GUITextureGL.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\guilib\GUITextureGLES.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\guilib\GUIToggleButtonControl.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUIVideoControl.h" />
     <ClInclude Include="..\..\xbmc\guilib\GUIVisualisationControl.h" />
     <ClInclude Include="..\..\xbmc\guilib\LocalizeStrings.h" />
     <ClInclude Include="..\..\xbmc\guilib\MatrixGLES.h" />
     <ClInclude Include="..\..\xbmc\guilib\Resolution.h" />
-    <ClInclude Include="..\..\xbmc\guilib\Shader.h" />
+    <ClInclude Include="..\..\xbmc\guilib\Shader.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\guilib\Texture.h" />
     <ClInclude Include="..\..\xbmc\guilib\TextureBundle.h" />
     <ClInclude Include="..\..\xbmc\guilib\TextureBundleXBT.h" />
     <ClInclude Include="..\..\xbmc\guilib\TextureBundleXPR.h" />
     <ClInclude Include="..\..\xbmc\guilib\TextureDX.h" />
-    <ClInclude Include="..\..\xbmc\guilib\TextureGL.h" />
+    <ClInclude Include="..\..\xbmc\guilib\TextureGL.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\guilib\TextureManager.h" />
     <ClInclude Include="..\..\xbmc\guilib\TransformMatrix.h" />
     <ClInclude Include="..\..\xbmc\guilib\Tween.h" />
     <ClInclude Include="..\..\xbmc\programs\Shortcut.h" />
     <ClInclude Include="..\..\xbmc\rendering\dx\GUIWindowTestPatternDX.h" />
     <ClInclude Include="..\..\xbmc\rendering\dx\RenderSystemDX.h" />
-    <ClInclude Include="..\..\xbmc\rendering\gl\GUIWindowTestPatternGL.h" />
-    <ClInclude Include="..\..\xbmc\rendering\gl\RenderSystemGL.h" />
+    <ClInclude Include="..\..\xbmc\rendering\gl\GUIWindowTestPatternGL.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\rendering\gl\RenderSystemGL.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\rendering\RenderSystem.h" />
     <ClInclude Include="..\..\xbmc\SectionLoader.h" />
     <ClInclude Include="..\..\xbmc\settings\AdvancedSettings.h" />
     <ClInclude Include="..\..\xbmc\utils\Archive.h" />
     <ClInclude Include="..\..\xbmc\utils\AsyncFileCopy.h" />
     <ClInclude Include="..\..\xbmc\utils\AutoPtrHandle.h" />
+    <ClInclude Include="..\..\xbmc\utils\Base64.h" />
     <ClInclude Include="..\..\xbmc\utils\BitstreamStats.h" />
     <ClInclude Include="..\..\xbmc\utils\CharsetConverter.h" />
     <ClInclude Include="..\..\xbmc\utils\CPUInfo.h" />
     <ClInclude Include="..\..\xbmc\utils\FileUtils.h" />
     <ClInclude Include="..\..\xbmc\utils\fstrcmp.h" />
     <ClInclude Include="..\..\xbmc\utils\GlobalsHandling.h" />
-    <ClInclude Include="..\..\xbmc\utils\GLUtils.h" />
+    <ClInclude Include="..\..\xbmc\utils\GLUtils.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\utils\HTMLTable.h" />
     <ClInclude Include="..\..\xbmc\utils\HTMLUtil.h" />
     <ClInclude Include="..\..\xbmc\utils\HttpHeader.h" />
     <ClInclude Include="..\..\xbmc\utils\HttpParser.h" />
+    <ClInclude Include="..\..\xbmc\utils\HttpResponse.h" />
     <ClInclude Include="..\..\xbmc\utils\InfoLoader.h" />
     <ClInclude Include="..\..\xbmc\utils\ISerializable.h" />
     <ClInclude Include="..\..\xbmc\utils\Job.h" />
     <ClInclude Include="..\..\xbmc\utils\log.h" />
     <ClInclude Include="..\..\xbmc\utils\MathUtils.h" />
     <ClInclude Include="..\..\xbmc\utils\md5.h" />
+    <ClInclude Include="..\..\xbmc\utils\Mime.h" />
     <ClInclude Include="..\..\xbmc\utils\PCMAmplifier.h" />
     <ClInclude Include="..\..\xbmc\utils\PerformanceSample.h" />
     <ClInclude Include="..\..\xbmc\utils\PerformanceStats.h" />
     <ClInclude Include="..\..\xbmc\win32\WIN32Util.h" />
     <ClInclude Include="..\..\xbmc\win32\WINDirectSound.h" />
     <ClInclude Include="..\..\xbmc\win32\WindowHelper.h" />
-    <ClInclude Include="..\..\xbmc\win32\WINFileSMB.h" />
-    <ClInclude Include="..\..\xbmc\win32\WINSMBDirectory.h" />
     <ClInclude Include="..\..\xbmc\cores\DummyVideoPlayer.h" />
     <ClInclude Include="..\..\xbmc\cores\IPlayer.h" />
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\dvd_config.h" />
     <ClInclude Include="..\..\xbmc\cores\DllLoader\exports\emu_socket\emu_socket.h" />
     <ClInclude Include="..\..\xbmc\cores\DllLoader\exports\util\EmuFileWrapper.h" />
     <ClInclude Include="..\..\xbmc\cores\VideoRenderers\BaseRenderer.h" />
-    <ClInclude Include="..\..\xbmc\cores\VideoRenderers\LinuxRendererGL.h" />
+    <ClInclude Include="..\..\xbmc\cores\VideoRenderers\LinuxRendererGL.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\cores\VideoRenderers\OverlayRenderer.h" />
     <ClInclude Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererDX.h" />
-    <ClInclude Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererGL.h" />
+    <ClInclude Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererGL.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererUtil.h" />
     <ClInclude Include="..\..\xbmc\cores\VideoRenderers\RenderManager.h" />
     <ClInclude Include="..\..\xbmc\cores\VideoRenderers\WinRenderer.h" />
     <ClInclude Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\ConvolutionKernels.h" />
-    <ClInclude Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\VideoFilterShader.h" />
+    <ClInclude Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\VideoFilterShader.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\YUV2RGBShader.h" />
     <ClInclude Include="..\..\xbmc\cores\AudioRenderers\AudioRendererFactory.h" />
     <ClInclude Include="..\..\xbmc\cores\AudioRenderers\NullDirectSound.h" />
     <ClInclude Include="..\..\xbmc\windowing\windows\WinEventsWin32.h" />
     <ClInclude Include="..\..\xbmc\windowing\windows\WinSystemWin32.h" />
     <ClInclude Include="..\..\xbmc\windowing\windows\WinSystemWin32DX.h" />
-    <ClInclude Include="..\..\xbmc\windowing\windows\WinSystemWin32GL.h" />
+    <ClInclude Include="..\..\xbmc\windowing\windows\WinSystemWin32GL.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\windowing\WinEvents.h" />
     <ClInclude Include="..\..\xbmc\windowing\WinEventsSDL.h" />
     <ClInclude Include="..\..\xbmc\windowing\WinSystem.h" />
     </VisualStudio>
   </ProjectExtensions>
   <Import Project="$(SolutionDir)\$(ProjectFileName).targets.user" Condition="Exists('$(SolutionDir)\$(ProjectFileName).targets.user')" />
-</Project>
\ No newline at end of file
+</Project>
index d59d68e..94f56e7 100644 (file)
     <Filter Include="peripherals\dialogs">
       <UniqueIdentifier>{9571e2bc-891d-4496-bcba-2ec3eed45704}</UniqueIdentifier>
     </Filter>
+    <Filter Include="network\websocket">
+      <UniqueIdentifier>{88e84682-dede-4bdf-9e33-a8023dd5ac78}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="filesystem\windows">
+      <UniqueIdentifier>{1cc693eb-11ad-4f53-8640-198d5ab9bcc8}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\xbmc\win32\pch.cpp">
     <ClCompile Include="..\..\xbmc\win32\WindowHelper.cpp">
       <Filter>win32</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\win32\WINFileSMB.cpp">
-      <Filter>win32</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\xbmc\win32\WINSMBDirectory.cpp">
-      <Filter>win32</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\xbmc\win32\XBMC_PC.cpp">
       <Filter>win32</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\interfaces\python\xbmcmodule\pyrendercapture.cpp">
       <Filter>interfaces\python\xbmcmodule</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\xbmc\filesystem\FileUPnP.cpp">
+      <Filter>filesystem</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\cores\paplayer\PCMCodec.cpp">
+      <Filter>cores\paplayer</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\utils\Base64.cpp">
+      <Filter>utils</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\utils\HttpResponse.cpp">
+      <Filter>utils</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\network\websocket\WebSocket.cpp">
+      <Filter>network\websocket</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\network\websocket\WebSocketV8.cpp">
+      <Filter>network\websocket</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\network\websocket\WebSocketManager.cpp">
+      <Filter>network\websocket</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\network\websocket\WebSocketV13.cpp">
+      <Filter>network\websocket</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\filesystem\windows\WINFileSMB.cpp">
+      <Filter>filesystem\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\filesystem\windows\WINSMBDirectory.cpp">
+      <Filter>filesystem\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\interfaces\json-rpc\GUIOperations.cpp">
+      <Filter>interfaces\json-rpc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\utils\Mime.cpp">
+      <Filter>utils</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\xbmc\win32\pch.h">
     <ClInclude Include="..\..\xbmc\win32\WindowHelper.h">
       <Filter>win32</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\win32\WINFileSMB.h">
-      <Filter>win32</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\xbmc\win32\WINSMBDirectory.h">
-      <Filter>win32</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\cores\DummyVideoPlayer.h">
       <Filter>cores</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\threads\platform\win\Implementation.cpp">
       <Filter>threads\platform\win</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\xbmc\filesystem\FileUPnP.h">
+      <Filter>filesystem</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\cores\AudioRenderers\IAudioRenderer.h" />
+    <ClInclude Include="..\..\xbmc\interfaces\python\xbmcmodule\pythreadstate.h">
+      <Filter>interfaces\python\xbmcmodule</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\cores\paplayer\PCMCodec.h">
+      <Filter>cores\paplayer</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\utils\Base64.h">
+      <Filter>utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\utils\HttpResponse.h">
+      <Filter>utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\network\websocket\WebSocket.h">
+      <Filter>network\websocket</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\network\websocket\WebSocketV8.h">
+      <Filter>network\websocket</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\network\websocket\WebSocketManager.h">
+      <Filter>network\websocket</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\network\websocket\WebSocketV13.h">
+      <Filter>network\websocket</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\filesystem\windows\WINFileSMB.h">
+      <Filter>filesystem\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\filesystem\windows\WINSMBDirectory.h">
+      <Filter>filesystem\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\interfaces\json-rpc\JSONRPCUtils.h">
+      <Filter>interfaces\json-rpc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\interfaces\json-rpc\IJSONRPCAnnouncer.h">
+      <Filter>interfaces\json-rpc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\interfaces\json-rpc\GUIOperations.h">
+      <Filter>interfaces\json-rpc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\utils\Mime.h">
+      <Filter>utils</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc">
index 84366f1..66e0aab 100644 (file)
@@ -2,30 +2,40 @@
 
 REM Batch file output: %GIT_REV% variable, containing the git revision
 
-REM Use tgit.exe of TortoiseGit if available
-SET GITEXE="tgit.exe"
-%GITEXE% --version > NUL 2>&1
-IF errorlevel 1 GOTO :notgit
+SET GIT_REV=unknown
+
+
+REM Try wrapped msysgit - must be in the path
+SET GITEXE=git.cmd
+CALL %GITEXE% --help > NUL 2>&1
+IF errorlevel 1 GOTO nowrapmsysgit
 GOTO :extract
 
-:notgit
+:nowrapmsysgit
 
-REM Fallback on msysgit - must be in the path
-SET GITEXE="git.exe"
+REM Fallback on regular msysgit - must be in the path
+SET GITEXE=git.exe
 %GITEXE% --help > NUL 2>&1
-IF errorlevel 1 GOTO :nogit
+IF errorlevel 9009 IF NOT errorlevel 9010 GOTO nomsysgit
 GOTO :extract
 
-:nogit
+:nomsysgit
+
+REM Fallback on tgit.exe of TortoiseGit if available
+SET GITEXE=tgit.exe
+%GITEXE% --version > NUL 2>&1
+IF errorlevel 9009 IF NOT errorlevel 9010 GOTO done
+GOTO :extract
 
-REM Failure - no git tool to extract information.
-SET GIT_REV=Unknown
-GOTO :done
 
 :extract
 
-FOR /F "tokens=1-4 delims=-" %%A IN ('"%GITEXE% --no-pager log --abbrev=7 -n 1 --date=short --pretty=format:"%%cd-%%h""') DO SET GIT_REV=%%A%%B%%C-%%D
-@echo %GIT_REV%
+FOR /F "tokens=1-4 delims=-" %%A IN ('"%GITEXE% rev-list HEAD -n 1 --date=short --pretty=format:"%%cd-%%h""') DO (
+SET GIT_REV=%%A%%B%%C-%%D
+)
+
+
+echo %GIT_REV%
 
 :done
 
index 87a5286..b009eab 100644 (file)
                <yellow>Yellow</yellow>
                <blue>Blue</blue>
                <teletext>Teletext</teletext>
+
+               <!-- new kernel-based lirc button names -->
+               <left>KEY_LEFT</left>
+               <right>KEY_RIGHT</right>
+               <up>KEY_UP</up>
+               <down>KEY_DOWN</down>
+               <select>KEY_OK</select>
+               <start>KEY_HOME</start>
+               <back>KEY_BACK</back>
+               <record>KEY_RECORD</record>
+               <play>KEY_PLAY</play>
+               <pause>KEY_PAUSE</pause>
+               <stop>KEY_STOP</stop>
+               <forward>KEY_FORWARD</forward>
+               <reverse>KEY_REWIND</reverse>
+               <volumeplus>KEY_VOLUMEUP</volumeplus>
+               <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+               <pageplus>KEY_CHANNELUP</pageplus>
+               <pageminus>KEY_CHANNELDOWN</pageminus>
+               <skipplus>KEY_NEXT</skipplus>
+               <skipminus>KEY_AGAIN</skipminus>
+               <mute>KEY_MUTE</mute>
+               <power>KEY_POWER</power>
+               <myvideo>KEY_VIDEO</myvideo>
+               <mymusic>KEY_AUDIO</mymusic>
+               <mytv>LiveTV</mytv>
+               <one>KEY_1</one>
+               <two>KEY_2</two>
+               <three>KEY_3</three>
+               <four>KEY_4</four>
+               <five>KEY_5</five>
+               <six>KEY_6</six>
+               <seven>KEY_7</seven>
+               <eight>KEY_8</eight>
+               <nine>KEY_9</nine>
+               <zero>KEY_0</zero>
+               <red>KEY_RED</red>
+               <green>KEY_GREEN</green>
+               <yellow>KEY_YELLOW</yellow>
+               <blue>KEY_BLUE</blue>
+               <menu>KEY_DVD</menu>
+               <clear>KEY_CLEAR</clear>
+               <enter>KEY_ENTER</enter>
        </remote>
        
        <remote device="XboxDVDDongle">
                <right>KEY_RIGHT</right>
                <up>KEY_UP</up>
                <down>KEY_DOWN</down>
-               <select>#KEY_OK</select>
+               <select>KEY_OK</select>
                <pageplus>KEY_CHANNELUP</pageplus>
                <pageminus>KEY_CHANNELDOWN</pageminus>
                <back>KEY_BACKSPACE</back>
                <right>KEY_RIGHT</right>
                <up>KEY_UP</up>
                <down>KEY_DOWN</down>
+               <select>KEY_OK</select>
                <select>KEY_ENTER</select>
                <start>KEY_SELECT</start>
+               <back>KEY_ESC</back>
                <back>KEY_EXIT</back>
+               <back>KEY_BACK</back>
+               <back>KEY_CLOSE</back>
                <record>KEY_RECORD</record>
                <play>KEY_PLAY</play>
+               <play>KEY_PLAYPAUSE</play>
                <pause>KEY_PAUSE</pause>
                <stop>KEY_STOP</stop>
+               <stop>KEY_STOPCD</stop>
                <forward>KEY_FASTFORWARD</forward>
                <reverse>KEY_REWIND</reverse>
                <volumeplus>KEY_VOLUMEUP</volumeplus>
                <skipminus>KEY_PREVIOUSSONG</skipminus>
                <title>KEY_TEXT</title>
                <subtitle>KEY_SUBTITLE</subtitle>
+               <language>KEY_LANGUAGE</language>
                <mute>KEY_MUTE</mute>
                <power>KEY_POWER</power>
                <myvideo>KEY_VIDEO</myvideo>
                <green>KEY_GREEN</green>
                <yellow>KEY_YELLOW</yellow>
                <blue>KEY_BLUE</blue>
+               <menu>KEY_MENU</menu>
+               <info>KEY_INFO</info>
+               <info>KEY_PROPS</info>
+               <start>KEY_HOME</start>
+               <display>KEY_ANGLE</display>
+               <teletext>KEY_TEXT</teletext>
+       </remote>
+       <remote device="mediacenter">
+               <pause>pause</pause>
+               <stop>stop</stop>
+               <forward>fwd</forward>
+               <reverse>rew</reverse>
+               <left>left</left>
+               <right>right</right>
+               <up>up</up>
+               <down>down</down>
+               <select>ok</select>
+               <pageplus>ch+</pageplus>
+               <pageminus>ch-</pageminus>
+               <back>back</back>
+               <menu>clear</menu>
+               <title>play</title>
+               <info>info</info>
+               <skipplus>next</skipplus>
+               <skipminus>prev</skipminus>
+               <display>teletext</display>
+               <start>ehome</start>
+               <record>rec</record>
+               <volumeplus>vol+</volumeplus>
+               <volumeminus>vol-</volumeminus>
+               <mute>mute</mute>
+               <power>power</power>
+               <myvideo>video</myvideo>
+               <mymusic>music</mymusic>
+               <mypictures>pictures</mypictures>
+               <mytv>tv</mytv>
+               <one>1</one>
+               <two>2</two>
+               <three>3</three>
+               <four>4</four>
+               <five>5</five>
+               <six>6</six>
+               <seven>7</seven>
+               <eight>8</eight>
+               <nine>9</nine>
+               <zero>0</zero>
+               <mytv>red</mytv>
+               <mymusic>green</mymusic>
+               <mypictures>yellow</mypictures>
+               <myvideo>blue</myvideo>
        </remote>
 </lircmap>
index 3ce6d4d..f93769d 100644 (file)
       <!-- hold center-->      <button id="7">Fullscreen</button>
       <!-- hold menu  -->      <button id="8">ContextMenu</button>
 
-      <!-- old buttons for ATV <2.2, used on OSX  -->
+      <!-- old buttons for ATV1 <2.2, used on OSX  -->
       <!-- hold left  -->      <button id="9">Left</button>
       <!-- hold right -->      <button id="10">Right</button>
 
       <!-- new aluminium remote buttons  -->
       <!-- play/pause -->      <button id="12">Play</button>
 
-      <!-- Additional buttons via Harmony Apple TV remote profile -->
+      <!-- Additional buttons via Harmony Apple TV remote profile - these are also the learned buttons on Apple TV 2gen-->
       <!-- pageup     -->      <button id="13">PageUp</button>
       <!-- pagedown   -->      <button id="14">PageDown</button>
       <!-- pause      -->      <button id="15">Pause</button><!-- work? -->
@@ -57,7 +57,7 @@
       <!-- skip fwd   -->      <button id="20">SkipNext</button>
       <!-- skip back  -->      <button id="21">SkipPrevious</button>
 
-      <!-- Learned remote buttons (ATV >2.3) -->
+      <!-- Learned remote buttons (ATV1 >2.3) -->
       <!-- Play       -->      <button id="70">Play</button>
       <!-- Pause      -->      <button id="71">Pause</button>
       <!-- Stop       -->      <button id="72">Stop</button>
@@ -68,7 +68,7 @@
       <!-- Return     -->      <button id="77">OSD</button>
       <!-- Enter      -->      <button id="78">ShowVideoMenu</button>
 
-      <!-- few gestures from Apple's iPhone Remote (ATV > 2.3 ?) -->
+      <!-- few gestures from Apple's iPhone Remote (ATV1 > 2.3 ?) -->
       <!-- SwipeLeft  -->      <button id="80">Left</button>
       <!-- SwipeRight -->      <button id="81">Right</button>
       <!-- SwipeUp    -->      <button id="82">Up</button>
diff --git a/system/keymaps/keyboard.nyxboard.xml b/system/keymaps/keyboard.nyxboard.xml
deleted file mode 100644 (file)
index 33e9ec8..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-<keymap>
-  <global>
-       <appcommand name="Motorola Nyxboard Hybrid">
-         <volume_mute>Mute</volume_mute>
-         <volume_down>VolumeDown</volume_down>
-      <volume_up>VolumeUp</volume_up>
-         <next_track>SkipNext</next_track>
-         <prev_track>SkipPrevious</prev_track>
-         <stop>Stop</stop>
-         <play_pause>Play</play_pause>
-         <play>Play</play>
-         <pause>Pause</pause>
-         <fastforward>FastForward</fastforward>
-         <rewind>Rewind</rewind>
-       </appcommand>
-    <mouse name="Motorola Nyxboard Hybrid">
-      <leftclick>leftclick</leftclick>
-      <middleclick>middleclick</middleclick>
-      <rightclick>rightclick</rightclick>
-      <doubleclick>doubleclick</doubleclick>
-      <wheeldown>wheeldown</wheeldown>
-      <wheelup>wheelup</wheelup>
-      <mousedrag>mousedrag</mousedrag>
-      <mousemove>mousemove</mousemove>
-    </mouse>
-       <keyboard name="Motorola Nyxboard Hybrid">
-      <p>Play</p>
-      <q>Queue</q>
-      <f mod="ctrl,shift">FastForward</f>
-      <b mod="ctrl,shift">Rewind</b>
-      <left>Left</left>
-      <right>Right</right>
-      <up>Up</up>
-      <down>Down</down>
-      <left mod="ctrl">analogseekback</left>
-      <right mod="ctrl">analogseekforward</right>
-      <pageup>PageUp</pageup>
-      <pagedown>PageDown</pagedown>
-      <return>Select</return>
-      <enter>Select</enter>
-      <backspace>Back</backspace>
-      <key id='65446'>Back</key>
-      <m>ActivateWindow(PlayerControls)</m>
-      <s>ActivateWindow(shutdownmenu)</s>
-      <escape>PreviousMenu</escape>
-      <i>Info</i>
-         <f9>Info</f9>
-      <menu>ContextMenu</menu>
-      <c>ContextMenu</c>
-      <space>Pause</space>
-      <x>Stop</x>
-      <period>SkipNext</period>
-      <comma>SkipPrevious</comma>
-      <tab>FullScreen</tab>
-      <printscreen>Screenshot</printscreen>
-      <s mod="ctrl">Screenshot</s>
-      <minus>VolumeDown</minus>
-      <plus>VolumeUp</plus>
-      <zero>Number0</zero>
-      <one>Number1</one>
-      <two>Number2</two>
-      <three>Number3</three>
-      <four>Number4</four>
-      <five>Number5</five>
-      <six>Number6</six>
-      <seven>Number7</seven>
-      <eight>Number8</eight>
-      <nine>Number9</nine>
-      <numpadminus>VolumeDown</numpadminus>
-      <numpadplus>VolumeUp</numpadplus>
-      <numpadzero>Number0</numpadzero>
-      <numpadone>Number1</numpadone>
-      <numpadtwo>Number2</numpadtwo>
-      <numpadthree>Number3</numpadthree>
-      <numpadfour>Number4</numpadfour>
-      <numpadfive>Number5</numpadfive>
-      <numpadsix>Number6</numpadsix>
-      <numpadseven>Number7</numpadseven>
-      <numpadeight>Number8</numpadeight>
-      <numpadnine>Number9</numpadnine>
-      <backslash>ToggleFullScreen</backslash>
-      <home>XBMC.ActivateWindow(Home)</home>
-      <volume_mute>Mute</volume_mute>
-      <volume_down>VolumeDown</volume_down>
-      <volume_up>VolumeUp</volume_up>
-      <next_track>SkipNext</next_track>
-      <prev_track>SkipPrevious</prev_track>
-      <stop>Stop</stop>
-      <play_pause>Pause</play_pause>
-         <!--
-         <f3>RED</f3>
-         <f4>GREEN</f4>
-         <f5>YELLOW</f5>
-         <f6>BLUE</f6>
-         <f7>EPG</f7>
-         <f12>ActivateSearch</f12>
-         <f11>CloseSearch</f11>
-         -->
-         <f10>ContextMenu</f10>
-    </keyboard>
-  </global>
-  <LoginScreen>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <end>XBMC.ShutDown()</end>
-    </keyboard>
-  </LoginScreen>
-  <Home>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <i>info</i>
-         <home>noop</home>
-      <end>XBMC.ShutDown()</end>
-    </keyboard>
-  </Home>
-  <VirtualKeyboard>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <backspace>Backspace</backspace>
-    </keyboard>
-  </VirtualKeyboard>
-  <MyFiles>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <space>Highlight</space>
-      <delete>Delete</delete>
-      <m>Move</m>
-      <r>Rename</r>
-    </keyboard>
-  </MyFiles>
-  <MyMusicPlaylist>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <space>Back</space>
-      <delete>Delete</delete>
-      <u>MoveItemUp</u>
-      <d>MoveItemDown</d>
-    </keyboard>
-  </MyMusicPlaylist>
-  <MyMusicPlaylistEditor>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <u>MoveItemUp</u>
-      <d>MoveItemDown</d>
-      <delete>Delete</delete>
-    </keyboard>
-  </MyMusicPlaylistEditor>
-  <MyMusicFiles>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <space>Playlist</space>
-      <q>Queue</q>
-      <delete>Delete</delete>
-    </keyboard>
-  </MyMusicFiles>
-  <MyMusicLibrary>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <space>Playlist</space>
-      <q>Queue</q>
-    </keyboard>
-  </MyMusicLibrary>
-  <FullscreenVideo>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <f>FastForward</f>
-      <r>Rewind</r>
-      <period>StepForward</period>
-      <comma>StepBack</comma>
-      <backspace>Fullscreen</backspace>
-      <quote>SmallStepBack</quote>
-      <opensquarebracket>BigStepForward</opensquarebracket>
-      <closesquarebracket>BigStepBack</closesquarebracket>
-      <return>OSD</return>
-      <enter>OSD</enter>
-      <m>OSD</m>
-      <i>Info</i>
-      <o>CodecInfo</o>
-      <z>AspectRatio</z>
-      <t>ShowSubtitles</t>
-      <l>NextSubtitle</l>
-      <left>StepBack</left>
-      <right>StepForward</right>
-      <up>BigStepForward</up>
-      <down>BigStepBack</down>
-      <a>AudioDelay</a>
-      <escape>Fullscreen</escape>
-      <v>XBMC.ActivateWindow(Teletext)</v>
-    </keyboard>
-  </FullscreenVideo>
-  <VideoTimeSeek>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <return>Select</return>
-      <enter>Select</enter>
-    </keyboard>
-  </VideoTimeSeek>
-  <FullscreenInfo>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <f>FastForward</f>
-      <r>Rewind</r>
-      <period>StepForward</period>
-      <o>CodecInfo</o>
-      <i>Back</i>
-      <d mod="ctrl">Back</d>
-      <m>OSD</m>
-    </keyboard>
-  </FullscreenInfo>
-  <PlayerControls>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <m>Back</m>
-    </keyboard>
-  </PlayerControls>
-  <Visualisation>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <f>FastForward</f>
-      <r>Rewind</r>
-      <period>SkipNext</period>
-      <comma>SkipPrevious</comma>
-      <return>ActivateWindow(MusicOSD)</return>
-      <enter>ActivateWindow(MusicOSD)</enter>
-      <m>ActivateWindow(MusicOSD)</m>
-      <i>Info</i>
-      <p>ActivateWindow(VisualisationPresetList)</p>
-      <v>ActivateWindow(VisualisationSettings)</v>
-      <n>ActivateWindow(MusicPlaylist)</n>
-      <left>SkipPrevious</left>
-      <right>SkipNext</right>
-      <up>IncreaseRating</up>
-      <down>DecreaseRating</down>      <!--<back>NextPreset</back>!-->
-      <o>CodecInfo</o>
-      <l>LockPreset</l>
-      <escape>FullScreen</escape>
-    </keyboard>
-  </Visualisation>
-  <MusicOSD>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <f>FastForward</f>
-      <r>Rewind</r>
-      <period>SkipNext</period>
-      <comma>SkipPrevious</comma>
-      <m>Back</m>
-      <i>Info</i>
-      <o>CodecInfo</o>
-      <p>ActivateWindow(VisualisationPresetList)</p>
-      <v>ActivateWindow(VisualisationSettings)</v>
-      <n>ActivateWindow(MusicPlaylist)</n>
-    </keyboard>
-  </MusicOSD>
-  <VisualisationSettings>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <f>FastForward</f>
-      <r>Rewind</r>
-      <period>SkipNext</period>
-      <comma>SkipPrevious</comma>
-      <m>Back</m>
-      <i>Info</i>
-      <o>CodecInfo</o>
-      <p>ActivateWindow(VisualisationPresetList)</p>
-      <v>Back</v>
-      <n>ActivateWindow(MusicPlaylist)</n>
-    </keyboard>
-  </VisualisationSettings>
-  <VisualisationPresetList>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <f>FastForward</f>
-      <r>Rewind</r>
-      <period>SkipNext</period>
-      <comma>SkipPrevious</comma>
-      <m>Back</m>
-      <i>Info</i>
-      <o>CodecInfo</o>
-      <p>Back</p>
-      <v>Back</v>
-      <n>ActivateWindow(MusicPlaylist)</n>
-    </keyboard>
-  </VisualisationPresetList>
-  <SlideShow>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <zero>ZoomNormal</zero>
-      <one>ZoomLevel1</one>
-      <two>ZoomLevel2</two>
-      <three>ZoomLevel3</three>
-      <four>ZoomLevel4</four>
-      <five>ZoomLevel5</five>
-      <six>ZoomLevel6</six>
-      <seven>ZoomLevel7</seven>
-      <eight>ZoomLevel8</eight>
-      <nine>ZoomLevel9</nine>
-      <i>Info</i>
-      <o>CodecInfo</o>
-      <period>NextPicture</period>
-      <comma>PreviousPicture</comma>
-      <plus>ZoomIn</plus>
-      <minus>ZoomOut</minus>
-      <r>Rotate</r>
-    </keyboard>
-  </SlideShow>
-  <ScreenCalibration>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <return>NextCalibration</return>
-      <enter>NextCalibration</enter>
-      <d>ResetCalibration</d>
-      <r>NextResolution</r>
-    </keyboard>
-  </ScreenCalibration>
-  <GUICalibration>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <return>NextCalibration</return>
-      <enter>NextCalibration</enter>
-      <d>ResetCalibration</d>
-    </keyboard>
-  </GUICalibration>
-  <VideoOSD>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <m>Back</m>
-      <g mod="ctrl">Back</g> <!-- MCE Guide button -->
-      <i>Info</i>
-      <o>CodecInfo</o>
-    </keyboard>
-  </VideoOSD>
-  <VideoMenu>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <opensquarebracket>BigStepForward</opensquarebracket>
-      <closesquarebracket>BigStepBack</closesquarebracket>
-      <m>OSD</m>
-      <i>Info</i>
-      <o>CodecInfo</o>
-      <z>AspectRatio</z>
-      <t>ShowSubtitles</t>
-      <l>NextSubtitle</l>
-      <a>AudioDelay</a>
-      <escape>Fullscreen</escape>
-      <return>Select</return>
-      <enter>Select</enter>      <!-- backspace>Fullscreen</backspace -->
-    </keyboard>
-  </VideoMenu>
-  <OSDVideoSettings>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <i>Info</i>
-      <o>CodecInfo</o>
-    </keyboard>
-  </OSDVideoSettings>
-  <OSDAudioSettings>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <i>Info</i>
-      <o>CodecInfo</o>
-    </keyboard>
-  </OSDAudioSettings>
-  <VideoBookmarks>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <delete>Delete</delete>
-    </keyboard>
-  </VideoBookmarks>
-  <MyVideoLibrary>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <delete>Delete</delete>
-      <space>Playlist</space>
-      <w>ToggleWatched</w>
-    </keyboard>
-  </MyVideoLibrary>
-  <MyVideoFiles>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <space>Playlist</space>
-      <q>Queue</q>
-      <w>ToggleWatched</w>
-    </keyboard>
-  </MyVideoFiles>
-  <MyVideoPlaylist>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <space>Back</space>
-      <delete>Delete</delete>
-      <u>MoveItemUp</u>
-      <d>MoveItemDown</d>
-    </keyboard>
-  </MyVideoPlaylist>
-  <MyPictures>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <delete>Delete</delete>
-    </keyboard>
-  </MyPictures>
-  <ContextMenu>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <c>Back</c>
-      <menu>Back</menu>
-    </keyboard>
-  </ContextMenu>
-  <Scripts>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <i>info</i>
-    </keyboard>
-  </Scripts>
-  <shutdownmenu>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <s>Back</s>  
-    </keyboard>
-  </shutdownmenu>
-  <MusicInformation>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <i>Back</i>
-      <d mod="ctrl">Back</d>
-    </keyboard>
-  </MusicInformation>
-  <MovieInformation>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <i>Back</i>
-    </keyboard>
-  </MovieInformation>
-  <PictureInfo>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <period>NextPicture</period>
-      <comma>PreviousPicture</comma>
-      <i>Back</i>
-      <d mod="ctrl">Back</d>
-      <o>Back</o>
-      <space>Pause</space>
-    </keyboard>
-  </PictureInfo>
-  <Teletext>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <v>Back</v>
-    </keyboard>
-  </Teletext>
-  <FileBrowser>
-    <keyboard name="Motorola Nyxboard Hybrid">
-      <space>Highlight</space>
-    </keyboard>
-  </FileBrowser>
-</keymap>
index 174800d..9bf8b86 100644 (file)
       <v>XBMC.ActivateWindow(Teletext)</v>
       <up mod="ctrl">SubtitleShiftUp</up>
       <down mod="ctrl">SubtitleShiftDown</down>
+      <pageup>SkipNext</pageup>
+      <pagedown>SkipPrevious</pagedown>
     </keyboard>
   </FullscreenVideo>
   <VideoTimeSeek>
       <comma>PreviousPicture</comma>
       <plus>ZoomIn</plus>
       <minus>ZoomOut</minus>
+      <return>Rotate</return>
+      <enter>Rotate</enter>
       <r>Rotate</r>
     </keyboard>
   </SlideShow>
       <escape>Fullscreen</escape>
       <return>Select</return>
       <enter>Select</enter>      <!-- backspace>Fullscreen</backspace -->
+      <pageup>SkipNext</pageup>
+      <pagedown>SkipPrevious</pagedown>
     </keyboard>
   </VideoMenu>
   <OSDVideoSettings>
       <space>Highlight</space>
     </keyboard>
   </FileBrowser>
+  <ShutdownMenu>
+    <keyboard>
+      <s>Back</s>
+    </keyboard>
+  </ShutdownMenu>
+  <AddonInformation>
+    <keyboard>
+      <i>Back</i>
+    </keyboard>
+  </AddonInformation>
+  <AddonSettings>
+    <keyboard>
+      <delete>Delete</delete>
+    </keyboard>
+  </AddonSettings>
 </keymap>
index 5172650..7a49305 100644 (file)
       <mousemove>mousemove</mousemove>
     </mouse>
   </global>
+  <SlideShow>
+    <mouse>
+      <leftclick>Pause</leftclick>
+      <rightclick>PreviousMenu</rightclick>
+      <wheelup>PreviousPicture</wheelup>
+      <wheeldown>NextPicture</wheeldown>
+    </mouse>
+  </SlideShow>
 </keymap>
diff --git a/system/keymaps/nyxboard/keyboard.xml b/system/keymaps/nyxboard/keyboard.xml
new file mode 100644 (file)
index 0000000..d8659f6
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- Mappings for the Motorola Nyxboard remote -->
+<keymap>
+  <global>
+    <keyboard>
+      <home>XBMC.ActivateWindow(Home)</home>
+      <f3>OSD</f3>         <!-- EPG: same as Guide (ctrl-G) on MCE remote -->
+      <f3 mod="shift">ActivateWindow(video)</f3>    <!-- Red -->
+      <f4 mod="shift">ActivateWindow(music)</f4>    <!-- Green -->
+      <f5 mod="shift">ActivateWindow(pictures)</f5> <!-- Yellow -->
+      <f6 mod="shift">ActivateWindow(programs)</f6> <!-- Blue -->
+    </keyboard>
+  </global>
+</keymap>
index a846383..2a9ab3c 100644 (file)
       <teletext>Back</teletext>
     </remote>
   </Teletext>
+  <AddonSettings>
+    <remote>
+      <clear>Delete</clear>
+    </remote>
+  </AddonSettings>
 </keymap>
index 592fa95..c6852f7 100644 (file)
@@ -1,29 +1,29 @@
 <peripherals>
-  <peripheral vendor="1915" product="003B" bus="usb" name="Motorola Nyxboard Hybrid" mapTo="nyxboard">
-    <setting key="keymap_enabled" type="bool" value="1" label="35008" configurable="0" />
-    <setting key="keymap" value="Motorola Nyxboard Hybrid" label="35007" configurable="0" />
-    <setting key="enable_flip_commands" type="bool" value="1" label="36005" />
-    <setting key="flip_keyboard" value="XBMC.VideoLibrary.Search" label="36002" />
-    <setting key="flip_remote" value="Dialog.Close(virtualkeyboard)" label="36003" />
-    <setting key="key_user" value="" label="36004" />
-  </peripheral>
-  <peripheral vendor="22B8" product="003B" bus="usb" name="Motorola Nyxboard Hybrid" mapTo="nyxboard">
-    <setting key="keymap_enabled" type="bool" value="1" label="35008" configurable="0" />
-    <setting key="keymap" value="Motorola Nyxboard Hybrid" label="35007" configurable="0" />
-    <setting key="enable_flip_commands" type="bool" value="1" label="36005" />
-    <setting key="flip_keyboard" value="XBMC.VideoLibrary.Search" label="36002" />
-    <setting key="flip_remote" value="Dialog.Close(virtualkeyboard)" label="36003" />
-    <setting key="key_user" value="" label="36004" />
+  <peripheral vendor_product="1915:003B,22B8:003B" bus="usb" name="Motorola Nyxboard Hybrid" mapTo="nyxboard">
+    <setting key="do_not_use_custom_keymap" type="bool" value="0" label="35009" order="1" />
+    <setting key="keymap" value="nyxboard" label="35007" configurable="0" />
+    <setting key="enable_flip_commands" type="bool" value="1" label="36005" order="2" />
+    <setting key="flip_keyboard" value="XBMC.VideoLibrary.Search" label="36002" order="3" />
+    <setting key="flip_remote" value="Dialog.Close(virtualkeyboard)" label="36003" order="4" />
+    <setting key="key_user" value="" label="36004" order="5" />
   </peripheral>
 
-  <peripheral vendor="2548" product="1001" bus="usb" name="Pulse-Eight CEC Adaptor" mapTo="cec">
-    <setting key="enabled" type="bool" value="1" label="305" />
-    <setting key="port" type="string" value="" label="792" />
-    <setting key="cec_power_on_startup" type="bool" value="1" label="36007" />
-    <setting key="cec_power_off_shutdown" type="bool" value="1" label="36008" />
-    <setting key="cec_standby_screensaver" type="bool" value="1" label="36009" />
-    <setting key="cec_mark_inactive_shutdown" type="bool" value="0" label="36010" />
-    <setting key="standby_pc_on_tv_standby" type="bool" value="1" label="36014" />
-    <setting key="cec_debug_logging" type="bool" value="0" label="20191" />
+  <peripheral vendor_product="2548:1001" bus="usb" name="Pulse-Eight CEC Adapter" mapTo="cec">
+    <setting key="enabled" type="bool" value="1" label="305" order="1" />
+    <setting key="activate_source" type="bool" value="1" label="36020" order="2" />
+    <setting key="wake_devices" type="string" value="0" label="36007" order="3" />
+    <setting key="standby_devices" type="string" value="0" label="36008" order="4" />
+    <setting key="cec_standby_screensaver" type="bool" value="1" label="36009" order="5" />
+    <setting key="standby_pc_on_tv_standby" type="bool" value="1" label="36014" order="6" />
+    <setting key="send_inactive_source" type="bool" value="1" label="36025" order="7" />
+    <setting key="use_tv_menu_language" type="bool" value="1" label="36018" order="8" />
+    <setting key="physical_address" type="string" label="36021" value="0" order="9" />
+    <setting key="cec_hdmi_port" type="int" value="1" min="1" max="16" label="36015" order="10" />
+    <setting key="connected_device" type="int" label="36019" value="0" min="0" max="15" step="1" order="11" />
+    <setting key="port" type="string" value="" label="36022" order="12" />
+
+    <setting key="tv_vendor" type="int" value="0" configurable="0" />
+    <setting key="device_name" type="string" value="XBMC" configurable="0" />
+    <setting key="device_type" type="int" value="1" configurable="0" />
   </peripheral>
 </peripherals>
index df31883..9e2067c 100644 (file)
 
 <!-- Font directory list -->
 
-       <dir>WINDOWSFONTDIR</dir>
-       
+<!--
+  Uncomment this directory if we need libass and fontconfig to access all system fonts.
+  The drawback is the long initial indexing time by fontconfig, and mkv files usually
+  include their fonts.
+  <dir>WINDOWSFONTDIR</dir>
+-->
+  <dir>media/Fonts</dir>       <!-- used by an installed XBMC -->
+  <dir>../../media/Fonts</dir> <!-- used when running in Visual Studio -->
        <dir>~/.fonts</dir>
 
 <!-- Font cache directory list -->
diff --git a/tools/EventClients/Clients/PS3 Sixaxis Controller/README.ubuntu b/tools/EventClients/Clients/PS3 Sixaxis Controller/README.ubuntu
new file mode 100644 (file)
index 0000000..bf4a5a4
--- /dev/null
@@ -0,0 +1 @@
+sudo apt-get install python-usb python-pyudev python-bluez
index 0000163..de6c808 100755 (executable)
@@ -22,33 +22,41 @@ import traceback
 import time
 import struct
 import threading
+import os
 
-sys.path.append("../PS3 BD Remote")
-
-try:
-    # try loading modules from source directory
+if os.path.exists("../../lib/python"):
+    sys.path.append("../PS3 BD Remote")
     sys.path.append("../../lib/python")
     from bt.hid import HID
     from bt.bt import bt_lookup_name
     from xbmcclient import XBMCClient
     from ps3 import sixaxis
-    from ps3.keymaps import keymap_sixaxis
     from ps3_remote import process_keys as process_remote
     try:
+        from ps3 import sixwatch
+    except Exception, e:
+        print "Failed to import sixwatch now disabled: " + str(e)
+        sixwatch = None
+
+    try:
         import zeroconf
     except:
         zeroconf = None
     ICON_PATH = "../../icons/"
-except:
+else:
     # fallback to system wide modules
     from xbmc.bt.hid import HID
     from xbmc.bt.bt import bt_lookup_name
     from xbmc.xbmcclient import XBMCClient
     from xbmc.ps3 import sixaxis
-    from xbmc.ps3.keymaps import keymap_sixaxis
     from xbmc.ps3_remote import process_keys as process_remote
     from xbmc.defs import *
     try:
+        from xbmc.ps3 import sixwatch
+    except Exception, e:
+        print "Failed to import sixwatch now disabled: " + str(e)
+        sixwatch = None
+    try:
         import xbmc.zeroconf as zeroconf
     except:
         zeroconf = None
@@ -110,21 +118,6 @@ class StoppableThread ( threading.Thread ):
         else:
             return False
 
-# to make sure all combination keys are checked first
-# we sort the keymap's button codes in reverse order
-# this guranties that any bit combined button code
-# will be processed first
-keymap_sixaxis_keys = keymap_sixaxis.keys()
-keymap_sixaxis_keys.sort()
-keymap_sixaxis_keys.reverse()
-
-def getkeys(bflags):
-    keys = [];
-    for k in keymap_sixaxis_keys:
-        if (k & bflags) == k:
-            keys.append(k)
-            bflags = bflags & ~k
-    return keys;
 
 class PS3SixaxisThread ( StoppableThread ):
     def __init__(self, csock, isock, ipaddr="127.0.0.1"):
@@ -135,86 +128,26 @@ class PS3SixaxisThread ( StoppableThread ):
         self.set_timeout(600)
 
     def run(self):
-        sixaxis.initialize(self.csock, self.isock)
+        six = sixaxis.sixaxis(self.xbmc, self.csock, self.isock)
         self.xbmc.connect()
-        bflags = 0
-        released = set()
-        pressed  = set()
-        pending  = set()
-        held     = set()
-        psflags = 0
-        psdown = 0
-        toggle_mouse = 0
         self.reset_timeout()
         try:
             while not self.stop():
-                if self.timed_out():
-
-                    for key in (held | pressed):
-                        (mapname, action, amount, axis) = keymap_sixaxis[key]
-                        self.xbmc.send_button_state(map=mapname, button=action, amount=0, down=0, axis=axis)
 
+                if self.timed_out():
                     raise Exception("PS3 Sixaxis powering off, timed out")
                 if self.idle_time() > 50:
                     self.xbmc.connect()
                 try:
-                    data = sixaxis.read_input(self.isock)
+                    if six.process_socket(self.isock):
+                        self.reset_timeout()
                 except Exception, e:
-                    print str(e)
+                    print e
                     break
-                if not data:
-                    continue
-
-                (bflags, psflags, pressure, analog) = sixaxis.process_input(data, self.xbmc, toggle_mouse)
-
-                if analog:
-                    self.reset_timeout()
-
-                if psflags:
-                    self.reset_timeout()
-                    if psdown:
-                        if (time.time() - psdown) > 5:
-
-                            for key in (held | pressed):
-                                (mapname, action, amount, axis) = keymap_sixaxis[key]
-                                self.xbmc.send_button_state(map=mapname, button=action, amount=0, down=0, axis=axis)
-
-                            raise Exception("PS3 Sixaxis powering off, user request")
-                    else:
-                        psdown = time.time()
-                else:
-                    if psdown:
-                        toggle_mouse = 1 - toggle_mouse
-                    psdown = 0
-
-                keys = set(getkeys(bflags))
-                released = (pressed | held) - keys
-                held     = (pressed | held) - released
-                pressed  = (keys - held) & pending
-                pending  = (keys - held)
-
-                for key in released:
-                    (mapname, action, amount, axis) = keymap_sixaxis[key]
-                    self.xbmc.send_button_state(map=mapname, button=action, amount=0, down=0, axis=axis)
-
-                for key in held:
-                    (mapname, action, amount, axis) = keymap_sixaxis[key]
-                    if amount > 0:
-                        amount = pressure[amount-1] * 256
-                        self.xbmc.send_button_state(map=mapname, button=action, amount=amount, down=1, axis=axis)
-
-                for key in pressed:
-                    (mapname, action, amount, axis) = keymap_sixaxis[key]
-                    if amount > 0:
-                        amount = pressure[amount-1] * 256
-                    self.xbmc.send_button_state(map=mapname, button=action, amount=amount, down=1, axis=axis)
-
-                if keys:
-                    self.reset_timeout()
-
 
         except Exception, e:
             printerr()
+        six.close()
         self.close_sockets()
 
 
@@ -229,7 +162,6 @@ class PS3RemoteThread ( StoppableThread ):
         self.current_xbmc = 0
 
     def run(self):
-        sixaxis.initialize(self.csock, self.isock)
         self.xbmc.connect()
         try:
             # start the zeroconf thread if possible
@@ -314,6 +246,18 @@ class PS3RemoteThread ( StoppableThread ):
                 pass
         return
 
+class SixWatch(threading.Thread):
+    def __init__(self, mac):
+        threading.Thread.__init__(self)
+        self.mac = mac
+        self.daemon = True
+        self.start()
+    def run(self):
+      while True:
+        try:
+            sixwatch.main(self.mac)
+        except Exception, e:
+            print "Exception caught in sixwatch, restarting: " + str(e)
 
 class ZeroconfThread ( threading.Thread ):
     """
@@ -373,6 +317,15 @@ def start_hidd(bdaddr=None, ipaddr="127.0.0.1"):
     devices = [ 'PLAYSTATION(R)3 Controller',
                 'BD Remote Control' ]
     hid = HID(bdaddr)
+    watch = None
+    if sixwatch:
+        try:
+            print "Starting USB sixwatch"
+            watch = SixWatch(hid.get_local_address())
+        except Exception, e:
+            print "Failed to initialize sixwatch" + str(e)
+            pass
+
     while True:
         if hid.listen():
             (csock, addr) = hid.get_control_socket()
index 7a4999b..7cdf152 100644 (file)
@@ -16,6 +16,9 @@
 #   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 from bluetooth import *
+import fcntl
+import bluetooth._bluetooth as _bt
+import array
 
 class HID:
     def __init__(self, bdaddress=None):
@@ -56,6 +59,13 @@ class HID:
             self.connected = False
             return False
 
+    def get_local_address(self):
+        hci = BluetoothSocket( HCI )
+        fd  = hci.fileno()
+        buf = array.array('B', [0] * 96)
+        fcntl.ioctl(fd, _bt.HCIGETDEVINFO, buf, 1)
+        data = struct.unpack_from("H8s6B", buf.tostring())
+        return data[2:8][::-1]
 
     def get_control_socket(self):
         if self.connected:
index fe2e8f9..de7ee12 100644 (file)
@@ -79,57 +79,3 @@ keymap_remote = {
     "39": 'pause'     ,#PAUSE
     }
 
-
-SX_SQUARE   = 32768
-SX_X        = 16384
-SX_CIRCLE   = 8192
-SX_TRIANGLE = 4096
-SX_R1       = 2048
-SX_R2       = 512
-SX_R3       = 4
-SX_L1       = 1024
-SX_L2       = 256
-SX_L3       = 2
-SX_DUP      = 16
-SX_DDOWN    = 64
-SX_DLEFT    = 128
-SX_DRIGHT   = 32
-SX_SELECT   = 1
-SX_START    = 8
-
-SX_LSTICK_X  = 0
-SX_LSTICK_Y  = 1
-SX_RSTICK_X  = 2
-SX_RSTICK_Y  = 3
-
-# (map, key, amount index, axis)
-keymap_sixaxis = {
-    SX_X        : ('XG', 'A', 0, 0),
-    SX_CIRCLE   : ('XG', 'B', 0, 0),
-    SX_SQUARE   : ('XG', 'X', 0, 0),
-    SX_TRIANGLE : ('XG', 'Y', 0, 0),
-
-    SX_DUP      : ('XG', 'dpadup', 0, 0),
-    SX_DDOWN    : ('XG', 'dpaddown', 0, 0),
-    SX_DLEFT    : ('XG', 'dpadleft', 0, 0),
-    SX_DRIGHT   : ('XG', 'dpadright', 0, 0),
-
-    SX_START    : ('XG', 'start', 0, 0),
-    SX_SELECT   : ('XG', 'back', 0, 0),
-
-    SX_R1       : ('XG', 'white', 0, 0),
-    SX_R2       : ('XG', 'rightanalogtrigger', 6, 1),
-    SX_L2       : ('XG', 'leftanalogtrigger', 5, 1),
-    SX_L1       : ('XG', 'black', 0, 0),
-
-    SX_L3       : ('XG', 'leftthumbbutton', 0, 0),
-    SX_R3       : ('XG', 'rightthumbbutton', 0, 0),
-}
-
-# (data index, left map, left action, right map, right action)
-axismap_sixaxis = {
-    SX_LSTICK_X : ('XG', 'leftthumbstickleft' , 'leftthumbstickright'),
-    SX_LSTICK_Y : ('XG', 'leftthumbstickup'   , 'leftthumbstickdown'),
-    SX_RSTICK_X : ('XG', 'rightthumbstickleft', 'rightthumbstickright'),
-    SX_RSTICK_Y : ('XG', 'rightthumbstickup'  , 'rightthumbstickdown'),
-}
index c3cacb6..9ba60cc 100644 (file)
@@ -23,16 +23,78 @@ import struct
 import math
 import binascii
 from bluetooth import set_l2cap_mtu
-from keymaps import keymap_sixaxis
-from keymaps import axismap_sixaxis
 
-xval = 0
-yval = 0
-num_samples = 16
-sumx = [0] * num_samples
-sumy = [0] * num_samples
-sumr = [0] * num_samples
-axis_amount = [0, 0, 0, 0]
+SX_SELECT   = 1 << 0
+SX_L3       = 1 << 1
+SX_R3       = 1 << 2
+SX_START    = 1 << 3
+SX_DUP      = 1 << 4
+SX_DRIGHT   = 1 << 5
+SX_DDOWN    = 1 << 6
+SX_DLEFT    = 1 << 7
+SX_L2       = 1 << 8
+SX_R2       = 1 << 9
+SX_L1       = 1 << 10
+SX_R1       = 1 << 11
+SX_TRIANGLE = 1 << 12
+SX_CIRCLE   = 1 << 13
+SX_X        = 1 << 14
+SX_SQUARE   = 1 << 15
+SX_POWER    = 1 << 16
+
+SX_LSTICK_X  = 0
+SX_LSTICK_Y  = 1
+SX_RSTICK_X  = 2
+SX_RSTICK_Y  = 3
+
+# (map, key, amount index, axis)
+keymap_sixaxis = {
+    SX_X        : ('XG', 'A', 0, 0),
+    SX_CIRCLE   : ('XG', 'B', 0, 0),
+    SX_SQUARE   : ('XG', 'X', 0, 0),
+    SX_TRIANGLE : ('XG', 'Y', 0, 0),
+
+    SX_DUP      : ('XG', 'dpadup', 0, 0),
+    SX_DDOWN    : ('XG', 'dpaddown', 0, 0),
+    SX_DLEFT    : ('XG', 'dpadleft', 0, 0),
+    SX_DRIGHT   : ('XG', 'dpadright', 0, 0),
+
+    SX_START    : ('XG', 'start', 0, 0),
+    SX_SELECT   : ('XG', 'back', 0, 0),
+
+    SX_R1       : ('XG', 'white', 0, 0),
+    SX_R2       : ('XG', 'rightanalogtrigger', 6, 1),
+    SX_L2       : ('XG', 'leftanalogtrigger', 5, 1),
+    SX_L1       : ('XG', 'black', 0, 0),
+
+    SX_L3       : ('XG', 'leftthumbbutton', 0, 0),
+    SX_R3       : ('XG', 'rightthumbbutton', 0, 0),
+}
+
+# (data index, left map, left action, right map, right action)
+axismap_sixaxis = {
+    SX_LSTICK_X : ('XG', 'leftthumbstickleft' , 'leftthumbstickright'),
+    SX_LSTICK_Y : ('XG', 'leftthumbstickup'   , 'leftthumbstickdown'),
+    SX_RSTICK_X : ('XG', 'rightthumbstickleft', 'rightthumbstickright'),
+    SX_RSTICK_Y : ('XG', 'rightthumbstickup'  , 'rightthumbstickdown'),
+}
+
+# to make sure all combination keys are checked first
+# we sort the keymap's button codes in reverse order
+# this guranties that any bit combined button code
+# will be processed first
+keymap_sixaxis_keys = keymap_sixaxis.keys()
+keymap_sixaxis_keys.sort()
+keymap_sixaxis_keys.reverse()
+
+def getkeys(bflags):
+    keys = [];
+    for k in keymap_sixaxis_keys:
+        if (k & bflags) == k:
+            keys.append(k)
+            bflags = bflags & ~k
+    return keys;
+
 
 def normalize(val):
     upperlimit = 65281
@@ -80,16 +142,58 @@ def normalize_angle(val, valrange):
         val = -1.0
     return (val + 0.5) * 65535.0
 
-def initialize(control_sock, interrupt_sock):    
+def average(array):
+    val = 0
+    for i in array:
+      val += i
+    return val / len(array)
+    
+def smooth(arr, val):
+    cnt = len(arr)
+    arr.insert(0, val)
+    arr.pop(cnt)
+    return average(arr)    
+
+def set_l2cap_mtu2(sock, mtu):
+  SOL_L2CAP = 6
+  L2CAP_OPTIONS = 1
+  
+  s = sock.getsockopt (SOL_L2CAP, L2CAP_OPTIONS, 12)
+  o = list( struct.unpack ("HHHBBBH", s) )
+  o[0] = o[1] = mtu
+  s = struct.pack ("HHHBBBH", *o)
+  try:
+    sock.setsockopt (SOL_L2CAP, L2CAP_OPTIONS, s)
+  except:
+    print "Warning: Unable to set mtu"
+
+class sixaxis():
+    
+  def __init__(self, xbmc, control_sock, interrupt_sock):
+
+    self.xbmc = xbmc
+    self.num_samples = 16
+    self.sumx = [0] * self.num_samples
+    self.sumy = [0] * self.num_samples
+    self.sumr = [0] * self.num_samples
+    self.axis_amount = [0, 0, 0, 0]
+    
+    self.released = set()
+    self.pressed  = set()
+    self.pending  = set()
+    self.held     = set()
+    self.psflags  = 0
+    self.psdown   = 0
+    self.mouse_enabled = 0
+    
+    set_l2cap_mtu2(control_sock, 64)
+    set_l2cap_mtu2(interrupt_sock, 64)
+    time.sleep(0.25) # If we ask to quickly here, it sometimes doesn't start
+
     # sixaxis needs this to enable it
     # 0x53 => HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE
     control_sock.send("\x53\xf4\x42\x03\x00\x00")
-    time.sleep(0.25)
     data = control_sock.recv(1)
-
-    set_l2cap_mtu(control_sock, 64)
-    set_l2cap_mtu(interrupt_sock, 64)
-
     # This command will turn on the gyro and set the leds
     # I wonder if turning on the gyro makes it draw more current??
     # it's probably a flag somewhere in the following command
@@ -116,24 +220,34 @@ def initialize(control_sock, interrupt_sock):
     bytes.extend([0x00, 0x00, 0x00, 0x00, 0x00])
 
     control_sock.send(struct.pack("42B", *bytes))
-    time.sleep(0.25)
     data = control_sock.recv(1)
 
+  def __del__(self):
+    self.close()
+
+  def close(self):
 
-    return data
+    for key in (self.held | self.pressed):
+        (mapname, action, amount, axis) = keymap_sixaxis[key]
+        self.xbmc.send_button_state(map=mapname, button=action, amount=0, down=0, axis=axis)
+    self.held    = set()
+    self.pressed = set()
 
 
-def read_input(isock):
-    return isock.recv(50)
+  def process_socket(self, isock):
+    data = isock.recv(50)
+    if data == None:
+      return False
+    return self.process_data(data)
 
 
-def process_input(data, xbmc=None, mouse_enabled=0):
+  def process_data(self, data):
     if len(data) < 3:
-        return (0, 0, 0, False)
+        return False
 
     # make sure this is the correct report
     if struct.unpack("BBB", data[0:3]) != (0xa1, 0x01, 0x00):
-        return (0, 0, 0, False)
+        return False
 
     if len(data) >= 48:
         v1 = struct.unpack("h", data[42:44])
@@ -155,8 +269,7 @@ def process_input(data, xbmc=None, mouse_enabled=0):
     rz = float(v4[0])
     at = math.sqrt(ax*ax + ay*ay + az*az)
 
-    bflags = struct.unpack("H", data[3:5])[0]
-    psflags = struct.unpack("B", data[5:6])[0]
+    bflags = struct.unpack("<I", data[3:7])[0]
     if len(data) > 27:
         pressure = struct.unpack("BBBBBBBBBBBB", data[15:27])
     else:
@@ -169,39 +282,72 @@ def process_input(data, xbmc=None, mouse_enabled=0):
 
     xpos = normalize_angle(roll, math.radians(30))
     ypos = normalize_angle(pitch, math.radians(30))
+    
 
-    # update our sliding window array
-    sumx.insert(0, xpos)
-    sumy.insert(0, ypos)
-    sumx.pop(num_samples)
-    sumy.pop(num_samples)
+    axis = struct.unpack("BBBB", data[7:11])
+    return self.process_input(bflags, pressure, axis, xpos, ypos)
 
-    # reset average
-    xval = 0
-    yval = 0
+  def process_input(self, bflags, pressure, axis, xpos, ypos):
 
-    # do a sliding window average to remove high frequency
-    # noise in accelerometer sampling
-    for i in range(0, num_samples):
-        xval += sumx[i]
-        yval += sumy[i]
+    xval = smooth(self.sumx, xpos)
+    yval = smooth(self.sumy, ypos)
 
     analog = False
-    axis = struct.unpack("BBBB", data[7:11])
-    if xbmc:
-      for i in range(4):
+    for i in range(4):
         config = axismap_sixaxis[i]
-        axis_amount[i] = send_singleaxis(xbmc, axis[i], axis_amount[i], config[0], config[1], config[2])
-        if axis_amount[i] != 0:
-          analog = True
+        self.axis_amount[i] = self.send_singleaxis(axis[i], self.axis_amount[i], config[0], config[1], config[2])
+        if self.axis_amount[i] != 0:
+            analog = True
+
+    # send the mouse position to xbmc
+    if self.mouse_enabled == 1:
+        self.xbmc.send_mouse_position(xval, yval)
+
+    if (bflags & SX_POWER) == SX_POWER:
+        if self.psdown:
+            if (time.time() - self.psdown) > 5:
 
-      # send the mouse position to xbmc
-      if mouse_enabled == 1:
-          xbmc.send_mouse_position(xval/num_samples, yval/num_samples)
+                for key in (self.held | self.pressed):
+                    (mapname, action, amount, axis) = keymap_sixaxis[key]
+                    self.xbmc.send_button_state(map=mapname, button=action, amount=0, down=0, axis=axis)
+
+                raise Exception("PS3 Sixaxis powering off, user request")
+        else:
+            self.psdown = time.time()
+    else:
+        if self.psdown:
+            self.mouse_enabled = 1 - self.mouse_enabled
+        self.psdown = 0
+
+    keys     = set(getkeys(bflags))
+    self.released = (self.pressed | self.held) - keys
+    self.held     = (self.pressed | self.held) - self.released
+    self.pressed  = (keys - self.held) & self.pending
+    self.pending  = (keys - self.held)
+
+    for key in self.released:
+        (mapname, action, amount, axis) = keymap_sixaxis[key]
+        self.xbmc.send_button_state(map=mapname, button=action, amount=0, down=0, axis=axis)
+
+    for key in self.held:
+        (mapname, action, amount, axis) = keymap_sixaxis[key]
+        if amount > 0:
+            amount = pressure[amount-1] * 256
+            self.xbmc.send_button_state(map=mapname, button=action, amount=amount, down=1, axis=axis)
+
+    for key in self.pressed:
+        (mapname, action, amount, axis) = keymap_sixaxis[key]
+        if amount > 0:
+            amount = pressure[amount-1] * 256
+        self.xbmc.send_button_state(map=mapname, button=action, amount=amount, down=1, axis=axis)
+
+    if analog or keys or self.mouse_enabled:
+      return True
+    else:
+      return False
 
-    return (bflags, psflags, pressure, analog)
 
-def send_singleaxis(xbmc, axis, last_amount, mapname, action_min, action_pos):
+  def send_singleaxis(self, axis, last_amount, mapname, action_min, action_pos):
     amount = normalize_axis(axis, 0.30)
     if last_amount < 0:
         last_action = action_min
@@ -218,9 +364,9 @@ def send_singleaxis(xbmc, axis, last_amount, mapname, action_min, action_pos):
         new_action = None
 
     if last_action and new_action != last_action:
-        xbmc.send_button_state(map=mapname, button=last_action, amount=0, axis=1)
+        self.xbmc.send_button_state(map=mapname, button=last_action, amount=0, axis=1)
 
     if new_action and amount != last_amount:
-        xbmc.send_button_state(map=mapname, button=new_action, amount=abs(amount), axis=1)
+        self.xbmc.send_button_state(map=mapname, button=new_action, amount=abs(amount), axis=1)
 
     return amount
diff --git a/tools/EventClients/lib/python/ps3/sixpair.py b/tools/EventClients/lib/python/ps3/sixpair.py
new file mode 100755 (executable)
index 0000000..bb022c4
--- /dev/null
@@ -0,0 +1,114 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import sys
+import usb
+
+vendor  = 0x054c
+product = 0x0268
+timeout = 5000
+passed_value = 0x03f5
+
+def find_sixaxes():
+  res = []
+  for bus in usb.busses():
+    for dev in bus.devices:
+      if dev.idVendor == vendor and dev.idProduct == product:
+        res.append(dev)
+  return res
+
+def find_interface(dev):
+  for cfg in dev.configurations:
+    for itf in cfg.interfaces:
+      for alt in itf:
+        if alt.interfaceClass == 3:
+          return alt
+  raise Exception("Unable to find interface")
+
+def mac_to_string(mac):
+    return "%02x:%02x:%02x:%02x:%02x:%02x" % (mac[0], mac[1], mac[2], mac[3], mac[4], mac[5])
+
+def set_pair_filename(dirname, filename, mac):
+    for bus in usb.busses():
+        if int(bus.dirname) == int(dirname):
+            for dev in bus.devices:
+                if int(dev.filename) == int(filename):
+                    if dev.idVendor == vendor and dev.idProduct == product:
+                        update_pair(dev, mac)
+                        return
+                    else:
+                        raise Exception("Device is not a sixaxis")
+    raise Exception("Device not found")
+
+
+def set_pair(dev, mac):
+  itf = find_interface(dev)
+  handle = dev.open()
+
+  msg = (0x01, 0x00) + mac;
+
+  try:
+    handle.detachKernelDriver(itf.interfaceNumber)
+  except usb.USBError:
+    pass
+
+  handle.claimInterface(itf.interfaceNumber)
+  try:
+    handle.controlMsg(usb.ENDPOINT_OUT | usb.TYPE_CLASS | usb.RECIP_INTERFACE
+                    , usb.REQ_SET_CONFIGURATION, msg, passed_value, itf.interfaceNumber, timeout)
+  finally:
+    handle.releaseInterface()  
+
+
+def get_pair(dev):
+  itf = find_interface(dev)
+  handle = dev.open()
+
+  try:
+    handle.detachKernelDriver(itf.interfaceNumber)
+  except usb.USBError:
+    pass
+
+  handle.claimInterface(itf.interfaceNumber)
+  try:
+    msg = handle.controlMsg(usb.ENDPOINT_IN | usb.TYPE_CLASS | usb.RECIP_INTERFACE
+                          , usb.REQ_CLEAR_FEATURE, 8, passed_value, itf.interfaceNumber, timeout)
+  finally:
+    handle.releaseInterface()
+  return msg[2:8]
+
+def set_pair_all(mac):
+    devs = find_sixaxes()
+    for dev in devs:
+        update_pair(dev, mac)
+
+def update_pair(dev, mac):
+    old = get_pair(dev)
+    if old != mac:
+        print "Reparing sixaxis from:" + mac_to_string(old) + " to:" + mac_to_string(mac)
+    set_pair(dev, mac)
+
+if __name__=="__main__":
+    devs = find_sixaxes()
+
+    mac = None
+    if len(sys.argv) > 1:
+      try:
+        mac = sys.argv[1].split(':')
+        mac = tuple([int(x, 16) for x in mac])
+        if len(mac) != 6:
+          print "Invalid length of HCI address, should be 6 parts"
+          mac = None
+      except:
+        print "Failed to parse HCI address"
+        mac = None
+    
+    for dev in devs:
+      if mac:
+        update_pair(dev, mac)
+      else:
+        print "Found sixaxis paired to: " + mac_to_string(get_pair(dev))
+
+
+
+
diff --git a/tools/EventClients/lib/python/ps3/sixwatch.py b/tools/EventClients/lib/python/ps3/sixwatch.py
new file mode 100755 (executable)
index 0000000..b5b7b3b
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import pyudev
+import sixpair
+import threading
+
+vendor  = 0x054c
+product = 0x0268
+
+
+def main(mac):
+    context = pyudev.Context()
+    monitor = pyudev.Monitor.from_netlink(context)
+    monitor.filter_by(subsystem="usb")
+    for action, device in monitor:
+        if 'ID_VENDOR_ID' in device and 'ID_MODEL_ID' in device:
+            if device['ID_VENDOR_ID'] == '054c' and device['ID_MODEL_ID'] == '0268':
+                if action == 'add':
+                    print "Detected sixaxis connected by usb"
+                    try:
+                        sixpair.set_pair_filename(device.attributes['busnum'], device.attributes['devnum'], mac)
+                    except Exception, e:
+                        print "Failed to check pairing of sixaxis: " + str(e)
+                        pass
+
+
+
+if __name__=="__main__":
+    main((0,0,0,0,0,0))
+
index f01e45f..cd2e09d 100644 (file)
@@ -35,7 +35,7 @@ def error(errorLine):
         try:
             print(errorLine)
         except:
-            print errorLine
+            print(errorLine)
 
     exit(1)
 
index c0946c3..680f19a 100644 (file)
 #  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 #  http://www.gnu.org/copyleft/gpl.html
 
-XBMC="xbmc --standalone $@"
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+bindir="@bindir@"
+XBMC="${bindir}/xbmc --standalone $@"
 
 @XBMC_STANDALONE_SH_PULSE@
 
@@ -42,7 +45,8 @@ do
       CRASHCOUNT=$((CRASHCOUNT+1))
       if [ $(($CRASHCOUNT >= 3)) = "1" ]; then # Too many, bail out
         LOOP=0
-        echo "XBMC has exited uncleanly 3 times in the ${DIFF}s. Something is probably wrong"
+        echo "XBMC has exited uncleanly 3 times in the last ${DIFF} seconds."
+        echo "Something is probably wrong"
       fi
     fi
   fi
index e88f966..46e2f8e 100644 (file)
@@ -8,3 +8,15 @@ Icon=xbmc
 Terminal=false
 Type=Application
 Categories=AudioVideo;Video;Player;TV;
+
+Actions=Fullscreen;Standalone
+
+[Desktop Action Fullscreen]
+Name=Open in fullscreen
+Exec=xbmc -fs
+OnlyShowIn=Unity
+
+[Desktop Action Standalone]
+Name=Open in standalone mode
+Exect=xbmc --standalone
+OnlyShowIn=Unity
index cb2d6db..ccf6b41 100644 (file)
@@ -1,22 +1,23 @@
 include Makefile.include
 
-BUILDTOOLS = gas-preprocessor help2man m4 autoconf automake libtool pkg-config yasm cmake tar dpkg
+BUILDTOOLS = gas-preprocessor help2man m4 autoconf automake libtool pkg-config yasm cmake sed tar dpkg
 
 SUBDIRS := \
        Backrow pcre expat gettext readline sqlite3 \
        liblzo2 freetype2 fontconfig \
-       openssl libssh libssh2 curl \
+       openssl libssh libssh2 librtmp curl \
        libjpeg-turbo tiff libpng libogg \
        libvorbis libflac libmad fribidi libmpeg2 \
-       libass libcdio libsamplerate librtmp libcrystalhd libnfs \
+       libass libcdio libsamplerate libcrystalhd libnfs \
        libGLEW libsdl libsdl_mixer libsdl_image \
        libmicrohttpd libmodplug libbluray libyajl \
        libgpg-error libgcrypt afpfs-ng \
-       libplist libshairport \
-       samba python26 mysqlclient boost \
+       libplist libshairport libcec tinyxml \
+        samba python26 distribute distutilscross \
+       mysqlclient boost \
 
 ifeq ($(DARWIN), ios)
-  EXCLUDED = libcrystalhd libGLEW libsdl libsdl_mixer libsdl_image
+  EXCLUDED = libcec libcrystalhd libGLEW libsdl libsdl_mixer libsdl_image
 else
   EXCLUDED = Backrow
 endif
index cd6dbef..090044f 100644 (file)
@@ -5,14 +5,14 @@ cross_compiling=yes
 
 platform_min_version="iphoneos-version-min=4.1"
 platform_path="/Developer/Platforms/iPhoneOS.platform/Developer"
-platform_os_cflags="-arch @use_arch@ -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -pipe -Wno-trigraphs -fpascal-strings -Os -Wreturn-type -Wunused-variable -fmessage-length=0 -gdwarf-2"
+platform_os_cflags="-arch @use_arch@ -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -pipe -Wno-trigraphs -fpascal-strings -O3 -Wreturn-type -Wunused-variable -fmessage-length=0 -gdwarf-2"
 platform_os_ldflags="-arch @use_arch@ -mcpu=cortex-a8"
 platform_sdk_path="${platform_path}/SDKs/iPhoneOS${platform_sdk_version}.sdk"
 
-export NM=/usr/bin/nm
-export CPP=/usr/bin/cpp-${platform_gcc_version}
+export NM=${platform_path}/usr/bin/nm
+export CPP=${platform_path}/usr/bin/cpp-${platform_gcc_version}
 export CXXCPP=${CPP}
-export CPPFLAGS="${CPPFLAGS} -no-cpp-precomp -I${prefix}/include"
+export CPPFLAGS="${CPPFLAGS} -no-cpp-precomp -I${prefix}/include -m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags}"
 export CC=${platform_path}/usr/bin/gcc-${platform_gcc_version}
 export CFLAGS="${CFLAGS} -std=gnu99 -no-cpp-precomp -m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags} -I${platform_sdk_path}/usr/include"
 export LD=${platform_path}/usr/bin/ld
@@ -67,6 +67,13 @@ if test "${ac_unique_file}" = "fonts.dtd" ; then
   with_arch=arm
 fi
 
+# tweaks for flac
+if test "${ac_unique_file}" = "src/flac/main.c" ; then
+  # compiler barfs if we use -O3/O2 for flac
+  export CFLAGS=`echo ${CFLAGS} | sed 's/-O3/-Os/'`
+  export CPPFLAGS=`echo ${CPPFLAGS} | sed 's/-O3/-Os/'`
+fi
+
 # tweaks for curl
 if test "${PACKAGE_NAME}" = "curl" ; then
   ac_cv_file___dev_urandom_=yes
index f479f37..7713851 100644 (file)
@@ -5,14 +5,14 @@ cross_compiling=yes
 
 platform_min_version=iphoneos-version-min=4.1
 platform_path=/Developer/Platforms/iPhoneOS.platform/Developer
-platform_os_cflags=-arch @use_arch@ -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -pipe -Wno-trigraphs -fpascal-strings -Os -Wreturn-type -Wunused-variable -fmessage-length=0 -gdwarf-2
+platform_os_cflags=-arch @use_arch@ -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -pipe -Wno-trigraphs -fpascal-strings -O3 -Wreturn-type -Wunused-variable -fmessage-length=0 -gdwarf-2
 platform_os_ldflags=-arch @use_arch@ -mcpu=cortex-a8
 platform_sdk_path=${platform_path}/SDKs/iPhoneOS${platform_sdk_version}.sdk
 
-export NM=/usr/bin/nm
-export CPP=/usr/bin/cpp-${platform_gcc_version}
+export NM=${platform_path}/usr/bin/nm
+export CPP=${platform_path}/usr/bin/cpp-${platform_gcc_version}
 export CXXCPP=${CPP}
-export CPPFLAGS+=-no-cpp-precomp -I${PREFIX}/include
+export CPPFLAGS+=-no-cpp-precomp -I${PREFIX}/include -m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags}
 export CC=${platform_path}/usr/bin/gcc-${platform_gcc_version}
 export CFLAGS+=-std=gnu99 -no-cpp-precomp -m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags} -I${platform_sdk_path}/usr/include
 export LD=${platform_path}/usr/bin/ld
@@ -21,10 +21,11 @@ export CXX=${platform_path}/usr/bin/g++-${platform_gcc_version}
 export CXXFLAGS+=-m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags}
 export AR=${platform_path}/usr/bin/ar
 export AS=@use_toolchain@/bin/gas-preprocessor.pl ${CC}
+export M4=@use_toolchain@/bin/m4
 export CCAS=--tag CC @use_toolchain@/bin/gas-preprocessor.pl ${CC}
 export STRIP=${platform_path}/usr/bin/strip
 export RANLIB=${platform_path}/usr/bin/ranlib
-export ACLOCAL=aclocal -I ${PREFIX}/share/aclocal -I @use_toolchain@/share/aclocal -I /Developer/usr/share/aclocal
+export ACLOCAL=@use_toolchain@/bin/aclocal -I ${PREFIX}/share/aclocal -I @use_toolchain@/share/aclocal -I /Developer/usr/share/aclocal
 export LIBTOOL=@use_toolchain@/bin/glibtool
 export LIBTOOLIZE=@use_toolchain@/bin/glibtoolize
 export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${platform_sdk_path}/usr/lib/pkgconfig
index c92154f..72034d4 100644 (file)
@@ -19,10 +19,10 @@ platform_os_cflags="-arch @use_arch@ -no_compact_linkedit"
 platform_os_ldflags="-arch @use_arch@ -Wl,-arch,@use_arch@ -no_compact_linkedit"
 platform_sdk_path="${platform_path}/SDKs/MacOSX${platform_sdk_version}.sdk"
 
-export NM=/usr/bin/nm
-export CPP=/usr/bin/cpp-${platform_gcc_version}
+export NM=${platform_path}/usr/bin/nm
+export CPP=${platform_path}/usr/bin/cpp-${platform_gcc_version}
 export CXXCPP=${CPP}
-export CPPFLAGS="${CPPFLAGS} -no-cpp-precomp -I${prefix}/include"
+export CPPFLAGS="${CPPFLAGS} -no-cpp-precomp -I${prefix}/include -m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags}"
 export CC=/usr/bin/gcc-${platform_gcc_version}
 export CFLAGS="${CFLAGS} -std=gnu89 -no-cpp-precomp -m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags}"
 export LD=${platform_path}/usr/bin/ld
@@ -34,7 +34,7 @@ export AS=${platform_path}/usr/bin/as
 export M4=@use_toolchain@/bin/m4
 export STRIP=${platform_path}/usr/bin/strip
 export RANLIB=${platform_path}/usr/bin/ranlib
-export ACLOCAL="@use_toolchain@/aclocal -I ${prefix}/share/aclocal -I @use_toolchain@/share/aclocal -I /Developer/usr/share/aclocal"
+export ACLOCAL="@use_toolchain@/bin/aclocal -I ${prefix}/share/aclocal -I @use_toolchain@/share/aclocal -I /Developer/usr/share/aclocal"
 export LIBTOOL=@use_toolchain@/bin/glibtool
 export LIBTOOLIZE=@use_toolchain@/bin/glibtoolize
 export PKG_CONFIG_PATH=${prefix}/lib/pkgconfig:${platform_sdk_path}/usr/lib/pkgconfig
index e046977..79e9355 100644 (file)
@@ -18,10 +18,10 @@ platform_os_cflags=-arch @use_arch@ -no_compact_linkedit
 platform_os_ldflags=-arch @use_arch@ -no_compact_linkedit
 platform_sdk_path=${platform_path}/SDKs/MacOSX${platform_sdk_version}.sdk
 
-export NM=/usr/bin/nm
-export CPP=/usr/bin/cpp-${platform_gcc_version}
+export NM=${platform_path}/usr/bin/nm
+export CPP=${platform_path}/usr/bin/cpp-${platform_gcc_version}
 export CXXCPP=${CPP}
-export CPPFLAGS+=-no-cpp-precomp -I${PREFIX}/include
+export CPPFLAGS+=-no-cpp-precomp -I${PREFIX}/include -m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags}
 export CC=/usr/bin/gcc-${platform_gcc_version}
 export CFLAGS+=-std=gnu89 -no-cpp-precomp -m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags}
 export LD=${platform_path}/usr/bin/ld
@@ -30,9 +30,10 @@ export CXX=/usr/bin/g++-${platform_gcc_version}
 export CXXFLAGS+=-m${platform_min_version} -isysroot ${platform_sdk_path} ${platform_os_cflags}
 export AR=${platform_path}/usr/bin/ar
 export AS=${platform_path}/usr/bin/as
+export M4=@use_toolchain@/bin/m4
 export STRIP=${platform_path}/usr/bin/strip
 export RANLIB=${platform_path}/usr/bin/ranlib
-export ACLOCAL=aclocal -I ${PREFIX}/share/aclocal -I @use_toolchain@/share/aclocal -I /Developer/usr/share/aclocal
+export ACLOCAL=@use_toolchain@/bin/aclocal -I ${PREFIX}/share/aclocal -I @use_toolchain@/share/aclocal -I /Developer/usr/share/aclocal
 export LIBTOOL=@use_toolchain@/bin/glibtool
 export LIBTOOLIZE=@use_toolchain@/bin/glibtoolize
 export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${platform_sdk_path}/usr/lib/pkgconfig
index 897669c..48f0f9a 100644 (file)
@@ -2,12 +2,13 @@ include ../Makefile.include
 
 # lib name, version
 LIBNAME=curl
-VERSION=7.19.4
+VERSION=7.21.6
 SOURCE=$(LIBNAME)-$(VERSION)
 ARCHIVE=$(SOURCE).tar.bz2
 
 # configuration settings
 CONFIGURE=./configure --prefix=$(PREFIX)
+CONFIGURE_IOS=$(CONFIGURE) --with-random=/dev/urandom
 
 LIBDYLIB=$(SOURCE)/.libs/(LIBNAME).dylib
 
@@ -20,7 +21,11 @@ $(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
        rm -rf $(SOURCE)
        $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
        echo $(SOURCE) > .gitignore
+ifeq ($(ARCH),armv7)
+       cd $(SOURCE); $(CONFIGURE_IOS)
+else
        cd $(SOURCE); $(CONFIGURE)
+endif
 
 $(LIBDYLIB): $(SOURCE)
        make -j $(MAKE_JOBS) -C $(SOURCE)
diff --git a/tools/darwin/depends/distribute/Makefile b/tools/darwin/depends/distribute/Makefile
new file mode 100644 (file)
index 0000000..7b1b595
--- /dev/null
@@ -0,0 +1,32 @@
+include ../Makefile.include
+
+# lib name, version
+APPNAME=distribute
+VERSION=0.6.21
+SOURCE=$(APPNAME)-$(VERSION)
+ARCHIVE=$(SOURCE).tar.gz
+
+# configuration settings
+export PATH:=$(TOOLCHAIN)/bin:$(PATH)
+
+APP=$(SOURCE)/bin/$(APPNAME)
+APPBIN=$(TOOLCHAIN)/bin/$(APPNAME)
+
+all: $(APPBIN)
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+       $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
+       rm -rf $(SOURCE)
+       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       echo $(SOURCE) > .gitignore
+
+$(APPBIN): $(SOURCE)
+       cd $(SOURCE); $(TOOLCHAIN)/bin/python setup.py install --prefix=$(TOOLCHAIN)
+
+clean:
+       rm -rf $(SOURCE)
+
+distclean::
+       rm -rf $(SOURCE)
diff --git a/tools/darwin/depends/distutilscross/Makefile b/tools/darwin/depends/distutilscross/Makefile
new file mode 100644 (file)
index 0000000..6352708
--- /dev/null
@@ -0,0 +1,32 @@
+include ../Makefile.include
+
+# lib name, version
+APPNAME=distutilscross
+VERSION=0.1
+SOURCE=$(APPNAME)-$(VERSION)
+ARCHIVE=$(SOURCE).tar.gz
+
+# configuration settings
+export PATH:=$(TOOLCHAIN)/bin:$(PATH)
+
+APP=$(SOURCE)/bin/$(APPNAME)
+APPBIN=$(TOOLCHAIN)/bin/$(APPNAME)
+
+all: $(APPBIN)
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+       $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
+       rm -rf $(SOURCE)
+       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       echo $(SOURCE) > .gitignore
+
+$(APPBIN): $(SOURCE)
+       cd $(SOURCE); $(TOOLCHAIN)/bin/python setup.py install --prefix=$(TOOLCHAIN)
+
+clean:
+       rm -rf $(SOURCE)
+
+distclean::
+       rm -rf $(SOURCE)
index a612300..aad4849 100644 (file)
@@ -2,7 +2,7 @@ include ../Makefile.include
 
 # lib name, version
 LIBNAME=fontconfig
-VERSION=2.6.0
+VERSION=2.8.0
 SOURCE=$(LIBNAME)-$(VERSION)
 ARCHIVE=$(SOURCE).tar.gz
 
index a77e534..7eb8bde 100644 (file)
@@ -2,7 +2,7 @@ include ../Makefile.include
 
 # lib name, version
 LIBNAME=freetype
-VERSION=2.3.9
+VERSION=2.4.7
 SOURCE=$(LIBNAME)-$(VERSION)
 ARCHIVE=$(SOURCE).tar.bz2
 
index acd0262..ee18a59 100644 (file)
@@ -2,9 +2,9 @@ include ../Makefile.include
 
 # lib name, version
 LIBNAME=libass
-VERSION=0.9.11
+VERSION=0.9.13
 SOURCE=$(LIBNAME)-$(VERSION)
-ARCHIVE=$(SOURCE).tar.bz2
+ARCHIVE=$(SOURCE).tar.gz
 
 # configuration settings
 CONFIGURE=./configure --prefix=$(PREFIX)
index df8114c..99e1bf4 100644 (file)
@@ -1,10 +1,10 @@
 include ../Makefile.include
 
 # lib name, version
-LIBNAME=libblueray
-VERSION=20110213.20739ed
+LIBNAME=libbluray
+VERSION=0.2.1
 SOURCE=$(LIBNAME)-$(VERSION)
-ARCHIVE=$(SOURCE).tgz
+ARCHIVE=$(SOURCE).tar.bz2
 
 # configuration settings
 CONFIGURE=./configure --prefix=$(PREFIX) --exec-prefix=$(PREFIX) \
@@ -19,10 +19,9 @@ $(TARBALLS_LOCATION)/$(ARCHIVE):
 
 $(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
        rm -rf $(SOURCE)
-       mkdir $(SOURCE)
-       cd $(SOURCE); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
        echo $(SOURCE) > .gitignore
-       # libbluray has bored Makefile.am with respect to CFLAGS, remove the offending line
+       # libbluray has borked Makefile.am with respect to CFLAGS, remove the offending line
        sed -i -e "s|CFLAGS=|#CFLAGS=|" $(SOURCE)/src/Makefile.am
        sed -i -e "s|CFLAGS=|#CFLAGS=|" $(SOURCE)/src/examples/Makefile.am
        cd $(SOURCE); ./bootstrap
diff --git a/tools/darwin/depends/libcec/Makefile b/tools/darwin/depends/libcec/Makefile
new file mode 100644 (file)
index 0000000..2eaa7f6
--- /dev/null
@@ -0,0 +1,38 @@
+include ../Makefile.include
+
+# lib name, version
+LIBNAME=libcec
+VERSION=latest
+SOURCE=$(LIBNAME)-$(VERSION)
+ARCHIVE=$(SOURCE).tar.bz2
+
+# configuration settings
+CONFIGURE=./configure --prefix=$(PREFIX)
+
+LIBDYLIB=$(LIBNAME)/.libs/$(LIBNAME).dylib
+
+all: $(LIBDYLIB) .installed
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+       $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(LIBNAME): $(TARBALLS_LOCATION)/$(ARCHIVE)
+       rm -rf $(LIBNAME)
+       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       echo $(LIBNAME) > .gitignore
+       cd $(LIBNAME); autoreconf -vif
+       cd $(LIBNAME); $(CONFIGURE)
+
+$(LIBDYLIB): $(LIBNAME)
+       make -j 1 -C $(LIBNAME)
+
+.installed:
+       make -C $(LIBNAME) install
+       touch $@
+
+clean:
+       rm -rf $(LIBNAME) .installed
+
+distclean::
+       rm -rf $(LIBNAME) .installed
+
diff --git a/tools/darwin/depends/libnfs/001_fix_hanewin.patch b/tools/darwin/depends/libnfs/001_fix_hanewin.patch
new file mode 100644 (file)
index 0000000..507fbe6
--- /dev/null
@@ -0,0 +1,12 @@
+--- lib/libnfs.c       2011-09-02 12:45:30.000000000 +0200
++++ lib/libnfs.c       2011-12-04 21:16:07.000000000 +0100
+@@ -666,6 +666,9 @@
+       if (res->GETATTR3res_u.resok.obj_attributes.type == NF3DIR) {
+               st.st_mode |= S_IFDIR ;
+       }
++       if (res->GETATTR3res_u.resok.obj_attributes.type == NF3REG) {                                                                                                                                            
++              st.st_mode |= S_IFREG ;                                                                                                                                                                          
++        } 
+         st.st_nlink   = res->GETATTR3res_u.resok.obj_attributes.nlink;
+         st.st_uid     = res->GETATTR3res_u.resok.obj_attributes.uid;
+         st.st_gid     = res->GETATTR3res_u.resok.obj_attributes.gid;
index fef8ffe..fa93528 100644 (file)
@@ -27,6 +27,7 @@ $(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
        echo $(SOURCE) > .gitignore
        mkdir -p $(PREFIX)/include/rpc
        install -c -m 644  $(RPC_HEADERS) $(PREFIX)/include/rpc/
+       cd $(SOURCE); patch -p0 < ../001_fix_hanewin.patch
        cd $(SOURCE); ./bootstrap
        cd $(SOURCE); $(CONFIGURE)
 
index 902e960..3f9734d 100644 (file)
@@ -31,7 +31,7 @@ $(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
          -DCMAKE_FIND_ROOT_PATH=$(platform_sdk_path) ..
 
 $(LIBDYLIB): $(SOURCE)
-       make -j $(MAKE_JOBS) -C $(SOURCE)/build
+       make -j 1 -C $(SOURCE)/build
 
 .installed:
        make -C $(SOURCE)/build install
diff --git a/tools/darwin/depends/libshairport/007_fix_syslog_defines.patch b/tools/darwin/depends/libshairport/007_fix_syslog_defines.patch
new file mode 100644 (file)
index 0000000..4d9b834
--- /dev/null
@@ -0,0 +1,24 @@
+--- src/shairport.h    2011-10-01 04:09:16.000000000 +0200
++++ src/shairport.h    2011-11-07 18:05:05.000000000 +0100
+@@ -16,10 +16,17 @@
+ #define HWID_SIZE 6
+ #define SHAIRPORT_LOG 1
+-#define LOG_INFO     1
+-#define LOG_DEBUG    5
+-#define LOG_DEBUG_V  6
+-#define LOG_DEBUG_VV 7
++
++#ifndef LOG_INFO
++#define LOG_INFO     5
++#endif
++
++#ifndef LOG_DEBUG
++#define LOG_DEBUG    6
++#endif
++
++#define LOG_DEBUG_V  7
++#define LOG_DEBUG_VV 8
+ struct shairbuffer
+ {
diff --git a/tools/darwin/depends/libshairport/008-add-missing-libs.patch b/tools/darwin/depends/libshairport/008-add-missing-libs.patch
new file mode 100644 (file)
index 0000000..6efd302
--- /dev/null
@@ -0,0 +1,21 @@
+--- configure.in-org   2011-11-08 11:53:42.802419355 -0500
++++ configure.in       2011-11-08 11:55:38.082419413 -0500
+@@ -11,8 +11,9 @@ AC_PROG_LIBTOOL
+ # Checks for libraries.
+ #AC_CHECK_LIB([c],   [main])
+-#AC_CHECK_LIB([m],   [main])
++AC_CHECK_LIB([m],   [main])
+ AC_CHECK_LIB([ssl], [main],, AC_MSG_ERROR($missing_library))
++AC_CHECK_LIB([crypto], [main],, AC_MSG_ERROR($missing_library))
+ AC_CHECK_LIB([pthread], [main],, AC_MSG_ERROR($missing_library))
+ OUTPUT_FILES="Makefile"
+@@ -21,4 +22,4 @@ LIBDIR=$PREFIX
+ AC_CONFIG_FILES([${OUTPUT_FILES}])
+ AC_OUTPUT(Makefile src/Makefile)
+-AC_OUTPUT
+\ No newline at end of file
++AC_OUTPUT
+
diff --git a/tools/darwin/depends/libshairport/009_fix_ipv6.patch b/tools/darwin/depends/libshairport/009_fix_ipv6.patch
new file mode 100644 (file)
index 0000000..01ff026
--- /dev/null
@@ -0,0 +1,22 @@
+--- src/socketlib.c    2012-01-04 20:41:05.000000000 +0100
++++ src/socketlib.c    2012-01-04 20:35:53.000000000 +0100
+@@ -48,7 +48,7 @@
+   if((tSock==-1) && (pAddrInfo->ai_family == AF_INET6) && (errno == EAFNOSUPPORT))
+   {
+     //Fallback to ipv4
+-    perror("Failed to create ipv6 socket. Trying ipv4");
++    xprintf("Failed to create ipv6 socket. Trying ipv4");
+     pAddrInfo->ai_family = AF_INET;
+     tSock = socket(pAddrInfo->ai_family, pAddrInfo->ai_socktype, 0);
+   }
+@@ -158,8 +158,8 @@
+     sprintf(tService, "%d", pPort); // copies port to string
+     int tFamily = AF_INET;
+     #ifdef AF_INET6
+-    //printf("Listening on IPv6 Socket\n");
+-    //tFamily = AF_INET6;
++    xprintf("Listening on IPv6 Socket\n");
++    tFamily = AF_INET6;
+     #else
+     //printf("Listening on IPv4 Socket");
+     #endif
index 4af108f..154872c 100644 (file)
@@ -28,6 +28,9 @@ $(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
        cd $(SOURCE); patch -p0 < ../004_fix_bad_access.patch
        cd $(SOURCE); patch -p0 < ../005_fix_shutdown.patch
        cd $(SOURCE); patch -p0 < ../006_no_printf.patch
+       cd $(SOURCE); patch -p0 < ../007_fix_syslog_defines.patch
+       cd $(SOURCE); patch -p0 < ../008-add-missing-libs.patch
+       cd $(SOURCE); patch -p0 < ../009_fix_ipv6.patch
        cd $(SOURCE); autoreconf -vif
        cd $(SOURCE); $(CONFIGURE)
 
diff --git a/tools/darwin/depends/libusb/Makefile b/tools/darwin/depends/libusb/Makefile
new file mode 100644 (file)
index 0000000..294a7aa
--- /dev/null
@@ -0,0 +1,36 @@
+include ../Makefile.include
+
+# lib name, version
+LIBNAME=libusb
+VERSION=0.1.12
+SOURCE=$(LIBNAME)-$(VERSION)
+ARCHIVE=$(SOURCE).tar.gz
+
+# configuration settings
+CONFIGURE=./configure --prefix=$(PREFIX)
+
+LIBDYLIB=$(SOURCE)/.libs/$(LIBNAME).dylib
+
+all: $(LIBDYLIB) .installed
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+       $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
+       rm -rf $(SOURCE)
+       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       echo $(SOURCE) > .gitignore
+       cd $(SOURCE); $(CONFIGURE)
+
+$(LIBDYLIB): $(SOURCE)
+       make -j 1 -C $(SOURCE)
+
+.installed:
+       make -C $(SOURCE) install
+       touch $@
+
+clean:
+       rm -rf $(SOURCE) .installed
+
+distclean::
+       rm -rf $(SOURCE) .installed
index 7d976c3..5f814b0 100644 (file)
@@ -28,9 +28,9 @@ $(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
        echo $(SOURCE) > .gitignore
        cd $(SOURCE); $(CONFIGURE)
        if test "$(DARWIN)" = "ios"; then \
-               sed -i "" -e "s|CFLAG= |CFLAG=-arch armv7 -isysroot ${platform_sdk_path} |" "$(SOURCE)/Makefile"; \
-               sed -i "" -e "s|-arch i386|-arch armv7|" "$(SOURCE)/Makefile"; \
-               sed -i "" -e "s|static volatile sig_atomic_t intr_signal;|static volatile intr_signal;|" "$(SOURCE)/crypto/ui/ui_openssl.c"; \
+               sed -ie "s|CFLAG= |CFLAG=-arch armv7 -isysroot ${platform_sdk_path} |" "$(SOURCE)/Makefile"; \
+               sed -ie "s|-arch i386|-arch armv7|" "$(SOURCE)/Makefile"; \
+               sed -ie "s|static volatile sig_atomic_t intr_signal;|static volatile intr_signal;|" "$(SOURCE)/crypto/ui/ui_openssl.c"; \
        fi
 
 $(LIBDYLIB): $(SOURCE)
index bdd9928..8d41d37 100644 (file)
@@ -10,7 +10,7 @@ ARCHIVE=$(SOURCE).tar.gz
 CONFIGURE=./configure --prefix=$(PREFIX) \
   --disable-stack-for-recursion
 
-LIBDYLIB=$(SOURCE)/.libs/(LIBNAME).dylib
+LIBDYLIB=$(SOURCE)/.libs/lib$(LIBNAME).dylib
 
 all: $(LIBDYLIB) .installed
 
index 01d1323..b07b413 100644 (file)
@@ -12,14 +12,14 @@ ARCHIVE=$(SOURCE).tar.bz2
 
 # configuration settings
 CONFIGURE=./configure --prefix=$(PREFIX) --enable-shared \
-  --disable-toolbox-glue
+  --disable-toolbox-glue --disable-framework
 
 CONFIGURE_NATIVE= CFLAGS="" CXXFLAGS="" LDFLAGS="" CPPFLAGS="" \
   CPP="/usr/bin/cpp" \
   CC="gcc-4.2" \
   CXX="g++-4.2" \
   LD="ld" \
-  ./configure
+  ./configure --prefix=$(TOOLCHAIN) --enable-shared --disable-toolbox-glue --disable-framework
 
 LIBDYLIB=$(SOURCE)/libpython2.6.dylib
 
@@ -39,6 +39,7 @@ $(LIBDYLIB): $(TARBALLS_LOCATION)/$(ARCHIVE)
        cd $(SOURCE); mv python.exe hostpython
        cd $(SOURCE); mv Parser/pgen Parser/hostpgen
        cd $(SOURCE); mv libpython2.6.a hostlibpython2.6.a
+       cd $(SOURCE); make install HOSTPYTHON=./hostpython
        cd $(SOURCE); make distclean
        cd $(SOURCE); patch -p1 <../Python-2.6.5-xcompile.patch
        cd $(SOURCE); $(CONFIGURE)
index 51c115d..f923940 100644 (file)
@@ -9,7 +9,14 @@ ARCHIVE=$(SOURCE).tar.bz2
 # configuration settings
 export OPT=$(CFLAGS)
 CONFIGURE=./configure --prefix=$(PREFIX) \
-  --enable-shared --disable-toolbox-glue --enable-unicode=ucs4
+  --enable-shared --disable-toolbox-glue --disable-framework --enable-unicode=ucs4
+
+CONFIGURE_NATIVE= CFLAGS="" CXXFLAGS="" LDFLAGS="" CPPFLAGS="" \
+  CPP="/usr/bin/cpp" \
+  CC="gcc-4.2" \
+  CXX="g++-4.2" \
+  LD="ld" \
+  ./configure --prefix=$(TOOLCHAIN) --enable-shared --disable-toolbox-glue --disable-framework
 
 LIBDYLIB=$(SOURCE)/libpython2.6.dylib
 
@@ -24,6 +31,10 @@ $(LIBDYLIB): $(TARBALLS_LOCATION)/$(ARCHIVE)
        echo $(SOURCE) > .gitignore
        # http://bugs.python.org/issue6869
        cd $(SOURCE); patch -p1 < ../Python-2.6-ctypes.patch
+       cd $(SOURCE); $(CONFIGURE_NATIVE)
+       cd $(SOURCE); make -j $(MAKE_JOBS)
+       cd $(SOURCE); make install
+       cd $(SOURCE); make distclean
        cd $(SOURCE); $(CONFIGURE)
        # python2.6 has an issue detecting and using the same version of openssl in configure and setup.py
        # this forces python2.6 hashlib to be compatible with osx 10.4 boxes.
diff --git a/tools/darwin/depends/sed/Makefile b/tools/darwin/depends/sed/Makefile
new file mode 100644 (file)
index 0000000..d07ea3b
--- /dev/null
@@ -0,0 +1,38 @@
+include ../Makefile.include
+
+# lib name, version
+APPNAME=sed
+VERSION=4.2.1
+SOURCE=$(APPNAME)-$(VERSION)
+ARCHIVE=$(SOURCE).tar.gz
+
+# configuration settings
+export PATH:=$(TOOLCHAIN)/bin:$(PATH)
+CONFIGURE=./configure --prefix=$(TOOLCHAIN)
+
+APP=$(SOURCE)/bin/$(APPNAME)
+APPBIN=$(TOOLCHAIN)/bin/$(APPNAME)
+
+all: $(APPBIN)
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+       $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
+       rm -rf $(SOURCE)
+       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       echo $(SOURCE) > .gitignore
+       cd $(SOURCE); $(CONFIGURE)
+
+$(APP): $(SOURCE)
+       make -j $(MAKE_JOBS) -C $(SOURCE)
+
+$(APPBIN):
+       make $(APP)
+       make -C $(SOURCE) install
+
+clean:
+       make -C $(SOURCE) clean
+
+distclean::
+       rm -rf $(SOURCE)
diff --git a/tools/darwin/depends/tinyxml/Makefile b/tools/darwin/depends/tinyxml/Makefile
new file mode 100644 (file)
index 0000000..c9c470a
--- /dev/null
@@ -0,0 +1,39 @@
+include ../Makefile.include
+
+# lib name, version
+LIBNAME=tinyxml
+VERSION=2.6.2_2
+SOURCE=$(LIBNAME)-$(VERSION)
+ARCHIVE=$(SOURCE).tar.gz
+
+# configuration settings
+CONFIGURE=./configure --prefix=$(PREFIX)
+
+
+LIBDYLIB=$(SOURCE)/.libs/$(LIBNAME).dylib
+
+all: $(LIBDYLIB) .installed
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+       $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
+       rm -rf $(SOURCE)
+       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       echo $(SOURCE) > .gitignore
+       cd $(SOURCE); autoreconf -vif
+       cd $(SOURCE); $(CONFIGURE)
+
+$(LIBDYLIB): $(SOURCE)
+       make -j 1 -C $(SOURCE)/src
+
+.installed:
+       make -C $(SOURCE)/src install
+       touch $@
+
+clean:
+       rm -rf $(SOURCE) .installed
+
+distclean::
+       rm -rf $(SOURCE) .installed
+
index 5efd9fe..b43cf8e 100644 (file)
@@ -8,6 +8,10 @@ CONFIGURE=./configure --prefix=$(PREFIX) \
   PKG_CONFIG_PATH=$(PREFIX)/lib/pkgconfig \
   PYTHON=$(PREFIX)/bin/python
 
+ifeq ($(XBMC_DARWIN_RELEASE),1)
+       CONFIGURE+= --disable-debug
+endif
+
 all: configure
 
 configure:
index 5d55514..45d2a2f 100755 (executable)
@@ -57,7 +57,7 @@ mkdir -p $DIRNAME/$PACKAGE/DEBIAN
 echo "Package: $PACKAGE"                          >  $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Priority: Extra"                            >> $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Name: XBMC-ATV2"                            >> $DIRNAME/$PACKAGE/DEBIAN/control
-echo "Depends: curl, org.awkwardtv.whitelist, org.xbmc.xbmc-seatbeltunlock" >> $DIRNAME/$PACKAGE/DEBIAN/control
+echo "Depends: curl, org.awkwardtv.whitelist, com.nito.updatebegone, org.xbmc.xbmc-seatbeltunlock" >> $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Version: $VERSION-$REVISION"                >> $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Architecture: iphoneos-arm"                 >> $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Description: XBMC Multimedia Center for AppleTV 2" >> $DIRNAME/$PACKAGE/DEBIAN/control
@@ -78,6 +78,7 @@ chmod +x $DIRNAME/$PACKAGE/DEBIAN/prerm
 
 # postinst: symlink XBMC.frappliance into correct location and reload Lowtide/AppleTV.
 echo "#!/bin/sh"                                  >  $DIRNAME/$PACKAGE/DEBIAN/postinst
+echo "chown -R mobile:mobile /Applications/XBMC.frappliance" >> $DIRNAME/$PACKAGE/DEBIAN/postinst
 echo "if [ \"\`uname -r\`\" = \"10.3.1\" ]; then" >> $DIRNAME/$PACKAGE/DEBIAN/postinst
 echo "  ln -sf /Applications/XBMC.frappliance /Applications/Lowtide.app/Appliances/XBMC.frappliance" >> $DIRNAME/$PACKAGE/DEBIAN/postinst
 echo "  killall Lowtide"                          >> $DIRNAME/$PACKAGE/DEBIAN/postinst
@@ -85,6 +86,11 @@ echo "else"                                       >> $DIRNAME/$PACKAGE/DEBIAN/po
 echo "  ln -sf /Applications/XBMC.frappliance /Applications/AppleTV.app/Appliances/XBMC.frappliance" >> $DIRNAME/$PACKAGE/DEBIAN/postinst
 echo "  killall AppleTV"                          >> $DIRNAME/$PACKAGE/DEBIAN/postinst
 echo "fi"                                         >> $DIRNAME/$PACKAGE/DEBIAN/postinst
+echo "FILE=/var/mobile/Media/Photos/seas0nTV.png" >> $DIRNAME/$PACKAGE/DEBIAN/postinst
+echo "if [ -f \$FILE ]; then"                     >> $DIRNAME/$PACKAGE/DEBIAN/postinst
+echo "   echo \"File \$FILE exists. removing...\"" >> $DIRNAME/$PACKAGE/DEBIAN/postinst
+echo "   rm \$FILE"                               >> $DIRNAME/$PACKAGE/DEBIAN/postinst
+echo "fi"                                         >> $DIRNAME/$PACKAGE/DEBIAN/postinst
 chmod +x $DIRNAME/$PACKAGE/DEBIAN/postinst
 
 # prep XBMC.frappliance
index f6126a8..c7ddf6b 100755 (executable)
@@ -75,6 +75,7 @@ chmod +x $DIRNAME/$PACKAGE/DEBIAN/prerm
 
 # postinst: nothing for now.
 echo "#!/bin/sh"                                  >  $DIRNAME/$PACKAGE/DEBIAN/postinst
+echo "chown -R mobile:mobile /Applications/XBMC.app" >> $DIRNAME/$PACKAGE/DEBIAN/postinst
 chmod +x $DIRNAME/$PACKAGE/DEBIAN/postinst
 
 # prep XBMC.app
index 4b0990b..d1d0b80 100644 (file)
@@ -7,7 +7,7 @@ include ../../../../Makefile.include
 $(TARGET): dist/XBMC.dmg
        mv -f dist/XBMC.dmg $(TARGET)
 
-ifeq ($(findstring D_DEBUG,$(CFLAGS)), D_DEBUG)
+ifeq ($(findstring D_DEBUG,$(CFLAGS)),D_DEBUG)
 dist/XBMC.dmg:
        if [ -e "/Volumes/XBMC" ] ; then umount /Volumes/XBMC ; fi
        ./dmgmaker.pl ../../../../build/Debug/XBMC.app
index ec9fdc9..9d2cd86 100644 (file)
 #include "cores/dvdplayer/DVDFileInfo.h"
 #include "PlayListPlayer.h"
 #include "Autorun.h"
+#include "video/Bookmark.h"
+#ifdef HAS_WEB_SERVER
+#include "network/WebServer.h"
+#endif
 #ifdef HAS_LCD
 #include "utils/LCDFactory.h"
 #endif
 #ifdef HAS_FILESYSTEM_NFS
 #include "filesystem/FileNFS.h"
 #endif
+#ifdef HAS_FILESYSTEM_AFP
+#include "filesystem/FileAFP.h"
+#endif
 #ifdef HAS_FILESYSTEM_SFTP
 #include "filesystem/FileSFTP.h"
 #endif
 #ifdef HAS_EVENT_SERVER
 #include "network/EventServer.h"
 #endif
-#ifdef HAS_DBUS_SERVER
-#include "interfaces/DbusServer.h"
+#ifdef HAS_JSONRPC
+#include "interfaces/json-rpc/InputOperations.h"
+#endif
+#ifdef HAS_DBUS
+#include <dbus/dbus.h>
 #endif
 #ifdef HAS_HTTPAPI
 #include "interfaces/http-api/XBMChttp.h"
 #endif
 #include "interfaces/AnnouncementManager.h"
 #include "peripherals/Peripherals.h"
-#ifdef HAVE_LIBCEC
-#include "peripherals/devices/PeripheralCecAdapter.h"
-#endif
 #include "peripherals/dialogs/GUIDialogPeripheralManager.h"
 #include "peripherals/dialogs/GUIDialogPeripheralSettings.h"
 
 #ifdef HAS_SDL_AUDIO
 #include <SDL/SDL_mixer.h>
 #endif
-#ifdef _WIN32
+#ifdef TARGET_WINDOWS
 #include <shlobj.h>
 #include "win32util.h"
 #endif
 #include "DarwinUtils.h"
 #endif
 
+
 #ifdef HAS_DVD_DRIVE
 #include <cdio/logging.h>
 #endif
@@ -308,9 +316,6 @@ using namespace MUSIC_INFO;
 #ifdef HAS_EVENT_SERVER
 using namespace EVENTSERVER;
 #endif
-#ifdef HAS_DBUS_SERVER
-using namespace DBUSSERVER;
-#endif
 #ifdef HAS_JSONRPC
 using namespace JSONRPC;
 #endif
@@ -326,10 +331,16 @@ using namespace XbmcThreads;
 #define MAX_FFWD_SPEED 5
 
 //extern IDirectSoundRenderer* m_pAudioDecoder;
-CApplication::CApplication(void) : m_itemCurrentFile(new CFileItem), m_progressTrackingItem(new CFileItem)
+CApplication::CApplication(void)
+  : m_pPlayer(NULL)
+#ifdef HAS_WEB_SERVER
+  , m_WebServer(*new CWebServer)
+#endif
+  , m_itemCurrentFile(new CFileItem)
+  , m_progressTrackingVideoResumeBookmark(*new CBookmark)
+  , m_progressTrackingItem(new CFileItem)
 {
   m_iPlaySpeed = 1;
-  m_pPlayer = NULL;
   m_bScreenSave = false;
   m_dpms = NULL;
   m_dpmsIsActive = false;
@@ -364,10 +375,20 @@ CApplication::CApplication(void) : m_itemCurrentFile(new CFileItem), m_progressT
   m_bEnableLegacyRes = false;
   m_bSystemScreenSaverEnable = false;
   m_pInertialScrollingHandler = new CInertialScrollingHandler();
+#ifdef HAS_DVD_DRIVE
+  m_Autorun = new CAutorun();
+#endif
 }
 
 CApplication::~CApplication(void)
 {
+#ifdef HAS_WEB_SERVER
+  delete &m_WebServer;
+#endif
+  delete &m_progressTrackingVideoResumeBookmark;
+#ifdef HAS_DVD_DRIVE
+  delete m_Autorun;
+#endif
   delete m_currentStack;
 
 #ifdef HAS_KARAOKE
@@ -409,6 +430,24 @@ bool CApplication::OnEvent(XBMC_Event& newEvent)
         g_settings.Save();
       }
       break;
+    case XBMC_VIDEOMOVE:
+#ifdef TARGET_WINDOWS
+      if (g_advancedSettings.m_fullScreen)
+      {
+        // when fullscreen, remain fullscreen and resize to the dimensions of the new screen
+        RESOLUTION newRes = (RESOLUTION) g_Windowing.DesktopResolution(g_Windowing.GetCurrentScreen());
+        if (newRes != g_graphicsContext.GetVideoResolution())
+        {
+          g_guiSettings.SetResolution(newRes);
+          g_graphicsContext.SetVideoResolution(newRes);
+        }
+      }
+      else
+#endif
+      {
+        g_Windowing.OnMove(newEvent.move.x, newEvent.move.y);
+      }
+      break;
     case XBMC_USEREVENT:
       g_application.getApplicationMessenger().UserEvent(newEvent.user.code);
       break;
@@ -501,23 +540,26 @@ bool CApplication::Create()
   CopyUserDataIfNeeded("special://masterprofile/", "Lircmap.xml");
   CopyUserDataIfNeeded("special://masterprofile/", "LCD.xml");
 
-  if (!CLog::Init(_P(g_settings.m_logFolder).c_str()))
+  if (!CLog::Init(CSpecialProtocol::TranslatePath(g_settings.m_logFolder).c_str()))
   {
-    fprintf(stderr,"Could not init logging classes. Permission errors on ~/.xbmc?\n");
+    fprintf(stderr,"Could not init logging classes. Permission errors on ~/.xbmc (%s)\n",
+      CSpecialProtocol::TranslatePath(g_settings.m_logFolder).c_str());
     return false;
   }
 
   g_settings.LoadProfiles(PROFILES_FILE);
 
   CLog::Log(LOGNOTICE, "-----------------------------------------------------------------------");
-#if defined(__APPLE__)
-  CLog::Log(LOGNOTICE, "Starting XBMC, Platform: Mac OS X (%s). Built on %s (Git:%s)", g_sysinfo.GetUnameVersion().c_str(), __DATE__, GIT_REV);
+#if defined(TARGET_DARWIN_OSX)
+  CLog::Log(LOGNOTICE, "Starting XBMC (%s), Platform: Darwin OSX (%s). Built on %s", g_infoManager.GetVersion().c_str(), g_sysinfo.GetUnameVersion().c_str(), __DATE__);
+#elif defined(TARGET_DARWIN_IOS)
+  CLog::Log(LOGNOTICE, "Starting XBMC (%s), Platform: Darwin iOS (%s). Built on %s", g_infoManager.GetVersion().c_str(), g_sysinfo.GetUnameVersion().c_str(), __DATE__);
 #elif defined(__FreeBSD__)
-  CLog::Log(LOGNOTICE, "Starting XBMC, Platform: FreeBSD (%s). Built on %s (Git:%s)", g_sysinfo.GetUnameVersion().c_str(), __DATE__, GIT_REV);
+  CLog::Log(LOGNOTICE, "Starting XBMC (%s), Platform: FreeBSD (%s). Built on %s", g_infoManager.GetVersion().c_str(), g_sysinfo.GetUnameVersion().c_str(), __DATE__);
 #elif defined(_LINUX)
-  CLog::Log(LOGNOTICE, "Starting XBMC, Platform: Linux (%s, %s). Built on %s (Git:%s)", g_sysinfo.GetLinuxDistro().c_str(), g_sysinfo.GetUnameVersion().c_str(), __DATE__, GIT_REV);
+  CLog::Log(LOGNOTICE, "Starting XBMC (%s), Platform: Linux (%s, %s). Built on %s", g_infoManager.GetVersion().c_str(), g_sysinfo.GetLinuxDistro().c_str(), g_sysinfo.GetUnameVersion().c_str(), __DATE__);
 #elif defined(_WIN32)
-  CLog::Log(LOGNOTICE, "Starting XBMC, Platform: %s. Built on %s (Git:%s, compiler %i)",g_sysinfo.GetKernelVersion().c_str(), __DATE__, GIT_REV, _MSC_VER);
+  CLog::Log(LOGNOTICE, "Starting XBMC (%s), Platform: %s. Built on %s (compiler %i)", g_infoManager.GetVersion().c_str(), g_sysinfo.GetKernelVersion().c_str(), __DATE__, _MSC_VER);
   CLog::Log(LOGNOTICE, g_cpuInfo.getCPUModel().c_str());
   CLog::Log(LOGNOTICE, CWIN32Util::GetResInfoString());
   CLog::Log(LOGNOTICE, "Running with %s rights", (CWIN32Util::IsCurrentUserLocalAdministrator() == TRUE) ? "administrator" : "restricted");
@@ -527,6 +569,7 @@ bool CApplication::Create()
 
   CStdString executable = CUtil::ResolveExecutablePath();
   CLog::Log(LOGNOTICE, "The executable running is: %s", executable.c_str());
+  CLog::Log(LOGNOTICE, "Local hostname: %s", m_network.GetHostName().c_str());
   CLog::Log(LOGNOTICE, "Log File is located: %sxbmc.log", g_settings.m_logFolder.c_str());
   CLog::Log(LOGNOTICE, "-----------------------------------------------------------------------");
 
@@ -597,6 +640,10 @@ bool CApplication::Create()
     CLog::Log(LOGFATAL, "XBAppEx: Unable to initialize SDL: %s", SDL_GetError());
     return false;
   }
+  #if defined(TARGET_DARWIN)
+  // SDL_Init will install a handler for segfaults, restore the default handler.
+  signal(SIGSEGV, SIG_DFL);
+  #endif
 #endif
 
   // for python scripts that check the OS
@@ -697,7 +744,7 @@ bool CApplication::Create()
     g_guiSettings.m_LookAndFeelResolution = RES_DESKTOP;
   }
 
-#ifdef __APPLE__
+#ifdef TARGET_DARWIN_OSX
   // force initial window creation to be windowed, if fullscreen, it will switch to it below
   // fixes the white screen of death if starting fullscreen and switching to windowed.
   bool bFullScreen = false;
@@ -740,9 +787,10 @@ bool CApplication::Create()
     m_splash->Show();
   }
 
+  // The key mappings may already have been loaded by a peripheral
   CLog::Log(LOGINFO, "load keymapping");
   if (!CButtonTranslator::GetInstance().Load())
-    FatalErrorHandler(false, false, true);
+      FatalErrorHandler(false, false, true);
 
   int iResolution = g_graphicsContext.GetVideoResolution();
   CLog::Log(LOGINFO, "GUI format %ix%i %s",
@@ -957,62 +1005,20 @@ bool CApplication::InitDirectoriesWin32()
   CSpecialProtocol::SetXBMCBinPath(xbmcPath);
   CSpecialProtocol::SetXBMCPath(xbmcPath);
 
-  if (m_bPlatformDirectories)
-  {
+  CStdString strWin32UserFolder = CWIN32Util::GetProfilePath();
 
-    CStdString strWin32UserFolder = CWIN32Util::GetProfilePath();
+  g_settings.m_logFolder = strWin32UserFolder;
+  CSpecialProtocol::SetHomePath(strWin32UserFolder);
+  CSpecialProtocol::SetMasterProfilePath(URIUtils::AddFileToFolder(strWin32UserFolder, "userdata"));
+  CSpecialProtocol::SetTempPath(URIUtils::AddFileToFolder(strWin32UserFolder,"cache"));
 
-    // create user/app data/XBMC
-    CStdString homePath = URIUtils::AddFileToFolder(strWin32UserFolder, "XBMC");
+  SetEnvironmentVariable("XBMC_PROFILE_USERDATA",CSpecialProtocol::TranslatePath("special://masterprofile/").c_str());
 
-    // move log to platform dirs
-    g_settings.m_logFolder = homePath;
-    URIUtils::AddSlashAtEnd(g_settings.m_logFolder);
-
-    // map our special drives
-    CSpecialProtocol::SetXBMCBinPath(xbmcPath);
-    CSpecialProtocol::SetXBMCPath(xbmcPath);
-    CSpecialProtocol::SetHomePath(homePath);
-    CSpecialProtocol::SetMasterProfilePath(URIUtils::AddFileToFolder(homePath, "userdata"));
-    SetEnvironmentVariable("XBMC_PROFILE_USERDATA",_P("special://masterprofile").c_str());
-
-    CSpecialProtocol::SetTempPath(URIUtils::AddFileToFolder(homePath,"cache"));
-
-    CreateUserDirs();
-
-  }
-  else
-  {
-    URIUtils::AddSlashAtEnd(xbmcPath);
-    g_settings.m_logFolder = xbmcPath;
-
-    CSpecialProtocol::SetHomePath(URIUtils::AddFileToFolder(xbmcPath, "portable_data"));
-    CSpecialProtocol::SetMasterProfilePath(URIUtils::AddFileToFolder(xbmcPath, "portable_data/userdata"));
-
-    CStdString strTempPath = URIUtils::AddFileToFolder(xbmcPath, "portable_data/temp");
-    CSpecialProtocol::SetTempPath(strTempPath);
-
-    CreateUserDirs();
-
-    SetEnvironmentVariable("XBMC_PROFILE_USERDATA",_P("special://masterprofile/").c_str());
-  }
+  CreateUserDirs();
 
   // Expand the DLL search path with our directories
   CWIN32Util::ExtendDllPath();
 
-  // check for a DVD drive
-  VECSOURCES vShare;
-  CWIN32Util::GetDrivesByType(vShare, DVD_DRIVES);
-  if(!vShare.empty())
-    g_mediaManager.SetHasOpticalDrive(true);
-
-  // Can be removed once the StorageHandler supports optical media
-  VECSOURCES::const_iterator it;
-  for(it=vShare.begin();it!=vShare.end();++it)
-    if(g_mediaManager.GetDriveStatus(it->strPath) == DRIVE_CLOSED_MEDIA_PRESENT)
-      g_application.getApplicationMessenger().OpticalMount(it->strPath);
-  // remove end
-
   return true;
 #else
   return false;
@@ -1050,6 +1056,18 @@ bool CApplication::Initialize()
     CDirectory::Create("special://xbmc/sounds");
   }
 
+  // Load curl so curl_global_init gets called before any service threads
+  // are started. Unloading will have no effect as curl is never fully unloaded.
+  // To quote man curl_global_init:
+  //  "This function is not thread safe. You must not call it when any other
+  //  thread in the program (i.e. a thread sharing the same memory) is running.
+  //  This doesn't just mean no other thread that is using libcurl. Because
+  //  curl_global_init() calls functions of other libraries that are similarly
+  //  thread unsafe, it could conflict with any other thread that
+  //  uses these other libraries."
+  g_curlInterface.Load();
+  g_curlInterface.Unload();
+
   StartServices();
 
   // Init DPMS, before creating the corresponding setting control.
@@ -1177,16 +1195,29 @@ bool CApplication::Initialize()
   if (g_settings.UsingLoginScreen())
     g_windowManager.ActivateWindow(WINDOW_LOGIN_SCREEN);
   else
+  {
+#ifdef HAS_JSONRPC
+    CJSONRPC::Initialize();
+#endif
+    ADDON::CAddonMgr::Get().StartServices(false);
     g_windowManager.ActivateWindow(g_SkinInfo->GetFirstWindow());
+  }
 
   g_sysinfo.Refresh();
 
   CLog::Log(LOGINFO, "removing tempfiles");
   CUtil::RemoveTempFiles();
 
-  //  Show mute symbol
+  //  Restore volume
   if (g_settings.m_bMute)
+  {
+    SetVolume(g_settings.m_iPreMuteVolumeLevel);
     Mute();
+  }
+  else
+  {
+    SetVolume(g_settings.m_nVolumeLevel, false);
+  }
 
   // if the user shutoff the xbox during music scan
   // restore the settings
@@ -1200,7 +1231,7 @@ bool CApplication::Initialize()
   {
     UpdateLibraries();
 #ifdef HAS_PYTHON
-  g_pythonParser.m_bLogin = true;
+    g_pythonParser.m_bLogin = true;
 #endif
   }
 
@@ -1213,7 +1244,7 @@ bool CApplication::Initialize()
   CCrystalHD::GetInstance();
 #endif
 
-  CAddonMgr::Get().StartServices(false);
+  CAddonMgr::Get().StartServices(true);
 
   CLog::Log(LOGNOTICE, "initialize done");
 
@@ -1221,6 +1252,7 @@ bool CApplication::Initialize()
 
   // reset our screensaver (starts timers etc.)
   ResetScreenSaver();
+
   return true;
 }
 
@@ -1246,13 +1278,13 @@ bool CApplication::StartWebServer()
       started = true;
       // publish web frontend and API services
 #ifdef HAS_WEB_INTERFACE
-      CZeroconf::GetInstance()->PublishService("servers.webserver", "_http._tcp", "XBMC Web Server", webPort, txt);
+      CZeroconf::GetInstance()->PublishService("servers.webserver", "_http._tcp", g_infoManager.GetLabel(SYSTEM_FRIENDLY_NAME), webPort, txt);
 #endif
 #ifdef HAS_HTTPAPI
-      CZeroconf::GetInstance()->PublishService("servers.webapi", "_xbmc-web._tcp", "XBMC HTTP API", webPort, txt);
+      CZeroconf::GetInstance()->PublishService("servers.webapi", "_xbmc-web._tcp", g_infoManager.GetLabel(SYSTEM_FRIENDLY_NAME), webPort, txt);
 #endif
 #ifdef HAS_JSONRPC
-      CZeroconf::GetInstance()->PublishService("servers.webjsonrpc", "_xbmc-jsonrpc._tcp", "XBMC JSONRPC", webPort, txt);
+      CZeroconf::GetInstance()->PublishService("servers.jsonrpc-http", "_xbmc-jsonrpc-h._tcp", g_infoManager.GetLabel(SYSTEM_FRIENDLY_NAME), webPort, txt);
 #endif
     }
 #ifdef HAS_HTTPAPI
@@ -1278,7 +1310,7 @@ void CApplication::StopWebServer()
     {
       CLog::Log(LOGNOTICE, "Webserver: Stopped...");
       CZeroconf::GetInstance()->RemoveService("servers.webserver");
-      CZeroconf::GetInstance()->RemoveService("servers.webjsonrpc");
+      CZeroconf::GetInstance()->RemoveService("servers.jsonrpc-http");
       CZeroconf::GetInstance()->RemoveService("servers.webapi");
     } else
       CLog::Log(LOGWARNING, "Webserver: Failed to stop.");
@@ -1291,28 +1323,38 @@ void CApplication::StartAirplayServer()
 #ifdef HAS_AIRPLAY
   if (g_guiSettings.GetBool("services.airplay") && m_network.IsAvailable())
   {
+    int listenPort = g_advancedSettings.m_airPlayPort;
     CStdString password = g_guiSettings.GetString("services.airplaypassword");
     bool usePassword = g_guiSettings.GetBool("services.useairplaypassword");
     
-    if (CAirPlayServer::StartServer(9091, true))
+    if (CAirPlayServer::StartServer(listenPort, true))
     {
       CAirPlayServer::SetCredentials(usePassword, password);
       std::map<std::string, std::string> txt;
-      txt["deviceid"] = m_network.GetFirstConnectedInterface()->GetMacAddress();
+      CNetworkInterface* iface = g_application.getNetwork().GetFirstConnectedInterface();
+      if (iface)
+      {
+        txt["deviceid"] = iface->GetMacAddress();
+      }
+      else
+      {
+        txt["deviceid"] = "FF:FF:FF:FF:FF:F2";
+      }
       txt["features"] = "0x77";
       txt["model"] = "AppleTV2,1";
-      txt["srcvers"] = "101.28";
-      CZeroconf::GetInstance()->PublishService("servers.airplay", "_airplay._tcp", "XBMC", 9091, txt);
+      txt["srcvers"] = AIRPLAY_SERVER_VERSION_STR;
+      CZeroconf::GetInstance()->PublishService("servers.airplay", "_airplay._tcp", g_infoManager.GetLabel(SYSTEM_FRIENDLY_NAME), listenPort, txt);
     }
   }
 #endif
 #ifdef HAS_AIRTUNES
   if (g_guiSettings.GetBool("services.airplay") && m_network.IsAvailable())
   {   
+    int listenPort = g_advancedSettings.m_airTunesPort;  
     CStdString password = g_guiSettings.GetString("services.airplaypassword");
     bool usePassword = g_guiSettings.GetBool("services.useairplaypassword");
       
-    if (!CAirTunesServer::StartServer(5000, true, usePassword, password))
+    if (!CAirTunesServer::StartServer(listenPort, true, usePassword, password))
     {
       CLog::Log(LOGERROR, "Failed to start AirTunes Server");
     }
@@ -1336,12 +1378,10 @@ bool CApplication::StartJSONRPCServer()
 #ifdef HAS_JSONRPC
   if (g_guiSettings.GetBool("services.esenabled"))
   {
-    CJSONRPC::Initialize();
-
     if (CTCPServer::StartServer(g_advancedSettings.m_jsonTcpPort, g_guiSettings.GetBool("services.esallinterfaces")))
     {
       std::map<std::string, std::string> txt;  
-      CZeroconf::GetInstance()->PublishService("servers.jsonrpc", "_xbmc-jsonrpc._tcp", "XBMC JSONRPC", g_advancedSettings.m_jsonTcpPort, txt);
+      CZeroconf::GetInstance()->PublishService("servers.jsonrpc-tpc", "_xbmc-jsonrpc._tcp", g_infoManager.GetLabel(SYSTEM_FRIENDLY_NAME), g_advancedSettings.m_jsonTcpPort, txt);
       return true;
     }
     else
@@ -1356,7 +1396,7 @@ void CApplication::StopJSONRPCServer(bool bWait)
 {
 #ifdef HAS_JSONRPC
   CTCPServer::StopServer(bWait);
-  CZeroconf::GetInstance()->RemoveService("servers.jsonrpc");
+  CZeroconf::GetInstance()->RemoveService("servers.jsonrpc-tcp");
 #endif
 }
 
@@ -1446,34 +1486,6 @@ void CApplication::RefreshEventServer()
 #endif
 }
 
-void CApplication::StartDbusServer()
-{
-#ifdef HAS_DBUS_SERVER
-  CDbusServer* serverDbus = CDbusServer::GetInstance();
-  if (!serverDbus)
-  {
-    CLog::Log(LOGERROR, "DS: Out of memory");
-    return;
-  }
-  CLog::Log(LOGNOTICE, "DS: Starting dbus server");
-  serverDbus->StartServer( this );
-#endif
-}
-
-bool CApplication::StopDbusServer(bool bWait)
-{
-#ifdef HAS_DBUS_SERVER
-  CDbusServer* serverDbus = CDbusServer::GetInstance();
-  if (!serverDbus)
-  {
-    CLog::Log(LOGERROR, "DS: Out of memory");
-    return false;
-  }
-  CDbusServer::GetInstance()->StopServer(bWait);
-#endif
-  return true;
-}
-
 void CApplication::StartUPnPRenderer()
 {
 #ifdef HAS_UPNP
@@ -2053,6 +2065,7 @@ void CApplication::Render()
   if(!g_Windowing.BeginRender())
     return;
 
+  CDirtyRegionList dirtyRegions = g_windowManager.GetDirty();
   if (RenderNoPresent())
     hasRendered = true;
 
@@ -2092,7 +2105,7 @@ void CApplication::Render()
   m_lastFrameTime = XbmcThreads::SystemClockMillis();
 
   if (flip)
-    g_graphicsContext.Flip(g_windowManager.GetDirty());
+    g_graphicsContext.Flip(dirtyRegions);
   CTimeUtils::UpdateFrameTime(flip);
 
   g_renderManager.UpdateResolution();
@@ -2231,7 +2244,7 @@ bool CApplication::OnKey(const CKey& key)
       if (!action.GetID())
       {
         // keyboard entry - pass the keys through directly
-        if (key.GetFromHttpApi())
+        if (key.GetFromService())
           action = CAction(key.GetButtonCode() != KEY_INVALID ? key.GetButtonCode() : 0, key.GetUnicode());
         else
         { // see if we've got an ascii key
@@ -2248,7 +2261,7 @@ bool CApplication::OnKey(const CKey& key)
         return true;
       // failed to handle the keyboard action, drop down through to standard action
     }
-    if (key.GetFromHttpApi())
+    if (key.GetFromService())
     {
       if (key.GetButtonCode() != KEY_INVALID)
         action = CButtonTranslator::GetInstance().GetAction(iWin, key);
@@ -2540,6 +2553,10 @@ bool CApplication::OnAction(const CAction &action)
       }
     }
   }
+
+  if (g_peripherals.OnAction(action))
+    return true;
+
   if (action.GetID() == ACTION_MUTE)
   {
     ToggleMute();
@@ -2608,7 +2625,7 @@ bool CApplication::OnAction(const CAction &action)
   }
   if (action.GetID() == ACTION_GUIPROFILE_BEGIN)
   {
-    CGUIControlProfiler::Instance().SetOutputFile(_P("special://home/guiprofiler.xml"));
+    CGUIControlProfiler::Instance().SetOutputFile(CSpecialProtocol::TranslatePath("special://home/guiprofiler.xml"));
     CGUIControlProfiler::Instance().Start();
     return true;
   }
@@ -2687,6 +2704,7 @@ void CApplication::FrameMove(bool processEvents)
     // process input actions
     CWinEvents::MessagePump();
     ProcessHTTPApiButtons();
+    ProcessJsonRpcButtons();
     ProcessRemote(frameTime);
     ProcessGamepad(frameTime);
     ProcessEventServer(frameTime);
@@ -2814,23 +2832,9 @@ bool CApplication::ProcessRemote(float frameTime)
 
 bool CApplication::ProcessPeripherals(float frameTime)
 {
-#ifdef HAVE_LIBCEC
-  vector<CPeripheral *> peripherals;
-  if (g_peripherals.GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
-  {
-    for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
-    {
-      CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
-      if (cecDevice && cecDevice->GetButton())
-      {
-        CKey key(cecDevice->GetButton(), cecDevice->GetHoldTime());
-        cecDevice->ResetButton();
-        return OnKey(key);
-      }
-    }
-  }
-#endif
-
+  CKey key;
+  if (g_peripherals.GetNextKeypress(frameTime, key))
+    return OnKey(key);
   return false;
 }
 
@@ -2958,8 +2962,21 @@ bool CApplication::ProcessHTTPApiButtons()
       return true;
     }
   }
+#endif
   return false;
+}
+
+bool CApplication::ProcessJsonRpcButtons()
+{
+#ifdef HAS_JSONRPC
+  CKey tempKey(JSONRPC::CInputOperations::GetKey());
+  if (tempKey.GetButtonCode() != KEY_INVALID)
+  {
+    tempKey.SetFromService(true);
+    return OnKey(tempKey);
+  }
 #endif
+  return false;
 }
 
 bool CApplication::ProcessEventServer(float frameTime)
@@ -2983,6 +3000,11 @@ bool CApplication::ProcessEventServer(float frameTime)
   bool isAxis = false;
   float fAmount = 0.0;
 
+  // es->ExecuteNextAction() invalidates the ref to the CEventServer instance
+  // when the action exits XBMC
+  es = CEventServer::GetInstance();
+  if (!es || !es->Running() || es->GetNumberOfClients()==0)
+    return false;
   WORD wKeyID = es->GetButtonCode(joystickName, isAxis, fAmount);
 
   if (wKeyID)
@@ -3024,6 +3046,7 @@ bool CApplication::ProcessEventServer(float frameTime)
         key = CKey(wKeyID, 0, 0, 0.0, 0.0, 0.0, -fAmount, frameTime);
       else
         key = CKey(wKeyID);
+      key.SetFromService(true);
       return OnKey(key);
     }
   }
@@ -3047,7 +3070,7 @@ bool CApplication::ProcessEventServer(float frameTime)
   return false;
 }
 
-bool CApplication::ProcessJoystickEvent(const std::string& joystickName, int wKeyID, bool isAxis, float fAmount)
+bool CApplication::ProcessJoystickEvent(const std::string& joystickName, int wKeyID, bool isAxis, float fAmount, unsigned int holdTime /*=0*/)
 {
 #if defined(HAS_EVENT_SERVER)
   m_idleTimer.StartZero();
@@ -3083,7 +3106,7 @@ bool CApplication::ProcessJoystickEvent(const std::string& joystickName, int wKe
    // Translate using regular joystick translator.
    if (CButtonTranslator::GetInstance().TranslateJoystickString(iWin, joystickName.c_str(), wKeyID, isAxis ? JACTIVE_AXIS : JACTIVE_BUTTON, actionID, actionName, fullRange))
    {
-     CAction action(actionID, fAmount, 0.0f, actionName);
+     CAction action(actionID, fAmount, 0.0f, actionName, holdTime);
      g_audioManager.PlayActionSound(action);
      return OnAction(action);
    }
@@ -3180,7 +3203,7 @@ bool CApplication::Cleanup()
     g_windowManager.Remove(WINDOW_SETTINGS_MYMUSIC);
     g_windowManager.Remove(WINDOW_SETTINGS_SYSTEM);
     g_windowManager.Remove(WINDOW_SETTINGS_MYVIDEOS);
-    g_windowManager.Remove(WINDOW_SETTINGS_NETWORK);
+    g_windowManager.Remove(WINDOW_SETTINGS_SERVICE);
     g_windowManager.Remove(WINDOW_SETTINGS_APPEARANCE);
     g_windowManager.Remove(WINDOW_DIALOG_KAI_TOAST);
 
@@ -3219,9 +3242,6 @@ bool CApplication::Cleanup()
 #ifdef HAS_EVENT_SERVER
     CEventServer::RemoveInstance();
 #endif
-#ifdef HAS_DBUS_SERVER
-    CDbusServer::RemoveInstance();
-#endif
     DllLoaderContainer::Clear();
     g_playlistPlayer.Clear();
     g_settings.Clear();
@@ -3255,7 +3275,8 @@ void CApplication::Stop(int exitCode)
 {
   try
   {
-    CAnnouncementManager::Announce(System, "xbmc", "OnQuit");
+    CVariant vExitCode(exitCode);
+    CAnnouncementManager::Announce(System, "xbmc", "OnQuit", vExitCode);
 
     // cancel any jobs from the jobmanager
     CJobManager::GetInstance().CancelJobs();
@@ -3443,7 +3464,12 @@ bool CApplication::PlayMedia(const CFileItem& item, int iPlaylist)
     {
 
       if (iPlaylist != PLAYLIST_NONE)
-        return ProcessAndStartPlaylist(item.GetPath(), *pPlayList, iPlaylist);
+      {
+        int track=0;
+        if (item.HasProperty("playlist_starting_track"))
+          track = item.GetProperty("playlist_starting_track").asInteger();
+        return ProcessAndStartPlaylist(item.GetPath(), *pPlayList, iPlaylist, track);
+      }
       else
       {
         CLog::Log(LOGWARNING, "CApplication::PlayMedia called to play a playlist %s but no idea which playlist to use, playing first item", item.GetPath().c_str());
@@ -3578,7 +3604,9 @@ bool CApplication::PlayFile(const CFileItem& item, bool bRestart)
 #ifdef HAS_DVD_DRIVE
     // Display the Play Eject dialog
     if (CGUIDialogPlayEject::ShowAndGetInput(item))
-      return MEDIA_DETECT::CAutorun::PlayDisc(!MEDIA_DETECT::CAutorun::CanResumePlayDVD() || CGUIDialogYesNo::ShowAndGetInput(341, -1, -1, -1, 13404, 12021));
+      // PlayDiscAskResume takes path to disc. No parameter means default DVD drive.
+      // Can't do better as CGUIDialogPlayEject calls CMediaManager::IsDiscInDrive, which assumes default DVD drive anyway
+      return MEDIA_DETECT::CAutorun::PlayDiscAskResume(); 
 #endif
     return true;
   }
@@ -3640,7 +3668,10 @@ bool CApplication::PlayFile(const CFileItem& item, bool bRestart)
   
   if( item.HasProperty("StartPercent") )
   {
-    options.startpercent = item.GetProperty("StartPercent").asDouble();
+    double fallback = 0.0f;
+    if(item.GetProperty("StartPercent").isString())
+      fallback = (double)atof(item.GetProperty("StartPercent").asString().c_str());
+    options.startpercent = item.GetProperty("StartPercent").asDouble(fallback);
   }
   
   PLAYERCOREID eNewCore = EPC_NONE;
@@ -3674,8 +3705,10 @@ bool CApplication::PlayFile(const CFileItem& item, bool bRestart)
         options.starttime = 0.0f;
         CBookmark bookmark;
         CStdString path = item.GetPath();
-        if (item.IsDVD()
+        if (item.HasVideoInfoTag() && item.GetVideoInfoTag()->m_strFileNameAndPath.Find("removable://") == 0
           path = item.GetVideoInfoTag()->m_strFileNameAndPath;
+        else if (item.HasProperty("original_listitem_url") && URIUtils::IsPlugin(item.GetProperty("original_listitem_url").asString()))
+          path = item.GetProperty("original_listitem_url").asString();
         if(dbs.GetResumeBookMark(path, bookmark))
         {
           options.starttime = bookmark.timeInSeconds;
@@ -3707,7 +3740,7 @@ bool CApplication::PlayFile(const CFileItem& item, bool bRestart)
   // this really aught to be inside !bRestart, but since PlayStack
   // uses that to init playback, we have to keep it outside
   int playlist = g_playlistPlayer.GetCurrentPlaylist();
-  if (playlist == PLAYLIST_VIDEO && g_playlistPlayer.GetPlaylist(playlist).size() > 1)
+  if (item.IsVideo() && g_playlistPlayer.GetPlaylist(playlist).size() > 1)
   { // playing from a playlist by the looks
     // don't switch to fullscreen if we are not playing the first item...
     options.fullscreen = !g_playlistPlayer.HasPlayedFirstFile() && g_advancedSettings.m_fullScreenOnMovieStart && !g_settings.m_bStartVideoWindowed;
@@ -3759,7 +3792,7 @@ bool CApplication::PlayFile(const CFileItem& item, bool bRestart)
 
   // Workaround for bug/quirk in SDL_Mixer on OSX.
   // TODO: Remove after GUI Sounds redux
-#if defined(__APPLE__)
+#if defined(__APPLE__) || defined(_LINUX)
   g_audioManager.Enable(false);
 #endif
 
@@ -3823,7 +3856,7 @@ bool CApplication::PlayFile(const CFileItem& item, bool bRestart)
     }
 #endif
 
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(_LINUX)
     g_audioManager.Enable(false);
 #endif
   }
@@ -4097,6 +4130,13 @@ bool CApplication::IsPlayingFullScreenVideo() const
   return IsPlayingVideo() && g_graphicsContext.IsFullScreenVideo();
 }
 
+bool CApplication::IsFullScreen()
+{
+  return IsPlayingFullScreenVideo() ||
+        (g_windowManager.GetActiveWindow() == WINDOW_VISUALISATION) ||
+         g_windowManager.GetActiveWindow() == WINDOW_SLIDESHOW;
+}
+
 void CApplication::SaveFileState()
 {
   if (!g_settings.GetCurrentProfile().canWriteDatabases())
@@ -4193,6 +4233,12 @@ void CApplication::StopPlaying()
   }
 }
 
+void CApplication::ResetSystemIdleTimer()
+{
+  // reset system idle timer
+  m_idleTimer.StartZero();
+}
+
 void CApplication::ResetScreenSaver()
 {
   // reset our timers
@@ -4295,7 +4341,7 @@ bool CApplication::WakeUpScreenSaver()
 
     CAnnouncementManager::Announce(GUI, "xbmc", "OnScreensaverDeactivated");
 
-    if (m_screenSaver->ID() == "visualization" || m_screenSaver->ID() == "screensaver.xbmc.builtin.slideshow")
+    if (m_screenSaver->ID() == "visualization")
     {
       // we can just continue as usual from vis mode
       return false;
@@ -4306,6 +4352,8 @@ bool CApplication::WakeUpScreenSaver()
     { // we're in screensaver window
       if (g_windowManager.GetActiveWindow() == WINDOW_SCREENSAVER)
         g_windowManager.PreviousWindow();  // show the previous window
+      if (g_windowManager.GetActiveWindow() == WINDOW_SLIDESHOW)
+        g_application.getApplicationMessenger().SendAction(CAction(ACTION_STOP), WINDOW_SLIDESHOW);
     }
     return true;
   }
@@ -4332,13 +4380,20 @@ void CApplication::CheckScreenSaverAndDPMS()
     maybeScreensaver = false;
   }
 
+  if (m_bScreenSave && IsPlayingVideo() && !m_pPlayer->IsPaused())
+  {
+    WakeUpScreenSaverAndDPMS();
+    return;
+  }
+
   if (!maybeScreensaver && !maybeDPMS) return;  // Nothing to do.
 
   // See if we need to reset timer.
   // * Are we playing a video and it is not paused?
   if ((IsPlayingVideo() && !m_pPlayer->IsPaused())
       // * Are we playing some music in fullscreen vis?
-      || (IsPlayingAudio() && g_windowManager.GetActiveWindow() == WINDOW_VISUALISATION))
+      || (IsPlayingAudio() && g_windowManager.GetActiveWindow() == WINDOW_VISUALISATION 
+          && !g_guiSettings.GetString("musicplayer.visualisation").IsEmpty()))
   {
     ResetScreenSaverTimer();
     return;
@@ -4821,7 +4876,7 @@ void CApplication::ProcessSlow()
 #ifdef HAS_DVD_DRIVE
   // checks whats in the DVD drive and tries to autostart the content (xbox games, dvd, cdda, avi files...)
   if (!IsPlayingVideo())
-    m_Autorun.HandleAutorun();
+    m_Autorun->HandleAutorun();
 #endif
 
   // update upnp server/renderer states
@@ -4839,6 +4894,10 @@ void CApplication::ProcessSlow()
   gNfsConnection.CheckIfIdle();
 #endif
 
+#ifdef HAS_FILESYSTEM_AFP
+  gAfpConnection.CheckIfIdle();
+#endif
+
 #ifdef HAS_FILESYSTEM_SFTP
   CSFTPSessionManager::ClearOutIdleSessions();
 #endif
@@ -4963,6 +5022,8 @@ void CApplication::ShowVolumeBar(const CAction *action)
 
 bool CApplication::IsMuted() const
 {
+  if (g_peripherals.IsMuted())
+    return true;
   return g_settings.m_bMute;
 }
 
@@ -4976,16 +5037,22 @@ void CApplication::ToggleMute(void)
 
 void CApplication::Mute()
 {
+  if (g_peripherals.Mute())
+    return;
+
   g_settings.m_iPreMuteVolumeLevel = GetVolume();
-  SetVolume(0);
   g_settings.m_bMute = true;
+  SetVolume(0);
 }
 
 void CApplication::UnMute()
 {
+  if (g_peripherals.UnMute())
+    return;
+
+  g_settings.m_bMute = false;
   SetVolume(g_settings.m_iPreMuteVolumeLevel);
   g_settings.m_iPreMuteVolumeLevel = 0;
-  g_settings.m_bMute = false;
 }
 
 void CApplication::SetVolume(long iValue, bool isPercentage /* = true */)
@@ -5000,6 +5067,13 @@ void CApplication::SetVolume(long iValue, bool isPercentage /* = true */)
 #else
   g_audioManager.SetVolume((int)(128.f * (g_settings.m_nVolumeLevel - VOLUME_MINIMUM) / (float)(VOLUME_MAXIMUM - VOLUME_MINIMUM)));
 #endif
+
+  CVariant data(CVariant::VariantTypeObject);
+  data["volume"] = (int)(((float)(g_settings.m_nVolumeLevel - VOLUME_MINIMUM)) / (VOLUME_MAXIMUM - VOLUME_MINIMUM) * 100.0f + 0.5f);
+  /* TODO: add once DRC is available
+  data["drc"] = (int)(((float)(g_settings.m_dynamicRangeCompressionLevel - VOLUME_DRC_MINIMUM)) / (VOLUME_DRC_MAXIMUM - VOLUME_DRC_MINIMUM) * 100.0f + 0.5f);*/
+  data["muted"] = g_settings.m_bMute;
+  CAnnouncementManager::Announce(Application, "xbmc", "OnVolumeChanged", data);
 }
 
 void CApplication::SetHardwareVolume(long hardwareVolume)
@@ -5326,7 +5400,7 @@ void CApplication::CheckPlayingProgress()
   }
 }
 
-bool CApplication::ProcessAndStartPlaylist(const CStdString& strPlayList, CPlayList& playlist, int iPlaylist)
+bool CApplication::ProcessAndStartPlaylist(const CStdString& strPlayList, CPlayList& playlist, int iPlaylist, int track)
 {
   CLog::Log(LOGDEBUG,"CApplication::ProcessAndStartPlaylist(%s, %i)",strPlayList.c_str(), iPlaylist);
 
@@ -5355,7 +5429,7 @@ bool CApplication::ProcessAndStartPlaylist(const CStdString& strPlayList, CPlayL
     // start playing it
     g_playlistPlayer.SetCurrentPlaylist(iPlaylist);
     g_playlistPlayer.Reset();
-    g_playlistPlayer.Play();
+    g_playlistPlayer.Play(track);
     return true;
   }
   return false;
@@ -5444,3 +5518,4 @@ CPerformanceStats &CApplication::GetPerformanceStats()
   return m_perfStats;
 }
 #endif
+
index 3f4f900..d2eeda6 100644 (file)
@@ -38,6 +38,11 @@ namespace ADDON
   typedef boost::shared_ptr<IAddon> AddonPtr;
 }
 
+namespace MEDIA_DETECT
+{
+  class CAutorun;
+}
+
 #include "cores/IPlayer.h"
 #include "cores/playercorefactory/PlayerCoreFactory.h"
 #include "PlayListPlayer.h"
@@ -47,8 +52,6 @@ namespace ADDON
 #ifdef _WIN32
 #include "win32/WIN32Util.h"
 #endif
-#include "Autorun.h"
-#include "video/Bookmark.h"
 #include "utils/Stopwatch.h"
 #include "ApplicationMessenger.h"
 #include "network/Network.h"
@@ -59,15 +62,13 @@ namespace ADDON
 #include "windowing/XBMC_events.h"
 #include "threads/Thread.h"
 
-#ifdef HAS_WEB_SERVER
-#include "network/WebServer.h"
-#endif
-
 class CKaraokeLyricsManager;
 class CInertialScrollingHandler;
 class CApplicationMessenger;
 class DPMSSupport;
 class CSplash;
+class CBookmark;
+class CWebServer;
 
 class CBackgroundPlayer : public CThread
 {
@@ -110,8 +111,6 @@ public:
   bool StartEventServer();
   bool StopEventServer(bool bWait, bool promptuser);
   void RefreshEventServer();
-  void StartDbusServer();
-  bool StopDbusServer(bool bWait);
   void StartZeroconf();
   void StopZeroconf();
   void DimLCDOnPlayback(bool dim);
@@ -136,7 +135,7 @@ public:
   virtual void OnPlayBackSpeedChanged(int iSpeed);
   bool PlayMedia(const CFileItem& item, int iPlaylist = PLAYLIST_MUSIC);
   bool PlayMediaSync(const CFileItem& item, int iPlaylist = PLAYLIST_MUSIC);
-  bool ProcessAndStartPlaylist(const CStdString& strPlayList, PLAYLIST::CPlayList& playlist, int iPlaylist);
+  bool ProcessAndStartPlaylist(const CStdString& strPlayList, PLAYLIST::CPlayList& playlist, int iPlaylist, int track=0);
   bool PlayFile(const CFileItem& item, bool bRestart = false);
   void SaveFileState();
   void UpdateFileState();
@@ -150,6 +149,7 @@ public:
   bool IsPlayingVideo() const;
   bool IsPlayingFullScreenVideo() const;
   bool IsStartingPlayback() const { return m_bPlaybackStarting; }
+  bool IsFullScreen();
   bool OnKey(const CKey& key);
   bool OnAppCommand(const CAction &action);
   bool OnAction(const CAction &action);
@@ -173,6 +173,7 @@ public:
   int GetSubtitleDelay() const;
   int GetAudioDelay() const;
   void SetPlaySpeed(int iSpeed);
+  void ResetSystemIdleTimer();
   void ResetScreenSaverTimer();
   void StopScreenSaverTimer();
   // Wakes up from the screensaver and / or DPMS. Returns true if woken up.
@@ -213,19 +214,19 @@ public:
 #endif
 
 #ifdef HAS_DVD_DRIVE
-  MEDIA_DETECT::CAutorun m_Autorun;
+  MEDIA_DETECT::CAutorun* m_Autorun;
 #endif
 
 #if !defined(_WIN32) && defined(HAS_DVD_DRIVE)
   MEDIA_DETECT::CDetectDVDMedia m_DetectDVDType;
 #endif
 
+  IPlayer* m_pPlayer;
+
 #ifdef HAS_WEB_SERVER
-  CWebServer m_WebServer;
+  CWebServer& m_WebServer;
 #endif
 
-  IPlayer* m_pPlayer;
-
   inline bool IsInScreenSaver() { return m_bScreenSave; };
   int m_iScreenSaveLock; // spiff: are we checking for a lock? if so, ignore the screensaver state, if -1 we have failed to input locks
 
@@ -326,7 +327,7 @@ protected:
   bool m_bInitializing;
   bool m_bPlatformDirectories;
 
-  CBookmark m_progressTrackingVideoResumeBookmark;
+  CBookmark& m_progressTrackingVideoResumeBookmark;
   CFileItemPtr m_progressTrackingItem;
   bool m_progressTrackingPlayCountUpdate;
 
@@ -362,7 +363,8 @@ protected:
   bool ProcessEventServer(float frameTime);
   bool ProcessPeripherals(float frameTime);
   bool ProcessHTTPApiButtons();
-  bool ProcessJoystickEvent(const std::string& joystickName, int button, bool isAxis, float fAmount);
+  bool ProcessJsonRpcButtons();
+  bool ProcessJoystickEvent(const std::string& joystickName, int button, bool isAxis, float fAmount, unsigned int holdTime = 0);
 
   float NavigationIdleTime();
   static bool AlwaysProcess(const CAction& action);
index aaf7227..54e6c98 100644 (file)
@@ -42,6 +42,8 @@
 #include "guilib/GUIDialog.h"
 #include "windowing/WindowingFactory.h"
 #include "GUIInfoManager.h"
+#include "utils/Splash.h"
+#include "cores/VideoRenderers/RenderManager.h"
 
 #include "powermanagement/PowerManager.h"
 
@@ -66,6 +68,9 @@
 #include "playlists/PlayList.h"
 #include "FileItem.h"
 
+#include "utils/JobManager.h"
+#include "storage/DetectDVDType.h"
+
 using namespace std;
 
 CDelayedMessage::CDelayedMessage(ThreadMessage& msg, unsigned int delay)
@@ -231,6 +236,10 @@ void CApplicationMessenger::ProcessMessage(ThreadMessage *pMsg)
           case POWERSTATE_MINIMIZE:
             Minimize();
             break;
+
+          case TMSG_RENDERER_FLUSH:
+            g_renderManager.Flush();
+            break;
         }
       }
       break;
@@ -314,21 +323,35 @@ case TMSG_POWERDOWN:
               }
             }
 
+            g_playlistPlayer.ClearPlaylist(playlist);
+            g_playlistPlayer.SetCurrentPlaylist(playlist);
             //For single item lists try PlayMedia. This covers some more cases where a playlist is not appropriate
             //It will fall through to PlayFile
             if (list->Size() == 1 && !(*list)[0]->IsPlayList())
               g_application.PlayMedia(*((*list)[0]), playlist);
             else
             {
-              g_playlistPlayer.ClearPlaylist(playlist);
+              // Handle "shuffled" option if present
+              if (list->HasProperty("shuffled") && list->GetProperty("shuffled").isBoolean())
+                g_playlistPlayer.SetShuffle(playlist, list->GetProperty("shuffled").asBoolean(), false);
+              // Handle "repeat" option if present
+              if (list->HasProperty("repeat") && list->GetProperty("repeat").isInteger())
+                g_playlistPlayer.SetRepeat(playlist, (PLAYLIST::REPEAT_STATE)list->GetProperty("repeat").asInteger(), false);
+
               g_playlistPlayer.Add(playlist, (*list));
-              g_playlistPlayer.SetCurrentPlaylist(playlist);
               g_playlistPlayer.Play(pMsg->dwParam1);
             }
           }
 
           delete list;
         }
+        else if (pMsg->dwParam1 == PLAYLIST_MUSIC || pMsg->dwParam1 == PLAYLIST_VIDEO)
+        {
+          if (g_playlistPlayer.GetCurrentPlaylist() != (int)pMsg->dwParam1)
+            g_playlistPlayer.SetCurrentPlaylist(pMsg->dwParam1);
+
+          PlayListPlayerPlay(pMsg->dwParam2);
+        }
       }
       break;
 
@@ -377,6 +400,7 @@ case TMSG_POWERDOWN:
         else
         {
           CFileItem item(pMsg->strParam, false);
+          pSlideShow->Reset();
           pSlideShow->Add(&item);
           pSlideShow->Select(pMsg->strParam);
         }
@@ -427,6 +451,9 @@ case TMSG_POWERDOWN:
       }
       break;
 
+    case TMSG_SETLANGUAGE:
+      g_guiSettings.SetLanguage(pMsg->strParam);
+      break;
     case TMSG_MEDIA_STOP:
       {
         // restore to previous window if needed
@@ -687,6 +714,17 @@ case TMSG_POWERDOWN:
       }
       break;
 
+    case TMSG_GUI_MESSAGE:
+      {
+        if (pMsg->lpVoid)
+        {
+          CGUIMessage *message = (CGUIMessage *)pMsg->lpVoid;
+          g_windowManager.SendMessage(*message, pMsg->dwParam1);
+          delete message;
+        }
+      }
+      break;
+
     case TMSG_GUI_INFOLABEL:
       {
         if (pMsg->lpVoid)
@@ -708,42 +746,26 @@ case TMSG_POWERDOWN:
       }
       break;
 
-#ifdef HAS_DVD_DRIVE
-    case TMSG_OPTICAL_MOUNT:
-      {
-        CMediaSource share;
-        share.strStatus = g_mediaManager.GetDiskLabel(share.strPath);
-        share.strPath = pMsg->strParam;
-        if(g_mediaManager.IsAudio(share.strPath))
-          share.strStatus = "Audio-CD";
-        else if(share.strStatus == "")
-          share.strStatus = g_localizeStrings.Get(446);
-        share.strName = share.strPath;
-        share.m_ignore = true;
-        share.m_iDriveType = CMediaSource::SOURCE_TYPE_DVD;
-        g_mediaManager.AddAutoSource(share, pMsg->dwParam1 != 0);
-      }
-      break;
-
-    case TMSG_OPTICAL_UNMOUNT:
-      {
-        CMediaSource share;
-        share.strPath = pMsg->strParam;
-        share.strName = share.strPath;
-        g_mediaManager.RemoveAutoSource(share);
-      }
-      break;
     case TMSG_CALLBACK:
       {
         ThreadMessageCallback *callback = (ThreadMessageCallback*)pMsg->lpVoid;
         callback->callback(callback->userptr);
       }
-#endif
+      break;
+
     case TMSG_VOLUME_SHOW:
       {
         CAction action((int)pMsg->dwParam1);
         g_application.ShowVolumeBar(&action);
       }
+      break;
+
+    case TMSG_SPLASH_MESSAGE:
+      {
+        if (g_application.m_splash)
+          g_application.m_splash->Show(pMsg->strParam);
+      }
+      break;
   }
 }
 
@@ -834,6 +856,15 @@ void CApplicationMessenger::MediaPlay(const CFileItemList &list, int song)
   SendMessage(tMsg, true);
 }
 
+void CApplicationMessenger::MediaPlay(int playlistid, int song /* = -1 */)
+{
+  ThreadMessage tMsg = {TMSG_MEDIA_PLAY};
+  tMsg.lpVoid = NULL;
+  tMsg.dwParam1 = playlistid;
+  tMsg.dwParam2 = song;
+  SendMessage(tMsg, true);
+}
+
 void CApplicationMessenger::PlayFile(const CFileItem &item, bool bRestart /*= false*/)
 {
   ThreadMessage tMsg = {TMSG_MEDIA_PLAY};
@@ -997,6 +1028,13 @@ void CApplicationMessenger::PictureSlideShow(string pathname, bool bScreensaver
   SendMessage(tMsg);
 }
 
+void CApplicationMessenger::SetGUILanguage(const std::string &strLanguage)
+{
+  ThreadMessage tMsg = {TMSG_SETLANGUAGE};
+  tMsg.strParam = strLanguage;
+  SendMessage(tMsg);
+}
+
 void CApplicationMessenger::Shutdown()
 {
   ThreadMessage tMsg = {TMSG_SHUTDOWN};
@@ -1119,6 +1157,14 @@ void CApplicationMessenger::SendAction(const CAction &action, int windowID, bool
   SendMessage(tMsg, waitResult);
 }
 
+void CApplicationMessenger::SendGUIMessage(const CGUIMessage &message, int windowID, bool waitResult)
+{
+  ThreadMessage tMsg = {TMSG_GUI_MESSAGE};
+  tMsg.dwParam1 = windowID == WINDOW_INVALID ? 0 : windowID;
+  tMsg.lpVoid = new CGUIMessage(message);
+  SendMessage(tMsg, waitResult);
+}
+
 vector<CStdString> CApplicationMessenger::GetInfoLabels(const vector<CStdString> &properties)
 {
   vector<CStdString> infoLabels;
@@ -1141,24 +1187,21 @@ vector<bool> CApplicationMessenger::GetInfoBooleans(const vector<CStdString> &pr
   return infoLabels;
 }
 
-void CApplicationMessenger::OpticalMount(CStdString device, bool bautorun)
+void CApplicationMessenger::ShowVolumeBar(bool up)
 {
-  ThreadMessage tMsg = {TMSG_OPTICAL_MOUNT};
-  tMsg.strParam = device;
-  tMsg.dwParam1 = (DWORD)bautorun;
+  ThreadMessage tMsg = {TMSG_VOLUME_SHOW};
+  tMsg.dwParam1 = up ? ACTION_VOLUME_UP : ACTION_VOLUME_DOWN;
   SendMessage(tMsg, false);
 }
 
-void CApplicationMessenger::OpticalUnMount(CStdString device)
+void CApplicationMessenger::SetSplashMessage(const CStdString& message)
 {
-  ThreadMessage tMsg = {TMSG_OPTICAL_UNMOUNT};
-  tMsg.strParam = device;
-  SendMessage(tMsg, false);
+  ThreadMessage tMsg = {TMSG_SPLASH_MESSAGE};
+  tMsg.strParam = message;
+  SendMessage(tMsg, true);
 }
 
-void CApplicationMessenger::ShowVolumeBar(bool up)
+void CApplicationMessenger::SetSplashMessage(int stringID)
 {
-  ThreadMessage tMsg = {TMSG_VOLUME_SHOW};
-  tMsg.dwParam1 = up ? ACTION_VOLUME_UP : ACTION_VOLUME_DOWN;
-  SendMessage(tMsg, false);
+  SetSplashMessage(g_localizeStrings.Get(stringID));
 }
index f716477..393ee4d 100644 (file)
@@ -34,6 +34,7 @@ class CFileItem;
 class CFileItemList;
 class CGUIDialog;
 class CGUIWindow;
+class CGUIMessage;
 
 // defines here
 #define TMSG_DIALOG_DOMODAL       100
@@ -75,6 +76,8 @@ class CGUIWindow;
 #define TMSG_SWITCHTOFULLSCREEN   308
 #define TMSG_MINIMIZE             309
 #define TMSG_TOGGLEFULLSCREEN     310
+#define TMSG_SETLANGUAGE          311
+#define TMSG_RENDERER_FLUSH       312
 
 #define TMSG_HTTPAPI              400
 
@@ -88,13 +91,12 @@ class CGUIWindow;
 #define TMSG_GUI_ACTION               607
 #define TMSG_GUI_INFOLABEL            608
 #define TMSG_GUI_INFOBOOL             609
-
-#define TMSG_OPTICAL_MOUNT        700
-#define TMSG_OPTICAL_UNMOUNT      701
+#define TMSG_GUI_MESSAGE              610
 
 #define TMSG_CALLBACK             800
 
 #define TMSG_VOLUME_SHOW          900
+#define TMSG_SPLASH_MESSAGE       901
 
 typedef struct
 {
@@ -141,6 +143,7 @@ public:
   void MediaPlay(std::string filename);
   void MediaPlay(const CFileItem &item);
   void MediaPlay(const CFileItemList &item, int song = 0);
+  void MediaPlay(int playlistid, int song = -1);
   void MediaStop();
   void MediaPause();
   void MediaRestart(bool bWait);
@@ -164,6 +167,7 @@ public:
   void PlayFile(const CFileItem &item, bool bRestart = false); // thread safe version of g_application.PlayFile()
   void PictureShow(std::string filename);
   void PictureSlideShow(std::string pathname, bool bScreensaver = false, bool addTBN = false);
+  void SetGUILanguage(const std::string &strLanguage);
   void Shutdown();
   void Powerdown();
   void Quit();
@@ -189,14 +193,23 @@ public:
   void Close(CGUIWindow *window, bool forceClose, bool waitResult = true, int nextWindowID = 0, bool enableSound = true);
   void ActivateWindow(int windowID, const std::vector<CStdString> &params, bool swappingWindows);
   void SendAction(const CAction &action, int windowID = WINDOW_INVALID, bool waitResult=true);
+
+  /*! \brief Send a GUIMessage, optionally waiting before it's processed to return.
+   Should be used to send messages to the GUI from other threads.
+   \param msg the GUIMessage to send.
+   \param windowID optional window to send the message to (defaults to no specified window).
+   \param waitResult whether to wait for the result (defaults to false).
+   */
+  void SendGUIMessage(const CGUIMessage &msg, int windowID = WINDOW_INVALID, bool waitResult=false);
+
   std::vector<CStdString> GetInfoLabels(const std::vector<CStdString> &properties);
   std::vector<bool> GetInfoBooleans(const std::vector<CStdString> &properties);
 
-  void OpticalMount(CStdString device, bool bautorun=false);
-  void OpticalUnMount(CStdString device);
-
   void ShowVolumeBar(bool up);
 
+  void SetSplashMessage(const CStdString& message);
+  void SetSplashMessage(int stringID);
+
 private:
   void ProcessMessage(ThreadMessage *pMsg);
 
index 2c8878f..846b28d 100644 (file)
@@ -32,6 +32,7 @@
 #include "filesystem/StackDirectory.h"
 #include "filesystem/Directory.h"
 #include "filesystem/FactoryDirectory.h"
+#include "filesystem/File.h"
 #include "settings/GUISettings.h"
 #include "settings/AdvancedSettings.h"
 #include "settings/Settings.h"
@@ -39,6 +40,9 @@
 #include "guilib/GUIWindowManager.h"
 #include "storage/MediaManager.h"
 #include "video/VideoDatabase.h"
+#include "dialogs/GUIDialogYesNo.h"
+#include "utils/URIUtils.h"
+#include "utils/log.h"
 
 using namespace std;
 using namespace XFILE;
@@ -53,12 +57,12 @@ CAutorun::CAutorun()
 CAutorun::~CAutorun()
 {}
 
-void CAutorun::ExecuteAutorun( bool bypassSettings, bool ignoreplaying, bool restart )
+void CAutorun::ExecuteAutorun(const CStdString& path, bool bypassSettings, bool ignoreplaying, bool startFromBeginning )
 {
   if ((!ignoreplaying && (g_application.IsPlayingAudio() || g_application.IsPlayingVideo() || g_windowManager.HasModalDialog())) || g_windowManager.GetActiveWindow() == WINDOW_LOGIN_SCREEN)
     return ;
 
-  CCdInfo* pInfo = g_mediaManager.GetCdInfo();
+  CCdInfo* pInfo = g_mediaManager.GetCdInfo(path);
 
   if ( pInfo == NULL )
     return ;
@@ -66,87 +70,59 @@ void CAutorun::ExecuteAutorun( bool bypassSettings, bool ignoreplaying, bool res
   g_application.ResetScreenSaver();
   g_application.WakeUpScreenSaverAndDPMS();  // turn off the screensaver if it's active
 
-  if ( pInfo->IsAudio( 1 ) )
-  {
-    if( !bypassSettings && !g_guiSettings.GetBool("audiocds.autorun") )
-      return;
-
-    if (!g_passwordManager.IsMasterLockUnlocked(false))
-      if (g_settings.GetCurrentProfile().musicLocked())
-        return ;
-
-    RunCdda();
-  }
-  else
-  {
-    RunMedia(bypassSettings, restart);
-  }
+  PlayDisc(path, bypassSettings, startFromBeginning);
 }
 
-void CAutorun::RunCdda()
+bool CAutorun::PlayDisc(const CStdString& path, bool bypassSettings, bool startFromBeginning)
 {
-  CFileItemList vecItems;
+  if ( !bypassSettings && !g_guiSettings.GetBool("audiocds.autorun") && !g_guiSettings.GetBool("dvds.autorun"))
+    return false;
 
-  auto_ptr<IDirectory> pDir ( CFactoryDirectory::Create( "cdda://local/" ) );
-  if ( !pDir->GetDirectory( "cdda://local/", vecItems ) )
-    return ;
+  int nSize = g_playlistPlayer.GetPlaylist( PLAYLIST_MUSIC ).size();
+  int nAddedToPlaylist = 0;
 
-  if ( vecItems.Size() <= 0 )
-    return ;
+  CStdString mediaPath;
 
-  g_playlistPlayer.ClearPlaylist(PLAYLIST_MUSIC);
-  g_playlistPlayer.Add(PLAYLIST_MUSIC, vecItems);
-  g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_MUSIC);
-  g_playlistPlayer.Play();
-}
+  CCdInfo* pInfo = g_mediaManager.GetCdInfo(path);
+  if (pInfo == NULL)
+    return false;
 
-void CAutorun::RunMedia(bool bypassSettings, bool restart)
-{
-  if ( !bypassSettings && !g_guiSettings.GetBool("audiocds.autorun") && !g_guiSettings.GetBool("dvds.autorun"))
-    return ;
+  if (mediaPath.IsEmpty() && pInfo->IsAudio(1))
+    mediaPath = "cdda://local/";
 
-  int nSize = g_playlistPlayer.GetPlaylist( PLAYLIST_MUSIC ).size();
-  int nAddedToPlaylist = 0;
-#ifdef _WIN32
-  auto_ptr<IDirectory> pDir ( CFactoryDirectory::Create( g_mediaManager.TranslateDevicePath("") ));
-  bool bPlaying = RunDisc(pDir.get(), g_mediaManager.TranslateDevicePath(""), nAddedToPlaylist, true, bypassSettings, restart);
-#else
-  CCdInfo* pInfo = g_mediaManager.GetCdInfo();
+  if (mediaPath.IsEmpty() && (pInfo->IsISOUDF(1) || pInfo->IsISOHFS(1) || pInfo->IsIso9660(1) || pInfo->IsIso9660Interactive(1)))
+    mediaPath = "iso9660://";
 
-  if ( pInfo == NULL )
-    return ;
+  if (mediaPath.IsEmpty())
+    mediaPath = path;
 
-  bool bPlaying;
-  if (pInfo->IsISOUDF(1) || pInfo->IsISOHFS(1) || pInfo->IsIso9660(1) || pInfo->IsIso9660Interactive(1))
-  {
-    auto_ptr<IDirectory> pDir ( CFactoryDirectory::Create( "iso9660://" ));
-    bPlaying = RunDisc(pDir.get(), "iso9660://", nAddedToPlaylist, true, bypassSettings, restart);
-  }
-  else
-  {
-    auto_ptr<IDirectory> pDir ( CFactoryDirectory::Create( "D:\\" ) );
-    bPlaying = RunDisc(pDir.get(), "D:\\", nAddedToPlaylist, true, bypassSettings, restart);
-  }
+#ifdef _WIN32
+  if (mediaPath.IsEmpty() || mediaPath.CompareNoCase("iso9660://") == 0)
+    mediaPath = g_mediaManager.TranslateDevicePath("");
 #endif
+
+  auto_ptr<IDirectory> pDir ( CFactoryDirectory::Create( mediaPath ));
+  bool bPlaying = RunDisc(pDir.get(), mediaPath, nAddedToPlaylist, true, bypassSettings, startFromBeginning);
+
   if ( !bPlaying && nAddedToPlaylist > 0 )
   {
     CGUIMessage msg( GUI_MSG_PLAYLIST_CHANGED, 0, 0 );
     g_windowManager.SendMessage( msg );
     g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_MUSIC);
     // Start playing the items we inserted
-    g_playlistPlayer.Play(nSize);
+    return g_playlistPlayer.Play(nSize);
   }
+
+  return bPlaying;
 }
 
 /**
  * This method tries to determine what type of disc is located in the given drive and starts to play the content appropriately.
  */
-bool CAutorun::RunDisc(IDirectory* pDir, const CStdString& strDrive, int& nAddedToPlaylist, bool bRoot, bool bypassSettings /* = false */, bool restart /* = false */)
+bool CAutorun::RunDisc(IDirectory* pDir, const CStdString& strDrive, int& nAddedToPlaylist, bool bRoot, bool bypassSettings /* = false */, bool startFromBeginning /* = false */)
 {
   bool bPlaying(false);
   CFileItemList vecItems;
-  char szSlash = '\\';
-  if (strDrive.Find("iso9660") != -1) szSlash = '/';
 
   if ( !pDir->GetDirectory( strDrive, vecItems ) )
   {
@@ -154,20 +130,19 @@ bool CAutorun::RunDisc(IDirectory* pDir, const CStdString& strDrive, int& nAdded
   }
 
   bool bAllowVideo = true;
-  bool bAllowPictures = true;
+//  bool bAllowPictures = true;
   bool bAllowMusic = true;
   if (!g_passwordManager.IsMasterLockUnlocked(false))
   {
     bAllowVideo = !g_settings.GetCurrentProfile().videoLocked();
-    bAllowPictures = !g_settings.GetCurrentProfile().picturesLocked();
+//    bAllowPictures = !g_settings.GetCurrentProfile().picturesLocked();
     bAllowMusic = !g_settings.GetCurrentProfile().musicLocked();
   }
 
   // is this a root folder we have to check the content to determine a disc type
   if( bRoot )
   {
-
-    // check root folders first, for normal structured dvd's
+    // check root folders next, for normal structured dvd's
     for (int i = 0; i < vecItems.Size(); i++)
     {
       CFileItemPtr pItem = vecItems[i];
@@ -175,11 +150,25 @@ bool CAutorun::RunDisc(IDirectory* pDir, const CStdString& strDrive, int& nAdded
       // is the current item a (non system) folder?
       if (pItem->m_bIsFolder && pItem->GetPath() != "." && pItem->GetPath() != "..")
       {
+        CStdString name = pItem->GetPath();
+        URIUtils::RemoveSlashAtEnd(name);
+        name = URIUtils::GetFileName(name);
+
         // Check if the current foldername indicates a DVD structure (name is "VIDEO_TS")
-        if (pItem->GetPath().Find( "VIDEO_TS" ) != -1 && bAllowVideo
+        if (name.Equals("VIDEO_TS") && bAllowVideo
         && (bypassSettings || g_guiSettings.GetBool("dvds.autorun")))
         {
-          CUtil::PlayDVD("dvd", restart);
+          CStdString path = URIUtils::AddFileToFolder(pItem->GetPath(), "VIDEO_TS.IFO");
+          if(!CFile::Exists(path))
+            path = URIUtils::AddFileToFolder(pItem->GetPath(), "video_ts.ifo");
+          CFileItem item(path, false);
+          item.SetLabel(g_mediaManager.GetDiskLabel(strDrive));
+          item.GetVideoInfoTag()->m_strFileNameAndPath = g_mediaManager.GetDiskUniqueId(strDrive);
+
+          if (!startFromBeginning && !item.GetVideoInfoTag()->m_strFileNameAndPath.IsEmpty())
+            item.m_lStartOffset = STARTOFFSET_RESUME;
+
+          g_application.PlayFile(item, false);
           bPlaying = true;
           return true;
         }
@@ -187,19 +176,26 @@ bool CAutorun::RunDisc(IDirectory* pDir, const CStdString& strDrive, int& nAdded
         // Check if the current foldername indicates a Blu-Ray structure (default is "BDMV").
         // A BR should also include an "AACS" folder for encryption, Sony-BRs can also include update folders for PS3 (PS3_UPDATE / PS3_VPRM).
         // ToDo: for the time beeing, the DVD autorun settings are used to determine if the BR should be started automatically.
-        if (pItem->GetPath().Find( "BDMV" ) != -1 && bAllowVideo
+        if (name.Equals("BDMV") && bAllowVideo
         && (bypassSettings || g_guiSettings.GetBool("dvds.autorun")))
         {
-          CUtil::PlayDVD("bd", restart);
+          CFileItem item(URIUtils::AddFileToFolder(pItem->GetPath(), "index.bdmv"), false);
+          item.SetLabel(g_mediaManager.GetDiskLabel(strDrive));
+          item.GetVideoInfoTag()->m_strFileNameAndPath = g_mediaManager.GetDiskUniqueId(strDrive);
+
+          if (!startFromBeginning && !item.GetVideoInfoTag()->m_strFileNameAndPath.IsEmpty())
+            item.m_lStartOffset = STARTOFFSET_RESUME;
+
+          g_application.PlayFile(item, false);
           bPlaying = true;
           return true;
         }
 
         // Video CDs can have multiple file formats. First we need to determine which one is used on the CD
         CStdString strExt;
-        if (pItem->GetPath().Find("MPEGAV") != -1)
+        if (name.Equals("MPEGAV"))
           strExt = ".dat";
-        if (pItem->GetPath().Find("MPEG2") != -1)
+        if (name.Equals("MPEG2"))
           strExt = ".mpg";
 
         // If a file format was extracted we are sure this is a VCD. Autoplay if settings indicate we should.
@@ -321,7 +317,7 @@ bool CAutorun::RunDisc(IDirectory* pDir, const CStdString& strDrive, int& nAdded
       {
         if (pItem->GetPath() != "." && pItem->GetPath() != ".." )
         {
-          if (RunDisc(pDir, pItem->GetPath(), nAddedToPlaylist, false, bypassSettings, restart))
+          if (RunDisc(pDir, pItem->GetPath(), nAddedToPlaylist, false, bypassSettings, startFromBeginning))
           {
             bPlaying = true;
             break;
@@ -366,21 +362,22 @@ bool CAutorun::IsEnabled() const
   return m_bEnable;
 }
 
-bool CAutorun::PlayDisc(bool restart)
+bool CAutorun::PlayDiscAskResume(const CStdString& path)
 {
-  ExecuteAutorun(true,true, restart);
-  return true;
+  return PlayDisc(path, true, !CanResumePlayDVD(path) || CGUIDialogYesNo::ShowAndGetInput(341, -1, -1, -1, 13404, 12021));
 }
 
-bool CAutorun::CanResumePlayDVD()
+bool CAutorun::CanResumePlayDVD(const CStdString& path)
 {
-  CStdString strPath = "removable://"; // need to put volume label for resume point in videoInfoTag
-  strPath += g_mediaManager.GetDiskLabel();
-  CVideoDatabase dbs;
-  dbs.Open();
-  CBookmark bookmark;
-  if (dbs.GetResumeBookMark(strPath, bookmark))
-    return true;
+  CStdString strUniqueId = g_mediaManager.GetDiskUniqueId(path);
+  if (!strUniqueId.IsEmpty())
+  {
+    CVideoDatabase dbs;
+    dbs.Open();
+    CBookmark bookmark;
+    if (dbs.GetResumeBookMark(strUniqueId, bookmark))
+      return true;
+  }
   return false;
 }
 
index d21534f..6af2566 100644 (file)
@@ -47,17 +47,16 @@ class CAutorun
 public:
   CAutorun();
   virtual ~CAutorun();
-  static bool CanResumePlayDVD();
-  static bool PlayDisc(bool restart);
+  static bool CanResumePlayDVD(const CStdString& path);
+  static bool PlayDisc(const CStdString& path="", bool bypassSettings = false, bool startFromBeginning = false);
+  static bool PlayDiscAskResume(const CStdString& path="");
   bool IsEnabled() const;
   void Enable();
   void Disable();
   void HandleAutorun();
-  static void ExecuteAutorun(bool bypassSettings = false, bool ignoreplaying = false, bool restart = false);
+  static void ExecuteAutorun(const CStdString& path = "", bool bypassSettings = false, bool ignoreplaying = false, bool startFromBeginning = false);
 protected:
-  static void RunCdda();
-  static void RunMedia(bool bypassSettings, bool restart);
-  static bool RunDisc(XFILE::IDirectory* pDir, const CStdString& strDrive, int& nAddedToPlaylist, bool bRoot, bool bypassSettings, bool restart);
+  static bool RunDisc(XFILE::IDirectory* pDir, const CStdString& strDrive, int& nAddedToPlaylist, bool bRoot, bool bypassSettings, bool startFromBeginning);
   bool m_bEnable;
 };
 }
index b0fe245..a84dd52 100644 (file)
@@ -39,6 +39,7 @@
 #define DLL_PATH_LIBAFP        "@AFPCLIENT_SONAME@"
 #define DLL_PATH_LIBPLIST      "@PLIST_SONAME@"
 #define DLL_PATH_LIBSHAIRPORT  "@SHAIRPORT_SONAME@"
+#define DLL_PATH_LIBCEC        "@LIBCEC_SONAME@"
 
 #ifndef DLL_PATH_LIBCURL
 #define DLL_PATH_LIBCURL       "@CURL_SONAME@"
index a0ecba9..d39e2ea 100644 (file)
@@ -33,6 +33,7 @@
 #define DLL_PATH_LIBMICROHTTP  "special://xbmcbin/system/webserver/libmicrohttpd-5.dll"
 #define DLL_PATH_LIBNFS        "special://xbmcbin/system/libnfs.dll"
 #define DLL_PATH_LIBPLIST      "special://xbmcbin/system/airplay/libplist.dll"
+#define DLL_PATH_LIBCEC        "special://xbmcbin/system/libcec.dll"
 
 /* paplayer */
 #define DLL_PATH_ADPCM_CODEC   "special://xbmcbin/system/players/paplayer/adpcm.dll"
index 1539a45..651f848 100644 (file)
@@ -56,6 +56,7 @@
 #include "utils/Variant.h"
 #include "music/karaoke/karaokelyricsfactory.h"
 #include "ThumbnailCache.h"
+#include "utils/Mime.h"
 
 using namespace std;
 using namespace XFILE;
@@ -96,6 +97,20 @@ CFileItem::CFileItem(const CStdString &path, const CAlbum& album)
   CMusicDatabase::SetPropertiesFromAlbum(*this,album);
 }
 
+CFileItem::CFileItem(const CMusicInfoTag& music)
+{
+  m_musicInfoTag = NULL;
+  m_videoInfoTag = NULL;
+  m_pictureInfoTag = NULL;
+  Reset();
+  SetLabel(music.GetTitle());
+  m_strPath = music.GetURL();
+  m_bIsFolder = URIUtils::HasSlashAtEnd(m_strPath);
+  *GetMusicInfoTag() = music;
+  FillInDefaultIcon();
+  SetCachedMusicThumb();
+}
+
 CFileItem::CFileItem(const CVideoInfoTag& movie)
 {
   m_musicInfoTag = NULL;
@@ -218,10 +233,7 @@ CFileItem::CFileItem(const CMediaSource& share)
   m_strThumbnailImage = share.m_strThumbnailImage;
   SetLabelPreformated(true);
   if (IsDVD())
-  {
-    GetVideoInfoTag()->m_strFileNameAndPath = "removable://";
-    GetVideoInfoTag()->m_strFileNameAndPath += share.strStatus; // share.strStatus contains disc volume label
-  }
+    GetVideoInfoTag()->m_strFileNameAndPath = share.strDiskUniqueId; // share.strDiskUniqueId contains disc unique id
 }
 
 CFileItem::~CFileItem(void)
@@ -431,6 +443,7 @@ void CFileItem::Archive(CArchive& ar)
     SetInvalid();
   }
 }
+
 void CFileItem::Serialize(CVariant& value)
 {
   //CGUIListItem::Serialize(value["CGUIListItem"]);
@@ -440,7 +453,7 @@ void CFileItem::Serialize(CVariant& value)
   value["size"] = (int) m_dwSize / 1000;
   value["DVDLabel"] = m_strDVDLabel;
   value["title"] = m_strTitle;
-  value["mimetype"] = m_mimetype;
+  value["mimetype"] = GetMimeType();
   value["extrainfo"] = m_extrainfo;
 
   if (m_musicInfoTag)
@@ -452,6 +465,7 @@ void CFileItem::Serialize(CVariant& value)
   if (m_pictureInfoTag)
     (*m_pictureInfoTag).Serialize(value["pictureInfoTag"]);
 }
+
 bool CFileItem::Exists(bool bUseCache /* = true */) const
 {
   if (m_strPath.IsEmpty()
@@ -598,12 +612,12 @@ bool CFileItem::IsLastFM() const
   return URIUtils::IsLastFM(m_strPath);
 }
 
-bool CFileItem::IsInternetStream() const
+bool CFileItem::IsInternetStream(const bool bStrictCheck /* = false */) const
 {
   if (HasProperty("IsHTTPDirectory"))
     return false;
 
-  return URIUtils::IsInternetStream(m_strPath);
+  return URIUtils::IsInternetStream(m_strPath, bStrictCheck);
 }
 
 bool CFileItem::IsFileFolder() const
@@ -1103,6 +1117,8 @@ const CStdString& CFileItem::GetMimeType(bool lookup /*= true*/) const
         m_ref.Delete(i,m_ref.length()-i);
       m_ref.Trim();
     }
+    else
+      m_ref = CMime::GetMimeType(*this);
 
     // if it's still empty set to an unknown type
     if( m_ref.IsEmpty() )
@@ -1159,7 +1175,7 @@ bool CFileItem::IsAlbum() const
   return m_bIsAlbum;
 }
 
-void CFileItem::UpdateInfo(const CFileItem &item)
+void CFileItem::UpdateInfo(const CFileItem &item, bool replaceLabels /*=true*/)
 {
   if (item.HasVideoInfoTag())
   { // copy info across (TODO: premiered info is normally stored in m_dateTime by the db)
@@ -1171,9 +1187,9 @@ void CFileItem::UpdateInfo(const CFileItem &item)
   if (item.HasPictureInfoTag())
     *GetPictureInfoTag() = *item.GetPictureInfoTag();
 
-  if (!item.GetLabel().IsEmpty())
+  if (replaceLabels && !item.GetLabel().IsEmpty())
     SetLabel(item.GetLabel());
-  if (!item.GetLabel2().IsEmpty())
+  if (replaceLabels && !item.GetLabel2().IsEmpty())
     SetLabel2(item.GetLabel2());
   if (!item.GetThumbnailImage().IsEmpty())
     SetThumbnailImage(item.GetThumbnailImage());
@@ -1995,7 +2011,7 @@ void CFileItemList::Stack(bool stackFiles /* = true */)
   if (IsVirtualDirectoryRoot() || IsLiveTV() || IsSourcesPath())
     return;
 
-  SetProperty("isstacked", "1");
+  SetProperty("isstacked", true);
 
   // items needs to be sorted for stuff below to work properly
   Sort(SORT_METHOD_LABEL, SORT_ORDER_ASC);
@@ -2025,8 +2041,7 @@ void CFileItemList::StackFolders()
   }
 
   // stack folders
-  int i = 0;
-  for (i = 0; i < Size(); ++i)
+  for (int i = 0; i < Size(); i++)
   {
     CFileItemPtr item = Get(i);
     // combined the folder checks
@@ -2041,6 +2056,7 @@ void CFileItemList::StackFolders()
         || item->IsAfp()
         || URIUtils::IsInRAR(item->GetPath())
         || URIUtils::IsInZIP(item->GetPath())
+        || URIUtils::IsOnLAN(item->GetPath())
         )
       {
         // stack cd# folders if contains only a single video file
@@ -2113,25 +2129,11 @@ void CFileItemList::StackFolders()
           if (!dvdPath.IsEmpty())
           {
             // NOTE: should this be done for the CD# folders too?
-            /* set the thumbnail based on folder */
-            item->SetCachedVideoThumb();
-            if (!item->HasThumbnail())
-              item->SetUserVideoThumb();
-
             item->m_bIsFolder = false;
             item->SetPath(dvdPath);
             item->SetLabel2("");
             item->SetLabelPreformated(true);
             m_sortMethod = SORT_METHOD_NONE; /* sorting is now broken */
-
-            /* override the previously set thumb if video_ts.ifo has any */
-            /* otherwise user can't set icon on the stacked file as that */
-            /* will allways be set on the video_ts.ifo file */
-            CStdString thumb(item->GetCachedVideoThumb());
-            if(CFile::Exists(thumb))
-              item->SetThumbnailImage(thumb);
-            else
-              item->SetUserVideoThumb();
           }
         }
       }
@@ -2164,9 +2166,6 @@ void CFileItemList::StackFiles()
   {
     CFileItemPtr item1 = Get(i);
 
-    // set property
-    item1->SetProperty("isstacked", "1");
-
     // skip folders, nfo files, playlists
     if (item1->m_bIsFolder
       || item1->IsParentFolder()
@@ -2379,6 +2378,8 @@ CStdString CFileItemList::GetDiscCacheFile(int windowID) const
     cacheFile.Format("special://temp/mdb-%08x.fi", (unsigned __int32)crc);
   else if (IsVideoDb())
     cacheFile.Format("special://temp/vdb-%08x.fi", (unsigned __int32)crc);
+  else if (IsSmartPlayList())
+    cacheFile.Format("special://temp/sp-%08x.fi", (unsigned __int32)crc);
   else if (windowID)
     cacheFile.Format("special://temp/%i-%08x.fi", windowID, (unsigned __int32)crc);
   else
@@ -2647,6 +2648,15 @@ CStdString CFileItem::GetUserVideoThumb() const
   if (CFile::Exists(fileThumb))
     return fileThumb;
 
+  if (IsOpticalMediaFile())
+  { // special case for optical media "folders" - check the parent folder (or parent of parent)
+    // TODO: A better way to handle this would be to treat stacked folders as folders rather than files.
+    CFileItem item(GetLocalMetadataPath(), true);
+    CStdString thumb(item.GetUserVideoThumb());
+    if (!thumb.IsEmpty())
+      return thumb;
+  }
+
   // 2. - check movie.tbn, as long as it's not a folder
   if (!m_bIsFolder)
   {
@@ -2718,16 +2728,14 @@ CStdString CFileItem::GetBaseMoviePath(bool bUseFolderNames) const
   if (IsMultiPath())
     strMovieName = CMultiPathDirectory::GetFirstPath(m_strPath);
 
-  int pos;
-  if ((pos=strMovieName.Find("BDMV/")) != -1 ||
-      (pos=strMovieName.Find("BDMV\\")) != -1)
-    strMovieName = strMovieName.Mid(0,pos+5);
+  if (IsOpticalMediaFile())
+    return GetLocalMetadataPath();
 
-  if ((!m_bIsFolder || IsOpticalMediaFile() || URIUtils::IsInArchive(m_strPath)) && bUseFolderNames)
+  if ((!m_bIsFolder || URIUtils::IsInArchive(m_strPath)) && bUseFolderNames)
   {
     CStdString name2(strMovieName);
     URIUtils::GetParentPath(name2,strMovieName);
-    if (URIUtils::IsInArchive(m_strPath) || strMovieName.Find( "VIDEO_TS" ) != -1)
+    if (URIUtils::IsInArchive(m_strPath))
     {
       CStdString strArchivePath;
       URIUtils::GetParentPath(strMovieName, strArchivePath);
@@ -2741,61 +2749,41 @@ CStdString CFileItem::GetBaseMoviePath(bool bUseFolderNames) const
 #ifdef UNIT_TESTING
 bool CFileItem::testGetBaseMoviePath()
 {
-  CFileItem item;
-  CStdString path;
-  bool result = true;
-  
-  item.SetPath("c:\\dir\\filename.avi");
-  path = item.GetBaseMoviePath(false);
-  if (path != "c:\\dir\\filename.avi")
-    result = false;
-
-  item.SetPath("c:\\dir\\filename.avi");
-  path = item.GetBaseMoviePath(true);
-  if (path != "c:\\dir\\")
-    result = false;
-
-  item.SetPath("/dir/filename.avi");
-  path = item.GetBaseMoviePath(false);
-  if (path != "/dir/filename.avi")
-    result = false;
-
-  item.SetPath("/dir/filename.avi");
-  path = item.GetBaseMoviePath(true);
-  if (path != "/dir/")
-    result = false;
-
-  item.SetPath("smb://somepath/file.avi");
-  path = item.GetBaseMoviePath(false);
-  if (path != "smb://somepath/file.avi")
-    result = false;
-  
-  item.SetPath("smb://somepath/file.avi");
-  path = item.GetBaseMoviePath(true);
-  if (path != "smb://somepath/")
-    result = false;
-
-  item.SetPath("stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi");
-  path = item.GetBaseMoviePath(false);
-  if (path != "stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi")
-    result = false;
-
-  item.SetPath("stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi");
-  path = item.GetBaseMoviePath(true);
-  if (path != "/path/to/movie_name/")
-    result = false;
-
-  item.SetPath("/home/user/TV Shows/Dexter/S1/1x01.avi");
-  path = item.GetBaseMoviePath(true);
-  if (path != "/home/user/TV Shows/Dexter/S1/")
-    result = false;
-  
-  item.SetPath("rar://g%3a%5cmultimedia%5cmovies%5cSphere%2erar/Sphere.avi");
-  path = item.GetBaseMoviePath(true);
-  if (path != "g:\\multimedia\\movies\\")
-    result = false;
-
-  return result;
+  typedef struct
+  {
+    const char *file;
+    bool use_folder;
+    const char *base;
+  } testfiles;
+
+  const testfiles test_files[] = {{ "c:\\dir\\filename.avi", false, "c:\\dir\\filename.avi" },
+                                  { "c:\\dir\\filename.avi", true,  "c:\\dir\\" },
+                                  { "/dir/filename.avi", false, "/dir/filename.avi" },
+                                  { "/dir/filename.avi", true,  "/dir/" },
+                                  { "smb://somepath/file.avi", false, "smb://somepath/file.avi" },
+                                  { "smb://somepath/file.avi", true, "smb://somepath/" },
+                                  { "stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi", false, "stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi" },
+                                  { "stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi", true,  "/path/to/movie_name/" },
+                                  { "/home/user/TV Shows/Dexter/S1/1x01.avi", false, "/home/user/TV Shows/Dexter/S1/1x01.avi" },
+                                  { "/home/user/TV Shows/Dexter/S1/1x01.avi", true, "/home/user/TV Shows/Dexter/S1/" },
+                                  { "rar://g%3a%5cmultimedia%5cmovies%5cSphere%2erar/Sphere.avi", true, "g:\\multimedia\\movies\\" },
+                                  { "/home/user/movies/movie_name/video_ts/VIDEO_TS.IFO", false, "/home/user/movies/movie_name/" },
+                                  { "/home/user/movies/movie_name/video_ts/VIDEO_TS.IFO", true, "/home/user/movies/movie_name/" },
+                                  { "/home/user/movies/movie_name/BDMV/index.bdmv", false, "/home/user/movies/movie_name/" },
+                                  { "/home/user/movies/movie_name/BDMV/index.bdmv", true, "/home/user/movies/movie_name/" }};
+
+  for (unsigned int i = 0; i < sizeof(test_files) / sizeof(testfiles); i++)
+  {
+    CFileItem item;
+    item.SetPath(test_files[i].file);
+    CStdString path = item.GetBaseMoviePath(test_files[i].use_folder);
+    if (path != test_files[i].base)
+    {
+      CLog::Log(LOGFATAL, "%s failed ('%s' -> '%s' != '%s')", __FUNCTION__, test_files[i].file, path.c_str(), test_files[i].base);
+      return false;
+    }
+  }
+  return true;
 }
 #endif
 
@@ -2887,6 +2875,12 @@ CStdString CFileItem::GetLocalFanart() const
 
   CFileItemList items;
   CDirectory::GetDirectory(strDir, items, g_settings.m_pictureExtensions, false, false, DIR_CACHE_ALWAYS, false, true);
+  if (IsOpticalMediaFile())
+  { // grab from the optical media parent folder as well - see GetUserVideoThumb
+    CFileItemList moreItems;
+    CDirectory::GetDirectory(GetLocalMetadataPath(), moreItems, g_settings.m_pictureExtensions, false, false, DIR_CACHE_ALWAYS, false, true);
+    items.Append(moreItems);
+  }
 
   CStdStringArray fanarts;
   StringUtils::SplitString(g_advancedSettings.m_fanartImages, "|", fanarts);
@@ -2913,6 +2907,22 @@ CStdString CFileItem::GetLocalFanart() const
   return "";
 }
 
+CStdString CFileItem::GetLocalMetadataPath() const
+{
+  if (m_bIsFolder && !IsFileFolder())
+    return m_strPath;
+
+  CStdString parent(URIUtils::GetParentPath(m_strPath));
+  CStdString parentFolder(parent);
+  URIUtils::RemoveSlashAtEnd(parentFolder);
+  parentFolder = URIUtils::GetFileName(parentFolder);
+  if (parentFolder.CompareNoCase("VIDEO_TS") == 0 || parentFolder.CompareNoCase("BDMV") == 0)
+  { // go back up another one
+    parent = URIUtils::GetParentPath(parent);
+  }
+  return parent;
+}
+
 CStdString CFileItem::GetCachedFanart() const
 {
   return CThumbnailCache::GetFanart(*this);
index 162ad6f..16178d9 100644 (file)
@@ -73,6 +73,7 @@ public:
   CFileItem(const CStdString &path, const CAlbum& album);
   CFileItem(const CArtist& artist);
   CFileItem(const CGenre& genre);
+  CFileItem(const MUSIC_INFO::CMusicInfoTag& music);
   CFileItem(const CVideoInfoTag& movie);
   CFileItem(const CMediaSource& share);
   virtual ~CFileItem(void);
@@ -96,7 +97,7 @@ public:
   bool IsKaraoke() const;
   bool IsCUESheet() const;
   bool IsLastFM() const;
-  bool IsInternetStream() const;
+  bool IsInternetStream(const bool bStrictCheck = false) const;
   bool IsPlayList() const;
   bool IsSmartPlayList() const;
   bool IsPythonScript() const;
@@ -239,8 +240,10 @@ public:
   // Gets the correct movie title
   CStdString GetMovieName(bool bUseFolderNames = false) const;
 
-  /*! \brief Find the base movie path (eg the folder if using "use foldernames for lookups")
-   Takes care of VIDEO_TS, BDMV, and rar:// listings
+  /*! \brief Find the base movie path (i.e. the item the user expects us to use to lookup the movie)
+   For folder items, with "use foldernames for lookups" it returns the folder.
+   Regardless of settings, for VIDEO_TS/BDMV it returns the parent of the VIDEO_TS/BDMV folder (if present)
+
    \param useFolderNames whether we're using foldernames for lookups
    \return the base movie folder
    */
@@ -258,6 +261,20 @@ public:
   void SetUserVideoThumb();
   void SetUserMusicThumb(bool alwaysCheckRemote = false);
 
+  /*! \brief Get the path where we expect local metadata to reside.
+   For a folder, this is just the existing path (eg tvshow folder)
+   For a file, this is the parent path, with exceptions made for VIDEO_TS and BDMV files
+
+   Three cases are handled:
+
+     /foo/bar/movie_name/file_name          -> /foo/bar/movie_name/
+     /foo/bar/movie_name/VIDEO_TS/file_name -> /foo/bar/movie_name/
+     /foo/bar/movie_name/BDMV/file_name     -> /foo/bar/movie_name/
+
+     \sa URIUtils::GetParentPath
+   */
+  CStdString GetLocalMetadataPath() const;
+
   // finds a matching local trailer file
   CStdString FindTrailer() const;
 
@@ -279,8 +296,9 @@ public:
    Properties are appended, and labels, thumbnail and icon are updated if non-empty
    in the given item.
    \param item the item used to supplement information
+   \param replaceLabels whether to replace labels (defaults to true)
    */
-  void UpdateInfo(const CFileItem &item);
+  void UpdateInfo(const CFileItem &item, bool replaceLabels = true);
 
   bool IsSamePath(const CFileItem *item) const;
 
index 3944f72..72f5f95 100644 (file)
@@ -218,6 +218,7 @@ const infomap system_labels[] =  {{ "hasnetwork",       SYSTEM_ETHERNET_LINK_ACT
                                   { "cansuspend",       SYSTEM_CAN_SUSPEND },
                                   { "canhibernate",     SYSTEM_CAN_HIBERNATE },
                                   { "canreboot",        SYSTEM_CAN_REBOOT },
+                                  { "screensaveractive",SYSTEM_SCREENSAVER_ACTIVE },
                                   { "cputemperature",   SYSTEM_CPU_TEMPERATURE },     // labels from here
                                   { "cpuusage",         SYSTEM_CPU_USAGE },
                                   { "gputemperature",   SYSTEM_GPU_TEMPERATURE },
@@ -253,7 +254,8 @@ const infomap system_labels[] =  {{ "hasnetwork",       SYSTEM_ETHERNET_LINK_ACT
                                   { "progressbar",      SYSTEM_PROGRESS_BAR },
                                   { "batterylevel",     SYSTEM_BATTERY_LEVEL },
                                   { "friendlyname",     SYSTEM_FRIENDLY_NAME },
-                                  { "alarmpos",         SYSTEM_ALARM_POS }};
+                                  { "alarmpos",         SYSTEM_ALARM_POS },
+                                  { "haspvr",           SYSTEM_HAS_PVR }};
 
 const infomap system_param[] =   {{ "hasalarm",         SYSTEM_HAS_ALARM },
                                   { "getbool",          SYSTEM_GET_BOOL },
@@ -282,7 +284,8 @@ const infomap network_labels[] = {{ "isdhcp",            NETWORK_IS_DHCP },
                                   { "ipaddress",         NETWORK_IP_ADDRESS }, //labels from here
                                   { "linkstate",         NETWORK_LINK_STATE },
                                   { "macaddress",        NETWORK_MAC_ADDRESS },
-                                  { "subnetaddress",     NETWORK_SUBNET_ADDRESS },
+                                  { "subnetaddress",     NETWORK_SUBNET_MASK }, //subnetaddress is misleading/wrong. should be deprecated. use subnetmask in stead
+                                  { "subnetmask",        NETWORK_SUBNET_MASK },
                                   { "gatewayaddress",    NETWORK_GATEWAY_ADDRESS },
                                   { "dns1address",       NETWORK_DNS1_ADDRESS },
                                   { "dns2address",       NETWORK_DNS2_ADDRESS },
@@ -973,7 +976,10 @@ int CGUIInfoManager::TranslateSingleString(const CStdString &strCondition)
       CStdString platform = info[2].name;
       if (platform == "linux") return SYSTEM_PLATFORM_LINUX;
       else if (platform == "windows") return SYSTEM_PLATFORM_WINDOWS;
-      else if (platform == "osx") return SYSTEM_PLATFORM_OSX;
+      else if (platform == "osx")  return SYSTEM_PLATFORM_OSX;
+      else if (platform == "osx")  return SYSTEM_PLATFORM_DARWIN_OSX;
+      else if (platform == "ios")  return SYSTEM_PLATFORM_DARWIN_IOS;
+      else if (platform == "atv2") return SYSTEM_PLATFORM_DARWIN_ATV2;
     }
     if (info[0].name == "musicplayer")
     { // TODO: these two don't allow duration(foo) and also don't allow more than this number of levels...
@@ -1046,7 +1052,7 @@ TIME_FORMAT CGUIInfoManager::TranslateTimeFormat(const CStdString &format)
 CStdString CGUIInfoManager::GetLabel(int info, int contextWindow)
 {
   if (info >= CONDITIONAL_LABEL_START && info <= CONDITIONAL_LABEL_END)
-    return GetSkinVariableString(info, contextWindow, false);
+    return GetSkinVariableString(info, false);
 
   CStdString strLabel;
   if (info >= MULTI_INFO_START && info <= MULTI_INFO_END)
@@ -1094,7 +1100,7 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow)
     URIUtils::RemoveExtension(strLabel);
     break;
   case WEATHER_PLUGIN:
-    strLabel = g_guiSettings.GetString("weather.script");
+    strLabel = g_guiSettings.GetString("weather.addon");
     break;
   case SYSTEM_DATE:
     strLabel = GetDate();
@@ -1282,7 +1288,7 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow)
     break;
 
   case SYSTEM_SCREEN_RESOLUTION:
-    if (g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].bFullScreen)
+    if(g_Windowing.IsFullScreen())
       strLabel.Format("%ix%i@%.2fHz - %s (%02.2f fps)",
         g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iWidth,
         g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iHeight,
@@ -1389,21 +1395,22 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow)
   case SYSTEM_USED_MEMORY_PERCENT:
   case SYSTEM_TOTAL_MEMORY:
     {
-      MEMORYSTATUS stat;
-      GlobalMemoryStatus(&stat);
-      int iMemPercentFree = 100 - ((int)( 100.0f* (stat.dwTotalPhys - stat.dwAvailPhys)/stat.dwTotalPhys + 0.5f ));
+      MEMORYSTATUSEX stat;
+      stat.dwLength = sizeof(MEMORYSTATUSEX);
+      GlobalMemoryStatusEx(&stat);
+      int iMemPercentFree = 100 - ((int)( 100.0f* (stat.ullTotalPhys - stat.ullAvailPhys)/stat.ullTotalPhys + 0.5f ));
       int iMemPercentUsed = 100 - iMemPercentFree;
 
       if (info == SYSTEM_FREE_MEMORY)
-        strLabel.Format("%luMB", (ULONG)(stat.dwAvailPhys/MB));
+        strLabel.Format("%luMB", (ULONG)(stat.ullAvailPhys/MB));
       else if (info == SYSTEM_FREE_MEMORY_PERCENT)
         strLabel.Format("%i%%", iMemPercentFree);
       else if (info == SYSTEM_USED_MEMORY)
-        strLabel.Format("%luMB", (ULONG)((stat.dwTotalPhys - stat.dwAvailPhys)/MB));
+        strLabel.Format("%luMB", (ULONG)((stat.ullTotalPhys - stat.ullAvailPhys)/MB));
       else if (info == SYSTEM_USED_MEMORY_PERCENT)
         strLabel.Format("%i%%", iMemPercentUsed);
       else if (info == SYSTEM_TOTAL_MEMORY)
-        strLabel.Format("%luMB", (ULONG)(stat.dwTotalPhys/MB));
+        strLabel.Format("%luMB", (ULONG)(stat.ullTotalPhys/MB));
     }
     break;
   case SYSTEM_SCREEN_MODE:
@@ -1514,7 +1521,7 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow)
     break;
 #ifdef HAS_LCD
   case LCD_PROGRESS_BAR:
-    if (g_lcd) strLabel = g_lcd->GetProgressBar(g_application.GetTime(), g_application.GetTotalTime());
+    if (g_lcd && g_lcd->IsConnected()) strLabel = g_lcd->GetProgressBar(g_application.GetTime(), g_application.GetTotalTime());
     break;
 #endif
   case NETWORK_IP_ADDRESS:
@@ -1524,7 +1531,7 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow)
         return iface->GetCurrentIPAddress();
     }
     break;
-  case NETWORK_SUBNET_ADDRESS:
+  case NETWORK_SUBNET_MASK:
     {
       CNetworkInterface* iface = g_application.getNetwork().GetFirstConnectedInterface();
       if (iface)
@@ -1652,6 +1659,7 @@ bool CGUIInfoManager::GetInt(int &value, int info, int contextWindow, const CGUI
   if (info >= LISTITEM_START && info <= LISTITEM_END)
     return GetItemInt(value, item, info);
 
+  value = 0;
   switch( info )
   {
     case PLAYER_VOLUME:
@@ -1702,9 +1710,10 @@ bool CGUIInfoManager::GetInt(int &value, int info, int contextWindow, const CGUI
     case SYSTEM_FREE_MEMORY:
     case SYSTEM_USED_MEMORY:
       {
-        MEMORYSTATUS stat;
-        GlobalMemoryStatus(&stat);
-        int memPercentUsed = (int)( 100.0f* (stat.dwTotalPhys - stat.dwAvailPhys)/stat.dwTotalPhys + 0.5f );
+        MEMORYSTATUSEX stat;
+        stat.dwLength = sizeof(MEMORYSTATUSEX);
+        GlobalMemoryStatusEx(&stat);
+        int memPercentUsed = (int)( 100.0f* (stat.ullTotalPhys - stat.ullAvailPhys)/stat.ullTotalPhys + 0.5f );
         if (info == SYSTEM_FREE_MEMORY)
           value = 100 - memPercentUsed;
         else
@@ -1731,7 +1740,6 @@ bool CGUIInfoManager::GetInt(int &value, int info, int contextWindow, const CGUI
       value = g_powerManager.BatteryLevel();
       return true;
   }
-  value = 0;
   return false;
 }
 
@@ -1854,7 +1862,26 @@ bool CGUIInfoManager::GetBool(int condition1, int contextWindow, const CGUIListI
     bReturn = false;
 #endif
   else if (condition == SYSTEM_PLATFORM_OSX)
-#ifdef __APPLE__
+  // TODO: rename SYSTEM_PLATFORM_OSX to SYSTEM_PLATFORM_DARWIN after eden release.
+#ifdef TARGET_DARWIN
+    bReturn = true;
+#else
+    bReturn = false;
+#endif
+  else if (condition == SYSTEM_PLATFORM_DARWIN_OSX)
+#ifdef TARGET_DARWIN_OSX
+    bReturn = true;
+#else
+    bReturn = false;
+#endif
+  else if (condition == SYSTEM_PLATFORM_DARWIN_IOS)
+#ifdef TARGET_DARWIN_IOS
+    bReturn = true;
+#else
+    bReturn = false;
+#endif
+  else if (condition == SYSTEM_PLATFORM_DARWIN_ATV2)
+#ifdef TARGET_DARWIN_IOS_ATV2
     bReturn = true;
 #else
     bReturn = false;
@@ -1879,6 +1906,8 @@ bool CGUIInfoManager::GetBool(int condition1, int contextWindow, const CGUIListI
     bReturn = g_powerManager.CanHibernate();
   else if (condition == SYSTEM_CAN_REBOOT)
     bReturn = g_powerManager.CanReboot();
+  else if (condition == SYSTEM_SCREENSAVER_ACTIVE)
+    bReturn = g_application.IsInScreenSaver();
 
   else if (condition == PLAYER_SHOWINFO)
     bReturn = m_playerShowInfo;
@@ -1890,6 +1919,8 @@ bool CGUIInfoManager::GetBool(int condition1, int contextWindow, const CGUIListI
   }
   else if (condition == SYSTEM_HASLOCKS)
     bReturn = g_settings.GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE;
+  else if (condition == SYSTEM_HAS_PVR)
+    bReturn = false;
   else if (condition == SYSTEM_ISMASTER)
     bReturn = g_settings.GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE && g_passwordManager.bMasterUser;
   else if (condition == SYSTEM_ISFULLSCREEN)
@@ -1943,7 +1974,7 @@ bool CGUIInfoManager::GetBool(int condition1, int contextWindow, const CGUIListI
   {
     CGUIWindow *pWindow = GetWindowWithCondition(contextWindow, WINDOW_CONDITION_IS_MEDIA_WINDOW);
     if (pWindow)
-      bReturn = ((CGUIMediaWindow*)pWindow)->CurrentDirectory().GetProperty("isstacked")=="1";
+      bReturn = ((CGUIMediaWindow*)pWindow)->CurrentDirectory().GetProperty("isstacked").asBoolean();
   }
   else if (condition == CONTAINER_HAS_THUMB)
   {
@@ -2788,7 +2819,7 @@ CStdString CGUIInfoManager::GetMultiInfoLabel(const GUIInfo &info, int contextWi
 CStdString CGUIInfoManager::GetImage(int info, int contextWindow)
 {
   if (info >= CONDITIONAL_LABEL_START && info <= CONDITIONAL_LABEL_END)
-    return GetSkinVariableString(info, contextWindow, true);
+    return GetSkinVariableString(info, true);
 
   if (info >= MULTI_INFO_START && info <= MULTI_INFO_END)
   {
@@ -3613,9 +3644,9 @@ CStdString CGUIInfoManager::GetVersion()
 {
   CStdString tmp;
 #ifdef GIT_REV
-  tmp.Format("%s%d.%d Git:%s", VERSION_TAG, VERSION_MAJOR, VERSION_MINOR, GIT_REV);
+  tmp.Format("%d.%d%s Git:%s", VERSION_MAJOR, VERSION_MINOR, VERSION_TAG, GIT_REV);
 #else
-  tmp.Format("%s%d.%d", VERSION_TAG, VERSION_MAJOR, VERSION_MINOR);
+  tmp.Format("%d.%d%s", VERSION_MAJOR, VERSION_MINOR, VERSION_TAG);
 #endif
   return tmp;
 }
@@ -3769,7 +3800,7 @@ CStdString CGUIInfoManager::GetItemLabel(const CFileItem *item, int info)
   if (!item) return "";
 
   if (info >= CONDITIONAL_LABEL_START && info <= CONDITIONAL_LABEL_END)
-    return GetSkinVariableString(info, 0, false, item);
+    return GetSkinVariableString(info, false, item);
 
   if (info >= LISTITEM_PROPERTY_START && info - LISTITEM_PROPERTY_START < (int)m_listitemProperties.size())
   { // grab the property
@@ -4155,7 +4186,7 @@ CStdString CGUIInfoManager::GetItemLabel(const CFileItem *item, int info)
 CStdString CGUIInfoManager::GetItemImage(const CFileItem *item, int info)
 {
   if (info >= CONDITIONAL_LABEL_START && info <= CONDITIONAL_LABEL_END)
-    return GetSkinVariableString(info, 0, true, item);
+    return GetSkinVariableString(info, true, item);
 
   switch (info)
   {
@@ -4495,35 +4526,35 @@ bool CGUIInfoManager::GetLibraryBool(int condition)
   return false;
 }
 
-int CGUIInfoManager::RegisterSkinVariableString(const CSkinVariableString& info)
+int CGUIInfoManager::RegisterSkinVariableString(const CSkinVariableString* info)
 {
-  CSingleLock lock(m_critInfo);
-  int id = TranslateSkinVariableString(info.GetName());
-  if (id != 0)
-    return id;
+  if (!info)
+    return 0;
 
-  m_skinVariableStrings.push_back(info);
+  CSingleLock lock(m_critInfo);
+  m_skinVariableStrings.push_back(*info);
+  delete info;
   return CONDITIONAL_LABEL_START + m_skinVariableStrings.size() - 1;
 }
 
-int CGUIInfoManager::TranslateSkinVariableString(const CStdString& name)
+int CGUIInfoManager::TranslateSkinVariableString(const CStdString& name, int context)
 {
   for (vector<CSkinVariableString>::const_iterator it = m_skinVariableStrings.begin();
        it != m_skinVariableStrings.end(); ++it)
   {
-    if (it->GetName().Equals(name))
+    if (it->GetName().Equals(name) && it->GetContext() == context)
       return it - m_skinVariableStrings.begin() + CONDITIONAL_LABEL_START;
   }
   return 0;
 }
 
-CStdString CGUIInfoManager::GetSkinVariableString(int info, int contextWindow, 
+CStdString CGUIInfoManager::GetSkinVariableString(int info,
                                                   bool preferImage /*= false*/,
                                                   const CGUIListItem *item /*= NULL*/)
 {
   info -= CONDITIONAL_LABEL_START;
   if (info >= 0 && info < (int)m_skinVariableStrings.size())
-    return m_skinVariableStrings[info].GetValue(contextWindow, preferImage, item);
+    return m_skinVariableStrings[info].GetValue(preferImage, item);
 
   return "";
 }
index 7e6c386..05fa837 100644 (file)
@@ -178,12 +178,13 @@ namespace INFO
 #define SYSTEM_PROFILECOUNT         181
 #define SYSTEM_ISFULLSCREEN         182
 #define SYSTEM_ISSTANDALONE         183
+#define SYSTEM_HAS_PVR              184
 
 #define NETWORK_IP_ADDRESS          190
 #define NETWORK_MAC_ADDRESS         191
 #define NETWORK_IS_DHCP             192
 #define NETWORK_LINK_STATE          193
-#define NETWORK_SUBNET_ADDRESS      194
+#define NETWORK_SUBNET_MASK         194
 #define NETWORK_GATEWAY_ADDRESS     195
 #define NETWORK_DNS1_ADDRESS        196
 #define NETWORK_DNS2_ADDRESS        197
@@ -372,6 +373,7 @@ namespace INFO
 #define SYSTEM_BATTERY_LEVEL        714
 #define SYSTEM_IDLE_TIME            715
 #define SYSTEM_FRIENDLY_NAME        716
+#define SYSTEM_SCREENSAVER_ACTIVE   717
 
 #define LIBRARY_HAS_MUSIC           720
 #define LIBRARY_HAS_VIDEO           721
@@ -386,6 +388,9 @@ namespace INFO
 #define SYSTEM_PLATFORM_LINUX       741
 #define SYSTEM_PLATFORM_WINDOWS     742
 #define SYSTEM_PLATFORM_OSX         743
+#define SYSTEM_PLATFORM_DARWIN_OSX  744
+#define SYSTEM_PLATFORM_DARWIN_IOS  745
+#define SYSTEM_PLATFORM_DARWIN_ATV2 746
 
 #define SYSTEM_CAN_POWERDOWN        750
 #define SYSTEM_CAN_SUSPEND          751
@@ -420,7 +425,7 @@ namespace INFO
 
 #define VERSION_MAJOR 11
 #define VERSION_MINOR 0
-#define VERSION_TAG "PRE-"
+#define VERSION_TAG "-PRE"
 
 #define LISTITEM_START              35000
 #define LISTITEM_THUMB              (LISTITEM_START)
@@ -676,9 +681,9 @@ public:
 
   int TranslateSingleString(const CStdString &strCondition);
 
-  int RegisterSkinVariableString(const INFO::CSkinVariableString& info);
-  int TranslateSkinVariableString(const CStdString& name);
-  CStdString GetSkinVariableString(int info, int contextWindow, bool preferImage = false, const CGUIListItem *item=NULL);
+  int RegisterSkinVariableString(const INFO::CSkinVariableString* info);
+  int TranslateSkinVariableString(const CStdString& name, int context);
+  CStdString GetSkinVariableString(int info, bool preferImage = false, const CGUIListItem *item=NULL);
 protected:
   friend class INFO::InfoSingle;
   bool GetBool(int condition, int contextWindow = 0, const CGUIListItem *item=NULL);
index 4527f9c..34b1e3a 100644 (file)
@@ -60,15 +60,12 @@ bool CGUIPassword::IsItemUnlocked(CFileItem* pItem, const CStdString &strType)
     CStdString strLabel = pItem->GetLabel();
     int iResult = 0;  // init to user succeeded state, doing this to optimize switch statement below
     char buffer[33]; // holds 32 places plus sign character
-    int iRetries = 0;
     if(g_passwordManager.bMasterUser)// Check if we are the MasterUser!
     {
       iResult = 0;
     }
     else
     {
-      if (!(1 > pItem->m_iBadPwdCount))
-        iRetries = g_guiSettings.GetInt("masterlock.maxretries") - pItem->m_iBadPwdCount;
       if (0 != g_guiSettings.GetInt("masterlock.maxretries") && pItem->m_iBadPwdCount >= g_guiSettings.GetInt("masterlock.maxretries"))
       { // user previously exhausted all retries, show access denied error
         CGUIDialogOK::ShowAndGetInput(12345, 12346, 0, 0);
@@ -96,7 +93,8 @@ bool CGUIPassword::IsItemUnlocked(CFileItem* pItem, const CStdString &strType)
         pItem->m_iBadPwdCount = 0;
         pItem->m_iHasLock = 1;
         g_passwordManager.LockSource(strType,strLabel,false);
-        g_settings.UpdateSource(strType, strLabel, "badpwdcount", itoa(pItem->m_iBadPwdCount, buffer, 10));
+        sprintf(buffer,"%i",pItem->m_iBadPwdCount);
+        g_settings.UpdateSource(strType, strLabel, "badpwdcount", buffer);
         g_settings.SaveSources();
         break;
       }
@@ -105,7 +103,8 @@ bool CGUIPassword::IsItemUnlocked(CFileItem* pItem, const CStdString &strType)
         // password entry failed
         if (0 != g_guiSettings.GetInt("masterlock.maxretries"))
           pItem->m_iBadPwdCount++;
-        g_settings.UpdateSource(strType, strLabel, "badpwdcount", itoa(pItem->m_iBadPwdCount, buffer, 10));
+        sprintf(buffer,"%i",pItem->m_iBadPwdCount);
+        g_settings.UpdateSource(strType, strLabel, "badpwdcount", buffer);
         g_settings.SaveSources();
         break;
       }
index c5f100c..9a0ee9d 100644 (file)
 
 // Sent to tell window to initiate a search dialog
 #define GUI_MSG_SEARCH                GUI_MSG_USER + 34
+
+// Sent to the AddonSetting dialogs from addons if they updated a setting
+#define GUI_MSG_SETTING_UPDATED       GUI_MSG_USER + 35
index af58631..4340f67 100644 (file)
@@ -51,6 +51,7 @@ public:
   bool IsWritable() const;
   CStdString strName; ///< Name of the share, can be choosen freely.
   CStdString strStatus; ///< Status of the share (eg has disk etc.)
+  CStdString strDiskUniqueId; ///< removable:// + DVD Label + DVD ID for resume point storage, if available
   CStdString strPath; ///< Path of the share, eg. iso9660:// or F:
 
   /*!
index 246e4e4..17f68ae 100644 (file)
@@ -51,7 +51,7 @@ public:
   NFOResult Create(const CStdString&, const ADDON::ScraperPtr&, int episode=-1,
                    const CStdString& strPath2="");
   template<class T>
-    bool GetDetails(T& details,const char* document=NULL, bool prefix=false)
+    bool GetDetails(T& details,const char* document=NULL, bool prioritise=false)
   {
     TiXmlDocument doc;
     CStdString strDoc;
@@ -64,7 +64,7 @@ public:
       g_charsetConverter.unknownToUTF8(strDoc);
 
     doc.Parse(strDoc.c_str());
-    return details.Load(doc.RootElement(),true,prefix);
+    return details.Load(doc.RootElement(), true, prioritise);
   }
 
   void Close();
index 26b7290..ecfaf78 100644 (file)
@@ -111,8 +111,9 @@ bool CPartyModeManager::Enable(PartyModeContext context /*= PARTYMODECONTEXT_MUS
     CMusicDatabase db;
     if (db.Open())
     {
+      set<CStdString> playlists;
       if ( playlistLoaded )
-        m_strCurrentFilterMusic = playlist.GetWhereClause(db);
+        m_strCurrentFilterMusic = playlist.GetWhereClause(db, playlists);
 
       CLog::Log(LOGINFO, "PARTY MODE MANAGER: Registering filter:[%s]", m_strCurrentFilterMusic.c_str());
       m_iMatchingSongs = (int)db.GetSongIDs(m_strCurrentFilterMusic, songIDs);
@@ -139,8 +140,9 @@ bool CPartyModeManager::Enable(PartyModeContext context /*= PARTYMODECONTEXT_MUS
     CVideoDatabase db;
     if (db.Open())
     {
+      set<CStdString> playlists;
       if ( playlistLoaded )
-        m_strCurrentFilterVideo = playlist.GetWhereClause(db);
+        m_strCurrentFilterVideo = playlist.GetWhereClause(db, playlists);
 
       CLog::Log(LOGINFO, "PARTY MODE MANAGER: Registering filter:[%s]", m_strCurrentFilterVideo.c_str());
       m_iMatchingSongs += (int)db.GetMusicVideoIDs(m_strCurrentFilterVideo, songIDs2);
index 20e5c0d..ceb3b6a 100644 (file)
@@ -643,7 +643,13 @@ void CPlayListPlayer::Swap(int iPlaylist, int indexItem1, int indexItem2)
     return;
 
   CPlayList& list = GetPlaylist(iPlaylist);
-  list.Swap(indexItem1, indexItem2);
+  if (list.Swap(indexItem1, indexItem2) && iPlaylist == m_iCurrentPlayList)
+  {
+    if (m_iCurrentSong == indexItem1)
+      m_iCurrentSong = indexItem2;
+    else if (m_iCurrentSong == indexItem2)
+      m_iCurrentSong = indexItem1;
+  }
 
   // its likely that the playlist changed
   CGUIMessage msg(GUI_MSG_PLAYLIST_CHANGED, 0, 0);
index d1d3778..8e32592 100644 (file)
@@ -25,6 +25,7 @@
 #include "URL.h"
 #include "pictures/Picture.h"
 #include "filesystem/File.h"
+#include "filesystem/DirectoryCache.h"
 #include "FileItem.h"
 #include "settings/GUISettings.h"
 #include "GUIUserMessages.h"
@@ -173,6 +174,27 @@ void CVideoThumbLoader::OnLoaderFinish()
 {
 }
 
+static void SetupRarOptions(CFileItem& item, const CStdString& path)
+{
+  CStdString path2(path);
+  if (item.IsVideoDb() && item.HasVideoInfoTag())
+    path2 = item.GetVideoInfoTag()->m_strFileNameAndPath;
+  CURL url(path2);
+  CStdString opts = url.GetOptions();
+  if (opts.Find("flags") > -1)
+    return;
+  if (opts.size())
+    opts += "&flags=8";
+  else
+    opts = "?flags=8";
+  url.SetOptions(opts);
+  if (item.IsVideoDb() && item.HasVideoInfoTag())
+    item.GetVideoInfoTag()->m_strFileNameAndPath = url.Get();
+  else
+    item.SetPath(url.Get());
+  g_directoryCache.ClearDirectory(url.GetWithoutFilename());
+}
+
 /**
  * Look for a thumbnail for pItem.  If one does not exist, look for an autogenerated
  * thumbnail.  If that does not exist, attempt to autogenerate one.  Finally, check
@@ -194,12 +216,17 @@ bool CVideoThumbLoader::LoadItem(CFileItem* pItem)
     db.Close();
   }
 
-  CFileItem item(*pItem);
-  CStdString cachedThumb(item.GetCachedVideoThumb());
+  CStdString cachedThumb(pItem->GetCachedVideoThumb());
+
+  if (!pItem->HasProperty("fanart_image"))
+  {
+    if (pItem->CacheLocalFanart())
+      pItem->SetProperty("fanart_image",pItem->GetCachedFanart());
+  }
 
   if (!pItem->HasThumbnail())
   {
-    item.SetUserVideoThumb();
+    pItem->SetUserVideoThumb();
     if (CFile::Exists(cachedThumb))
       pItem->SetThumbnailImage(cachedThumb);
     else
@@ -223,30 +250,34 @@ bool CVideoThumbLoader::LoadItem(CFileItem* pItem)
           pItem->SetThumbnailImage(cachedThumb);
         }
       }
-      else if (!item.m_bIsFolder && item.IsVideo() && g_guiSettings.GetBool("myvideos.extractthumb") &&
+      else if (!pItem->m_bIsFolder && pItem->IsVideo() && g_guiSettings.GetBool("myvideos.extractthumb") &&
                g_guiSettings.GetBool("myvideos.extractflags"))
       {
-        CThumbExtractor* extract = new CThumbExtractor(item, pItem->GetPath(), true, cachedThumb);
+        CFileItem item(*pItem);
+        CStdString path(item.GetPath());
+        if (URIUtils::IsInRAR(item.GetPath()))
+          SetupRarOptions(item,path);
+
+        CThumbExtractor* extract = new CThumbExtractor(item, path, true, cachedThumb);
         AddJob(extract);
+        return true;
       }
     }
   }
   else if (!pItem->GetThumbnailImage().Left(10).Equals("special://"))
     LoadRemoteThumb(pItem);
 
-  if (!pItem->HasProperty("fanart_image"))
-  {
-    if (pItem->CacheLocalFanart())
-      pItem->SetProperty("fanart_image",pItem->GetCachedFanart());
-  }
-
   if (!pItem->m_bIsFolder &&
        pItem->HasVideoInfoTag() &&
        g_guiSettings.GetBool("myvideos.extractflags") &&
        (!pItem->GetVideoInfoTag()->HasStreamDetails() ||
          pItem->GetVideoInfoTag()->m_streamDetails.GetVideoDuration() <= 0))
   {
-    CThumbExtractor* extract = new CThumbExtractor(*pItem,pItem->GetPath(),false);
+    CFileItem item(*pItem);
+    CStdString path(item.GetPath());
+    if (URIUtils::IsInRAR(item.GetPath()))
+      SetupRarOptions(item,path);
+    CThumbExtractor* extract = new CThumbExtractor(item,path,false);
     AddJob(extract);
   }
 
index f53f6ff..5da6b9e 100644 (file)
@@ -120,7 +120,7 @@ CStdString CThumbnailCache::GetAlbumThumb(const CMusicInfoTag *musicInfo)
   if (!musicInfo)
     return CStdString();
 
-  return GetAlbumThumb(musicInfo->GetAlbum(), !musicInfo->GetArtist().empty() ? musicInfo->GetArtist() : musicInfo->GetAlbumArtist());
+  return GetAlbumThumb(musicInfo->GetAlbum(), !musicInfo->GetAlbumArtist().empty() ? musicInfo->GetAlbumArtist() : musicInfo->GetArtist());
 }
 
 CStdString CThumbnailCache::GetAlbumThumb(const CAlbum &album)
@@ -209,7 +209,7 @@ CStdString CThumbnailCache::GetVideoThumb(const CFileItem &item)
 CStdString CThumbnailCache::GetFanart(const CFileItem &item)
 {
   // get the locally cached thumb
-  if (item.IsVideoDb())
+  if (item.IsVideoDb() || (item.HasVideoInfoTag() && !item.GetVideoInfoTag()->IsEmpty()))
   {
     if (!item.HasVideoInfoTag())
       return "";
@@ -232,7 +232,10 @@ CStdString CThumbnailCache::GetFanart(const CFileItem &item)
       }
       return GetThumb(showPath,g_settings.GetVideoFanartFolder());
     }
-    return GetThumb(item.m_bIsFolder ? item.GetVideoInfoTag()->m_strPath : item.GetVideoInfoTag()->m_strFileNameAndPath,g_settings.GetVideoFanartFolder());
+    CStdString path = item.GetVideoInfoTag()->GetPath();
+    if (path.empty())
+      return "";
+    return GetThumb(path,g_settings.GetVideoFanartFolder());
   }
   if (item.HasMusicInfoTag())
     return GetThumb(item.GetMusicInfoTag()->GetArtist(),g_settings.GetMusicFanartFolder());
index a921a17..05781f4 100644 (file)
@@ -159,6 +159,7 @@ void CURL::Parse(const CStdString& strURL1)
 
   CStdString strProtocol2 = GetTranslatedProtocol();
   if(m_strProtocol.Equals("rss") ||
+     m_strProtocol.Equals("rar") ||
      m_strProtocol.Equals("addons"))
     sep = "?";
   else
@@ -313,7 +314,7 @@ void CURL::Parse(const CStdString& strURL1)
   SetFileName(m_strFileName);
 
   /* decode urlencoding on this stuff */
-  if( m_strProtocol.Equals("rar") || m_strProtocol.Equals("zip") || m_strProtocol.Equals("musicsearch"))
+  if(URIUtils::ProtocolHasEncodedHostname(m_strProtocol))
   {
     Decode(m_strHostName);
     // Validate it as it is likely to contain a filename
@@ -555,7 +556,7 @@ CStdString CURL::GetWithoutUserDetails() const
 
   if (m_strHostName != "")
   {
-    if (m_strProtocol.Equals("rar") || m_strProtocol.Equals("zip"))
+    if (URIUtils::ProtocolHasParentInHostname(m_strProtocol))
       strURL += CURL(m_strHostName).GetWithoutUserDetails();
     else
       strURL += m_strHostName;
@@ -617,7 +618,7 @@ CStdString CURL::GetWithoutFilename() const
 
   if (m_strHostName != "")
   {
-    if( m_strProtocol.Equals("rar") || m_strProtocol.Equals("zip") || m_strProtocol.Equals("musicsearch"))
+    if( URIUtils::ProtocolHasEncodedHostname(m_strProtocol) )
       strURL += URLEncodeInline(m_strHostName);
     else
       strURL += m_strHostName;
index 2984ff6..271c8cb 100644 (file)
@@ -223,7 +223,7 @@ CStdString CUtil::GetTitleFromPath(const CStdString& strFileNameAndPath, bool bI
   else if (path.Left(24).Equals("special://videoplaylists"))
     strFilename = g_localizeStrings.Get(136);
 
-  else if ((url.GetProtocol() == "rar" || url.GetProtocol() == "zip") && strFilename.IsEmpty())
+  else if (URIUtils::ProtocolHasParentInHostname(url.GetProtocol()) && strFilename.IsEmpty())
     strFilename = URIUtils::GetFileName(url.GetHostName());
 
   // now remove the extension if needed
@@ -407,12 +407,12 @@ void CUtil::GetQualifiedFilename(const CStdString &strBasePath, CStdString &strF
   if (!plItemUrl.GetProtocol().IsEmpty())
     return;
 
-  // If the filename starts "x:" or "/" it's already fully qualified so return
+  // If the filename starts "x:", "\\" or "/" it's already fully qualified so return
   if (strFilename.size() > 1)
 #ifdef _LINUX
     if ( (strFilename[1] == ':') || (strFilename[0] == '/') )
 #else
-    if ( strFilename[1] == ':' )
+    if ( strFilename[1] == ':' || (strFilename[0] == '\\' && strFilename[1] == '\\'))
 #endif
       return;
 
@@ -739,6 +739,24 @@ void CUtil::ClearSubtitles()
   }
 }
 
+void CUtil::ClearTempFonts()
+{
+  CStdString searchPath = "special://temp/fonts/";
+
+  if (!CFile::Exists(searchPath))
+    return;
+
+  CFileItemList items;
+  CDirectory::GetDirectory(searchPath, items, "", false, false, XFILE::DIR_CACHE_NEVER);
+
+  for (int i=0; i<items.Size(); ++i)
+  {
+    if (items[i]->m_bIsFolder)
+      continue;
+    CFile::Delete(items[i]->GetPath());
+  }
+}
+
 static const char * sub_exts[] = { ".utf", ".utf8", ".utf-8", ".sub", ".srt", ".smi", ".rt", ".txt", ".ssa", ".aqt", ".jss", ".ass", ".idx", NULL};
 
 int64_t CUtil::ToInt64(uint32_t high, uint32_t low)
@@ -770,22 +788,6 @@ bool CUtil::ThumbCached(const CStdString& strFileName)
   return CThumbnailCache::GetThumbnailCache()->IsCached(strFileName);
 }
 
-void CUtil::PlayDVD(const CStdString& strProtocol, bool restart)
-{
-#if defined(HAS_DVDPLAYER) && defined(HAS_DVD_DRIVE)
-  CIoSupport::Dismount("Cdrom0");
-  CIoSupport::RemapDriveLetter('D', "Cdrom0");
-  CStdString strPath;
-  strPath.Format("%s://1", strProtocol.c_str());
-  CFileItem item(strPath, false);
-  item.SetLabel(g_mediaManager.GetDiskLabel());
-  item.GetVideoInfoTag()->m_strFileNameAndPath = "removable://"; // need to put volume label for resume point in videoInfoTag
-  item.GetVideoInfoTag()->m_strFileNameAndPath += g_mediaManager.GetDiskLabel();
-  if (!restart) item.m_lStartOffset = STARTOFFSET_RESUME;
-  g_application.PlayFile(item, restart);
-#endif
-}
-
 CStdString CUtil::GetNextFilename(const CStdString &fn_template, int max)
 {
   if (!fn_template.Find("%03d"))
@@ -933,7 +935,17 @@ void CUtil::TakeScreenshot(const CStdString &filename, bool sync)
   //make a new buffer and copy the read image to it with the Y axis inverted
   outpixels = new unsigned char[stride * height];
   for (int y = 0; y < height; y++)
+  {
+#ifdef HAS_GLES
+    // we need to save in BGRA order so XOR Swap RGBA -> BGRA
+    unsigned char* swap_pixels = pixels + (height - y - 1) * stride;
+    for (int x = 0; x < width; x++, swap_pixels+=4)
+    {
+      std::swap(swap_pixels[0], swap_pixels[2]);
+    }   
+#endif
     memcpy(outpixels + y * stride, pixels + (height - y - 1) * stride, stride);
+  }
 
   delete [] pixels;
 
@@ -1564,7 +1576,7 @@ int CUtil::GetMatchingSource(const CStdString& strPath1, VECSOURCES& VECSOURCES,
       return GetMatchingSource(strPath, VECSOURCES, bDummy);
     }
 
-    CLog::Log(LOGWARNING,"CUtil::GetMatchingSource... no matching source found for [%s]", strPath1.c_str());
+    CLog::Log(LOGDEBUG,"CUtil::GetMatchingSource: no matching source found for [%s]", strPath1.c_str());
   }
   return iIndex;
 }
@@ -1626,11 +1638,13 @@ CStdString CUtil::VideoPlaylistsLocation()
 void CUtil::DeleteMusicDatabaseDirectoryCache()
 {
   CUtil::DeleteDirectoryCache("mdb-");
+  CUtil::DeleteDirectoryCache("sp-"); // overkill as it will delete video smartplaylists, but as we can't differentiate based on URL...
 }
 
 void CUtil::DeleteVideoDatabaseDirectoryCache()
 {
   CUtil::DeleteDirectoryCache("vdb-");
+  CUtil::DeleteDirectoryCache("sp-"); // overkill as it will delete music smartplaylists, but as we can't differentiate based on URL...
 }
 
 void CUtil::DeleteDirectoryCache(const CStdString &prefix)
@@ -2161,7 +2175,7 @@ CStdString CUtil::ResolveExecutablePath()
   CStdString strExecutablePath;
 #ifdef WIN32
   wchar_t szAppPathW[MAX_PATH] = L"";
-  ::GetModuleFileNameW(0, szAppPathW, sizeof(szAppPathW) - 1);
+  ::GetModuleFileNameW(0, szAppPathW, sizeof(szAppPathW)/sizeof(szAppPathW[0]) - 1);
   CStdStringW strPathW = szAppPathW;
   g_charsetConverter.wToUTF8(strPathW,strExecutablePath);
 #elif defined(__APPLE__)
@@ -2283,7 +2297,7 @@ void CUtil::ScanForExternalSubtitles(const CStdString& strMovie, std::vector<CSt
     StringUtils::SplitString( strPath, "\\", directories );
   
   // if it's inside a cdX dir, add parent path
-  if (directories[directories.size()-2].size() == 3 && directories[directories.size()-2].Left(2).Equals("cd")) // SplitString returns empty token as last item, hence size-2
+  if (directories.size() >= 2 && directories[directories.size()-2].size() == 3 && directories[directories.size()-2].Left(2).Equals("cd")) // SplitString returns empty token as last item, hence size-2
   {
     CStdString strPath2;
     URIUtils::GetParentPath(strPath,strPath2);
@@ -2351,20 +2365,23 @@ void CUtil::ScanForExternalSubtitles(const CStdString& strMovie, std::vector<CSt
       {
         URIUtils::Split(items[j]->GetPath(), strPath, strItem);
         
-        // is this a rar or zip-file
-        if (URIUtils::IsRAR(strItem) || URIUtils::IsZIP(strItem))
+        if (strItem.Left(fnl).Equals(strMovieFileNameNoExt))
         {
-          ScanArchiveForSubtitles( items[j]->GetPath(), strMovieFileNameNoExt, vecSubtitles );
-        }
-        else    // not a rar/zip file
-        {
-          for (int i = 0; sub_exts[i]; i++)
+          // is this a rar or zip-file
+          if (URIUtils::IsRAR(strItem) || URIUtils::IsZIP(strItem))
+          {
+            ScanArchiveForSubtitles( items[j]->GetPath(), strMovieFileNameNoExt, vecSubtitles );
+          }
+          else    // not a rar/zip file
           {
-            //Cache subtitle with same name as movie
-            if (URIUtils::GetExtension(strItem).Equals(sub_exts[i]) && strItem.Left(fnl).Equals(strMovieFileNameNoExt))
+            for (int i = 0; sub_exts[i]; i++)
             {
-              vecSubtitles.push_back( items[j]->GetPath() ); 
-              CLog::Log(LOGINFO, "%s: found subtitle file %s\n", __FUNCTION__, items[j]->GetPath().c_str() );
+              //Cache subtitle with same name as movie
+              if (URIUtils::GetExtension(strItem).Equals(sub_exts[i]))
+              {
+                vecSubtitles.push_back( items[j]->GetPath() ); 
+                CLog::Log(LOGINFO, "%s: found subtitle file %s\n", __FUNCTION__, items[j]->GetPath().c_str() );
+              }
             }
           }
         }
@@ -2445,7 +2462,7 @@ int CUtil::ScanArchiveForSubtitles( const CStdString& strArchivePath, const CStd
     ScanArchiveForSubtitles(strRarInRar,strMovieFileNameNoExt,vecSubtitles);
    }
    // done checking if this is a rar-in-rar
-   
+
    int iPos=0;
     while (sub_exts[iPos])
     {
@@ -2483,8 +2500,11 @@ bool CUtil::FindVobSubPair( const std::vector<CStdString>& vecSubtitles, const C
       CStdString strSubFile;
       CStdString strSubDirectory;
       URIUtils::Split(vecSubtitles[j], strSubDirectory, strSubFile);
+      if (URIUtils::IsInArchive(vecSubtitles[j]))
+        CURL::Decode(strSubDirectory);
       if (URIUtils::GetExtension(strSubFile) == ".sub" &&
-          URIUtils::ReplaceExtension(strIdxFile,"").Equals(URIUtils::ReplaceExtension(strSubFile,"")))
+          (URIUtils::ReplaceExtension(strIdxFile,"").Equals(URIUtils::ReplaceExtension(strSubFile,"")) ||
+           strSubDirectory.Mid(6, strSubDirectory.length()-11).Equals(URIUtils::ReplaceExtension(strIdxPath,""))))
       {
         strSubPath = vecSubtitles[j];
         return true;
@@ -2503,13 +2523,16 @@ bool CUtil::IsVobSub( const std::vector<CStdString>& vecSubtitles, const CStdStr
     CStdString strSubFile;
     CStdString strSubDirectory;
     URIUtils::Split(strSubPath, strSubDirectory, strSubFile);
+    if (URIUtils::IsInArchive(strSubPath))
+      CURL::Decode(strSubDirectory);
     for (unsigned int j=0; j < vecSubtitles.size(); j++)
     {
       CStdString strIdxFile;
       CStdString strIdxDirectory;
       URIUtils::Split(vecSubtitles[j], strIdxDirectory, strIdxFile);
       if (URIUtils::GetExtension(strIdxFile) == ".idx" &&
-          URIUtils::ReplaceExtension(strIdxFile,"").Equals(URIUtils::ReplaceExtension(strSubFile,"")))
+          (URIUtils::ReplaceExtension(strIdxFile,"").Equals(URIUtils::ReplaceExtension(strSubFile,"")) ||
+           strSubDirectory.Mid(6, strSubDirectory.length()-11).Equals(URIUtils::ReplaceExtension(vecSubtitles[j],""))))
         return true;
     }
   }
index 6354cff..96de5d1 100644 (file)
@@ -79,6 +79,7 @@ public:
   static bool GetDirectoryName(const CStdString& strFileName, CStdString& strDescription);
   static void GetDVDDriveIcon( const CStdString& strPath, CStdString& strIcon );
   static void RemoveTempFiles();
+  static void ClearTempFonts();
 
   static void ClearSubtitles();
   static void ScanForExternalSubtitles(const CStdString& strMovie, std::vector<CStdString>& vecSubtitles );
@@ -90,7 +91,6 @@ public:
   static bool ThumbCached(const CStdString& strFileName);
   static void ThumbCacheAdd(const CStdString& strFileName, bool bFileExists);
   static void ThumbCacheClear();
-  static void PlayDVD(const CStdString& strProtocol = "dvd", bool restart = false);
   static CStdString GetNextFilename(const CStdString &fn_template, int max);
   static CStdString GetNextPathname(const CStdString &path_template, int max);
   static void TakeScreenshot();
index 5e97385..e01e17d 100644 (file)
@@ -1286,3 +1286,15 @@ CStdString CDateTime::GetAsRFC1123DateTime() const
   result.Format("%s, %02i %s %04i %02i:%02i:%02i GMT", DAY_NAMES[time.GetDayOfWeek()], time.GetDay(), MONTH_NAMES[time.GetMonth()-1], time.GetYear(), time.GetHour(), time.GetMinute(), time.GetSecond());
   return result;
 }
+
+int CDateTime::MonthStringToMonthNum(const CStdString& month)
+{
+  const char* months[] = {"january","february","march","april","may","june","july","august","september","october","november","december"};
+  const char* abr_months[] = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"};
+
+  int i = 0;
+  for (; i < 12 && month.CompareNoCase(months[i]) != 0 && month.CompareNoCase(abr_months[i]) != 0; i++);
+  i++;
+
+  return i;
+}
index d4a36fe..ee48ddd 100644 (file)
@@ -99,6 +99,7 @@ public:
 
   static CDateTime GetCurrentDateTime();
   static CDateTime GetUTCDateTime();
+  static int MonthStringToMonthNum(const CStdString& month);
 
   const CDateTime& operator =(const SYSTEMTIME& right);
   const CDateTime& operator =(const FILETIME& right);
index 7805fac..98e7f57 100644 (file)
@@ -368,9 +368,9 @@ bool CAddon::HasSettings()
   return LoadSettings();
 }
 
-bool CAddon::LoadSettings()
+bool CAddon::LoadSettings(bool bForce /* = false*/)
 {
-  if (m_settingsLoaded)
+  if (m_settingsLoaded && !bForce)
     return true;
   if (!m_hasSettings)
     return false;
@@ -405,6 +405,11 @@ bool CAddon::HasUserSettings()
   return m_userSettingsLoaded;
 }
 
+bool CAddon::ReloadSettings()
+{
+  return LoadSettings(true);
+}
+
 bool CAddon::LoadUserSettings()
 {
   m_userSettingsLoaded = false;
@@ -436,6 +441,8 @@ void CAddon::SaveSettings(void)
   TiXmlDocument doc;
   SettingsToXML(doc);
   doc.SaveFile(m_userSettingsPath);
+  
+  CAddonMgr::Get().ReloadSettings(ID());//push the settings changes to the running addon instance
 }
 
 CStdString CAddon::GetSetting(const CStdString& key)
index b79f963..7dc63b9 100644 (file)
@@ -168,6 +168,7 @@ public:
    \return true if  min_version <= version <= current_version, false otherwise.
    */
   bool MeetsVersion(const AddonVersion &version) const;
+  virtual bool ReloadSettings();
 
 protected:
   CAddon(const CAddon&); // protected as all copying is handled by Clone()
@@ -176,10 +177,11 @@ protected:
   virtual void BuildLibName(const cp_extension_t *ext = NULL);
 
   /*! \brief Load the default settings and override these with any previously configured user settings
+   \param bForce force the load of settings even if they are already loaded (reload)
    \return true if settings exist, false otherwise
    \sa LoadUserSettings, SaveSettings, HasSettings, HasUserSettings, GetSetting, UpdateSetting
    */
-  virtual bool LoadSettings();
+  virtual bool LoadSettings(bool bForce = false);
 
   /*! \brief Load the user settings
    \return true if user settings exist, false otherwise
index 5bdcf62..deb30a2 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include "AddonInstaller.h"
+#include "Service.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
 #include "Util.h"
@@ -28,6 +29,7 @@
 #include "settings/GUISettings.h"
 #include "settings/Settings.h"
 #include "Application.h"
+#include "Favourites.h"
 #include "utils/JobManager.h"
 #include "dialogs/GUIDialogYesNo.h"
 #include "addons/AddonManager.h"
@@ -36,6 +38,7 @@
 #include "GUIUserMessages.h"              // for callback
 #include "utils/StringUtils.h"
 #include "dialogs/GUIDialogKaiToast.h"
+#include "dialogs/GUIDialogProgress.h"
 
 using namespace std;
 using namespace XFILE;
@@ -67,6 +70,9 @@ CAddonInstaller &CAddonInstaller::Get()
 
 void CAddonInstaller::OnJobComplete(unsigned int jobID, bool success, CJob* job)
 {
+  if (success)
+    CAddonMgr::Get().FindAddons();
+
   CSingleLock lock(m_critSection);
   if (strncmp(job->GetType(), "repoupdate", 10) == 0)
   { // repo job finished
@@ -78,11 +84,8 @@ void CAddonInstaller::OnJobComplete(unsigned int jobID, bool success, CJob* job)
     JobMap::iterator i = find_if(m_downloadJobs.begin(), m_downloadJobs.end(), bind2nd(find_map(), jobID));
     if (i != m_downloadJobs.end())
       m_downloadJobs.erase(i);
-    lock.Leave();
   }
-
-  if (success)
-    CAddonMgr::Get().FindAddons();
+  lock.Leave();
 
   CGUIMessage msg(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_UPDATE);
   g_windowManager.SendThreadMessage(msg);
@@ -154,6 +157,53 @@ bool CAddonInstaller::Cancel(const CStdString &addonID)
   return false;
 }
 
+bool CAddonInstaller::PromptForInstall(const CStdString &addonID, AddonPtr &addon)
+{
+  // we assume that addons that are enabled don't get to this routine (i.e. that GetAddon() has been called)
+  if (CAddonMgr::Get().GetAddon(addonID, addon, ADDON_UNKNOWN, false))
+    return false; // addon is installed but disabled, and the user has specifically activated something that needs
+                  // the addon - should we enable it?
+
+  // check we have it available
+  CAddonDatabase database;
+  database.Open();
+  if (database.GetAddon(addonID, addon))
+  { // yes - ask user if they want it installed
+    if (!CGUIDialogYesNo::ShowAndGetInput(g_localizeStrings.Get(24076), g_localizeStrings.Get(24100),
+                                          addon->Name().c_str(), g_localizeStrings.Get(24101)))
+      return false;
+    if (Install(addonID, true))
+    {
+      CGUIDialogProgress *progress = (CGUIDialogProgress *)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS);
+      if (progress)
+      {
+        progress->SetHeading(13413); // Downloading
+        progress->SetLine(0, "");
+        progress->SetLine(1, addon->Name());
+        progress->SetLine(2, "");
+        progress->SetPercentage(0);
+        progress->StartModal();
+        while (true)
+        {
+          progress->Progress();
+          unsigned int percent;
+          if (progress->IsCanceled())
+          {
+            Cancel(addonID);
+            break;
+          }
+          if (!GetProgress(addonID, percent))
+            break;
+          progress->SetPercentage(percent);
+        }
+        progress->Close();
+      }
+      return CAddonMgr::Get().GetAddon(addonID, addon);
+    }
+  }
+  return false;
+}
+
 bool CAddonInstaller::Install(const CStdString &addonID, bool force, const CStdString &referer, bool background)
 {
   AddonPtr addon;
@@ -259,7 +309,8 @@ void CAddonInstaller::InstallFromXBMCRepo(const set<CStdString> &addonIDs)
 
 bool CAddonInstaller::CheckDependencies(const AddonPtr &addon)
 {
-  assert(addon.get());
+  if (!addon.get())
+    return true; // a NULL addon has no dependencies
   ADDONDEPS deps = addon->GetDeps();
   CAddonDatabase database;
   database.Open();
@@ -278,9 +329,9 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon)
         return false;
       }
     }
-    // at this point we have our dep, so check that it's OK as well
+    // at this point we have our dep, or the dep is optional (and we don't have it) so check that it's OK as well
     // TODO: should we assume that installed deps are OK?
-    if (!CheckDependencies(dep))
+    if (dep && !CheckDependencies(dep))
       return false;
   }
   return true;
@@ -324,6 +375,12 @@ void CAddonInstaller::UpdateRepos(bool force, bool wait)
   }
 }
 
+bool CAddonInstaller::HasJob(const CStdString& ID) const
+{
+  CSingleLock lock(m_critSection);
+  return m_downloadJobs.find(ID) != m_downloadJobs.end();
+}
+
 CAddonInstallJob::CAddonInstallJob(const AddonPtr &addon, const CStdString &hash, bool update, const CStdString &referer)
 : m_addon(addon), m_hash(hash), m_update(update), m_referer(referer)
 {
@@ -413,6 +470,14 @@ bool CAddonInstallJob::OnPreInstall()
     g_application.getApplicationMessenger().ExecBuiltIn("UnloadSkin", true);
     return true;
   }
+
+  if (m_addon->Type() == ADDON_SERVICE)
+  {
+    boost::shared_ptr<CService> service = boost::dynamic_pointer_cast<CService>(m_addon);
+    if (service)
+      service->Stop();
+    return true;
+  }
   return false;
 }
 
@@ -456,11 +521,26 @@ bool CAddonInstallJob::Install(const CStdString &installFrom)
   {
     if (it->first.Equals("xbmc.metadata"))
       continue;
+
+    const CStdString &addonID = it->first;
+    const AddonVersion &version = it->second.first;
+    bool optional = it->second.second;
     AddonPtr dependency;
-    if (!CAddonMgr::Get().GetAddon(it->first,dependency) || dependency->Version() < it->second.first)
-    {
+    bool haveAddon = CAddonMgr::Get().GetAddon(addonID, dependency);
+    if ((haveAddon && !dependency->MeetsVersion(version)) || (!haveAddon && !optional))
+    { // we have it but our version isn't good enough, or we don't have it and we need it
+      bool force=(dependency != NULL);
+      // dependency is already queued up for install - ::Install will fail
+      // instead we wait until the Job has finished. note that we
+      // recall install on purpose in case prior installation failed
+      if (CAddonInstaller::Get().HasJob(addonID))
+      {
+        while (CAddonInstaller::Get().HasJob(addonID))
+          Sleep(50);
+        force = false;
+      }
       // don't have the addon or the addon isn't new enough - grab it (no new job for these)
-      if (!CAddonInstaller::Get().Install(it->first, dependency != NULL, referer, false))
+      if (!CAddonInstaller::Get().Install(addonID, force, referer, false))
       {
         DeleteAddon(addonFolder);
         return false;
@@ -495,6 +575,20 @@ void CAddonInstallJob::OnPostInstall(bool reloadAddon)
       g_application.getApplicationMessenger().ExecBuiltIn("ReloadSkin");
     }
   }
+
+  if (m_addon->Type() == ADDON_SERVICE)
+  {
+    boost::shared_ptr<CService> service = boost::dynamic_pointer_cast<CService>(m_addon);
+    if (service)
+      service->Start();
+  }
+
+  if (m_addon->Type() == ADDON_REPOSITORY)
+  {
+    VECADDONS addons;
+    addons.push_back(m_addon);
+    CJobManager::GetInstance().AddJob(new CRepositoryUpdateJob(addons), &CAddonInstaller::Get());
+  }
 }
 
 void CAddonInstallJob::ReportInstallError(const CStdString& addonID,
@@ -565,4 +659,19 @@ void CAddonUnInstallJob::OnPostUnInstall()
     database.Open();
     database.DeleteRepository(m_addon->ID());
   }
+
+  bool bSave(false);
+  CFileItemList items;
+  CFavourites::Load(items);
+  for (int i=0; i < items.Size(); ++i)
+  {
+    if (items[i]->GetPath().Find(m_addon->ID()) > -1)
+    {
+      items.Remove(items[i].get());
+      bSave = true;
+    }
+  }
+
+  if (bSave)
+    CFavourites::Save(items);
 }
index 5bc7dd4..15bcd9f 100644 (file)
@@ -35,6 +35,14 @@ public:
   bool GetProgress(const CStdString &addonID, unsigned int &percent) const;
   bool Cancel(const CStdString &addonID);
 
+  /*! \brief Prompt the user as to whether they wish to install an addon.
+   \param addonID the addon ID of the item to install.
+   \param addon [out] the installed addon for later use.
+   \return true on successful install, false otherwise.
+   \sa Install
+   */
+  bool PromptForInstall(const CStdString &addonID, ADDON::AddonPtr &addon);
+
   /*! \brief Install an addon if it is available in a repository
    \param addonID the addon ID of the item to install
    \param force whether to force the install even if the addon is already installed (eg for updating). Defaults to false.
@@ -72,6 +80,13 @@ public:
    \param force whether we should run an update regardless of the normal update cycle. Defaults to false.
    \param wait whether we should busy wait for the updates to be performed. Defaults to false.
    */
+
+  /*! \brief Check if an installation job for a given add-on is already queued up
+   *  \param ID The ID of the add-on
+   *  \return true if a job exists, false otherwise
+   */
+  bool HasJob(const CStdString& ID) const;
+
   void UpdateRepos(bool force = false, bool wait = false);
 
   void OnJobComplete(unsigned int jobID, bool success, CJob* job);
index bd00cee..397c054 100644 (file)
@@ -81,11 +81,23 @@ AddonPtr CAddonMgr::Factory(const cp_extension_t *props)
       return AddonPtr(new CPluginSource(props));
     case ADDON_SCRIPT_LIBRARY:
     case ADDON_SCRIPT_LYRICS:
-    case ADDON_SCRIPT_WEATHER:
     case ADDON_SCRIPT_SUBTITLES:
     case ADDON_SCRIPT_MODULE:
     case ADDON_WEB_INTERFACE:
       return AddonPtr(new CAddon(props));
+    case ADDON_SCRIPT_WEATHER:
+      {
+        // Eden (API v2.0) broke old weather add-ons
+        AddonPtr result(new CAddon(props));
+        AddonVersion ver1 = AddonVersion(GetXbmcApiVersionDependency(result));
+        AddonVersion ver2 = AddonVersion("2.0");
+        if (ver1 < ver2)
+        {
+          CLog::Log(LOGINFO,"%s: Weather add-ons for api < 2.0 unsupported (%s)",__FUNCTION__,result->ID().c_str());
+          return AddonPtr();
+        }
+        return result;
+      }
     case ADDON_SERVICE:
       return AddonPtr(new CService(props));
     case ADDON_SCRAPER_ALBUMS:
@@ -236,9 +248,9 @@ bool CAddonMgr::Init()
   // would allow partial unloading of addon framework
   m_cp_context = m_cpluff->create_context(&status);
   assert(m_cp_context);
-  status = m_cpluff->register_pcollection(m_cp_context, _P("special://home/addons"));
-  status = m_cpluff->register_pcollection(m_cp_context, _P("special://xbmc/addons"));
-  status = m_cpluff->register_pcollection(m_cp_context, _P("special://xbmcbin/addons"));
+  status = m_cpluff->register_pcollection(m_cp_context, CSpecialProtocol::TranslatePath("special://home/addons"));
+  status = m_cpluff->register_pcollection(m_cp_context, CSpecialProtocol::TranslatePath("special://xbmc/addons"));
+  status = m_cpluff->register_pcollection(m_cp_context, CSpecialProtocol::TranslatePath("special://xbmcbin/addons"));
   if (status != CP_OK)
   {
     CLog::Log(LOGERROR, "ADDONS: Fatal Error, cp_register_pcollection() returned status: %i", status);
@@ -287,6 +299,49 @@ bool CAddonMgr::GetAllAddons(VECADDONS &addons, bool enabled /*= true*/, bool al
   return !addons.empty();
 }
 
+void CAddonMgr::AddToUpdateableAddons(AddonPtr &pAddon)
+{
+  CSingleLock lock(m_critSection);
+  m_updateableAddons.push_back(pAddon);
+}
+
+void CAddonMgr::RemoveFromUpdateableAddons(AddonPtr &pAddon)
+{
+  CSingleLock lock(m_critSection);
+  VECADDONS::iterator it = std::find(m_updateableAddons.begin(), m_updateableAddons.end(), pAddon);
+  
+  if(it != m_updateableAddons.end())
+  {
+    m_updateableAddons.erase(it);
+  }
+}
+
+struct AddonIdFinder 
+{ 
+    AddonIdFinder(const CStdString& id)
+      : m_id(id)
+    {}
+    
+    bool operator()(const AddonPtr& addon) 
+    { 
+      return m_id.Equals(addon->ID()); 
+    }
+    private:
+    CStdString m_id;
+};
+
+bool CAddonMgr::ReloadSettings(const CStdString &id)
+{
+  CSingleLock lock(m_critSection);
+  VECADDONS::iterator it = std::find_if(m_updateableAddons.begin(), m_updateableAddons.end(), AddonIdFinder(id));
+  
+  if( it != m_updateableAddons.end())
+  {
+    return (*it)->ReloadSettings();
+  }
+  return false;
+}
+
 bool CAddonMgr::GetAllOutdatedAddons(VECADDONS &addons, bool enabled /*= true*/)
 {
   CSingleLock lock(m_critSection);
@@ -626,7 +681,7 @@ AddonPtr CAddonMgr::GetAddonFromDescriptor(const cp_plugin_info_t *info)
 bool CAddonMgr::LoadAddonDescription(const CStdString &path, AddonPtr &addon)
 {
   cp_status_t status;
-  cp_plugin_info_t *info = m_cpluff->load_plugin_descriptor(m_cp_context, _P(path).c_str(), &status);
+  cp_plugin_info_t *info = m_cpluff->load_plugin_descriptor(m_cp_context, CSpecialProtocol::TranslatePath(path).c_str(), &status);
   if (info)
   {
     addon = GetAddonFromDescriptor(info);
index dc060d2..8166974 100644 (file)
@@ -92,6 +92,9 @@ namespace ADDON
     bool HasAddons(const TYPE &type, bool enabled = true);
     bool GetAddons(const TYPE &type, VECADDONS &addons, bool enabled = true);
     bool GetAllAddons(VECADDONS &addons, bool enabled = true, bool allowRepos = false);
+    void AddToUpdateableAddons(AddonPtr &pAddon);
+    void RemoveFromUpdateableAddons(AddonPtr &pAddon);    
+    bool ReloadSettings(const CStdString &id);
     /*! \brief Get all addons with available updates
      \param addons List to fill with all outdated addons
      \param enabled Whether to get only enabled or disabled addons
@@ -172,6 +175,7 @@ namespace ADDON
     const cp_cfg_element_t *GetExtElement(cp_cfg_element_t *base, const char *path);
     cp_context_t *m_cp_context;
     DllLibCPluff *m_cpluff;
+    VECADDONS    m_updateableAddons;
 
     /*! \brief Fetch a (single) addon from a plugin descriptor.
      Assumes that there is a single (non-trivial) extension point per addon.
index 76c1bc3..ba95143 100644 (file)
@@ -136,4 +136,32 @@ namespace ADDON
 
     return true;
   }
+
+  bool AddonVersion::Test()
+  {
+    AddonVersion v1_0("1.0");
+    AddonVersion v1_00("1.00");
+    AddonVersion v1_0_0("1.0.0");
+    AddonVersion v1_1("1.1");
+    AddonVersion v1_01("1.01");
+    AddonVersion v1_0_1("1.0.1");
+
+    bool ret = false;
+
+    // These are totally sane
+    ret = (v1_0 < v1_1) && (v1_0 < v1_01) && (v1_0 < v1_0_1) &&
+          (v1_1 > v1_0_1) && (v1_01 > v1_0_1);
+
+    // These are rather sane
+    ret &= (v1_0 != v1_0_0) && (v1_0 < v1_0_0) && (v1_0_0 > v1_0) &&
+           (v1_00 != v1_0_0) && (v1_00 < v1_0_0) && (v1_0_0 > v1_00);
+
+    // These aren't totally sane
+    // BEWARE: neither (v1_0 == v1_00) nor (v1_0 < v1_00) nor (v1_0 > v1_00) are true
+    ret &= (v1_0 != v1_00) && !(v1_0 < v1_00) && !(v1_0 > v1_00);
+    // BEWARE: neither (v1_1 == v1_01) nor (v1_1 < v1_01) nor (v1_1 > v1_01) are true
+    ret &= (v1_1 != v1_01) && !(v1_1 < v1_01) && !(v1_1 > v1_01);
+
+    return ret;
+  }
 }
index 945d2ba..2d8cf5a 100644 (file)
@@ -45,6 +45,8 @@ namespace ADDON
 
     static bool SplitFileName(CStdString& ID, CStdString& version,
                               const CStdString& filename);
+
+    static bool Test();
   protected:
     CStdString m_originalVersion;
     int mEpoch;
index 66f0ceb..a9c4e29 100644 (file)
@@ -129,7 +129,7 @@ void CGUIDialogAddonInfo::OnInitWindow()
 
 void CGUIDialogAddonInfo::UpdateControls()
 {
-  CStdString xbmcPath = _P("special://xbmc/addons");
+  CStdString xbmcPath = CSpecialProtocol::TranslatePath("special://xbmc/addons");
   bool isInstalled = NULL != m_localAddon.get();
   bool isSystem = isInstalled && m_localAddon->Path().Left(xbmcPath.size()).Equals(xbmcPath);
   bool isEnabled = isInstalled && m_item->GetProperty("Addon.Enabled").asBoolean();
@@ -184,7 +184,7 @@ void CGUIDialogAddonInfo::OnUninstall()
       deps.push_back((*it)->Name());
   }
 
-  if (deps.size())
+  if (!CAddonInstaller::Get().CheckDependencies(m_localAddon) && deps.size())
   {
     CStdString strLine0, strLine1;
     StringUtils::JoinString(deps, ", ", strLine1);
index 8b1c29a..91f2f95 100644 (file)
@@ -44,6 +44,7 @@
 #include "FileItem.h"
 #include "settings/Settings.h"
 #include "GUIInfoManager.h"
+#include "GUIUserMessages.h"
 #include "dialogs/GUIDialogSelect.h"
 #include "GUIWindowAddonBrowser.h"
 #include "utils/log.h"
@@ -126,10 +127,52 @@ bool CGUIDialogAddonSettings::OnMessage(CGUIMessage& message)
       }
       return true;
     }
+    case GUI_MSG_SETTING_UPDATED:
+    {
+      CStdString      id = message.GetStringParam(0);
+      CStdString value   = message.GetStringParam(1);
+      m_settings[id] = value;
+      if (GetFocusedControl())
+      {
+        int iControl = GetFocusedControl()->GetID();
+        CreateControls();
+        CGUIMessage msg(GUI_MSG_SETFOCUS,GetID(),iControl);
+        OnMessage(msg);
+      }
+      return true;
+    }
   }
   return CGUIDialogBoxBase::OnMessage(message);
 }
 
+bool CGUIDialogAddonSettings::OnAction(const CAction& action)
+{
+  if (action.GetID() == ACTION_DELETE_ITEM)
+  {
+    int iControl = GetFocusedControl()->GetID();
+    int controlId = CONTROL_START_SETTING;
+    const TiXmlElement* setting = GetFirstSetting();
+    UpdateFromControls();
+    while (setting)
+    {
+      if (controlId == iControl)
+      {
+        const char* id = setting->Attribute("id");
+        const char* value = setting->Attribute("default");
+        m_settings[id] = value;
+        CreateControls();
+        CGUIMessage msg(GUI_MSG_SETFOCUS,GetID(),iControl);
+        OnMessage(msg);
+        return true;
+      }
+      setting = setting->NextSiblingElement("setting");
+      controlId++;
+    }
+  }
+
+  return CGUIDialogBoxBase::OnAction(action);
+}
+
 void CGUIDialogAddonSettings::OnInitWindow()
 {
   m_currentSection = 0;
@@ -277,9 +320,7 @@ bool CGUIDialogAddonSettings::ShowVirtualKeyboard(int iControl)
         {
           // setup the shares
           VECSOURCES *shares = NULL;
-          if (!source || strcmpi(source, "") == 0)
-            shares = g_settings.GetSourcesFromType(type);
-          else
+          if (source && strcmpi(source, "") != 0)
             shares = g_settings.GetSourcesFromType(source);
 
           VECSOURCES localShares;
@@ -288,8 +329,7 @@ bool CGUIDialogAddonSettings::ShowVirtualKeyboard(int iControl)
             VECSOURCES networkShares;
             g_mediaManager.GetLocalDrives(localShares);
             if (!source || strcmpi(source, "local") != 0)
-              g_mediaManager.GetNetworkLocations(networkShares);
-            localShares.insert(localShares.end(), networkShares.begin(), networkShares.end());
+              g_mediaManager.GetNetworkLocations(localShares);
           }
           else // always append local drives
           {
@@ -354,7 +394,7 @@ bool CGUIDialogAddonSettings::ShowVirtualKeyboard(int iControl)
               bUseFileDirectories = find(options.begin(), options.end(), "treatasfolder") != options.end();
             }
 
-            if (CGUIDialogFileBrowser::ShowAndGetFile(localShares, strMask, label, value))
+            if (CGUIDialogFileBrowser::ShowAndGetFile(localShares, strMask, label, value, bUseThumbs, bUseFileDirectories))
               ((CGUIButtonControl*) control)->SetLabel2(value);
           }
         }
@@ -926,7 +966,9 @@ bool CGUIDialogAddonSettings::GetCondition(const CStdString &condition, const in
 
   bool bCondition = true;
   bool bCompare = true;
+  bool bControlDependend = false;//flag if the condition depends on another control
   vector<CStdString> conditionVec;
+
   if (condition.Find("+") >= 0)
     CUtil::Tokenize(condition, conditionVec, "+");
   else
@@ -944,6 +986,8 @@ bool CGUIDialogAddonSettings::GetCondition(const CStdString &condition, const in
     const CGUIControl* control2 = GetControl(controlId + atoi(condVec[1]));
     if (!control2)
       continue;
+      
+    bControlDependend = true; //once we are here - this condition depends on another control
 
     CStdString value;
     switch (control2->GetControlType())
@@ -993,6 +1037,12 @@ bool CGUIDialogAddonSettings::GetCondition(const CStdString &condition, const in
         bCondition |= (atoi(value) < atoi(condVec[2]));
     }
   }
+  
+  if (!bControlDependend)//if condition doesn't depend on another control - try if its an infobool expression
+  {
+    bCondition = g_infoManager.EvaluateBool(condition);
+  }
+  
   return bCondition;
 }
 
@@ -1020,10 +1070,9 @@ CStdString CGUIDialogAddonSettings::GetString(const char *value, bool subSetting
 {
   if (!value)
     return "";
-  int id = atoi(value);
   CStdString prefix(subSetting ? "- " : "");
-  if (id > 0)
-    return prefix + m_addon->GetString(id);
+  if (StringUtils::IsNaturalNumber(value))
+    return prefix + m_addon->GetString(atoi(value));
   return prefix + value;
 }
 
@@ -1105,3 +1154,10 @@ void CGUIDialogAddonSettings::DoProcess(unsigned int currentTime, CDirtyRegionLi
       ((CGUIButtonControl *)control)->SetSelected(false);
   }
 }
+
+CStdString CGUIDialogAddonSettings::GetCurrentID() const
+{
+  if (m_addon)
+    return m_addon->ID();
+  return "";
+}
index 12bea9f..4483e9c 100644 (file)
@@ -29,6 +29,7 @@ public:
   CGUIDialogAddonSettings(void);
   virtual ~CGUIDialogAddonSettings(void);
   virtual bool OnMessage(CGUIMessage& message);
+  virtual bool OnAction(const CAction& action);
   /*! \brief Show the addon settings dialog, allowing the user to configure an addon
    \param addon the addon to configure
    \param saveToDisk whether the changes should be saved to disk or just made local to the addon.  Defaults to true
@@ -37,6 +38,7 @@ public:
   static bool ShowAndGetInput(const ADDON::AddonPtr &addon, bool saveToDisk = true);
   virtual void DoProcess(unsigned int currentTime, CDirtyRegionList &dirtyregions);
 
+  CStdString GetCurrentID() const;
 protected:
   virtual void OnInitWindow();
 
index 309ceb2..6d61267 100644 (file)
@@ -212,6 +212,7 @@ bool CGUIWindowAddonBrowser::OnClick(int iItem)
     // pop up filebrowser to grab an installed folder
     VECSOURCES shares = g_settings.m_fileSources;
     g_mediaManager.GetLocalDrives(shares);
+    g_mediaManager.GetNetworkLocations(shares);
     CStdString path;
     if (CGUIDialogFileBrowser::ShowAndGetFile(shares, "*.zip", g_localizeStrings.Get(24041), path))
       CAddonInstaller::Get().InstallFromZip(path);
@@ -235,6 +236,8 @@ bool CGUIWindowAddonBrowser::OnClick(int iItem)
     CGUIDialogAddonInfo::ShowForItem(item);
     return true;
   }
+  if (item->GetPath().Equals("addons://search/"))
+    return Update(item->GetPath());
 
   return CGUIMediaWindow::OnClick(iItem);
 }
@@ -392,11 +395,10 @@ int CGUIWindowAddonBrowser::SelectAddonID(const vector<ADDON::TYPE> &types, CStd
   dialog->SetHeading(heading);
   dialog->Reset();
   dialog->SetUseDetails(true);
-  if (multipleSelection || iTypes > 1)
-  {
+  if (multipleSelection)
     showNone = false;
+  if (multipleSelection || iTypes > 1)
     dialog->EnableButton(true, 186);
-  }
   else
     dialog->EnableButton(true, 21452);
   if (showNone)
index 74cbc0b..5fe9eff 100644 (file)
@@ -111,10 +111,11 @@ namespace ADDON
     virtual CStdString GetString(uint32_t id) =0;
     virtual const ADDONDEPS &GetDeps() const =0;
     virtual bool MeetsVersion(const AddonVersion &version) const =0;
+    virtual bool ReloadSettings() =0;
 
   protected:
     virtual const AddonPtr Parent() const =0;
-    virtual bool LoadSettings() =0;
+    virtual bool LoadSettings(bool bForce = false) =0;
 
   private:
     friend class CAddonMgr;
index 399f76e..e64cb4e 100644 (file)
@@ -195,6 +195,9 @@ bool CRepositoryUpdateJob::DoWork()
   database.Open();
   for (unsigned int i=0;i<addons.size();++i)
   {
+    // manager told us to feck off
+    if (ShouldCancel(0,0))
+      break;
     if (!CAddonInstaller::Get().CheckDependencies(addons[i]))
       addons[i]->Props().broken = g_localizeStrings.Get(24044);
 
@@ -252,10 +255,8 @@ VECADDONS CRepositoryUpdateJob::GrabAddons(RepositoryPtr& repo)
       CLog::Log(LOGERROR,"Repository %s returned no add-ons, listing may have failed",repo->Name().c_str());
   }
   else
-  {
     database.GetRepository(repo->ID(),addons);
-    database.SetRepoTimestamp(repo->ID(),CDateTime::GetCurrentDateTime().GetAsDBDateTime());
-  }
+  database.SetRepoTimestamp(repo->ID(),CDateTime::GetCurrentDateTime().GetAsDBDateTime());
 
   return addons;
 }
index a9c22f3..796a2c5 100644 (file)
@@ -268,7 +268,7 @@ vector<CStdString> CScraper::Run(const CStdString& function,
   // skip children of the root element until <url> or <chain>
   while (xchain && strcmp(xchain->Value(),"url") && strcmp(xchain->Value(),"chain"))
       xchain = xchain->NextSiblingElement();
-  while (xchain && xchain->FirstChild())
+  while (xchain)
   {
     // <chain|url function="...">param</>
     const char* szFunction = xchain->Attribute("function");
@@ -278,7 +278,10 @@ vector<CStdString> CScraper::Run(const CStdString& function,
       vector<CStdString> extras;
       // for <chain>, pass the contained text as a parameter; for <url>, as URL content
       if (strcmp(xchain->Value(),"chain")==0)
-        extras.push_back(xchain->FirstChild()->Value());
+      {
+        if (xchain->FirstChild())
+          extras.push_back(xchain->FirstChild()->Value());
+      }
       else
         scrURL2.ParseElement(xchain);
       vector<CStdString> result2 = RunNoThrow(szFunction,scrURL2,http,&extras);
@@ -356,14 +359,23 @@ bool CScraper::Load()
         continue;
       }  
       AddonPtr dep;
-      if (!CAddonMgr::Get().GetAddon((*itr).first, dep))
+
+      bool bOptional = itr->second.second;
+
+      if (CAddonMgr::Get().GetAddon((*itr).first, dep))
       {
-        result = false;
-        break;
+        TiXmlDocument doc;
+        if (dep->Type() == ADDON_SCRAPER_LIBRARY && doc.LoadFile(dep->LibPath()))
+          m_parser.AddDocument(&doc);
+      }
+      else
+      {
+        if (!bOptional)
+        {
+          result = false;
+          break;
+        }
       }
-      TiXmlDocument doc;
-      if (dep->Type() == ADDON_SCRAPER_LIBRARY && doc.LoadFile(dep->LibPath()))
-        m_parser.AddDocument(&doc);
       itr++;
     }
   }
@@ -468,14 +480,15 @@ std::vector<CScraperUrl> CScraper::FindMovie(XFILE::CFileCurl &fcurl, const CStd
   CStdString sTitle, sTitleYear, sYear;
   CUtil::CleanString(sMovie, sTitle, sTitleYear, sYear, true/*fRemoveExt*/, fFirst);
 
+  if (!fFirst || Content() == CONTENT_MUSICVIDEOS)
+    sTitle.Replace("-"," ");
+
   CLog::Log(LOGDEBUG, "%s: Searching for '%s' using %s scraper "
     "(path: '%s', content: '%s', version: '%s')", __FUNCTION__, sTitle.c_str(),
     Name().c_str(), Path().c_str(),
     ADDON::TranslateContent(Content()).c_str(), Version().c_str());
 
   sTitle.ToLower();
-  if (Content() == CONTENT_MUSICVIDEOS)
-    sTitle.Replace("-"," ");
 
   vector<CStdString> vcsIn(1);
   g_charsetConverter.utf8To(SearchStringEncoding(), sTitle, vcsIn[0]);
@@ -578,7 +591,7 @@ std::vector<CScraperUrl> CScraper::FindMovie(XFILE::CFileCurl &fcurl, const CStd
     throw CScraperError();  // scraper aborted
 
   if (fSort)
-    std::sort(vcscurl.begin(), vcscurl.end(), RelevanceSortFunction);
+    std::stable_sort(vcscurl.begin(), vcscurl.end(), RelevanceSortFunction);
 
   return vcscurl;
 }
@@ -657,6 +670,9 @@ std::vector<CMusicAlbumInfo> CScraper::FindAlbum(CFileCurl &fcurl, const CStdStr
         for ( ; pxeLink && pxeLink->FirstChild(); pxeLink = pxeLink->NextSiblingElement("url"))
           scurlAlbum.ParseElement(pxeLink);
 
+        if (!scurlAlbum.m_url.size())
+          continue;
+
         CMusicAlbumInfo ali(sTitle, sArtist, sAlbumName, scurlAlbum);
 
         TiXmlElement* pxeRel = pxeAlbum->FirstChildElement("relevance");
@@ -735,6 +751,9 @@ std::vector<CMusicArtistInfo> CScraper::FindArtist(CFileCurl &fcurl,
         for ( ; pxeLink && pxeLink->FirstChild(); pxeLink = pxeLink->NextSiblingElement("url"))
           scurlArtist.ParseElement(pxeLink);
 
+        if (!scurlArtist.m_url.size())
+          continue;
+
         CMusicArtistInfo ari(pxnTitle->FirstChild()->Value(), scurlArtist);
         XMLUtils::GetString(pxeArtist, "genre", ari.GetArtist().strGenre);
         XMLUtils::GetString(pxeArtist, "year", ari.GetArtist().strBorn);
@@ -898,6 +917,9 @@ bool CScraper::GetAlbumDetails(CFileCurl &fcurl, const CScraperUrl &scurl, CAlbu
 bool CScraper::GetArtistDetails(CFileCurl &fcurl, const CScraperUrl &scurl,
   const CStdString &sSearch, CArtist &artist)
 {
+  if (!scurl.m_url.size())
+    return false;
+
   CLog::Log(LOGDEBUG, "%s: Reading '%s' ('%s') using %s scraper "
     "(file: '%s', content: '%s', version: '%s')", __FUNCTION__,
     scurl.m_url[0].m_url.c_str(), sSearch.c_str(), Name().c_str(), Path().c_str(),
index 77fc2fb..1da9caa 100644 (file)
@@ -49,8 +49,8 @@ bool CScreenSaver::CreateScreenSaver()
   m_pInfo->height     = iHeight;
   m_pInfo->pixelRatio = g_settings.m_ResInfo[g_graphicsContext.GetVideoResolution()].fPixelRatio;
   m_pInfo->name       = strdup(Name().c_str());
-  m_pInfo->presets    = strdup(_P(Path()).c_str());
-  m_pInfo->profile    = strdup(_P(Profile()).c_str());
+  m_pInfo->presets    = strdup(CSpecialProtocol::TranslatePath(Path()).c_str());
+  m_pInfo->profile    = strdup(CSpecialProtocol::TranslatePath(Profile()).c_str());
 
   if (CAddonDll<DllScreenSaver, ScreenSaver, SCR_PROPS>::Create())
     return true;
index 8eda716..25b9c97 100644 (file)
@@ -174,7 +174,7 @@ double CSkinInfo::GetMinVersion()
 
 void CSkinInfo::LoadIncludes()
 {
-  CStdString includesPath = PTH_IC(GetSkinPath("includes.xml"));
+  CStdString includesPath = CSpecialProtocol::TranslatePathConvertCase(GetSkinPath("includes.xml"));
   CLog::Log(LOGINFO, "Loading skin includes from %s", includesPath.c_str());
   m_includes.ClearIncludes();
   m_includes.LoadIncludes(includesPath);
@@ -256,4 +256,9 @@ bool CSkinInfo::IsInUse() const
   return g_guiSettings.GetString("lookandfeel.skin") == ID();
 }
 
+const INFO::CSkinVariableString* CSkinInfo::CreateSkinVariable(const CStdString& name, int context)
+{
+  return m_includes.CreateSkinVariable(name, context);
+}
+
 } /*namespace ADDON*/
index 323dde7..694c78e 100644 (file)
@@ -109,6 +109,7 @@ public:
 //  static bool Check(const CStdString& strSkinDir); // checks if everything is present and accounted for without loading the skin
   static double GetMinVersion();
   void LoadIncludes();
+  const INFO::CSkinVariableString* CreateSkinVariable(const CStdString& name, int context);
 protected:
   /*! \brief Given a resolution, retrieve the corresponding directory name
    \param res RESOLUTION to translate
index ac65e97..411951d 100644 (file)
@@ -100,8 +100,8 @@ bool CVisualisation::Create(int x, int y, int w, int h)
   m_pInfo->pixelRatio = g_settings.m_ResInfo[g_graphicsContext.GetVideoResolution()].fPixelRatio;
 
   m_pInfo->name = strdup(Name().c_str());
-  m_pInfo->presets = strdup(_P(Path()).c_str());
-  m_pInfo->profile = strdup(_P(Profile()).c_str());
+  m_pInfo->presets = strdup(CSpecialProtocol::TranslatePath(Path()).c_str());
+  m_pInfo->profile = strdup(CSpecialProtocol::TranslatePath(Profile()).c_str());
   m_pInfo->submodule = NULL;
 
   if (CAddonDll<DllVisualisation, Visualisation, VIS_PROPS>::Create())
@@ -122,7 +122,7 @@ bool CVisualisation::Create(int x, int y, int w, int h)
     GetPresets();
 
     if (GetSubModules())
-      m_pInfo->submodule = strdup(_P(m_submodules.front()).c_str());
+      m_pInfo->submodule = strdup(CSpecialProtocol::TranslatePath(m_submodules.front()).c_str());
     else
       m_pInfo->submodule = NULL;
 
@@ -359,7 +359,7 @@ bool CVisualisation::UpdateTrack()
   if (Initialized())
   {
     // get the current album art filename
-    m_AlbumThumb = _P(g_infoManager.GetImage(MUSICPLAYER_COVER, WINDOW_INVALID));
+    m_AlbumThumb = CSpecialProtocol::TranslatePath(g_infoManager.GetImage(MUSICPLAYER_COVER, WINDOW_INVALID));
 
     // get the current track tag
     const CMusicInfoTag* tag = g_infoManager.GetCurrentSongTag();
index 6b75961..ec08b19 100644 (file)
@@ -160,10 +160,10 @@ bool CCDDARipper::Rip(const CStdString& strTrackFile, const CStdString& strFile,
   {
     char tmp[MAX_PATH];
 #ifndef _LINUX
-    GetTempFileName(_P("special://temp/"), "riptrack", 0, tmp);
+    GetTempFileName(CSpecialProtocol::TranslatePath("special://temp/"), "riptrack", 0, tmp);
 #else
     int fd;
-    strncpy(tmp, _P("special://temp/riptrackXXXXXX"), MAX_PATH);
+    strncpy(tmp, CSpecialProtocol::TranslatePath("special://temp/riptrackXXXXXX"), MAX_PATH);
     if ((fd = mkstemp(tmp)) == -1)
       strFilename = "";
     close(fd);
index 845dce3..3c891cf 100644 (file)
@@ -49,7 +49,7 @@ CALSADirectSound::CALSADirectSound()
   m_bIsAllocated = false;
 }
 
-bool CALSADirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, bool bPassthrough)
+bool CALSADirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, EEncoded encoded)
 {
   enum PCMChannels *outLayout;
 
@@ -67,7 +67,7 @@ bool CALSADirectSound::Initialize(IAudioCallback* pCallback, const CStdString& d
   m_uiDataChannels = iChannels;
   m_remap.Reset();
 
-  if (!bPassthrough && channelMap)
+  if (encoded == ENCODED_NONE && channelMap)
   {
     /* set the input format, and get the channel layout so we know what we need to open */
     outLayout = m_remap.SetInputFormat (iChannels, channelMap, uiBitsPerSample / 8, uiSamplesPerSec);
@@ -105,7 +105,7 @@ bool CALSADirectSound::Initialize(IAudioCallback* pCallback, const CStdString& d
   m_uiChannels = iChannels;
   m_uiSamplesPerSec = uiSamplesPerSec;
   m_uiBitsPerSample = uiBitsPerSample;
-  m_bPassthrough = bPassthrough;
+  m_bPassthrough = encoded != ENCODED_NONE;
   m_drc = 0;
 
   m_nCurrentVolume = g_settings.m_nVolumeLevel;
@@ -175,7 +175,7 @@ bool CALSADirectSound::Initialize(IAudioCallback* pCallback, const CStdString& d
     if(deviceuse != device)
     {
       snd_input_t* input;
-      nErr = snd_input_stdio_open(&input, _P("special://xbmc/system/asound.conf").c_str(), "r");
+      nErr = snd_input_stdio_open(&input, CSpecialProtocol::TranslatePath("special://xbmc/system/asound.conf").c_str(), "r");
       if(nErr >= 0)
       {
         nErr = snd_config_load(config, input);
@@ -396,12 +396,20 @@ bool CALSADirectSound::Resume()
   if(state == SND_PCM_STATE_PAUSED)
     snd_pcm_pause(m_pPlayHandle,0);
 
-  if(state == SND_PCM_STATE_PREPARED)
+  else if(state == SND_PCM_STATE_PREPARED)
   {
     snd_pcm_sframes_t avail = snd_pcm_avail_update(m_pPlayHandle);
     if(avail >= 0 && avail < (snd_pcm_sframes_t)m_uiBufferSize)
       snd_pcm_start(m_pPlayHandle);
   }
+  else if(state == SND_PCM_STATE_RUNNING)
+  {}
+  else
+  {
+    CLog::Log(LOGWARNING, "CALSADirectSound::Resume - unexpected device state %d flushing", state);
+    Flush();
+    snd_pcm_start(m_pPlayHandle);
+  }
 
   m_bPause = false;
 
@@ -644,19 +652,11 @@ void CALSADirectSound::EnumerateAudioSinks(AudioSinkList& vAudioSinks, bool pass
     vAudioSinks.push_back(AudioSink("hdmi (ALSA)"   , "alsa:hdmi"));
   }
 
-  int n_cards = -1;
-  int numberCards = 0;
-  while ( snd_card_next( &n_cards ) == 0 && n_cards >= 0 )
-    numberCards++;
-
-  if (numberCards <= 1)
-    return;
-
   snd_ctl_t *handle;
   snd_ctl_card_info_t *info;
   snd_ctl_card_info_alloca( &info );
   CStdString strHwName;
-  n_cards = -1;
+  int n_cards = -1;
 
   while ( snd_card_next( &n_cards ) == 0 && n_cards >= 0 )
   {
@@ -668,10 +668,14 @@ void CALSADirectSound::EnumerateAudioSinks(AudioSinkList& vAudioSinks, bool pass
         CStdString strReadableCardName = snd_ctl_card_info_get_name( info );
         CStdString strCardName = snd_ctl_card_info_get_id( info );
 
-        if (!passthrough)
-          GenSoundLabel(vAudioSinks, g_localizeStrings.Get(409), strCardName, strReadableCardName);
-        GenSoundLabel(vAudioSinks, "iec958", strCardName, strReadableCardName);
-        GenSoundLabel(vAudioSinks, "hdmi", strCardName, strReadableCardName);
+        int dev = -1;
+        while( snd_ctl_pcm_next_device( handle, &dev ) == 0 && dev >= 0 )
+        {
+          if (!passthrough)
+            GenSoundLabel(vAudioSinks, "default", strCardName, dev, strReadableCardName);
+          GenSoundLabel(vAudioSinks, "iec958", strCardName, dev, strReadableCardName);
+          GenSoundLabel(vAudioSinks, "hdmi", strCardName, dev, strReadableCardName);
+        }
       }
       else
         CLog::Log(LOGERROR,"((ALSAENUM))control hardware info (%i): failed.\n", n_cards );
@@ -682,41 +686,14 @@ void CALSADirectSound::EnumerateAudioSinks(AudioSinkList& vAudioSinks, bool pass
   }
 }
 
-bool CALSADirectSound::SoundDeviceExists(const CStdString& device)
-{
-  void **hints, **n;
-  char *name;
-  bool retval = false;
-
-  if (snd_device_name_hint(-1, "pcm", &hints) == 0)
-  {
-    for (n = hints; *n; n++)
-    {
-      if ((name = snd_device_name_get_hint(*n, "NAME")) != NULL)
-      {
-        CStdString strName = name;
-        free(name);
-        if (strName.find(device) != string::npos)
-        {
-          retval = true;
-          break;
-        }
-      }
-    }
-    snd_device_name_free_hint(hints);
-  }
-  return retval;
-}
-
-void CALSADirectSound::GenSoundLabel(AudioSinkList& vAudioSinks, CStdString sink, CStdString card, CStdString readableCard)
+void CALSADirectSound::GenSoundLabel(AudioSinkList& vAudioSinks, CStdString sink, CStdString card, int dev, CStdString readableCard)
 {
   CStdString deviceString;
-  deviceString.Format("%s:CARD=%s", sink, card.c_str());
-  if (sink.Equals(g_localizeStrings.Get(409)) || SoundDeviceExists(deviceString.c_str()))
-  {
-    CStdString finalSink;
-    finalSink.Format("alsa:%s", deviceString.c_str());
-    CStdString label = readableCard + " " + sink + " (ALSA)";
-    vAudioSinks.push_back(AudioSink(label, finalSink));
-  }
+  deviceString.Format("%s:CARD=%s,DEV=%d", sink, card.c_str(), dev);
+
+  CStdString finalSink;
+  finalSink.Format("alsa:%s", deviceString.c_str());
+  CStdString label;
+  label.Format("%s - %s - %d (ALSA)", readableCard.c_str(), sink.c_str(), dev);
+  vAudioSinks.push_back(AudioSink(label, finalSink));
 }
index c5f4729..21b5acb 100644 (file)
@@ -50,7 +50,7 @@ public:
   virtual float GetCacheTime();
   virtual float GetCacheTotal();
   CALSADirectSound();
-  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, bool bPassthrough = false);
+  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, EEncoded encoded = IAudioRenderer::ENCODED_NONE);
   virtual ~CALSADirectSound();
 
   virtual unsigned int AddPackets(const void* data, unsigned int len);
@@ -72,8 +72,7 @@ public:
   static void EnumerateAudioSinks(AudioSinkList& vAudioSinks, bool passthrough);
 private:
   unsigned int GetSpaceFrames();
-  static bool SoundDeviceExists(const CStdString& device);
-  static void GenSoundLabel(AudioSinkList& vAudioSinks, CStdString sink, CStdString card, CStdString readableCard);
+  static void GenSoundLabel(AudioSinkList& vAudioSinks, CStdString sink, CStdString card, int dev, CStdString readableCard);
   snd_pcm_t            *m_pPlayHandle;
 
   IAudioCallback* m_pCallback;
index 30c97bc..927e8ea 100644 (file)
@@ -45,7 +45,7 @@
 
 #define ReturnOnValidInitialize(rendererName)    \
 {                                                \
-  if (audioSink->Initialize(pCallback, device, iChannels, channelMap, uiSamplesPerSec, uiBitsPerSample, bResample, bIsMusic, bPassthrough)) \
+  if (audioSink->Initialize(pCallback, device, iChannels, channelMap, uiSamplesPerSec, uiBitsPerSample, bResample, bIsMusic, encoded)) \
   {                                              \
     CLog::Log(LOGDEBUG, "%s::Initialize"         \
       " - Channels: %i"                          \
@@ -53,7 +53,7 @@
       " - SampleBit: %i"                         \
       " - Resample %s"                           \
       " - IsMusic %s"                            \
-      " - IsPassthrough %s"                      \
+      " - IsPassthrough %d"                      \
       " - audioDevice: %s",                      \
       rendererName,                              \
       iChannels,                                 \
@@ -61,7 +61,7 @@
       uiBitsPerSample,                           \
       bResample ? "true" : "false",              \
       bIsMusic ? "true" : "false",               \
-      bPassthrough ? "true" : "false",           \
+      encoded,                                   \
       device.c_str()                             \
     ); \
     return audioSink;                      \
   return new rendererClass(); \
 }
 
-IAudioRenderer* CAudioRendererFactory::Create(IAudioCallback* pCallback, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, bool bPassthrough)
+/* windows channel order */
+static const enum PCMChannels dsound_default_channel_layout[][8] =
+{
+  {PCM_FRONT_CENTER},
+  {PCM_FRONT_LEFT, PCM_FRONT_RIGHT},
+  {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_LOW_FREQUENCY},
+  {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_BACK_LEFT, PCM_BACK_RIGHT},
+  {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_LOW_FREQUENCY, PCM_BACK_LEFT, PCM_BACK_RIGHT},
+  {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_LOW_FREQUENCY, PCM_BACK_LEFT, PCM_BACK_RIGHT},
+  {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_LOW_FREQUENCY, PCM_BACK_CENTER, PCM_BACK_LEFT, PCM_BACK_RIGHT},
+  {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_LOW_FREQUENCY, PCM_BACK_LEFT, PCM_BACK_RIGHT, PCM_SIDE_LEFT, PCM_SIDE_RIGHT}
+};
+
+IAudioRenderer* CAudioRendererFactory::Create(IAudioCallback* pCallback, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, IAudioRenderer::EEncoded encoded)
 {
   IAudioRenderer* audioSink = NULL;
   CStdString renderer;
 
+  if(channelMap == NULL)
+  {
+    CLog::Log(LOGINFO, "CAudioRendererFactory: no input channel map specified assume windows\n");
+    channelMap = (enum PCMChannels *)dsound_default_channel_layout[iChannels - 1];
+  }
+
   CStdString deviceString, device;
-  if (bPassthrough)
+  if (encoded)
   {
 #if defined(_LINUX) && !defined(__APPLE__)
     deviceString = g_guiSettings.GetString("audiooutput.passthroughdevice");
index 1e9f65d..6d714e7 100644 (file)
@@ -31,7 +31,7 @@
 class CAudioRendererFactory
 {
 public:
-  static IAudioRenderer *Create(IAudioCallback* pCallback, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, bool bPassthrough);
+  static IAudioRenderer *Create(IAudioCallback* pCallback, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, IAudioRenderer::EEncoded encoded = IAudioRenderer::ENCODED_NONE);
   static void EnumerateAudioSinks(AudioSinkList& vAudioSinks, bool passthrough);
 private:
   static IAudioRenderer *CreateFromUri(const CStdString &soundsystem, CStdString &renderer);
index 3d6a3e4..f4f4430 100644 (file)
 #include <CoreServices/CoreServices.h>
 
 #include "CoreAudioRenderer.h"
+#include "Application.h"
 #include "guilib/AudioContext.h"
+#include "osx/CocoaInterface.h"
 #include "settings/GUISettings.h"
 #include "settings/Settings.h"
 #include "settings/AdvancedSettings.h"
 #include "threads/Atomics.h"
+#include "windowing/WindowingFactory.h"
 #include "utils/log.h"
+#include "utils/SystemInfo.h"
 #include "utils/TimeUtils.h"
 
-
 const AudioChannelLabel g_LabelMap[] =
 {
   kAudioChannelLabel_Left, // PCM_FRONT_LEFT,
@@ -56,6 +59,8 @@ const AudioChannelLabel g_LabelMap[] =
   kAudioChannelLabel_TopBackCenter //  PCM_TOP_BACK_CENTER 
 };
 
+#define MAX_AUDIO_CHANNEL_LABEL kAudioChannelLabel_CenterSurroundDirect
+
 const AudioChannelLayoutTag g_LayoutMap[] = 
 {
   kAudioChannelLayoutTag_Stereo, // PCM_LAYOUT_2_0 = 0,
@@ -66,7 +71,7 @@ const AudioChannelLayoutTag g_LayoutMap[] =
   kAudioChannelLayoutTag_DVD_6, // PCM_LAYOUT_4_1,
   kAudioChannelLayoutTag_MPEG_5_0_A, // PCM_LAYOUT_5_0,
   kAudioChannelLayoutTag_MPEG_5_1_A, // PCM_LAYOUT_5_1,
-  kAudioChannelLayoutTag_AudioUnit_7_0, // PCM_LAYOUT_7_0, ** This layout may be incorrect...no content to testß˚ **
+  kAudioChannelLayoutTag_AudioUnit_7_0, // PCM_LAYOUT_7_0, ** This layout may be incorrect...no content to test **
   kAudioChannelLayoutTag_MPEG_7_1_A, // PCM_LAYOUT_7_1
 };
 
@@ -335,16 +340,153 @@ void CCoreAudioPerformance::Reset()
 //***********************************************************************************************
 // Surround Up/Down Mapping Class
 //***********************************************************************************************
+struct ChannelPatch
+{
+  AudioChannelLabel label; // Target Channel
+  Float32 coeff; // Output level
+};
+
+// TODO: There is not a lot of logic behind these mapping coefficients
+// Routings for Explicit Mapping. These are in priority order.
+// g_ChannelRoutings[channel][routing][patch]
+// These are currently all down-mix routings
+#define MAX_CHANNELS sizeof(g_LabelMap)/sizeof(AudioChannelLabel)
+#define NO_ROUTINGS {{{kAudioChannelLabel_Unknown, 0.0f}}}
+ChannelPatch g_ChannelRoutings[MAX_AUDIO_CHANNEL_LABEL+1][MAX_CHANNELS][MAX_CHANNELS] = 
+{
+  NO_ROUTINGS, // kAudioChannelLabel_Unknown (0)
+  // kAudioChannelLabel_Left (1)
+  {
+    {{kAudioChannelLabel_Center, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_Right (2)
+  {
+    {{kAudioChannelLabel_Center, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_Center (3)
+  {
+    {{kAudioChannelLabel_Left, 0.707f},{kAudioChannelLabel_Right, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Left, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Right, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_LFEScreen (4)
+  {
+    {{kAudioChannelLabel_Left, 0.707f},{kAudioChannelLabel_Right, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Left, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Right, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_LeftSurround (5)
+  {
+    {{kAudioChannelLabel_LeftSurroundDirect, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Left, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_RightSurround (6)
+  {
+    {{kAudioChannelLabel_RightSurroundDirect, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Right, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_LeftCenter (7)
+  {
+    {{kAudioChannelLabel_Center, 0.707f},{kAudioChannelLabel_Left, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Left, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_RightCenter (8)
+  {
+    {{kAudioChannelLabel_Center, 0.707f},{kAudioChannelLabel_Right, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Right, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_CenterSurround (9)
+  {
+    {{kAudioChannelLabel_LeftSurround, 0.707f},{kAudioChannelLabel_RightSurround, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_LeftSurroundDirect, 0.707f},{kAudioChannelLabel_RightSurroundDirect, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Left, 0.707f},{kAudioChannelLabel_Right, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_LeftSurroundDirect (10)
+  {
+    {{kAudioChannelLabel_LeftSurround, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_CenterSurround, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_CenterSurroundDirect, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Left, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },  
+  // kAudioChannelLabel_RightSurroundDirect (11)
+  {
+    {{kAudioChannelLabel_RightSurround, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_CenterSurround, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_CenterSurroundDirect, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Right, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  NO_ROUTINGS, //kAudioChannelLabel_TopCenterSurround (12)
+  NO_ROUTINGS, //kAudioChannelLabel_VerticalHeightLeft (13)
+  NO_ROUTINGS, //kAudioChannelLabel_VerticalHeightCenter (14)
+  NO_ROUTINGS, //kAudioChannelLabel_VerticalHeightRight (15)
+  NO_ROUTINGS, //kAudioChannelLabel_TopBackLeft (16)
+  NO_ROUTINGS, //kAudioChannelLabel_TopBackCenter (17)
+  NO_ROUTINGS, //kAudioChannelLabel_VerticalHeightRight (18)
+  NO_ROUTINGS, // INVALID LABEL (19)
+  NO_ROUTINGS, // INVALID LABEL (20)
+  NO_ROUTINGS, // INVALID LABEL (21)
+  NO_ROUTINGS, // INVALID LABEL (22)
+  NO_ROUTINGS, // INVALID LABEL (23)
+  NO_ROUTINGS, // INVALID LABEL (24)
+  NO_ROUTINGS, // INVALID LABEL (25)
+  NO_ROUTINGS, // INVALID LABEL (26)
+  NO_ROUTINGS, // INVALID LABEL (27)
+  NO_ROUTINGS, // INVALID LABEL (28)
+  NO_ROUTINGS, // INVALID LABEL (29)
+  NO_ROUTINGS, // INVALID LABEL (30)
+  NO_ROUTINGS, // INVALID LABEL (31)
+  NO_ROUTINGS, // INVALID LABEL (32)
+  // kAudioChannelLabel_RearSurroundLeft (33)
+  {
+    {{kAudioChannelLabel_LeftSurround, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_LeftSurroundDirect, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_CenterSurround, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_CenterSurroundDirect, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Left, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  // kAudioChannelLabel_RearSurroundRight (34)
+  {
+    {{kAudioChannelLabel_RightSurround, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_RightSurroundDirect, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_CenterSurround, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_CenterSurroundDirect, 0.707f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Right, 1.0f},{kAudioChannelLabel_Unknown, 0.0f}},
+    {{kAudioChannelLabel_Unknown, 0.0f}}
+  },
+  NO_ROUTINGS, // kAudioChannelLabel_LeftWide (35)
+  NO_ROUTINGS, // kAudioChannelLabel_RightWide (36)
+  NO_ROUTINGS, // kAudioChannelLabel_LFE2 (37)
+  NO_ROUTINGS, // kAudioChannelLabel_LeftTotal (38)
+  NO_ROUTINGS, // kAudioChannelLabel_RightTotal (39)
+  NO_ROUTINGS, // kAudioChannelLabel_HearingImpaired (40)
+  NO_ROUTINGS, // kAudioChannelLabel_Narration (41)
+  NO_ROUTINGS, // kAudioChannelLabel_Mono (42)
+  NO_ROUTINGS, // kAudioChannelLabel_DialogCentricMix (43)
+  NO_ROUTINGS // kAudioChannelLabel_CenterSurroundDirect (44)
+};
+
 CCoreAudioMixMap::CCoreAudioMixMap() :
   m_isValid(false)
 {
-  m_pMap = (Float32*)calloc(sizeof(AudioChannelLayout), 1);
+  m_pMap = (Float32*)calloc(sizeof(Float32), 2);
 }
 
-CCoreAudioMixMap::CCoreAudioMixMap(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout) :
+CCoreAudioMixMap::CCoreAudioMixMap(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout, bool forceExplicit/*=false*/) :
   m_isValid(false)
 {
-  Rebuild(inLayout, outLayout);
+  Rebuild(inLayout, outLayout, forceExplicit);
 }
 
 CCoreAudioMixMap::~CCoreAudioMixMap()
@@ -352,11 +494,10 @@ CCoreAudioMixMap::~CCoreAudioMixMap()
   if (m_pMap)
   {
     free(m_pMap);
-    m_pMap = NULL;
   }
 }
 
-void CCoreAudioMixMap::Rebuild(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout)
+void CCoreAudioMixMap::Rebuild(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout, bool forceExplicit/*=false*/)
 {
   // map[in][out] = mix-level of input_channel[in] into output_channel[out]
 
@@ -369,24 +510,116 @@ void CCoreAudioMixMap::Rebuild(AudioChannelLayout& inLayout, AudioChannelLayout&
   m_inChannels = CCoreAudioChannelLayout::GetChannelCountForLayout(inLayout);
   m_outChannels = CCoreAudioChannelLayout::GetChannelCountForLayout(outLayout);
   
-  // Try to find a 'well-known' matrix
-  const AudioChannelLayout* layouts[] = {&inLayout, &outLayout};
-  UInt32 propSize = 0;
-  OSStatus ret = AudioFormatGetPropertyInfo(kAudioFormatProperty_MatrixMixMap, sizeof(layouts), layouts, &propSize);
-  m_pMap = (Float32*)calloc(1,propSize);
-  
-  // Try and get a predefined mixmap
-  ret = AudioFormatGetProperty(kAudioFormatProperty_MatrixMixMap, sizeof(layouts), layouts, &propSize, m_pMap);
-  if (!ret)
+  // If the caller allows it, try to find a 'well-known' matrix
+  if (!forceExplicit)
   {
-    m_isValid = true;
-    return; // Nothing else to do...a map already exists
+    const AudioChannelLayout* layouts[] = {&inLayout, &outLayout};
+    UInt32 propSize = 0;
+    OSStatus ret = AudioFormatGetPropertyInfo(kAudioFormatProperty_MatrixMixMap, sizeof(layouts), layouts, &propSize);
+    m_pMap = (Float32*)calloc(1,propSize);
+    ret = AudioFormatGetProperty(kAudioFormatProperty_MatrixMixMap, sizeof(layouts), layouts, &propSize, m_pMap);
+    if (!ret)
+    {
+      m_isValid = true;
+      CLog::Log(LOGDEBUG, "CCoreAudioMixMap::Rebuild: Using pre-defined mixing matrix.");
+      return; // Nothing else to do...a map already exists
+    }
+    
+    // No predefined mixing matrix was available. Going to have to build it manually
+    CLog::Log(LOGDEBUG, "CCoreAudioMixMap::Rebuild: Unable to locate pre-defined mixing matrix. Trying to build one explicitly...");
   }
+  else
+    CLog::Log(LOGINFO, "CCoreAudioMixMap::Rebuild: Building explicit mixing matrix [forceExplicit=true]");
+  
+  // Try to build a mixing matrix from scratch
+  m_isValid = BuildExplicit(inLayout, outLayout);
+}
+
+bool CCoreAudioMixMap::BuildExplicit(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout)
+{
+  // Initialize map
+  // map[in][out] = mix-level of input_channel[in] into output_channel[out]
+  m_pMap = (Float32*)calloc(sizeof(Float32), inLayout.mNumberChannelDescriptions * outLayout.mNumberChannelDescriptions);
+  int mappedChannels = 0;
   
-  // No predefined mixmap was available. Going to have to build it manually
-  CLog::Log(LOGDEBUG, "CCoreAudioMixMap::CreateMap: Unable to locate pre-defined mixing matrix");
+  // Initialize array of output channel locations
+  int outPos[MAX_AUDIO_CHANNEL_LABEL + 1];
+  for (UInt32 i = 0; i < (MAX_AUDIO_CHANNEL_LABEL + 1); i++)
+    outPos[i] = -1;
   
-  m_isValid = false;
+  // Map output channel order to output layout
+  for (UInt32 channel = 0; channel < outLayout.mNumberChannelDescriptions; channel++)
+    outPos[outLayout.mChannelDescriptions[channel].mChannelLabel] = channel;
+  
+  CLog::Log(LOGDEBUG, "CCoreAudioMixMap::BuildExplicit: Building mixing matrix [%d input channels, %d output channels]", inLayout.mNumberChannelDescriptions, outLayout.mNumberChannelDescriptions);
+
+  // For each input channel, decide how to route/mix it
+  for (UInt32 channel = 0; channel < inLayout.mNumberChannelDescriptions; channel++)
+  {
+    AudioChannelDescription* pDesc = &inLayout.mChannelDescriptions[channel];
+    
+    if (pDesc->mChannelLabel > MAX_AUDIO_CHANNEL_LABEL)
+    {
+      CLog::Log(LOGINFO, "CCoreAudioMixMap::BuildExplicit:\tUnrecognized input channel encountered (label=%d) - skipping.", pDesc->mChannelLabel);
+      continue;
+    }
+    
+    // Does the channel exist in the output?
+    int outIndex = outPos[pDesc->mChannelLabel];
+    if (outIndex > -1) // If so, just pass it through
+    {
+      // map[in][out] = map[in * outCount + out]
+      CLog::Log(LOGDEBUG, "CCoreAudioMixMap::BuildExplicit:\tin[%d] -> out[%d] @ %0.02f", channel, outIndex, 1.0f);
+      m_pMap[channel * outLayout.mNumberChannelDescriptions + outIndex] = 1.0f;
+      mappedChannels++;
+    }
+    else // The input channel does not exist in the output layout. Decide where to route it...
+    {
+      // Loop through the pre-defined routings strategies for this channel. Use the first compatible one we find
+      for (UInt32 r = 0; r < MAX_CHANNELS; r++)
+      {
+        // If the first patch's label is kAudioChannelLabel_Unknown, this is the routing list terminator
+        if (g_ChannelRoutings[pDesc->mChannelLabel][r][0].label == kAudioChannelLabel_Unknown)
+          break; // No dice...
+        
+        // Check each patch in this routing to see if it is possible. If it is not, give up on this routing
+        bool validRouting = false;
+        for (UInt32 p = 0; ((p < MAX_CHANNELS) && !validRouting); p++)
+        {
+          ChannelPatch* patch = &g_ChannelRoutings[pDesc->mChannelLabel][r][p];
+          if (patch->label == kAudioChannelLabel_Unknown) // End of this routing
+            validRouting = true; // Success...this routing should work.          
+          else if (outPos[patch->label] == -1)
+            break; // The specified output channel is not available. Invalidate the whole routing
+        }
+        
+        // If this is a valid routing (all output channels are available), apply it...
+        if (validRouting)
+        {
+          for (UInt32 p = 0; p < MAX_CHANNELS; p++)
+          {
+            ChannelPatch* patch = &g_ChannelRoutings[pDesc->mChannelLabel][r][p];
+            if (patch->label == kAudioChannelLabel_Unknown) // List terminator
+              break;
+            
+            int outIndex = outPos[patch->label];
+            CLog::Log(LOGDEBUG, "CCoreAudioMixMap::BuildExplicit:\tin[%d] -> out[%d] @ %0.02f", channel, outIndex, patch->coeff);
+            m_pMap[channel * outLayout.mNumberChannelDescriptions + outIndex] = patch->coeff;
+            mappedChannels++;
+          }
+          break;
+        }
+      }
+    }
+  }
+  if (!mappedChannels)
+  {
+    CLog::Log(LOGINFO, "CCoreAudioMixMap::BuildExplicit: No valid patches found.");
+    return false;
+  }
+
+  CLog::Log(LOGINFO, "CCoreAudioMixMap::BuildExplicit: Completed explicit channel map.");
+  return true;
 }
 
 //***********************************************************************************************
@@ -405,6 +638,9 @@ CCoreAudioRenderer::CCoreAudioRenderer() :
   m_pCache(NULL),
   m_DoRunout(0)
 {
+  m_init_state.reinit = false;
+  m_init_state.channelMap = NULL;
+
   SInt32 major,  minor;
   Gestalt(gestaltSystemVersionMajor, &major);
   Gestalt(gestaltSystemVersionMinor, &minor);
@@ -423,11 +659,24 @@ CCoreAudioRenderer::CCoreAudioRenderer() :
       CLog::Log(LOGERROR, "CoreAudioRenderer::constructor: kAudioHardwarePropertyRunLoop error.");
     }
   }
+#ifdef VERBOSE_DEBUG
+  AudioHardwareAddPropertyListener(kAudioHardwarePropertyDevices, HardwareListenerProc, this);
+  AudioHardwareAddPropertyListener(kAudioHardwarePropertyIsInitingOrExiting, HardwareListenerProc, this);
+  AudioHardwareAddPropertyListener(kAudioHardwarePropertyDefaultOutputDevice, HardwareListenerProc, this);
+#endif
+  g_Windowing.Register(this);
 }
 
 CCoreAudioRenderer::~CCoreAudioRenderer()
 {
+#ifdef VERBOSE_DEBUG
+  AudioHardwareRemovePropertyListener(kAudioHardwarePropertyDevices, HardwareListenerProc);
+  AudioHardwareRemovePropertyListener(kAudioHardwarePropertyIsInitingOrExiting, HardwareListenerProc);
+  AudioHardwareRemovePropertyListener(kAudioHardwarePropertyDefaultOutputDevice, HardwareListenerProc);
+#endif
+  g_Windowing.Unregister(this);
   Deinitialize();
+  delete m_init_state.channelMap;
 }
 
 //***********************************************************************************************
@@ -439,14 +688,40 @@ CCoreAudioRenderer::~CCoreAudioRenderer()
 if (!m_Initialized) \
 return x
 
-bool CCoreAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic /*Useless Legacy Parameter*/, bool bPassthrough)
+bool CCoreAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic /*Useless Legacy Parameter*/, EEncoded bPassthrough)
 {
+  CSingleLock lock(m_init_csection);
+
   // Have to clean house before we start again.
   // TODO: Should we return failure instead?
   if (m_Initialized)
     Deinitialize();
   
-  if(bPassthrough)
+  m_init_state.device = device;
+  m_init_state.iChannels = iChannels;
+  // save the old and delete after clone incase we are reinit'ing.
+  enum PCMChannels *old_channelMap = m_init_state.channelMap;
+  m_init_state.channelMap = NULL;
+  if (channelMap)
+  {
+    m_init_state.channelMap = new PCMChannels[m_init_state.iChannels];
+    for (int i = 0; i < iChannels; i++)
+      m_init_state.channelMap[i] = channelMap[i];
+  }
+  delete [] old_channelMap;
+  m_init_state.uiSamplesPerSec = uiSamplesPerSec;
+  m_init_state.uiBitsPerSample = uiBitsPerSample;
+  m_init_state.bResample       = bResample;
+  m_init_state.bIsMusic        = bIsMusic;
+  m_init_state.bPassthrough    = bPassthrough;
+  m_init_state.pCallback       = pCallback;
+
+  // Reset all the devices to a default 'non-hog' and mixable format.
+  // If we don't do this we may be unable to find the Default Output device.
+  // (e.g. if we crashed last time leaving it stuck in AC3/DTS/SPDIF mode)
+  Cocoa_ResetAudioDevices();
+
+  if(m_init_state.bPassthrough)
     g_audioContext.SetActiveDevice(CAudioContext::DIRECTSOUND_DEVICE_DIGITAL);
   else
     g_audioContext.SetActiveDevice(CAudioContext::DIRECTSOUND_DEVICE);
@@ -467,17 +742,23 @@ bool CCoreAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString&
       return false;
   }
   
+#ifdef VERBOSE_DEBUG
+  AudioDeviceAddPropertyListener(outputDevice, 0, false, kAudioDevicePropertyDeviceIsAlive, DeviceListenerProc, this);
+  AudioDeviceAddPropertyListener(outputDevice, 0, false, kAudioDevicePropertyDeviceIsRunning, DeviceListenerProc, this);
+  AudioDeviceAddPropertyListener(outputDevice, 0, false, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc, this);
+#endif
+
   // TODO: Determine if the device is in-use/locked by another process.
   
   // Attach our output object to the device
   m_AudioDevice.Open(outputDevice);
   
   // If this is a passthrough (AC3/DTS) stream, attempt to handle it natively
-  if (bPassthrough)
+  if (m_init_state.bPassthrough)
   {
-    m_Passthrough = InitializeEncoded(outputDevice, uiSamplesPerSec);
+    m_Passthrough = InitializeEncoded(outputDevice, m_init_state.uiSamplesPerSec);
     // TODO: wait for audio device startup
-    Sleep(100);
+    Sleep(200);
   }
   
   // If this is a PCM stream, or we failed to handle a passthrough stream natively,
@@ -495,20 +776,20 @@ bool CCoreAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString&
     // If we are here and this is a passthrough stream, native handling failed.
     // Try to handle it as IEC61937 data over straight PCM (DD-Wav)
     bool configured = false;
-    if (bPassthrough)
+    if (m_init_state.bPassthrough)
     {
       CLog::Log(LOGDEBUG, "CoreAudioRenderer::Initialize: "
         "No suitable AC3 output format found. Attempting DD-Wav.");
-      configured = InitializePCMEncoded(uiSamplesPerSec);
+      configured = InitializePCMEncoded(m_init_state.uiSamplesPerSec);
       // TODO: wait for audio device startup
-      Sleep(100);
+      Sleep(250);
     }
     else
     {
       // Standard PCM data
-      configured = InitializePCM(iChannels, uiSamplesPerSec, uiBitsPerSample, channelMap);
+      configured = InitializePCM(m_init_state.iChannels, m_init_state.uiSamplesPerSec, m_init_state.uiBitsPerSample, m_init_state.channelMap);
       // TODO: wait for audio device startup
-      Sleep(100);
+      Sleep(250);
     }
     
     // No suitable output format was able to be configured
@@ -553,13 +834,15 @@ bool CCoreAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString&
   // Suspend rendering. We will start once we have some data.
   m_Pause = true;
   // Initialize our incoming data cache
-  m_pCache = new CSliceQueue(m_ChunkLen);
+  if (!m_pCache)
+    m_pCache = new CSliceQueue(m_ChunkLen);
 #ifdef _DEBUG
   // Set up the performance monitor
   m_PerfMon.Init(m_AvgBytesPerSec, 1000, CCoreAudioPerformance::FlagDefault);
   // Disable underrun detection for the first 2 seconds (after start and after resume)
   m_PerfMon.SetPreroll(2.0f);
 #endif
+  m_init_state.reinit = false;
   m_Initialized = true;
   m_DoRunout = 0;
   
@@ -569,20 +852,29 @@ bool CCoreAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString&
     "Renderer Configuration - Chunk Len: %u, Max Cache: %lu (%0.0fms).",
     m_ChunkLen, m_MaxCacheLen, 1000.0 *(float)m_MaxCacheLen/(float)m_AvgBytesPerSec);
   CLog::Log(LOGINFO, "CoreAudioRenderer::Initialize: Successfully configured audio output.");
-  
+
   return true;
 }
 
 bool CCoreAudioRenderer::Deinitialize()
 {
   VERIFY_INIT(true); // Not really a failure if we weren't initialized
-  
+
+#ifdef VERBOSE_DEBUG
+  AudioDeviceRemovePropertyListener(m_AudioDevice.GetId(), 0, false, kAudioDevicePropertyDeviceIsAlive, DeviceListenerProc);
+  AudioDeviceRemovePropertyListener(m_AudioDevice.GetId(), 0, false, kAudioDevicePropertyDeviceIsRunning, DeviceListenerProc);
+  AudioDeviceRemovePropertyListener(m_AudioDevice.GetId(), 0, false, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc);
+#endif
+
   // Stop rendering
   Stop();
-  // Reset our state
-  m_ChunkLen = 0;
-  m_MaxCacheLen = 0;
-  m_AvgBytesPerSec = 0;
+  // Reset our state but do not diddle internal vars if we are re-init'ing
+  if (!m_init_state.reinit)
+  {
+    m_ChunkLen = 0;
+    m_MaxCacheLen = 0;
+    m_AvgBytesPerSec = 0;
+  }
   if (m_Passthrough)
     m_AudioDevice.RemoveIOProc();
   m_AUCompressor.Close();
@@ -592,19 +884,40 @@ bool CCoreAudioRenderer::Deinitialize()
   m_OutputStream.Close();
   Sleep(10);
   m_AudioDevice.Close();
-  delete m_pCache;
-  m_pCache = NULL;
+  if (!m_init_state.reinit)
+  {
+    // do not blow the cache if we are just re-init'ing
+    delete m_pCache;
+    m_pCache = NULL;
+  }
   m_Initialized = false;
   m_DoRunout = 0;
   m_EnableVolumeControl = true;
   
-  g_audioContext.SetActiveDevice(CAudioContext::DEFAULT_DEVICE);
+  // do not diddle with active device if we are re-init'ing
+  if (!m_init_state.reinit)
+    g_audioContext.SetActiveDevice(CAudioContext::DEFAULT_DEVICE);
   
   CLog::Log(LOGINFO, "CoreAudioRenderer::Deinitialize: Renderer has been shut down.");
   
   return true;
 }
 
+bool CCoreAudioRenderer::Reinitialize()
+{
+  CSingleLock lock(m_init_csection);
+
+  m_init_state.reinit = true;
+  return Initialize(m_init_state.pCallback,
+    m_init_state.device,
+    m_init_state.iChannels,
+    m_init_state.channelMap,
+    m_init_state.uiSamplesPerSec,
+    m_init_state.uiBitsPerSample,
+    m_init_state.bResample,
+    m_init_state.bIsMusic,
+    m_init_state.bPassthrough);
+}
 //***********************************************************************************************
 // Transport control methods
 //***********************************************************************************************
@@ -714,8 +1027,9 @@ unsigned int CCoreAudioRenderer::GetSpace()
 
 unsigned int CCoreAudioRenderer::AddPackets(const void* data, DWORD len)
 {
-  VERIFY_INIT(0);
-  
+  if (!m_pCache)
+    return 0;
+
   // Require at least one 'chunk'. This allows us at least some measure of control over efficiency
   if (len < m_ChunkLen || m_pCache->GetTotalBytes() >= m_MaxCacheLen)
     return 0;
@@ -730,9 +1044,13 @@ unsigned int CCoreAudioRenderer::AddPackets(const void* data, DWORD len)
   // Update tracking variable
   m_PerfMon.ReportData(bytesUsed, 0);
 #endif
-  Resume();  // We have some data. Attmept to resume playback
+
+  //We have some data. Attempt to resume playback only if not trying to reinit.
+  if (!m_init_state.reinit)
+    Resume();  
   
-  return bytesUsed; // Number of bytes added to cache;
+  // Number of bytes added to cache;
+  return bytesUsed;
 }
 
 float CCoreAudioRenderer::GetDelay()
@@ -803,7 +1121,10 @@ OSStatus CCoreAudioRenderer::Render(AudioUnitRenderActionFlags* actionFlags, con
 OSStatus CCoreAudioRenderer::OnRender(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData)
 {
   if (!m_Initialized)
+  {
     CLog::Log(LOGERROR, "CCoreAudioRenderer::OnRender: Callback to de/unitialized renderer.");
+    ioData->mBuffers[m_OutputBufferIndex].mDataByteSize = 0;
+  }
   
   // Process the request
   // Data length requested, based on the input data format
@@ -829,9 +1150,8 @@ OSStatus CCoreAudioRenderer::OnRender(AudioUnitRenderActionFlags *ioActionFlags,
   }
   // Hard mute for formats that do not allow standard volume control. Throw away any actual data to keep the stream moving.
   if (!m_EnableVolumeControl && m_CurrentVolume <= VOLUME_MINIMUM)
-    ioData->mBuffers[m_OutputBufferIndex].mDataByteSize = 0;
-  else
-    ioData->mBuffers[m_OutputBufferIndex].mDataByteSize = bytesRead;
+    memset(ioData->mBuffers[m_OutputBufferIndex].mData, 0x00, bytesRead);
+  ioData->mBuffers[m_OutputBufferIndex].mDataByteSize = bytesRead;
   
 #ifdef _DEBUG
   // Calculate stats and perform a sanity check
@@ -888,7 +1208,7 @@ bool CCoreAudioRenderer::InitializePCM(UInt32 channels, UInt32 samplesPerSecond,
         hasLFE = true;
     }
     
-    // HACK: Fix broken channel layouts coming from some aac sources that include rear channel but no side channels.
+    // HACK: Fix broken channel layouts coming from some aac sources that include rear channels but no side channels.
     // 5.1 streams should include front and side channels. Rear channels are added by 6.1 and 7.1, so any 5.1 
     // source that claims to have rear channels is wrong.
     if (inputFormat.mChannelsPerFrame == 6 && hasLFE) // Check for 5.1 configuration (as best we can without getting too silly)
@@ -921,7 +1241,15 @@ bool CCoreAudioRenderer::InitializePCM(UInt32 channels, UInt32 samplesPerSecond,
     
     // Get User-Configured (XBMC) Speaker Configuration
     AudioChannelLayout guiLayout;
-    guiLayout.mChannelLayoutTag = g_LayoutMap[(PCMLayout)g_guiSettings.GetInt("audiooutput.channellayout")];
+    if (g_sysinfo.IsAppleTV())
+    {
+      // Force ATV1 to a 2.0 layout (that is all it knows), since it does not provide a usable channel layout
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::InitializePCM: AppleTV detected - Forcing channel layout to 2.0 (max available PCM channels)");  
+      guiLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo; 
+    }
+    else
+      guiLayout.mChannelLayoutTag = g_LayoutMap[(PCMLayout)g_guiSettings.GetInt("audiooutput.channellayout")];
+    
     CCoreAudioChannelLayout userLayout(guiLayout);
     CStdString strUserLayout;
     CLog::Log(LOGDEBUG, "CCoreAudioRenderer::InitializePCM: User-Configured Speaker Layout: %s", CCoreAudioChannelLayout::ChannelLayoutToString(*(AudioChannelLayout*)userLayout, strUserLayout));  
@@ -930,7 +1258,43 @@ bool CCoreAudioRenderer::InitializePCM(UInt32 channels, UInt32 samplesPerSecond,
     CCoreAudioChannelLayout deviceLayout;
     if (!m_AudioDevice.GetPreferredChannelLayout(deviceLayout))
       return false;
+        
+    // Detect devices with no Speaker Configuration
+    bool undefinedLayout = true;
+    for (UInt32 c = 0; c < deviceLayout.GetChannelCount(); c++)
+    {
+      // If this is a known channel, then we can't have an undefined layout
+      if (deviceLayout.GetChannelLabel(c) != kAudioChannelLabel_Unknown)
+      {
+        undefinedLayout = false;
+        break;
+      }
+    }
+    if (undefinedLayout)
+    {
+      AudioChannelLayoutTag newLayoutTag = kAudioChannelLayoutTag_UseChannelBitmap;
+      if (g_sysinfo.IsAppleTV()) // AppleTV is only Stereo
+        newLayoutTag = kAudioChannelLayoutTag_Stereo;
+      else  // AppleTV users cannot do this...
+      {
+        CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: The selected device (%s) does not have a speaker layout configured. Using the default layout.", m_AudioDevice.GetName());
+        CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: \tPlease go to Applications -> Utilities -> Audio MIDI Setup, and select 'Configure Speakers...'");
 
+        // Pick a default layout based on the number of channels
+        newLayoutTag = GetDefaultLayout(deviceLayout.GetChannelCount());
+        if (newLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap) // Undefined, give up...
+        {
+          CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: Unable to find a suitable default layout for this device.");
+          return false;
+        }
+      }
+      if (!deviceLayout.SetLayout(newLayoutTag))
+      {
+        CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: Unable to set channel layout from tag.");
+        return false;        
+      }
+    }
+    
     CStdString strOutLayout;
     CLog::Log(LOGDEBUG, "CCoreAudioRenderer::InitializePCM: Output Device Layout: %s", CCoreAudioChannelLayout::ChannelLayoutToString(*(AudioChannelLayout*)deviceLayout, strOutLayout));  
 
@@ -947,7 +1311,7 @@ bool CCoreAudioRenderer::InitializePCM(UInt32 channels, UInt32 samplesPerSecond,
     //    if (CCoreAudioChannelLayout::GetChannelCountForLayout(guiLayout) < CCoreAudioChannelLayout::GetChannelCountForLayout(deviceLayout))
     //      deviceLayout.CopyLayout(guiLayout);
     
-    // TODO: Skip matrix mixer if input/output are compatible
+    // TODO: Skip matrix mixer if input/output are compatible -> Add a IsPurePassthrough() method to the CCoreAudioMixMap class
 
     AudioChannelLayout* layoutCandidates[] = {(AudioChannelLayout*)deviceLayout, (AudioChannelLayout*)userLayout, NULL};
 
@@ -1036,11 +1400,14 @@ bool CCoreAudioRenderer::InitializePCM(UInt32 channels, UInt32 samplesPerSecond,
     }
     else
     {
+      CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: No matrix mixer configuration available - unmapped channels will be dropped");
       outputFormat = inputFormat; // We don't know how to map this...let CoreAudio handle it
     }    
   }
   else 
   {
+    if (allowMixing && !channelMap)
+      CLog::Log(LOGINFO, "CCoreAudioRenderer::InitializePCM: No channel map provided - extra channels will be dropped");
     outputFormat = inputFormat;
   }
   
@@ -1169,6 +1536,102 @@ bool CCoreAudioRenderer::InitializeEncoded(AudioDeviceID outputDevice, UInt32 sa
   return true;
 }
 
+OSStatus CCoreAudioRenderer::HardwareListenerProc(AudioHardwarePropertyID property, void *clientref)
+{
+  //CCoreAudioRenderer *m = (CCoreAudioRenderer*)clientref;
+  switch(property)
+  {
+    case kAudioHardwarePropertyDevices:
+      // An audio device has been added/removed to the system
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::HardwareListenerProc:kAudioHardwarePropertyDevices");
+      break;
+    case kAudioHardwarePropertyIsInitingOrExiting:
+      // HAL is either initializing or exiting the process.
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::HardwareListenerProc:kAudioHardwarePropertyIsInitingOrExiting");
+      break;
+    case kAudioHardwarePropertyDefaultOutputDevice:
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::HardwareListenerProc:kAudioHardwarePropertyDefaultOutputDevice");
+      break;
+    default:
+      break;
+  }
+
+  return noErr;
+}
+
+OSStatus CCoreAudioRenderer::DeviceListenerProc(AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, AudioDevicePropertyID inPropertyID, void *clientref)
+{
+  //CCoreAudioRenderer *m = (CCoreAudioRenderer*)clientref;
+  switch(inPropertyID)
+  {
+    case kAudioDevicePropertyDeviceIsAlive:
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::DeviceListenerProc:kAudioDevicePropertyDeviceIsAlive");
+                       break;
+    case kAudioDevicePropertyDeviceIsRunning:
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::DeviceListenerProc:kAudioDevicePropertyDeviceIsRunning, "
+        "inDevice(0x%x), inChannel(%d), inDevice(%d)", inDevice, inChannel, isInput);
+      break;
+    case kAudioDevicePropertyStreamConfiguration:
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::DeviceListenerProc:kAudioDevicePropertyStreamConfiguration, "
+        "inDevice(0x%x), inChannel(%d), inDevice(%d)", inDevice, inChannel, isInput);
+      break;
+    default:
+      break;
+  }
+       return noErr;
+}
+
+void CCoreAudioRenderer::OnLostDevice()
+{
+  if (g_guiSettings.GetBool("videoplayer.adjustrefreshrate"))
+  {
+    CStdString deviceName;
+    m_AudioDevice.GetName(deviceName);
+    if (deviceName.Equals("HDMI"))
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::OnLostDevice");
+  }
+}
+
+void CCoreAudioRenderer::OnResetDevice()
+{
+  if (g_guiSettings.GetBool("videoplayer.adjustrefreshrate"))
+  {
+    CStdString deviceName;
+    m_AudioDevice.GetName(deviceName);
+    if (deviceName.Equals("HDMI"))
+    {
+      Reinitialize();
+      CLog::Log(LOGDEBUG, "CCoreAudioRenderer::OnResetDevice");
+    }
+  }
+}
+
+AudioChannelLayoutTag CCoreAudioRenderer::GetDefaultLayout(UInt32 channelCount)
+{
+  switch(channelCount)
+  {
+    case 1:    
+      return kAudioChannelLayoutTag_Mono; // 1.0 
+    case 2:    
+      return kAudioChannelLayoutTag_Stereo; // 2.0
+    case 3:    
+      return kAudioChannelLayoutTag_DVD_4; // 2.1
+    case 4:    
+      return kAudioChannelLayoutTag_DVD_10; // 3.1
+    case 5:    
+      return kAudioChannelLayoutTag_DVD_6; // 4.1
+    case 6:    
+      return kAudioChannelLayoutTag_MPEG_5_1_A; // 5.1
+    case 7:
+      return kAudioChannelLayoutTag_AudioUnit_7_0; // 7.0
+    case 8:    
+      return kAudioChannelLayoutTag_MPEG_7_1_A; // 7.1
+    case 0:    
+    default:
+      return kAudioChannelLayoutTag_UseChannelBitmap; // Basically 'Undefined'
+  }
+}
+
 #endif
 #endif
 
index 6664240..3b06a51 100644 (file)
@@ -26,6 +26,7 @@
 #include "IAudioRenderer.h"
 #include "threads/Event.h"
 #include "threads/LockFree.h"
+#include "guilib/DispResource.h"
 
 struct audio_slice
 {
@@ -103,30 +104,32 @@ class CCoreAudioMixMap
 {
 public:
   CCoreAudioMixMap();
-  CCoreAudioMixMap(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout);
+  CCoreAudioMixMap(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout, bool forceExplicit=false);
   virtual ~CCoreAudioMixMap();
   operator Float32*() const {return m_pMap;} 
   const Float32* GetBuffer() {return m_pMap;}
   UInt32 GetInputChannels() {return m_inChannels;}
   UInt32 GetOutputChannels() {return m_outChannels;}  
   bool IsValid() {return m_isValid;}
-  void Rebuild(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout);
+  void Rebuild(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout, bool forceExplicit=false);
 private:
+  bool BuildExplicit(AudioChannelLayout& inLayout, AudioChannelLayout& outLayout);
   Float32* m_pMap;
   UInt32 m_inChannels;
   UInt32 m_outChannels;
   bool m_isValid;
 };
 
-class CCoreAudioRenderer : public IAudioRenderer, public ICoreAudioSource
+class CCoreAudioRenderer : public IAudioRenderer, public ICoreAudioSource, public IDispResource 
 {
 public:
   CCoreAudioRenderer();
   virtual ~CCoreAudioRenderer();
   virtual unsigned int GetChunkLen();
   virtual float GetDelay();
-  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, bool bPassthrough = false);
+  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, EEncoded encoded = IAudioRenderer::ENCODED_NONE);
   virtual bool Deinitialize();
+          bool Reinitialize();
   virtual unsigned int AddPackets(const void* data, unsigned int len);
   virtual unsigned int GetSpace();
   virtual float GetCacheTime();
@@ -153,6 +156,8 @@ public:
   // AudioUnit Rendering Connection Point (called by down-stream sinks)
   virtual OSStatus Render(AudioUnitRenderActionFlags* actionFlags, const AudioTimeStamp* pTimeStamp, UInt32 busNumber, UInt32 frameCount, AudioBufferList* pBufList);
   
+  virtual void OnLostDevice();
+  virtual void OnResetDevice();
 private:
   OSStatus OnRender(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData);
   static OSStatus DirectRenderCallback(AudioDeviceID inDevice, const AudioTimeStamp* inNow, const AudioBufferList* inInputData, const AudioTimeStamp* inInputTime, AudioBufferList* outOutputData, const AudioTimeStamp* inOutputTime, void* inClientData);
@@ -160,8 +165,10 @@ private:
   bool InitializePCM(UInt32 channels, UInt32 samplesPerSecond, UInt32 bitsPerSample, enum PCMChannels *channelMap, bool allowMixing = true);
   bool InitializePCMEncoded(UInt32 sampleRate);
   
-  bool CreateMixMap();
-  
+  AudioChannelLayoutTag GetDefaultLayout(UInt32 channelCount);
+  static OSStatus HardwareListenerProc(AudioHardwarePropertyID property, void *clientref);
+  static OSStatus DeviceListenerProc(AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, AudioDevicePropertyID inPropertyID, void *clientref);
+
   bool m_Pause;
   bool m_Initialized; // Prevent multiple init/deinit
   
@@ -195,6 +202,23 @@ private:
   // Thread synchronization
   CEvent m_RunoutEvent;
   long m_DoRunout;
+  // saved Initialize vars
+  struct init_state
+  {
+    bool              reinit;
+    CStdString        device;
+    int               iChannels;
+    enum PCMChannels *channelMap;
+    unsigned int      uiSamplesPerSec;
+    unsigned int      uiBitsPerSample;
+    bool              bResample;
+    bool              bIsMusic;
+    EEncoded          bPassthrough;
+    IAudioCallback   *pCallback;
+  };
+  CCriticalSection m_init_csection;
+  init_state m_init_state;
+
 };
 
 #endif
index 098de99..e1342fd 100644 (file)
@@ -41,9 +41,18 @@ typedef std::vector<AudioSink> AudioSinkList;
 class IAudioRenderer
 {
 public:
+  enum EEncoded {
+    ENCODED_NONE = 0,
+    ENCODED_IEC61937_AC3,
+    ENCODED_IEC61937_EAC3,
+    ENCODED_IEC61937_DTS,
+    ENCODED_IEC61937_MPEG,
+    ENCODED_IEC61937_UNKNOWN,
+  };
+
   IAudioRenderer() {};
   virtual ~IAudioRenderer() {};
-  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, bool bPassthrough = false) = 0;
+  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, EEncoded encoded = ENCODED_NONE) = 0;
   virtual void UnRegisterAudioCallback() = 0;
   virtual void RegisterAudioCallback(IAudioCallback* pCallback) = 0;
   virtual float GetDelay() = 0;
index dfdf935..cb72e67 100644 (file)
@@ -55,7 +55,7 @@ CIOSAudioRenderer::~CIOSAudioRenderer()
 // Initialization
 //***********************************************************************************************
 
-bool CIOSAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic /*Useless Legacy Parameter*/, bool bPassthrough)
+bool CIOSAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic /*Useless Legacy Parameter*/, EEncoded bPassthrough)
 {
   // Limit to 2.0. It is only used for anloge audio.
   static enum PCMChannels IOSChannelMap[2] =
@@ -178,6 +178,8 @@ bool CIOSAudioRenderer::Initialize(IAudioCallback* pCallback, const CStdString&
 
   m_DoRunout = 0;
 
+  m_drc      = 0;
+
   return true;
 }
 
@@ -300,7 +302,7 @@ unsigned int CIOSAudioRenderer::AddPackets(const void* data, DWORD len)
 
     uint8_t outData[length];
     // remap the audio channels using the frame count
-    m_remap.Remap((void*)data, outData, frames);
+    m_remap.Remap((void*)data, outData, frames, m_drc);
 
     status = m_Buffer->Write(outData, length);
     // return the number of input bytes we accepted
@@ -325,7 +327,8 @@ float CIOSAudioRenderer::GetDelay()
 
 float CIOSAudioRenderer::GetCacheTime()
 {
-  return (float)(m_BufferLen - GetSpace()) / (float)m_BytesPerSec;
+  unsigned int nBufferLenFull = (m_BufferLen / m_Channels) * m_DataChannels;
+  return (float)(nBufferLenFull - GetSpace()) / (float)m_BytesPerSec;
 }
 
 float CIOSAudioRenderer::GetCacheTotal()
index 54a8216..5b4b072 100644 (file)
@@ -35,7 +35,7 @@ class CIOSAudioRenderer : public IAudioRenderer
     virtual ~CIOSAudioRenderer();
     virtual unsigned int GetChunkLen();
     virtual float GetDelay();
-    virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, bool bPassthrough = false);
+    virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, EEncoded encoded = IAudioRenderer::ENCODED_NONE);
     virtual bool Deinitialize();
     virtual void Flush();
     virtual unsigned int AddPackets(const void* data, unsigned int len);
@@ -49,6 +49,7 @@ class CIOSAudioRenderer : public IAudioRenderer
     virtual long GetCurrentVolume() const;
     virtual void Mute(bool bMute);
     virtual bool SetCurrentVolume(long nVolume);
+    virtual void SetDynamicRangeCompression(long drc) { m_drc = drc; }
     virtual void WaitCompletion();
 
     // Unimplemented IAudioRenderer methods
@@ -93,6 +94,8 @@ class CIOSAudioRenderer : public IAudioRenderer
     unsigned int m_Channels;
     bool m_Passthrough;
 
+    long m_drc;
+
   };
 
 #endif
index 9c9603d..20e6125 100644 (file)
@@ -22,6 +22,7 @@
 #include "threads/SystemClock.h"
 #include "NullDirectSound.h"
 #include "guilib/AudioContext.h"
+#include "guilib/LocalizeStrings.h"
 #include "utils/log.h"
 #include "utils/TimeUtils.h"
 #include "dialogs/GUIDialogKaiToast.h"
@@ -42,7 +43,7 @@ void CNullDirectSound::DoWork()
 CNullDirectSound::CNullDirectSound()
 {
 }
-bool CNullDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, bool bPassthrough)
+bool CNullDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, EEncoded encoded)
 {
   CLog::Log(LOGERROR,"Creating a Null Audio Renderer, Check your audio settings as this should not happen");
   if (iChannels == 0)
@@ -52,7 +53,7 @@ bool CNullDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& d
   g_audioContext.SetupSpeakerConfig(iChannels, bAudioOnAllSpeakers, bIsMusic);
   g_audioContext.SetActiveDevice(CAudioContext::DIRECTSOUND_DEVICE);
 
-  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, "Failed to initialize audio device", "Check your audiosettings", TOAST_DISPLAY_TIME, false);
+  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(34402), g_localizeStrings.Get(34403), TOAST_DISPLAY_TIME, false);
   m_timePerPacket = 1.0f / (float)(iChannels*(uiBitsPerSample/8) * uiSamplesPerSec);
   m_packetsSent = 0;
   m_paused = 0;
index 2fcda5a..7ba91f2 100644 (file)
@@ -41,7 +41,7 @@ public:
   virtual float GetDelay();
   virtual float GetCacheTime();
   CNullDirectSound();
-  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, bool bPassthrough = false);
+  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, EEncoded encoded = IAudioRenderer::ENCODED_NONE);
   virtual ~CNullDirectSound();
 
   virtual unsigned int AddPackets(const void* data, unsigned int len);
index c151187..14cf759 100644 (file)
@@ -119,6 +119,7 @@ static void StreamLatencyUpdateCallback(pa_stream *s, void *userdata)
 
 struct SinkInfoStruct
 {
+  bool passthrough;
   AudioSinkList *list;
   pa_threaded_mainloop *mainloop;
 };
@@ -126,13 +127,36 @@ struct SinkInfoStruct
 static void SinkInfo(pa_context *c, const pa_sink_info *i, int eol, void *userdata)
 {
   SinkInfoStruct *sinkStruct = (SinkInfoStruct *)userdata;
+
   if (i && i->name)
   {
-    CStdString descr = i->description + CStdString(" (PulseAudio)");
-    CStdString sink;
-    sink.Format("pulse:%s@default", i->name);
-    sinkStruct->list->push_back(AudioSink(descr, sink));
-    CLog::Log(LOGDEBUG, "PulseAudio: Found %s with devicestring %s", descr.c_str(), sink.c_str());
+    bool       add  = false;
+    if(sinkStruct->passthrough)
+    {
+#if PA_CHECK_VERSION(1,0,0)
+      for(int idx = 0; idx < i->n_formats; ++idx)
+      {
+        if(!pa_format_info_is_pcm(i->formats[idx]))
+        {
+          add = true;
+          break;
+        }
+      }
+#endif
+    }
+    else
+      add = true;
+
+    if(add)
+    {
+      CStdString desc, sink;
+      if(sinkStruct->list->size() == 0)
+        sinkStruct->list->push_back(AudioSink(g_localizeStrings.Get(409) + " (PulseAudio)", "pulse:default@default"));
+      desc.Format("%s  (PulseAudio)", i->description);
+      sink.Format("pulse:%s@default", i->name);
+      sinkStruct->list->push_back(AudioSink(desc, sink));
+      CLog::Log(LOGDEBUG, "PulseAudio: Found %s with devicestring %s", desc.c_str(), sink.c_str());
+    }
   }
 
   pa_threaded_mainloop_signal(sinkStruct->mainloop, 0);
@@ -144,13 +168,13 @@ CPulseAudioDirectSound::CPulseAudioDirectSound()
 {
 }
 
-bool CPulseAudioDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels* channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, bool bPassthrough)
+bool CPulseAudioDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels* channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, EEncoded encoded)
 {
   m_remap.Reset();
   m_uiDataChannels = iChannels;
   enum PCMChannels* outLayout = NULL;
 
-  if (!bPassthrough && channelMap)
+  if (encoded == ENCODED_NONE && channelMap)
   {
     /* set the input format, and get the channel layout so we know what we need to open */
     outLayout = m_remap.SetInputFormat(iChannels, channelMap, uiBitsPerSample / 8, uiSamplesPerSec);
@@ -179,7 +203,7 @@ bool CPulseAudioDirectSound::Initialize(IAudioCallback* pCallback, const CStdStr
   m_uiSamplesPerSec = uiSamplesPerSec;
   m_uiBufferSize = 0;
   m_uiBitsPerSample = uiBitsPerSample;
-  m_bPassthrough = bPassthrough;
+  m_bPassthrough = encoded == ENCODED_NONE ? false : true;
   m_uiBytesPerSecond = uiSamplesPerSec * (uiBitsPerSample / 8) * iChannels;
   m_drc = 0;
 
@@ -188,12 +212,14 @@ bool CPulseAudioDirectSound::Initialize(IAudioCallback* pCallback, const CStdStr
   m_dwPacketSize = iChannels*(uiBitsPerSample/8)*512;
   m_dwNumPackets = 16;
 
+#if !PA_CHECK_VERSION(1,0,0)
   /* Open the device */
   if (m_bPassthrough)
   {
     CLog::Log(LOGWARNING, "PulseAudio: Does not support passthrough");
     return false;
   }
+#endif
 
   std::vector<CStdString> hostdevice;
   CUtil::Tokenize(device, hostdevice, "@");
@@ -208,18 +234,8 @@ bool CPulseAudioDirectSound::Initialize(IAudioCallback* pCallback, const CStdStr
 
   pa_threaded_mainloop_lock(m_MainLoop);
 
-  struct pa_channel_map map;
-
-  m_SampleSpec.channels = iChannels;
-  m_SampleSpec.rate = uiSamplesPerSec;
-  m_SampleSpec.format = PA_SAMPLE_S16NE;
 
-  if (!pa_sample_spec_valid(&m_SampleSpec))
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Invalid sample spec");
-    Deinitialize();
-    return false;
-  }
+  struct pa_channel_map map;
 
   // Build the channel map, we dont need to remap, but we still need PCMRemap to handle mono to dual mono stereo
   map.channels = iChannels;
@@ -252,11 +268,49 @@ bool CPulseAudioDirectSound::Initialize(IAudioCallback* pCallback, const CStdStr
     }
   }
   else
-    pa_channel_map_init_auto(&map, m_SampleSpec.channels, PA_CHANNEL_MAP_ALSA); 
+    pa_channel_map_init_auto(&map, m_uiChannels, PA_CHANNEL_MAP_ALSA);
 
-  pa_cvolume_reset(&m_Volume, m_SampleSpec.channels);
+  pa_cvolume_reset(&m_Volume, m_uiChannels);
 
-  if ((m_Stream = pa_stream_new(m_Context, "audio stream", &m_SampleSpec, &map)) == NULL)
+  if(m_bPassthrough)
+  {
+#if PA_CHECK_VERSION(1,0,0)
+    pa_format_info *info[1];
+    info[0] = pa_format_info_new();
+    switch(encoded)
+    {
+      case ENCODED_IEC61937_AC3 : info[0]->encoding = PA_ENCODING_AC3_IEC61937 ; break;
+      case ENCODED_IEC61937_DTS : info[0]->encoding = PA_ENCODING_DTS_IEC61937 ; break;
+      case ENCODED_IEC61937_EAC3: info[0]->encoding = PA_ENCODING_EAC3_IEC61937; break;
+      case ENCODED_IEC61937_MPEG: info[0]->encoding = PA_ENCODING_MPEG_IEC61937; break;
+      default:                    info[0]->encoding = PA_ENCODING_INVALID      ; break;
+    }
+    pa_format_info_set_rate(info[0], m_uiSamplesPerSec);
+    pa_format_info_set_channels(info[0], m_uiChannels);
+    pa_format_info_set_sample_format(info[0], PA_SAMPLE_S16NE);
+    m_Stream = pa_stream_new_extended(m_Context, "audio stream", info, 1, NULL);
+    pa_format_info_free(info[0]);
+#endif
+  }
+  else
+  {
+
+    pa_sample_spec spec;
+    spec.channels = iChannels;
+    spec.rate     = uiSamplesPerSec;
+    spec.format   = PA_SAMPLE_S16NE;
+
+    if (!pa_sample_spec_valid(&spec))
+    {
+      CLog::Log(LOGERROR, "PulseAudio: Invalid sample spec");
+      Deinitialize();
+      return false;
+    }
+
+    m_Stream = pa_stream_new(m_Context, "audio stream", &spec, &map);
+  }
+
+  if (m_Stream == NULL)
   {
     CLog::Log(LOGERROR, "PulseAudio: Could not create a stream");
     pa_threaded_mainloop_unlock(m_MainLoop);
@@ -478,9 +532,9 @@ bool CPulseAudioDirectSound::SetCurrentVolume(long nVolume)
   pa_threaded_mainloop_lock(m_MainLoop);
   pa_volume_t volume = pa_sw_volume_from_dB((float)nVolume*1.5f / 200.0f);
   if ( nVolume <= VOLUME_MINIMUM )
-    pa_cvolume_mute(&m_Volume, m_SampleSpec.channels);
+    pa_cvolume_mute(&m_Volume, m_uiChannels);
   else
-    pa_cvolume_set(&m_Volume, m_SampleSpec.channels, volume);
+    pa_cvolume_set(&m_Volume, m_uiChannels, volume);
   pa_operation *op = pa_context_set_sink_input_volume(m_Context, pa_stream_get_index(m_Stream), &m_Volume, NULL, NULL);
   if (op == NULL)
     CLog::Log(LOGERROR, "PulseAudio: Failed to set volume");
@@ -621,18 +675,15 @@ void CPulseAudioDirectSound::EnumerateAudioSinks(AudioSinkList& vAudioSinks, boo
     return;
   }
 
-  if (!passthrough)
-  {
     pa_threaded_mainloop_lock(mainloop);
 
     SinkInfoStruct sinkStruct;
+    sinkStruct.passthrough = passthrough;
     sinkStruct.mainloop = mainloop;
     sinkStruct.list = &vAudioSinks;
-    vAudioSinks.push_back(AudioSink(g_localizeStrings.Get(409) + " (PulseAudio)", "pulse:default@default"));
     WaitForOperation(pa_context_get_sink_info_list(context,    SinkInfo, &sinkStruct), mainloop, "EnumerateAudioSinks");
 
     pa_threaded_mainloop_unlock(mainloop);
-  }
 
   if (mainloop)
     pa_threaded_mainloop_stop(mainloop);
index 9a53fb8..440bd6f 100644 (file)
@@ -46,7 +46,7 @@ public:
   virtual float GetCacheTime();
   virtual float GetCacheTotal();
   CPulseAudioDirectSound();
-  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, bool bPassthrough = false);
+  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, EEncoded encoded = IAudioRenderer::ENCODED_NONE);
   virtual ~CPulseAudioDirectSound();
 
   virtual unsigned int AddPackets(const void* data, unsigned int len);
@@ -91,7 +91,6 @@ private:
   bool m_bPassthrough;
 
   pa_stream *m_Stream;
-  pa_sample_spec m_SampleSpec;
   pa_cvolume m_Volume;
 
   pa_context *m_Context;
index 00c2d1f..1ac8732 100644 (file)
@@ -83,16 +83,12 @@ CWin32DirectSound::CWin32DirectSound() :
 {
 }
 
-bool CWin32DirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels* channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, bool bAudioPassthrough)
+bool CWin32DirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels* channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, EEncoded bAudioPassthrough)
 {
   m_uiDataChannels = iChannels;
 
-  if(!bAudioPassthrough)
+  if(!bAudioPassthrough && channelMap)
   {
-    //If no channel map is specified, use the default.
-    if(!channelMap)
-      channelMap = (PCMChannels *)dsound_default_channel_layout[iChannels - 1];
-
     PCMChannels *outLayout = m_remap.SetInputFormat(iChannels, channelMap, uiBitsPerSample / 8, uiSamplesPerSec);
 
     for(iChannels = 0; outLayout[iChannels] != PCM_INVALID;) ++iChannels;
@@ -115,7 +111,7 @@ bool CWin32DirectSound::Initialize(IAudioCallback* pCallback, const CStdString&
   m_uiChannels = iChannels;
   m_uiSamplesPerSec = uiSamplesPerSec;
   m_uiBitsPerSample = uiBitsPerSample;
-  m_Passthrough = bAudioPassthrough;
+  m_Passthrough = (bAudioPassthrough != ENCODED_NONE);
 
   m_nCurrentVolume = g_settings.m_nVolumeLevel;
   m_drc = 0;
@@ -127,7 +123,7 @@ bool CWin32DirectSound::Initialize(IAudioCallback* pCallback, const CStdString&
   wfxex.Format.cbSize          =  sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
   wfxex.Format.nChannels       = iChannels;
   wfxex.Format.nSamplesPerSec  = uiSamplesPerSec;
-  if (bAudioPassthrough == true)
+  if (bAudioPassthrough)
   {
     wfxex.dwChannelMask          = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT;
     wfxex.Format.wFormatTag      = WAVE_FORMAT_DOLBY_AC3_SPDIF;
index 61b8de9..b8dece3 100644 (file)
@@ -45,7 +45,7 @@ public:
   virtual float GetCacheTime();
   virtual float GetCacheTotal();
   CWin32DirectSound();
-  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels* channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, bool bPassthrough = false);
+  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels* channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, EEncoded encoded = IAudioRenderer::ENCODED_NONE);
   virtual ~CWin32DirectSound();
 
   virtual unsigned int AddPackets(const void* data, unsigned int len);
index 6734c93..d5b383a 100644 (file)
@@ -87,7 +87,7 @@ CWin32WASAPI::CWin32WASAPI() :
 {
 }
 
-bool CWin32WASAPI::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, bool bAudioPassthrough)
+bool CWin32WASAPI::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic, EEncoded bAudioPassthrough)
 {
   CLog::Log(LOGDEBUG, __FUNCTION__": endpoint device %s", device.c_str());
 
@@ -107,12 +107,8 @@ bool CWin32WASAPI::Initialize(IAudioCallback* pCallback, const CStdString& devic
 
   int layoutChannels = 0;
 
-  if(!bAudioPassthrough)
+  if(!bAudioPassthrough && channelMap)
   {
-    //If no channel map is specified, use the default.
-    if(!channelMap)
-      channelMap = (PCMChannels *)wasapi_default_channel_layout[iChannels - 1];
-
     PCMChannels *outLayout = m_remap.SetInputFormat(iChannels, channelMap, uiBitsPerSample / 8, uiSamplesPerSec);
 
     for(PCMChannels *channel = outLayout; *channel != PCM_INVALID; channel++)
@@ -140,7 +136,7 @@ bool CWin32WASAPI::Initialize(IAudioCallback* pCallback, const CStdString& devic
   m_bMuting = false;
   m_uiChannels = iChannels;
   m_uiBitsPerSample = uiBitsPerSample;
-  m_bPassthrough = bAudioPassthrough;
+  m_bPassthrough = (bAudioPassthrough != ENCODED_NONE);
 
   m_nCurrentVolume = g_settings.m_nVolumeLevel;
   m_pcmAmplifier.SetVolume(m_nCurrentVolume);
@@ -153,7 +149,7 @@ bool CWin32WASAPI::Initialize(IAudioCallback* pCallback, const CStdString& devic
   wfxex.Format.cbSize          =  sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
   wfxex.Format.nChannels       = layoutChannels;
   wfxex.Format.nSamplesPerSec  = uiSamplesPerSec;
-  if (bAudioPassthrough == true
+  if (bAudioPassthrough) 
   {
     wfxex.dwChannelMask          = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT;
     wfxex.Format.wFormatTag      = WAVE_FORMAT_DOLBY_AC3_SPDIF;
@@ -418,7 +414,7 @@ unsigned int CWin32WASAPI::AddPackets(const void* data, unsigned int len)
 {
   CSingleLock lock (m_critSection);
 
-  if (!m_bIsAllocated)
+  if (!m_bIsAllocated || m_bPause)
     return 0;
 
   DWORD dwFlags = m_bMuting || m_nCurrentVolume == VOLUME_MINIMUM ? AUDCLNT_BUFFERFLAGS_SILENT : 0; 
index fc0267c..7fd8287 100644 (file)
@@ -47,7 +47,7 @@ public:
   virtual float GetDelay();
   virtual float GetCacheTime();
   virtual float GetCacheTotal();
-  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, bool bAudioPassthrough=false);
+  virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, enum PCMChannels *channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, bool bIsMusic=false, EEncoded encoded = IAudioRenderer::ENCODED_NONE);
 
   virtual unsigned int AddPackets(const void* data, unsigned int len);
   virtual unsigned int GetSpace();
index 3d0c2e1..b7b23e1 100644 (file)
@@ -156,7 +156,7 @@ int DllLoader::Parse()
   int iResult = 0;
 
   CStdString strFileName= GetFileName();
-  FILE* fp = fopen_utf8(_P(strFileName).c_str(), "rb");
+  FILE* fp = fopen_utf8(CSpecialProtocol::TranslatePath(strFileName).c_str(), "rb");
 
   if (fp)
   {
index a3f6c5d..7f5129f 100644 (file)
@@ -22,9 +22,8 @@
 #ifndef LIBRARY_LOADER
 #define LIBRARY_LOADER
 
-#ifndef _LINUX
-#include "system.h" // WIN32INCLUDES - needed for HMODULE
-#else
+#include "system.h"
+#ifdef _LINUX
 #include "PlatformDefs.h"
 #endif
 
index e201074..97bbd37 100644 (file)
@@ -43,7 +43,7 @@ bool SoLoader::Load()
   if (m_soHandle != NULL)
     return true;
 
-  CStdString strFileName= _P(GetFileName());
+  CStdString strFileName= CSpecialProtocol::TranslatePath(GetFileName());
   int flags = RTLD_LAZY;
   if (m_bGlobal) flags |= RTLD_GLOBAL;
   if (strFileName == "xbmc.so")
index a7af019..a7e17a9 100644 (file)
@@ -158,7 +158,7 @@ bool Win32DllLoader::Load()
   CStdString strFileName = GetFileName();
 
   CStdStringW strDllW;
-  g_charsetConverter.utf8ToW(_P(strFileName), strDllW);
+  g_charsetConverter.utf8ToW(CSpecialProtocol::TranslatePath(strFileName), strDllW);
   m_dllHandle = LoadLibraryExW(strDllW.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
   if (!m_dllHandle)
   {
@@ -166,7 +166,7 @@ bool Win32DllLoader::Load()
     DWORD dw = GetLastError(); 
 
     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, 0, (LPTSTR) &lpMsgBuf, 0, NULL );
-    CLog::Log(LOGERROR, "%s: Failed to load %s with error %d:%s", __FUNCTION__, _P(strFileName).c_str(), dw, lpMsgBuf);
+    CLog::Log(LOGERROR, "%s: Failed to load %s with error %d:%s", __FUNCTION__, CSpecialProtocol::TranslatePath(strFileName).c_str(), dw, lpMsgBuf);
     LocalFree(lpMsgBuf);
     return false;
   }
@@ -234,7 +234,7 @@ bool Win32DllLoader::HasSymbols()
 void Win32DllLoader::OverrideImports(const CStdString &dll)
 {
   CStdStringW strdllW;
-  g_charsetConverter.utf8ToW(_P(dll), strdllW, false);
+  g_charsetConverter.utf8ToW(CSpecialProtocol::TranslatePath(dll), strdllW, false);
   BYTE* image_base = (BYTE*)GetModuleHandleW(strdllW.c_str());
 
   if (!image_base)
@@ -329,7 +329,7 @@ bool Win32DllLoader::NeedsHooking(const char *dllName)
     }
   }
   CStdStringW strdllNameW;
-  g_charsetConverter.utf8ToW(_P(dllName), strdllNameW, false);
+  g_charsetConverter.utf8ToW(CSpecialProtocol::TranslatePath(dllName), strdllNameW, false);
   HMODULE hModule = GetModuleHandleW(strdllNameW.c_str());
   wchar_t filepathW[MAX_PATH];
   GetModuleFileNameW(hModule, filepathW, MAX_PATH);
@@ -337,9 +337,9 @@ bool Win32DllLoader::NeedsHooking(const char *dllName)
   g_charsetConverter.wToUTF8(filepathW, dllPath);
 
   // compare this filepath with some special directories
-  CStdString xbmcPath = _P("special://xbmc");
-  CStdString homePath = _P("special://home");
-  CStdString tempPath = _P("special://temp");
+  CStdString xbmcPath = CSpecialProtocol::TranslatePath("special://xbmc");
+  CStdString homePath = CSpecialProtocol::TranslatePath("special://home");
+  CStdString tempPath = CSpecialProtocol::TranslatePath("special://temp");
   return ((strncmp(xbmcPath.c_str(), dllPath.c_str(), xbmcPath.GetLength()) == 0) ||
     (strncmp(homePath.c_str(), dllPath.c_str(), homePath.GetLength()) == 0) ||
     (strncmp(tempPath.c_str(), dllPath.c_str(), tempPath.GetLength()) == 0));
index fd7ef79..dee70c1 100644 (file)
@@ -277,6 +277,7 @@ extern "C" DWORD WINAPI dllGetModuleFileNameA(HMODULE hModule, LPSTR lpFilename,
   if (sName)
   {
     strncpy(lpFilename, sName, nSize);
+    lpFilename[nSize] = 0;
     return strlen(lpFilename);
   }
 
index 13a23e2..0493bb7 100644 (file)
@@ -168,12 +168,12 @@ extern "C" HANDLE WINAPI dllFindFirstFileA(LPCTSTR lpFileName, LPWIN32_FIND_DATA
 #ifdef _WIN32
   struct _WIN32_FIND_DATAW FindFileDataW;
   CStdStringW strwfile;
-  g_charsetConverter.utf8ToW(_P(p), strwfile, false);
+  g_charsetConverter.utf8ToW(CSpecialProtocol::TranslatePath(p), strwfile, false);
   HANDLE res = FindFirstFileW(strwfile.c_str(), &FindFileDataW);
   if (res != INVALID_HANDLE_VALUE)
     to_WIN32_FIND_DATA(&FindFileDataW, lpFindFileData);
 #else
-  HANDLE res = FindFirstFile(_P(p).c_str(), lpFindFileData);
+  HANDLE res = FindFirstFile(CSpecialProtocol::TranslatePath(p).c_str(), lpFindFileData);
 #endif
   free(p);
   return res;
@@ -891,7 +891,11 @@ extern "C" int WINAPI dllMultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCST
     destinationBuffer = (LPWSTR)malloc(destinationBufferSize * sizeof(WCHAR));
   }
 
+#ifdef _WIN32
   int ret = MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, destinationBuffer, destinationBufferSize);
+#else
+  int ret = 0;
+#endif
 
   if (ret > 0)
   {
@@ -929,7 +933,11 @@ extern "C" int WINAPI dllWideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWS
     destinationBuffer = (LPSTR)malloc(destinationBufferSize * sizeof(char));
   }
 
+#ifdef _WIN32
   int ret = WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, destinationBuffer, destinationBufferSize, lpDefaultChar, lpUsedDefaultChar);
+#else
+  int ret = 0;
+#endif
 
   if (ret > 0)
   {
@@ -986,7 +994,7 @@ extern "C" HANDLE WINAPI dllCreateFileA(
     IN HANDLE hTemplateFile
     )
 {
-  return CreateFileA(_P(lpFileName), dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
+  return CreateFileA(CSpecialProtocol::TranslatePath(lpFileName), dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
 }
 
 extern "C" BOOL WINAPI dllLockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOffBytesToLockLow, DWORD nNumberOffBytesToLockHigh)
index 2fbeb31..076862d 100644 (file)
@@ -148,15 +148,23 @@ extern "C" void __stdcall init_emu_environ()
   {
     // using external python, it's build looking for xxx/lib/python2.6
     // so point it to frameworks which is where python2.6 is located
-    dll_putenv(string("PYTHONPATH=" + _P("special://frameworks")).c_str());
-    dll_putenv(string("PYTHONHOME=" + _P("special://frameworks")).c_str());
-    dll_putenv(string("PATH=.;" + _P("special://xbmc") + ";" + _P("special://frameworks")).c_str());
+    dll_putenv(string("PYTHONPATH=" +
+      CSpecialProtocol::TranslatePath("special://frameworks")).c_str());
+    dll_putenv(string("PYTHONHOME=" +
+      CSpecialProtocol::TranslatePath("special://frameworks")).c_str());
+    dll_putenv(string("PATH=.;" +
+      CSpecialProtocol::TranslatePath("special://xbmc") + ";" +
+      CSpecialProtocol::TranslatePath("special://frameworks")).c_str());
   }
   else
   {
-    dll_putenv(string("PYTHONPATH=" + _P("special://xbmc/system/python/DLLs") + ";" + _P("special://xbmc/system/python/Lib")).c_str());
-    dll_putenv(string("PYTHONHOME=" + _P("special://xbmc/system/python")).c_str());
-    dll_putenv(string("PATH=.;" + _P("special://xbmc") + ";" + _P("special://xbmc/system/python")).c_str());
+    dll_putenv(string("PYTHONPATH=" +
+      CSpecialProtocol::TranslatePath("special://xbmc/system/python/DLLs") + ";" +
+      CSpecialProtocol::TranslatePath("special://xbmc/system/python/Lib")).c_str());
+    dll_putenv(string("PYTHONHOME=" +
+      CSpecialProtocol::TranslatePath("special://xbmc/system/python")).c_str());
+    dll_putenv(string("PATH=.;" + CSpecialProtocol::TranslatePath("special://xbmc") + ";" +
+      CSpecialProtocol::TranslatePath("special://xbmc/system/python")).c_str());
   }
   //dll_putenv("PYTHONCASEOK=1");
   //dll_putenv("PYTHONDEBUG=1");
@@ -528,7 +536,7 @@ extern "C"
     else if (!IS_STD_STREAM(stream))
     {
       // Translate the path
-      return freopen(_P(path).c_str(), mode, stream);
+      return freopen(CSpecialProtocol::TranslatePath(path).c_str(), mode, stream);
     }
 
     // error
@@ -768,7 +776,7 @@ extern "C"
   {
     char str[1024];
     int size = sizeof(str);
-    CURL url(_P(file));
+    CURL url(CSpecialProtocol::TranslatePath(file));
     if (url.IsLocal())
     {
       // move to CFile classes
@@ -792,7 +800,7 @@ extern "C"
       // Make sure the slashes are correct & translate the path
       struct _wfinddata64i32_t wdata;
       CStdStringW strwfile;
-      g_charsetConverter.utf8ToW(CUtil::ValidatePath(_P(str)), strwfile, false);
+      g_charsetConverter.utf8ToW(CUtil::ValidatePath(CSpecialProtocol::TranslatePath(str)), strwfile, false);
       intptr_t ret = _wfindfirst64i32(strwfile.c_str(), &wdata);
       if (ret != -1)
         to_finddata64i32(&wdata, data);
@@ -928,7 +936,7 @@ extern "C"
 
   DIR *dll_opendir(const char *file)
   {
-    CURL url(_P(file));
+    CURL url(CSpecialProtocol::TranslatePath(file));
     if (url.IsLocal())
     { // Make sure the slashes are correct & translate the path
       return opendir(CUtil::ValidatePath(url.Get().c_str()));
@@ -1892,7 +1900,7 @@ extern "C"
     if (!dir) return -1;
 
     // Make sure the slashes are correct & translate the path
-    CStdString strPath = CUtil::ValidatePath(_P(dir));
+    CStdString strPath = CUtil::ValidatePath(CSpecialProtocol::TranslatePath(dir));
 #ifndef _LINUX
     CStdStringW strWPath;
     g_charsetConverter.utf8ToW(strPath, strWPath, false);
@@ -1928,7 +1936,12 @@ extern "C"
 
         memcpy(var, envstring, value_start - envstring);
         var[value_start - envstring] = 0;
-        strupr(var);
+        char* temp = var;
+        while (*temp)
+        {
+          *temp = (char)toupper(*temp);
+          temp++;
+        }
 
         strncpy(value, value_start + 1, size);
         if (size)
index 5f3722b..0558099 100644 (file)
  *
  */
 
-#ifdef _XBOX
-#include <xtl.h>
-#endif
-
 #define SOCK_RAW 3
 
 #define EAFNOSUPPORT WSAEAFNOSUPPORT
@@ -40,21 +36,6 @@ struct mphostent {
          char **h_addr_list; /* list of addresses      from name server */
 };
 
-#ifdef _XBOX
-typedef struct servent {
-               char FAR* s_name;
-               char FAR  FAR** s_aliases;
-               short s_port;
-               char FAR* s_proto;
-} servent;
-
-typedef struct protoent {
-               char FAR* p_name;
-               char FAR  FAR** p_aliases;
-               short p_proto;
-} protoent;
-#endif
-
 #ifndef IN_MULTICAST
 #define IN_MULTICAST(i)            (((i) & 0xf0000000U) == 0xe0000000U)
 #endif
index 5f0e429..3cd8b1b 100644 (file)
  *   in ai_flags?
  */
 
-#ifdef _XBOX
-#include <xtl.h>
-#include <winsockx.h>
-#else
 #include <windows.h>
-#endif
 #include <stddef.h>
 #include "addrinfo.h"
 #include "emu_socket.h"
 #include <stdio.h>
 #include <errno.h>
 
-#ifdef _XBOX
-extern struct mphostent* __stdcall dllgethostbyname(const char* name);
-#define gethostbyname(name) dllgethostbyname(name)
-
-extern struct mphostent* __stdcall dllgethostbyaddr(const char* addr, int len, int type);
-#define gethostbyaddr(addr, len, type) dllgethostbyaddr(addr, len, type)
-
-extern struct servent* __stdcall dllgetservbyname(const char* name, const char* proto);
-#define getservbyname(name, proto) dllgetservbyname(name, proto)
-
-#define hostent mphostent
-#endif
-
 #ifndef HAVE_U_INT32_T
 #include "bittypes.h"
 #endif
@@ -333,18 +315,10 @@ getaddrinfo(const char*hostname, const char*servname,
                                pai->ai_socktype = SOCK_STREAM;
                                break;
                        default:
-#ifdef _XBOX
-                               pai->ai_socktype = SOCK_STREAM;
-#else
                                pai->ai_socktype = SOCK_RAW;
-#endif //_XBOX
                                break;
                        }
                        break;
-#ifndef _XBOX
-               case SOCK_RAW:
-                       break;
-#endif //_XBOX
                case SOCK_DGRAM:
                        if (pai->ai_protocol != IPPROTO_UDP &&
                            pai->ai_protocol != GAI_ANY)
index 0c8f426..0df482a 100644 (file)
  *   modified).
  */
 
-#ifdef _XBOX
-#include <xtl.h>
-#include <winsockx.h>
-#else
 #include <windows.h>
-#endif
 #include <stddef.h>
 #include "addrinfo.h"
 #include "emu_socket.h"
 #include <stdio.h>
 #include <errno.h>
 
-#ifdef _XBOX
-extern struct mphostent* __stdcall dllgethostbyname(const char* name);
-#define gethostbyname(name) dllgethostbyname(name)
-
-extern struct mphostent* __stdcall dllgethostbyaddr(const char* addr, int len, int type);
-#define gethostbyaddr(addr, len, type) dllgethostbyaddr(addr, len, type)
-#endif
-
 extern struct servent* __stdcall dllgetservbyname(const char* name, const char* proto);
 #define getservbyname(name, proto) dllgetservbyname(name, proto)
 
index df84245..f74693d 100644 (file)
@@ -49,7 +49,7 @@ void CBaseRenderer::ChooseBestResolution(float fps)
   if (fps == 0.0) return;
 
   // Adjust refreshrate to match source fps
-#if !defined(__APPLE__)
+#if !defined(TARGET_DARWIN_IOS)
   if (g_guiSettings.GetBool("videoplayer.adjustrefreshrate"))
   {
     float weight;
index faef87c..af51852 100644 (file)
@@ -64,6 +64,7 @@ public:
   float GetAspectRatio() const;
 
   virtual bool AddVideoPicture(DVDVideoPicture* picture) { return false; }
+  virtual void Flush() {};
 
   virtual unsigned int GetProcessorSize() { return 0; }
 
index 02d317e..3bade02 100644 (file)
@@ -37,6 +37,7 @@
 #include "windowing/WindowingFactory.h"
 #include "dialogs/GUIDialogKaiToast.h"
 #include "guilib/Texture.h"
+#include "guilib/LocalizeStrings.h"
 #include "threads/SingleLock.h"
 #include "DllSwScale.h"
 #include "utils/log.h"
@@ -438,7 +439,9 @@ void CLinuxRendererGL::LoadPlane( YUVPLANE& plane, int type, unsigned flipindex
   if(currPbo)
     glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, currPbo);
 
-  glPixelStorei(GL_UNPACK_ROW_LENGTH, stride);
+  int bps = glFormatElementByteCount(type);
+
+  glPixelStorei(GL_UNPACK_ROW_LENGTH, stride / bps);
   glBindTexture(m_textureTarget, plane.id);
   glTexSubImage2D(m_textureTarget, 0, 0, 0, width, height, type, GL_UNSIGNED_BYTE, data);
 
@@ -453,7 +456,7 @@ void CLinuxRendererGL::LoadPlane( YUVPLANE& plane, int type, unsigned flipindex
     glTexSubImage2D( m_textureTarget, 0
                    , width, 0, 1, height
                    , type, GL_UNSIGNED_BYTE
-                   , (unsigned char*)data + stride - 1);
+                   , (unsigned char*)data + bps * (width-1));
 
   glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
   glBindTexture(m_textureTarget, 0);
@@ -554,6 +557,20 @@ void CLinuxRendererGL::Reset()
   }
 }
 
+void CLinuxRendererGL::Flush()
+{
+  if (!m_bValidated)
+    return;
+
+  glFinish();
+
+  for (int i = 0 ; i < m_NumYV12Buffers ; i++)
+    (this->*m_textureDelete)(i);
+
+  glFinish();
+  m_bValidated = false;
+}
+
 void CLinuxRendererGL::Update(bool bPauseDrawing)
 {
   if (!m_bConfigured) return;
@@ -857,7 +874,7 @@ void CLinuxRendererGL::UpdateVideoFilter()
     break;
   }
 
-  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, "Video Renderering", "Failed to init video filters/scalers, falling back to bilinear scaling");
+  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(34400), g_localizeStrings.Get(34401));
   CLog::Log(LOGERROR, "GL: Falling back to bilinear due to failure to init scaler");
   if (m_pVideoFilterShader)
   {
@@ -1035,6 +1052,8 @@ void CLinuxRendererGL::UnInit()
   CLog::Log(LOGDEBUG, "LinuxRendererGL: Cleaning up GL resources");
   CSingleLock lock(g_graphicsContext);
 
+  glFinish();
+
   if (m_rgbPbo)
   {
     glDeleteBuffersARB(1, &m_rgbPbo);
@@ -1495,7 +1514,7 @@ void CLinuxRendererGL::RenderVDPAU(int index, int field)
 void CLinuxRendererGL::RenderVAAPI(int index, int field)
 {
 #ifdef HAVE_LIBVA
-  YUVPLANE       &plane = m_buffers[index].fields[field][0];
+  YUVPLANE       &plane = m_buffers[index].fields[0][0];
   VAAPI::CHolder &va    = m_buffers[index].vaapi;
 
   if(!va.surface)
@@ -1619,9 +1638,6 @@ bool CLinuxRendererGL::RenderCapture(CRenderCapture* capture)
   if (!m_bValidated)
     return false;
 
-  // get our screen rect
-  const CRect rv = g_graphicsContext.GetViewWindow();
-
   // save current video rect
   CRect saveSize = m_destRect;
 
@@ -1640,7 +1656,7 @@ bool CLinuxRendererGL::RenderCapture(CRenderCapture* capture)
 
   Render(RENDER_FLAG_NOOSD, m_iYV12RenderBuffer);
   // read pixels
-  glReadPixels(0, rv.y2 - capture->GetHeight(), capture->GetWidth(), capture->GetHeight(),
+  glReadPixels(0, g_graphicsContext.GetHeight() - capture->GetHeight(), capture->GetWidth(), capture->GetHeight(),
                GL_BGRA, GL_UNSIGNED_BYTE, capture->GetRenderBuffer());
 
   capture->EndRender();
@@ -1903,12 +1919,12 @@ void CLinuxRendererGL::UploadNV12Texture(int source)
     // Load Odd UV Fields
     LoadPlane( fields[FIELD_TOP][1], GL_LUMINANCE_ALPHA, buf.flipindex
              , im->width >> im->cshift_x, im->height >> (im->cshift_y + 1)
-             , im->stride[1], im->plane[1] );
+             , im->stride[1]*2, im->plane[1] );
 
     // Load Even UV Fields
     LoadPlane( fields[FIELD_BOT][1], GL_LUMINANCE_ALPHA, buf.flipindex
              , im->width >> im->cshift_x, im->height >> (im->cshift_y + 1)
-             , im->stride[1], im->plane[1] + im->stride[1] );
+             , im->stride[1]*2, im->plane[1] + im->stride[1] );
 
   }
   else
@@ -1921,7 +1937,7 @@ void CLinuxRendererGL::UploadNV12Texture(int source)
     // Load UV plane
     LoadPlane( fields[FIELD_FULL][1], GL_LUMINANCE_ALPHA, buf.flipindex
              , im->width >> im->cshift_x, im->height >> im->cshift_y
-             , im->stride[1]/2, im->plane[1] );
+             , im->stride[1], im->plane[1] );
   }
 
   m_eventTexturesDone[source]->Set();
@@ -2366,18 +2382,18 @@ void CLinuxRendererGL::UploadYUV422PackedTexture(int source)
     // Load YUYV fields
     LoadPlane( fields[FIELD_TOP][0], GL_BGRA, buf.flipindex
              , im->width / 2, im->height >> 1
-             , im->stride[0] / 2, im->plane[0] );
+             , im->stride[0] * 2, im->plane[0] );
 
     LoadPlane( fields[FIELD_BOT][0], GL_BGRA, buf.flipindex
              , im->width / 2, im->height >> 1
-             , im->stride[0] / 2, im->plane[0] + im->stride[0]) ;
+             , im->stride[0] * 2, im->plane[0] + im->stride[0]) ;
   }
   else
   {
     // Load YUYV plane
     LoadPlane( fields[FIELD_FULL][0], GL_BGRA, buf.flipindex
              , im->width / 2, im->height
-             , im->stride[0] / 4, im->plane[0] );
+             , im->stride[0], im->plane[0] );
   }
 
   m_eventTexturesDone[source]->Set();
@@ -2848,17 +2864,17 @@ void CLinuxRendererGL::UploadRGBTexture(int source)
   {
     LoadPlane( fields[FIELD_TOP][0] , GL_BGRA, buf.flipindex
              , im->width, im->height >> 1
-             , m_sourceWidth, m_rgbBuffer, &m_rgbPbo );
+             , m_sourceWidth*4, m_rgbBuffer, &m_rgbPbo );
 
     LoadPlane( fields[FIELD_BOT][0], GL_BGRA, buf.flipindex
              , im->width, im->height >> 1
-             , m_sourceWidth, m_rgbBuffer + m_sourceWidth*m_sourceHeight*2, &m_rgbPbo );
+             , m_sourceWidth*4, m_rgbBuffer + m_sourceWidth*m_sourceHeight*2, &m_rgbPbo );
   }
   else
   {
     LoadPlane( fields[FIELD_FULL][0], GL_BGRA, buf.flipindex
              , im->width, im->height
-             , m_sourceWidth, m_rgbBuffer, &m_rgbPbo );
+             , m_sourceWidth*4, m_rgbBuffer, &m_rgbPbo );
   }
 
   //after using the pbo to upload, allocate a new buffer so we don't have to wait
@@ -2995,8 +3011,31 @@ bool CLinuxRendererGL::Supports(EINTERLACEMETHOD method)
   }
 
   if(m_renderMethod & RENDER_VAAPI)
+  {
+#ifdef HAVE_LIBVA
+    VAAPI::CDisplayPtr disp = m_buffers[m_iYV12RenderBuffer].vaapi.display;
+    if(disp)
+    {
+      CSingleLock lock(*disp);
+
+      if(disp->support_deinterlace())
+      {
+        if( method == VS_INTERLACEMETHOD_RENDER_BOB_INVERTED
+        ||  method == VS_INTERLACEMETHOD_RENDER_BOB )
+          return true;
+      }
+    }
+#endif
     return false;
+  }
 
+#ifdef TARGET_DARWIN
+  // YADIF too slow for HD but we have no methods to fall back
+  // to something that works so just turn it off.
+  if(method == VS_INTERLACEMETHOD_DEINTERLACE)
+    return false;
+#endif
+  
   if(method == VS_INTERLACEMETHOD_DEINTERLACE
   || method == VS_INTERLACEMETHOD_DEINTERLACE_HALF
   || method == VS_INTERLACEMETHOD_SW_BLEND)
@@ -3058,10 +3097,10 @@ EINTERLACEMETHOD CLinuxRendererGL::AutoInterlaceMethod()
     return VS_INTERLACEMETHOD_NONE;
   }
 
-  if(m_renderMethod & RENDER_VAAPI)
-    return VS_INTERLACEMETHOD_NONE;
+  if(Supports(VS_INTERLACEMETHOD_RENDER_BOB))
+    return VS_INTERLACEMETHOD_RENDER_BOB;
 
-  return VS_INTERLACEMETHOD_RENDER_BOB;
+  return VS_INTERLACEMETHOD_NONE;
 }
 
 void CLinuxRendererGL::BindPbo(YUVBUFFER& buff)
index 8f1664a..38c84aa 100644 (file)
@@ -140,6 +140,7 @@ public:
   virtual unsigned int PreInit();
   virtual void         UnInit();
   virtual void         Reset(); /* resets renderer after seek for example */
+  virtual void         Flush();
 
 #ifdef HAVE_LIBVDPAU
   virtual void         AddProcessor(CVDPAU* vdpau);
index cb603a8..8d5aec5 100644 (file)
@@ -51,6 +51,9 @@
 #include "DVDCodecs/Video/DVDVideoCodecVideoToolBox.h"
 #include <CoreVideo/CoreVideo.h>
 #endif
+#ifdef TARGET_DARWIN_IOS
+#include "osx/DarwinUtils.h"
+#endif
 
 using namespace Shaders;
 
@@ -323,27 +326,20 @@ void CLinuxRendererGLES::LoadPlane( YUVPLANE& plane, int type, unsigned flipinde
     return;
 
   const GLvoid *pixelData = data;
-  char *pixelVector = NULL;
 
-  // OpenGL ES does not support strided texture input. Make a copy without stride
-  if(stride != width)
-  {
-    pixelVector = (char *)malloc(width * height * width);
-    
-    const char *src = (const char *)data;
-    char *dst = pixelVector;
-    for (int y = 0;y < height;++y)
-    {
-      fast_memcpy(dst, src, width);
-      src += stride;
-      dst += width;
-    }
-    pixelData = pixelVector;
-    stride = width;
-  }
+  int bps = glFormatElementByteCount(type);
 
   glBindTexture(m_textureTarget, plane.id);
-  glTexSubImage2D(m_textureTarget, 0, 0, 0, width, height, type, GL_UNSIGNED_BYTE, pixelData);
+
+  // OpenGL ES does not support strided texture input.
+  if(stride != width * bps)
+  {
+    unsigned char* src = (unsigned char*)data;
+    for (int y = 0; y < height;++y, src += stride)
+      glTexSubImage2D(m_textureTarget, 0, 0, y, width, 1, type, GL_UNSIGNED_BYTE, src);
+  } else {
+    glTexSubImage2D(m_textureTarget, 0, 0, 0, width, height, type, GL_UNSIGNED_BYTE, pixelData);
+  }
 
   /* check if we need to load any border pixels */
   if(height < plane.texheight)
@@ -356,14 +352,11 @@ void CLinuxRendererGLES::LoadPlane( YUVPLANE& plane, int type, unsigned flipinde
     glTexSubImage2D( m_textureTarget, 0
                    , width, 0, 1, height
                    , type, GL_UNSIGNED_BYTE
-                   , (unsigned char*)pixelData + stride - 1);
+                   , (unsigned char*)pixelData + bps * (width-1));
 
   glBindTexture(m_textureTarget, 0);
 
   plane.flipindex = flipindex;
-
-  if(pixelVector)
-    free(pixelVector);
 }
 
 void CLinuxRendererGLES::Reset()
@@ -582,6 +575,9 @@ void CLinuxRendererGLES::UpdateVideoFilter()
 
 void CLinuxRendererGLES::LoadShaders(int field)
 {
+#ifdef TARGET_DARWIN_IOS
+  float ios_version = GetIOSVersion();
+#endif
   int requestedMethod = g_guiSettings.GetInt("videoplayer.rendermethod");
   CLog::Log(LOGDEBUG, "GL: Requested render method: %d", requestedMethod);
 
@@ -614,8 +610,8 @@ void CLinuxRendererGLES::LoadShaders(int field)
         m_renderMethod = RENDER_CVREF;
         break;
       }
-      #if defined(__APPLE__) && defined(__arm__)
-      else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_YV12)
+      #if defined(TARGET_DARWIN_IOS)
+      else if (ios_version < 5.0 && CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_YV12)
       {
         CLog::Log(LOGNOTICE, "GL: Using software color conversion/RGBA render method");
         m_renderMethod = RENDER_SW;
@@ -1259,9 +1255,6 @@ bool CLinuxRendererGLES::RenderCapture(CRenderCapture* capture)
   if (!m_bValidated)
     return false;
 
-  // get our screen rect
-  const CRect rv = g_graphicsContext.GetViewWindow();
-
   // save current video rect
   CRect saveSize = m_destRect;
 
@@ -1280,7 +1273,7 @@ bool CLinuxRendererGLES::RenderCapture(CRenderCapture* capture)
 
   Render(RENDER_FLAG_NOOSD, m_iYV12RenderBuffer);
   // read pixels
-  glReadPixels(0, rv.y2 - capture->GetHeight(), capture->GetWidth(), capture->GetHeight(),
+  glReadPixels(0, g_graphicsContext.GetHeight() - capture->GetHeight(), capture->GetWidth(), capture->GetHeight(),
                GL_RGBA, GL_UNSIGNED_BYTE, capture->GetRenderBuffer());
 
   // OpenGLES returns in RGBA order but CRenderCapture needs BGRA order
@@ -1288,12 +1281,7 @@ bool CLinuxRendererGLES::RenderCapture(CRenderCapture* capture)
   unsigned char* pixels = (unsigned char*)capture->GetRenderBuffer();
   for (int i = 0; i < capture->GetWidth() * capture->GetHeight(); i++, pixels+=4)
   {
-    if (pixels[0] != pixels[2])
-    {
-      pixels[0] ^= pixels[2];
-      pixels[2] ^= pixels[0];
-      pixels[0] ^= pixels[2];
-    }
+    std::swap(pixels[0], pixels[2]);
   }
 
   capture->EndRender();
@@ -1371,17 +1359,17 @@ void CLinuxRendererGLES::UploadYV12Texture(int source)
     {
       LoadPlane( fields[FIELD_TOP][0] , GL_RGBA, buf.flipindex
                , im->width, im->height >> 1
-               , m_sourceWidth*2, m_rgbBuffer );
+               , m_sourceWidth*8, m_rgbBuffer );
 
       LoadPlane( fields[FIELD_BOT][0], GL_RGBA, buf.flipindex
                , im->width, im->height >> 1
-               , m_sourceWidth*2, m_rgbBuffer + m_sourceWidth*4);      
+               , m_sourceWidth*8, m_rgbBuffer + m_sourceWidth*4);      
     }
     else
     {
       LoadPlane( fields[FIELD_FULL][0], GL_RGBA, buf.flipindex
                , im->width, im->height
-               , m_sourceWidth, m_rgbBuffer );
+               , m_sourceWidth*4, m_rgbBuffer );
     }
   }
   else
@@ -1831,9 +1819,13 @@ bool CLinuxRendererGLES::Supports(EINTERLACEMETHOD method)
   if(method == VS_INTERLACEMETHOD_AUTO)
     return true;
 
+#if defined(__i386__) || defined(__x86_64__)
   if(method == VS_INTERLACEMETHOD_DEINTERLACE
   || method == VS_INTERLACEMETHOD_DEINTERLACE_HALF
   || method == VS_INTERLACEMETHOD_SW_BLEND)
+#else
+  if(method == VS_INTERLACEMETHOD_SW_BLEND)
+#endif
     return true;
 
   return false;
index 92743ea..ba30ab0 100644 (file)
@@ -182,9 +182,6 @@ COverlayQuadsDX::COverlayQuadsDX(CDVDOverlaySSA* o, double pts)
   if(!convert_quad(o, pts, width, height, quads))
     return;
   
-  if (quads.count == 0)
-    return;
-
   float u, v;
   if(!LoadTexture(quads.size_x
                 , quads.size_y
index dad5001..5fbc6ca 100644 (file)
@@ -62,23 +62,12 @@ static void LoadTexture(GLenum target
   char *pixelVector = NULL;
   const GLvoid *pixelData = pixels;
 
+  int bytesPerPixel = glFormatElementByteCount(externalFormat);
+
 #ifdef HAS_GLES
   /** OpenGL ES does not support strided texture input. Make a copy without stride **/
   if (stride != width)
   {
-    int bytesPerPixel;
-    switch (externalFormat)
-    {
-    case GL_RGBA:
-      bytesPerPixel = 4;
-      break;
-    case GL_RGB:
-      bytesPerPixel = 3;
-      break;
-    default:
-      bytesPerPixel = 1;
-    }
-
     int bytesPerLine = bytesPerPixel * width;
 
     pixelVector = (char *)malloc(bytesPerLine * height);
@@ -96,19 +85,7 @@ static void LoadTexture(GLenum target
     stride = width;
   }
 #else
-  switch(externalFormat)
-  {
-    case GL_RGBA:
-    case GL_BGRA:
-      glPixelStorei(GL_UNPACK_ROW_LENGTH, stride / 4);
-      break;
-    case GL_RGB:
-    case GL_BGR:
-      glPixelStorei(GL_UNPACK_ROW_LENGTH, stride / 3);
-      break;
-    default:
-      glPixelStorei(GL_UNPACK_ROW_LENGTH, stride);
-  }
+  glPixelStorei(GL_UNPACK_ROW_LENGTH, stride / bytesPerPixel);
 #endif
 
   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -132,7 +109,7 @@ static void LoadTexture(GLenum target
     glTexSubImage2D( target, 0
                    , width, 0, 1, height
                    , externalFormat, GL_UNSIGNED_BYTE
-                   , (unsigned char*)pixelData + stride - 1);
+                   , (unsigned char*)pixelData + bytesPerPixel * (width-1));
 
 #ifndef HAS_GLES
   glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
@@ -291,9 +268,6 @@ COverlayGlyphGL::COverlayGlyphGL(CDVDOverlaySSA* o, double pts)
   if(!convert_quad(o, pts, width, height, quads))
     return;
 
-  if (quads.count == 0)
-    return;
-
   glGenTextures(1, &m_texture);
   glEnable(GL_TEXTURE_2D);
   glBindTexture(GL_TEXTURE_2D, m_texture);
index 182eed4..3014901 100644 (file)
@@ -202,6 +202,9 @@ bool convert_quad(CDVDOverlaySSA* o, double pts, int width, int height, SQuads&
     quads.count++;
   }
 
+  if (quads.count == 0)
+    return false;
+
   while(quads.size_x > (int)g_Windowing.GetMaxTextureSize())
     quads.size_x /= 2;
 
index 5e35cd2..2f152e3 100644 (file)
@@ -87,11 +87,7 @@ CRenderCaptureGL::~CRenderCaptureGL()
 
 int CRenderCaptureGL::GetCaptureFormat()
 {
-#ifdef HAS_GLES
-  return CAPTUREFORMAT_RGBA;
-#else
   return CAPTUREFORMAT_BGRA;
-#endif
 }
 
 void CRenderCaptureGL::BeginRender()
index 50c465c..b917860 100644 (file)
@@ -103,6 +103,7 @@ CXBMCRenderManager::CXBMCRenderManager()
   m_presentmethod = PRESENT_METHOD_SINGLE;
   m_bReconfigured = false;
   m_hasCaptures = false;
+  m_displayLatency = 0.0f;
 }
 
 CXBMCRenderManager::~CXBMCRenderManager()
@@ -320,6 +321,8 @@ unsigned int CXBMCRenderManager::PreInit()
 #endif
   }
 
+  UpdateDisplayLatency();
+
   return m_pRenderer->PreInit();
 }
 
@@ -337,6 +340,35 @@ void CXBMCRenderManager::UnInit()
     m_pRenderer->UnInit();
 }
 
+bool CXBMCRenderManager::Flush()
+{
+  if (!m_pRenderer)
+    return true;
+
+  if (g_application.IsCurrentThread())
+  {
+    CLog::Log(LOGDEBUG, "%s - flushing renderer", __FUNCTION__);
+
+    CRetakeLock<CExclusiveLock> lock(m_sharedSection);
+    m_pRenderer->Flush();
+    m_flushEvent.Set();
+  }
+  else
+  {
+    ThreadMessage msg = {TMSG_RENDERER_FLUSH};
+    m_flushEvent.Reset();
+    g_application.getApplicationMessenger().SendMessage(msg, false);
+    if (!m_flushEvent.WaitMSec(1000))
+    {
+      CLog::Log(LOGERROR, "%s - timed out waiting for renderer to flush", __FUNCTION__);
+      return false;
+    }
+    else
+      return true;
+  }
+  return true;
+}
+
 void CXBMCRenderManager::SetupScreenshot()
 {
   CSharedLock lock(m_sharedSection);
@@ -511,9 +543,7 @@ void CXBMCRenderManager::FlipPage(volatile bool& bStop, double timestamp /* = 0L
     m_presentstep  = PRESENT_FLIP;
     m_presentsource = source;
     EDEINTERLACEMODE deinterlacemode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
-    EINTERLACEMETHOD interlacemethod = g_settings.m_currentVideoSettings.m_InterlaceMethod;
-    if (interlacemethod == VS_INTERLACEMETHOD_AUTO)
-      interlacemethod = m_pRenderer->AutoInterlaceMethod();
+    EINTERLACEMETHOD interlacemethod = AutoInterlaceMethodInternal(g_settings.m_currentVideoSettings.m_InterlaceMethod);
 
     bool invert = false;
 
@@ -685,6 +715,17 @@ void CXBMCRenderManager::Recover()
 #if defined(HAS_GL) && !defined(TARGET_DARWIN)
   glFlush(); // attempt to have gpu done with pixmap and vdpau
 #endif
+
+  UpdateDisplayLatency();
+}
+
+void CXBMCRenderManager::UpdateDisplayLatency()
+{
+  float refresh = g_graphicsContext.GetFPS();
+  if (g_graphicsContext.GetVideoResolution() == RES_WINDOW)
+    refresh = 0; // No idea about refresh rate when windowed, just get the default latency
+  m_displayLatency = (double) g_advancedSettings.GetDisplayLatency(refresh);
+  CLog::Log(LOGDEBUG, "CRenderManager::UpdateDisplayLatency - Latency set to %1.0f msec", m_displayLatency * 1000.0f);
 }
 
 void CXBMCRenderManager::UpdateResolution()
@@ -754,3 +795,17 @@ int CXBMCRenderManager::AddVideoPicture(DVDVideoPicture& pic)
 
   return index;
 }
+
+EINTERLACEMETHOD CXBMCRenderManager::AutoInterlaceMethodInternal(EINTERLACEMETHOD mInt)
+{
+  if (mInt == VS_INTERLACEMETHOD_NONE)
+    return VS_INTERLACEMETHOD_NONE;
+
+  if(!m_pRenderer->Supports(mInt))
+    mInt = VS_INTERLACEMETHOD_AUTO;
+
+  if (mInt == VS_INTERLACEMETHOD_AUTO)
+    return m_pRenderer->AutoInterlaceMethod();
+
+  return mInt;
+}
index f8f68ab..7f8dbce 100644 (file)
@@ -76,6 +76,7 @@ public:
   void FlipPage(volatile bool& bStop, double timestamp = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE);
   unsigned int PreInit();
   void UnInit();
+  bool Flush();
 
   void AddOverlay(CDVDOverlay* o, double pts)
   {
@@ -107,6 +108,7 @@ public:
   float GetMaximumFPS();
   inline bool Paused() { return m_bPauseDrawing; };
   inline bool IsStarted() { return m_bIsStarted;}
+  double GetDisplayLatency() { return m_displayLatency; }
 
   bool Supports(ERENDERFEATURE feature)
   {
@@ -144,13 +146,10 @@ public:
       return false;
   }
 
-  EINTERLACEMETHOD AutoInterlaceMethod()
+  EINTERLACEMETHOD AutoInterlaceMethod(EINTERLACEMETHOD mInt)
   {
     CSharedLock lock(m_sharedSection);
-    if (m_pRenderer)
-      return m_pRenderer->AutoInterlaceMethod();
-    else
-      return VS_INTERLACEMETHOD_NONE;
+    return AutoInterlaceMethodInternal(mInt);
   }
 
   double GetPresentTime();
@@ -191,6 +190,8 @@ protected:
   void PresentBob(bool clear, DWORD flags, DWORD alpha);
   void PresentBlend(bool clear, DWORD flags, DWORD alpha);
 
+  EINTERLACEMETHOD AutoInterlaceMethodInternal(EINTERLACEMETHOD mInt);
+
   bool m_bPauseDrawing;   // true if we should pause rendering
 
   bool m_bIsStarted;
@@ -216,6 +217,8 @@ protected:
     PRESENT_METHOD_BOB,
   };
 
+  double m_displayLatency;
+  void UpdateDisplayLatency();
 
   double     m_presenttime;
   double     m_presentcorr;
@@ -227,6 +230,7 @@ protected:
   EPRESENTSTEP     m_presentstep;
   int        m_presentsource;
   CEvent     m_presentevent;
+  CEvent     m_flushEvent;
 
 
   OVERLAY::CRenderer m_overlays;
index 8ef6ddf..300cabc 100644 (file)
@@ -28,7 +28,7 @@
 #include <map>
 #include "ConvolutionKernels.h"
 #include "YUV2RGBShader.h"
-
+#include "win32/WIN32Util.h"
 
 CYUV2RGBMatrix::CYUV2RGBMatrix()
 {
@@ -714,6 +714,27 @@ bool CConvolutionShaderSeparable::CreateIntermediateRenderTarget(unsigned int wi
   return true;
 }
 
+bool CConvolutionShaderSeparable::ClearIntermediateRenderTarget()
+{
+  LPDIRECT3DDEVICE9 pD3DDevice = g_Windowing.Get3DDevice();
+
+  LPDIRECT3DSURFACE9 currentRT;
+  pD3DDevice->GetRenderTarget(0, &currentRT);
+
+  LPDIRECT3DSURFACE9 intermediateRT;
+  m_IntermediateTarget.GetSurfaceLevel(0, &intermediateRT);
+
+  pD3DDevice->SetRenderTarget(0, intermediateRT);
+
+  pD3DDevice->Clear(0L, NULL, D3DCLEAR_TARGET, 0L, 1.0f, 0L);
+
+  pD3DDevice->SetRenderTarget(0, currentRT);
+  currentRT->Release();
+  intermediateRT->Release();
+
+  return true;
+}
+
 void CConvolutionShaderSeparable::PrepareParameters(unsigned int sourceWidth, unsigned int sourceHeight,
                                            unsigned int destWidth, unsigned int destHeight,
                                            CRect sourceRect,
@@ -723,6 +744,12 @@ void CConvolutionShaderSeparable::PrepareParameters(unsigned int sourceWidth, un
   || m_destWidth != destWidth || m_destHeight != destHeight
   || m_sourceRect != sourceRect || m_destRect != destRect)
   {
+    // fixme better: clearing the whole render target when changing the source/dest rect is not optimal.
+    // Problem is that the edges of the final picture may retain content when the rects change.
+    // For example when changing zoom value, the edges can retain content from the previous zoom value.
+    // Playing with coordinates was unsuccessful so far, this is a quick fix for release.
+    ClearIntermediateRenderTarget();
+
     m_sourceWidth = sourceWidth;
     m_sourceHeight = sourceHeight;
     m_destWidth = destWidth;
@@ -733,8 +760,19 @@ void CConvolutionShaderSeparable::PrepareParameters(unsigned int sourceWidth, un
     CUSTOMVERTEX* v;
     CWinShader::LockVertexBuffer((void**)&v);
 
+    // Alter rectangles the destination rectangle exceeds the intermediate target width when zooming and causes artifacts.
+    // Work on the parameters rather than the members to avoid disturbing the parameter change detection the next time the function is called
+    CRect tgtRect(0, 0, destWidth, destHeight);
+    CWIN32Util::CropSource(sourceRect, destRect, tgtRect);
+
     // Manipulate the coordinates to work only on the active parts of the textures,
     // and therefore avoid the need to clear surfaces/render targets
+
+    // Pass 1:
+    // Horizontal dimension: crop/zoom, so that it is completely done with the convolution shader. Scaling to display width in pass1 and
+    // cropping/zooming in pass 2 would use bilinear in pass2, which we don't want.
+    // Vertical dimension: crop using sourceRect to save memory bandwidth for high zoom values, but don't stretch/shrink in any way in this pass.
+    
     v[0].x = 0;
     v[0].y = 0;
     v[0].tu = sourceRect.x1 / sourceWidth;
@@ -755,6 +793,8 @@ void CConvolutionShaderSeparable::PrepareParameters(unsigned int sourceWidth, un
     v[3].tu = sourceRect.x1 / sourceWidth;
     v[3].tv = sourceRect.y2 / sourceHeight;
 
+    // Pass 2: pass the horizontal data untouched, resize vertical dimension for final result.
+
     v[4].x = destRect.x1;
     v[4].y = destRect.y1;
     v[4].tu = 0;
@@ -762,18 +802,18 @@ void CConvolutionShaderSeparable::PrepareParameters(unsigned int sourceWidth, un
 
     v[5].x = destRect.x2;
     v[5].y = destRect.y1;
-    v[5].tu = (destRect.x2 - destRect.x1) / m_destWidth;
+    v[5].tu = (destRect.x2 - destRect.x1) / destWidth;
     v[5].tv = 0;
 
     v[6].x = destRect.x2;
     v[6].y = destRect.y2;
-    v[6].tu = (destRect.x2 - destRect.x1) / m_destWidth;
-    v[6].tv = (sourceRect.y2 - sourceRect.y1) / m_sourceHeight;
+    v[6].tu = (destRect.x2 - destRect.x1) / destWidth;
+    v[6].tv = (sourceRect.y2 - sourceRect.y1) / sourceHeight;
 
     v[7].x = destRect.x1;
     v[7].y = destRect.y2;
     v[7].tu = 0;
-    v[7].tv = (sourceRect.y2 - sourceRect.y1) / m_sourceHeight;
+    v[7].tv = (sourceRect.y2 - sourceRect.y1) / sourceHeight;
 
     // -0.5 offset to compensate for D3D rasterization
     // set z and rhw
index aa2a4f2..d6199e5 100644 (file)
@@ -164,6 +164,7 @@ public:
 protected:
   virtual bool ChooseIntermediateD3DFormat();
   virtual bool CreateIntermediateRenderTarget(unsigned int width, unsigned int height);
+  virtual bool ClearIntermediateRenderTarget();
   virtual void PrepareParameters(unsigned int sourceWidth, unsigned int sourceHeight,
                                unsigned int destWidth, unsigned int destHeight,
                                CRect sourceRect,
index 2bfba56..3044187 100644 (file)
@@ -25,7 +25,9 @@
 #include "settings/AdvancedSettings.h"
 #include "guilib/TransformMatrix.h"
 #include "utils/log.h"
+#if defined(HAS_GL) || defined(HAS_GLES)
 #include "utils/GLUtils.h"
+#endif
 
 #include <string>
 #include <sstream>
@@ -239,7 +241,7 @@ bool BaseYUV2RGBGLSLShader::OnEnabled()
 #if HAS_GLES == 2
   glUniformMatrix4fv(m_hProj,  1, GL_FALSE, m_proj);
   glUniformMatrix4fv(m_hModel, 1, GL_FALSE, m_model);
-  glUniform1i(m_hAlpha, m_alpha);
+  glUniform1f(m_hAlpha, m_alpha);
 #endif
   VerifyGLState();
   return true;
index 2bfb047..55d29a6 100644 (file)
@@ -36,6 +36,7 @@
 #include "DllSwScale.h"
 #include "guilib/LocalizeStrings.h"
 #include "dialogs/GUIDialogKaiToast.h"
+#include "win32/WIN32Util.h"
 
 typedef struct {
   RenderMethod  method;
@@ -130,13 +131,14 @@ void CWinRenderer::ManageTextures()
 
 void CWinRenderer::SelectRenderMethod()
 {
+  // Set rendering to dxva before trying it, in order to open the correct processor immediately, when deinterlacing method is auto.
+
   // Force dxva renderer after dxva decoding: PS and SW renderers have performance issues after dxva decode.
   if (g_advancedSettings.m_DXVAForceProcessorRenderer && CONF_FLAGS_FORMAT_MASK(m_flags) == CONF_FLAGS_FORMAT_DXVA)
   {
     CLog::Log(LOGNOTICE, "D3D: rendering method forced to DXVA2 processor");
-    if (m_processor.Open(m_sourceWidth, m_sourceHeight, m_flags, m_format))
-        m_renderMethod = RENDER_DXVA;
-    else
+    m_renderMethod = RENDER_DXVA;
+    if (!m_processor.Open(m_sourceWidth, m_sourceHeight, m_flags, m_format))
     {
       CLog::Log(LOGNOTICE, "D3D: unable to open DXVA2 processor");
       m_processor.Close();
@@ -150,11 +152,9 @@ void CWinRenderer::SelectRenderMethod()
     switch(m_iRequestedMethod)
     {
       case RENDER_METHOD_DXVA:
+        m_renderMethod = RENDER_DXVA;
         if (m_processor.Open(m_sourceWidth, m_sourceHeight, m_flags, m_format))
-        {
-            m_renderMethod = RENDER_DXVA;
             break;
-        }
         else
         {
           CLog::Log(LOGNOTICE, "D3D: unable to open DXVA2 processor");
@@ -557,7 +557,7 @@ void CWinRenderer::UpdatePSVideoFilter()
       if (!m_scalerShader->Create(m_scalingMethod))
       {
         SAFE_DELETE(m_scalerShader);
-        CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, "Video Renderering", "Failed to init video scaler, falling back to bilinear scaling.");
+        CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(34400), g_localizeStrings.Get(34401));
         m_bUseHQScaler = false;
       }
     }
@@ -634,38 +634,6 @@ void CWinRenderer::UpdateVideoFilter()
   }
 }
 
-void CWinRenderer::CropSource(RECT& src, RECT& dst, const D3DSURFACE_DESC& desc)
-{
-  if(dst.left < 0)
-  {
-    src.left -= dst.left
-              * (src.right - src.left)
-              / (dst.right - dst.left);
-    dst.left  = 0;
-  }
-  if(dst.top < 0)
-  {
-    src.top -= dst.top
-             * (src.bottom - src.top)
-             / (dst.bottom - dst.top);
-    dst.top  = 0;
-  }
-  if(dst.right > (LONG)desc.Width)
-  {
-    src.right -= (dst.right - desc.Width)
-               * (src.right - src.left)
-               / (dst.right - dst.left);
-    dst.right  = desc.Width;
-  }
-  if(dst.bottom > (LONG)desc.Height)
-  {
-    src.bottom -= (dst.bottom - desc.Height)
-                * (src.bottom - src.top)
-                / (dst.bottom - dst.top);
-    dst.bottom  = desc.Height;
-  }
-}
-
 void CWinRenderer::Render(DWORD flags)
 {
   if (m_renderMethod == RENDER_DXVA)
@@ -769,23 +737,27 @@ void CWinRenderer::ScaleStretchRect()
   //  m_StretchRectSupported = true;
   //}
 
-  RECT srcRect = { m_sourceRect.x1, m_sourceRect.y1, m_sourceRect.x2, m_sourceRect.y2 };
+  CRect sourceRect = m_sourceRect;
+  CRect destRect = m_destRect;
+
+  D3DSURFACE_DESC desc;
+  if (FAILED(target->GetDesc(&desc)))
+    CLog::Log(LOGERROR, "CWinRenderer::Render - failed to get back buffer description");
+  CRect tgtRect(0, 0, desc.Width, desc.Height);
+
+  // Need to manipulate the coordinates since StretchRect doesn't accept off-screen coordinates.
+  CWIN32Util::CropSource(sourceRect, destRect, tgtRect);
+
+  RECT srcRect = { sourceRect.x1, sourceRect.y1, sourceRect.x2, sourceRect.y2 };
   IDirect3DSurface9* source;
   if(!m_SWTarget.GetSurfaceLevel(0, &source))
     CLog::Log(LOGERROR, "CWinRenderer::Render - failed to get source");
 
-  RECT dstRect = { m_destRect.x1, m_destRect.y1, m_destRect.x2, m_destRect.y2 };
+  RECT dstRect = { destRect.x1, destRect.y1, destRect.x2, destRect.y2 };
   IDirect3DSurface9* target;
   if(FAILED(g_Windowing.Get3DDevice()->GetRenderTarget(0, &target)))
     CLog::Log(LOGERROR, "CWinRenderer::Render - failed to get back buffer");
 
-  D3DSURFACE_DESC desc;
-  if (FAILED(target->GetDesc(&desc)))
-    CLog::Log(LOGERROR, "CWinRenderer::Render - failed to get back buffer description");
-
-  // Need to manipulate the coordinates since StretchRect doesn't accept off-screen coordinates.
-  CropSource(srcRect, dstRect, desc);
-
   HRESULT hr;
   LPDIRECT3DDEVICE9 pD3DDevice = g_Windowing.Get3DDevice();
 
@@ -947,16 +919,6 @@ void CWinRenderer::RenderProcessor(DWORD flags)
 {
   CSingleLock lock(g_graphicsContext);
   HRESULT hr;
-  RECT sourceRect;
-  sourceRect.top    = m_sourceRect.y1;
-  sourceRect.bottom = m_sourceRect.y2;
-  sourceRect.left   = m_sourceRect.x1;
-  sourceRect.right  = m_sourceRect.x2;
-  RECT destRect;
-  destRect.top    = m_destRect.y1;
-  destRect.bottom = m_destRect.y2;
-  destRect.left   = m_destRect.x1;
-  destRect.right  = m_destRect.x2;
 
   DXVABuffer *image = (DXVABuffer*)m_VideoBuffers[m_iYV12RenderBuffer];
 
@@ -967,7 +929,7 @@ void CWinRenderer::RenderProcessor(DWORD flags)
     return;
   }
 
-  m_processor.Render(sourceRect, destRect, target, image->id, flags);
+  m_processor.Render(m_sourceRect, m_destRect, target, image->id, flags);
 
   target->Release();
 }
index 70ff1d6..84f33b2 100644 (file)
@@ -192,8 +192,6 @@ public:
 
   virtual unsigned int GetProcessorSize() { return m_processor.Size(); }
 
-  static void          CropSource(RECT& src, RECT& dst, const D3DSURFACE_DESC& desc);
-
 protected:
   virtual void Render(DWORD flags);
   void         RenderSW();
index 5c0fbaa..c74ffd6 100644 (file)
@@ -78,7 +78,22 @@ bool CDVDAudio::Create(const DVDAudioFrame &audioframe, CodecID codec)
 
   // if passthrough isset do something else
   CSingleLock lock (m_critSection);
-  m_pAudioDecoder = CAudioRendererFactory::Create(m_pCallback, audioframe.channels, audioframe.channel_map, audioframe.sample_rate, audioframe.bits_per_sample, false, false, audioframe.passthrough);
+
+  IAudioRenderer::EEncoded encoded = IAudioRenderer::ENCODED_NONE;
+  if(audioframe.passthrough)
+  {
+    switch(codec) {
+      case CODEC_ID_AC3 : encoded = IAudioRenderer::ENCODED_IEC61937_AC3;     break;
+      case CODEC_ID_EAC3: encoded = IAudioRenderer::ENCODED_IEC61937_EAC3;    break;
+      case CODEC_ID_DTS : encoded = IAudioRenderer::ENCODED_IEC61937_DTS;     break;
+      case CODEC_ID_MP1 :
+      case CODEC_ID_MP2 :
+      case CODEC_ID_MP3 : encoded = IAudioRenderer::ENCODED_IEC61937_MPEG;    break;
+      default:            encoded = IAudioRenderer::ENCODED_IEC61937_UNKNOWN; break;
+    }
+  }
+
+  m_pAudioDecoder = CAudioRendererFactory::Create(m_pCallback, audioframe.channels, audioframe.channel_map, audioframe.sample_rate, audioframe.bits_per_sample, false, false, encoded);
 
   if (!m_pAudioDecoder) return false;
 
@@ -230,6 +245,31 @@ DWORD CDVDAudio::AddPackets(const DVDAudioFrame &audioframe)
   return total;
 }
 
+double CDVDAudio::AddSilence(double delay)
+{
+  CLog::Log(LOGDEBUG, "CDVDAudio::AddSilence - %f seconds", delay);
+  DVDAudioFrame audioframe;
+  audioframe.passthrough     = m_bPassthrough;
+  audioframe.channels        = m_iChannels;
+  audioframe.sample_rate     = m_iBitrate;
+  audioframe.bits_per_sample = m_iBitsPerSample;
+  audioframe.size            = m_iChannels * (m_iBitsPerSample>>3);
+  audioframe.data            = (BYTE*)calloc(1, audioframe.size);
+  if(audioframe.data == NULL)
+    return 0.0;
+  unsigned samples = m_iBitrate * delay;
+  unsigned added = 0;
+  for(; added < samples; added++)
+  {
+    if(AddPackets(audioframe) != audioframe.size)
+      break;
+  }
+  if(added < samples)
+    CLog::Log(LOGDEBUG, "CDVDAudio::AddSilence - failed to %d silence samples of %u", samples - added, samples);
+  free(audioframe.data);
+  return (double)added / m_iBitrate;
+}
+
 void CDVDAudio::Finish()
 {
   CSingleLock lock (m_critSection);
index e483936..1f1393d 100644 (file)
@@ -66,6 +66,7 @@ public:
   bool IsValidFormat(const DVDAudioFrame &audioframe);
   void Destroy();
   DWORD AddPackets(const DVDAudioFrame &audioframe);
+  double AddSilence(double delay);
   double GetDelay(); // returns the time it takes to play a packet if we add one at this time
   double GetCacheTime();  // returns total amount of data cached in audio output at this time
   double GetCacheTotal(); // returns total amount the audio device can buffer
index 3f0a7ee..32c68f2 100644 (file)
@@ -24,6 +24,7 @@
 #include "DVDOverlayText.h"
 #include "DVDStreamInfo.h"
 #include "DVDCodecs/DVDCodecs.h"
+#include "settings/GUISettings.h"
 #include "utils/log.h"
 
 // 3GPP/TX3G (aka MPEG-4 Timed Text) Subtitle support
@@ -61,6 +62,9 @@ typedef struct {
 CDVDOverlayCodecTX3G::CDVDOverlayCodecTX3G() : CDVDOverlayCodec("TX3G Subtitle Decoder")
 {
   m_pOverlay = NULL;
+  // stupid, this comes from a static global in GUIWindowFullScreen.cpp
+  uint32_t colormap[8] = { 0xFFFFFF00, 0xFFFFFFFF, 0xFF0099FF, 0xFF00FF00, 0xFFCCFF00, 0xFF00FFFF, 0xFFE5E5E5, 0xFFC0C0C0 };
+  m_textColor = colormap[g_guiSettings.GetInt("subtitles.color")];
 }
 
 CDVDOverlayCodecTX3G::~CDVDOverlayCodecTX3G()
@@ -88,6 +92,8 @@ int CDVDOverlayCodecTX3G::Decode(BYTE* data, int size, double pts, double durati
     SAFE_RELEASE(m_pOverlay);
 
   m_pOverlay = new CDVDOverlayText();
+  m_pOverlay->iPTSStartTime = pts;
+  m_pOverlay->iPTSStopTime  = pts + duration;
 
   // do not move this. READ_XXXX macros modify pos.
   uint8_t  *pos = data;
@@ -105,6 +111,8 @@ int CDVDOverlayCodecTX3G::Decode(BYTE* data, int size, double pts, double durati
   int numStyleRecords = 0;
   uint8_t *bgnStyle   = (uint8_t*)calloc(textLength, 1);
   uint8_t *endStyle   = (uint8_t*)calloc(textLength, 1);
+  int bgnColorIndex = 0, endColorIndex = 0;
+  uint32_t textColorRGBA = m_textColor;
   while (pos < end)
   {
     // Read TextSampleModifierBox
@@ -117,12 +125,13 @@ int CDVDOverlayCodecTX3G::Decode(BYTE* data, int size, double pts, double durati
       break;
     }
     uint32_t type = READ_U32();
-    if (type == FOURCC("uuid")) {
+    if (type == FOURCC("uuid"))
+    {
       CLog::Log(LOGDEBUG, "CDVDOverlayCodecTX3G: TextSampleModifierBox has unsupported extended type" );
       break;
     }
 
-    if (type == FOURCC("styl")) 
+    if (type == FOURCC("styl"))
     {
       // Found a StyleBox. Parse the contained StyleRecords
       if ( numStyleRecords != 0 )
@@ -145,6 +154,9 @@ int CDVDOverlayCodecTX3G::Decode(BYTE* data, int size, double pts, double durati
 
         bgnStyle[curRecord.bgnChar] |= curRecord.faceStyleFlags;
         endStyle[curRecord.endChar] |= curRecord.faceStyleFlags;
+        bgnColorIndex = curRecord.bgnChar;
+        endColorIndex = curRecord.endChar;
+        textColorRGBA = curRecord.textColorRGBA;
       }
     }
     else
@@ -181,14 +193,19 @@ int CDVDOverlayCodecTX3G::Decode(BYTE* data, int size, double pts, double durati
     // we do not support underline
     //if (endStyles & UNDERLINE)
     //  strUTF8.append("[/U]");
+    if (endColorIndex == charIndex && textColorRGBA != m_textColor)
+      strUTF8.append("[/COLOR]");
 
-    if (bgnStyles & BOLD)
-      strUTF8.append("[B]");
-    if (bgnStyles & ITALIC)
-      strUTF8.append("[I]");
+    // invert the order from above so we bracket the text correctly.
+    if (bgnColorIndex == charIndex && textColorRGBA != m_textColor)
+      strUTF8.AppendFormat("[COLOR %8x]", textColorRGBA);
     // we do not support underline
     //if (bgnStyles & UNDERLINE)
     //  strUTF8.append("[U]");
+    if (bgnStyles & ITALIC)
+      strUTF8.append("[I]");
+    if (bgnStyles & BOLD)
+      strUTF8.append("[B]");
 
     // stuff the UTF8 char
     strUTF8.append((const char*)pos, 1);
index 1dd1e78..1db47cf 100644 (file)
@@ -72,7 +72,7 @@ public:
     memcpy(alpha          , src.alpha          , sizeof(alpha));
     memcpy(color          , src.color          , sizeof(color));
     memcpy(highlight_alpha, src.highlight_alpha, sizeof(highlight_alpha));
-    memcpy(highlight_color, src.highlight_alpha, sizeof(highlight_color));
+    memcpy(highlight_color, src.highlight_color, sizeof(highlight_color));
   }
 
   BYTE result[2*65536 + 20]; // rle data
index 3dad964..2a6d958 100644 (file)
@@ -23,6 +23,8 @@
 #if defined(_WIN32)
 #include "WIN32Util.h"
 #include "util.h"
+#include "dialogs/GUIDialogKaiToast.h"
+#include "guilib/LocalizeStrings.h"
 #endif
 
 #if defined(HAVE_LIBCRYSTALHD)
@@ -230,6 +232,7 @@ protected:
   bool                m_has_bcm70015;
   unsigned int        m_timeout;
   bool                m_format_valid;
+  bool                m_is_live_stream;
   int                 m_width;
   int                 m_height;
   uint64_t            m_timestamp;
@@ -328,6 +331,7 @@ CMPCOutputThread::CMPCOutputThread(void *device, DllLibCrystalHD *dll, bool has_
   m_has_bcm70015(has_bcm70015),
   m_timeout(20),
   m_format_valid(false),
+  m_is_live_stream(false),
   m_framerate_tracking(false),
   m_framerate_cnt(0),
   m_framerate_timestamp(0.0),
@@ -387,10 +391,25 @@ void CMPCOutputThread::DoFrameRateTracking(double timestamp)
   if (timestamp != DVD_NOPTS_VALUE)
   {
     double duration;
+    // if timestamp does not start at a low value we 
+    // came in the middle of an online live stream
+    // 250 ms is a fourth of a 25fps source
+    // if timestamp is larger than that at the beginning
+    // we are much more out of sync than with the rough 
+    // calculation. To cover these 250 ms we need
+    // roughly 5 seconds of video stream to get back
+    // in sync
+    if (m_framerate_cnt == 0 && timestamp > 250000.0)
+      m_is_live_stream = true;
+    
     duration = timestamp - m_framerate_timestamp;
     if (duration > 0.0)
     {
       double framerate;
+      // cnt count has to be done here, cause we miss frames
+      // if framerate will not calculated correctly and
+      // duration has to be > 0.0 so we do not calc images twice
+      m_framerate_cnt++;
 
       m_framerate_timestamp += duration;
       framerate = DVD_TIME_BASE / duration;
@@ -409,8 +428,9 @@ void CMPCOutputThread::DoFrameRateTracking(double timestamp)
         case 30:
         case 25:
         case 24:
-          m_framerate_cnt++;
-          m_framerate = DVD_TIME_BASE / (m_framerate_timestamp/m_framerate_cnt);
+          // if we have such a live stream framerate is more exact than calculating
+          // cause of m_framerate_cnt and timestamp do not match in any way
+          m_framerate = m_is_live_stream ? framerate : DVD_TIME_BASE / (m_framerate_timestamp/m_framerate_cnt);
         break;
       }
     }
@@ -1086,9 +1106,8 @@ CCrystalHD::CCrystalHD() :
 #if (HAVE_LIBCRYSTALHD == 2)
     if (m_device && m_new_lib)
     {
-      BCM::BC_INFO_CRYSTAL bc_info_crystal;
-      m_dll->DtsCrystalHDVersion(m_device, &bc_info_crystal);
-      m_has_bcm70015 = (bc_info_crystal.device == 1);
+      m_dll->DtsCrystalHDVersion(m_device, (BCM::PBC_INFO_CRYSTAL)&m_bc_info_crystal);
+      m_has_bcm70015 = (m_bc_info_crystal.device == 1);
       // bcm70012 can do nv12 (420), yuy2 (422) and uyvy (422)
       // bcm70015 can do only yuy2 (422)
       if (m_has_bcm70015)
@@ -1211,6 +1230,22 @@ bool CCrystalHD::OpenDecoder(CRYSTALHD_CODEC_TYPE codec_type, CDVDStreamInfo &hi
   if (!m_device)
     return false;
 
+#if (HAVE_LIBCRYSTALHD == 2) && defined(TARGET_WINDOWS)
+  // Drivers prior to 3.6.9.32 don't have proper support for CRYSTALHD_CODEC_ID_AVC1
+  // The internal version numbers are different for some reason...
+  if (   (m_bc_info_crystal.dilVersion.dilRelease < 3)
+      || (m_bc_info_crystal.dilVersion.dilRelease == 3 && m_bc_info_crystal.dilVersion.dilMajor < 22)
+      || (m_bc_info_crystal.drvVersion.drvRelease < 3)
+      || (m_bc_info_crystal.drvVersion.drvRelease == 3 && m_bc_info_crystal.drvVersion.drvMajor < 7) )
+  {
+    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Warning, "CrystalHD", g_localizeStrings.Get(2101));
+    CLog::Log(LOGWARNING, "CrystalHD drivers too old, please upgrade to 3.6.9 or later. Make sure to uninstall the old version first or the upgrade won't work.");
+
+    if (codec_type == CRYSTALHD_CODEC_ID_AVC1)
+      return false;
+  }
+#endif
+
   uint32_t videoAlg = 0;
   switch (codec_type)
   {
index b30f269..6f104f2 100644 (file)
@@ -99,6 +99,46 @@ enum _CRYSTALHD_CODEC_TYPES
 };
 
 typedef uint32_t CRYSTALHD_CODEC_TYPE;
+
+#if (HAVE_LIBCRYSTALHD == 2)
+
+  typedef struct _BC_INFO_CRYSTAL_ {
+         uint8_t device;
+         union {
+                 struct {
+                         uint32_t dilRelease:8;
+                         uint32_t dilMajor:8;
+                         uint32_t dilMinor:16;
+                 };
+                 uint32_t version;
+         } dilVersion;
+
+         union {
+                 struct {
+                         uint32_t drvRelease:4;
+                         uint32_t drvMajor:8;
+                         uint32_t drvMinor:12;
+                         uint32_t drvBuild:8;
+                 };
+                 uint32_t version;
+         } drvVersion;
+
+         union {
+                 struct {
+                         uint32_t fwRelease:4;
+                         uint32_t fwMajor:8;
+                         uint32_t fwMinor:12;
+                         uint32_t fwBuild:8;
+                 };
+                 uint32_t version;
+         } fwVersion;
+
+         uint32_t Reserved1; // For future expansion
+         uint32_t Reserved2; // For future expansion
+  } BC_INFO_CRYSTAL, *PBC_INFO_CRYSTAL;
+
+#endif
+
 ////////////////////////////////////////////////////////////////////////////////////////////
 
 #define CRYSTALHD_FIELD_FULL        0x00
@@ -163,6 +203,9 @@ protected:
 
   CMPCOutputThread *m_pOutputThread;
   CSyncPtrQueue<CPictureBuffer> m_BusyList;
+#if (HAVE_LIBCRYSTALHD == 2)
+  BC_INFO_CRYSTAL m_bc_info_crystal;
+#endif
 
 private:
   CCrystalHD();
index 0092b2d..b4e1451 100644 (file)
@@ -101,7 +101,9 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx
   }
 #endif
 #ifdef HAVE_LIBVA
-    if(*cur == PIX_FMT_VAAPI_VLD && g_guiSettings.GetBool("videoplayer.usevaapi"))
+    // mpeg4 vaapi decoding is disabled
+    if(*cur == PIX_FMT_VAAPI_VLD && g_guiSettings.GetBool("videoplayer.usevaapi") 
+    && (avctx->codec_id != CODEC_ID_MPEG4 || g_advancedSettings.m_videoAllowMpeg4VAAPI)) 
     {
       VAAPI::CDecoder* dec = new VAAPI::CDecoder();
       if(dec->Open(avctx, *cur))
@@ -165,6 +167,22 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
 
   pCodec = NULL;
 
+  if (hints.codec == CODEC_ID_H264)
+  {
+    switch(hints.profile)
+    {
+      case FF_PROFILE_H264_HIGH_10:
+      case FF_PROFILE_H264_HIGH_10_INTRA:
+      case FF_PROFILE_H264_HIGH_422:
+      case FF_PROFILE_H264_HIGH_422_INTRA:
+      case FF_PROFILE_H264_HIGH_444_PREDICTIVE:
+      case FF_PROFILE_H264_HIGH_444_INTRA:
+      case FF_PROFILE_H264_CAVLC_444:
+      m_bSoftware = true;
+      break;
+    }
+  }
+
 #ifdef HAVE_LIBVDPAU
   if(g_guiSettings.GetBool("videoplayer.usevdpau") && !m_bSoftware)
   {
@@ -181,6 +199,8 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
         m_pCodecContext->codec_id = hints.codec;
         m_pCodecContext->width    = hints.width;
         m_pCodecContext->height   = hints.height;
+        m_pCodecContext->coded_width   = hints.width;
+        m_pCodecContext->coded_height  = hints.height;
         if(vdp->Open(m_pCodecContext, pCodec->pix_fmts ? pCodec->pix_fmts[0] : PIX_FMT_NONE))
         {
           m_pHardware = vdp;
@@ -429,8 +449,8 @@ int CDVDVideoCodecFFmpeg::Decode(BYTE* pData, int iSize, double dts, double pts)
   avpkt.flags = AV_PKT_FLAG_KEY;
   len = m_dllAvCodec.avcodec_decode_video2(m_pCodecContext, m_pFrame, &iGotPicture, &avpkt);
 
-  if(m_iLastKeyframe < m_pCodecContext->has_b_frames + 1)
-    m_iLastKeyframe = m_pCodecContext->has_b_frames + 1;
+  if(m_iLastKeyframe < m_pCodecContext->has_b_frames + 2)
+    m_iLastKeyframe = m_pCodecContext->has_b_frames + 2;
 
   if (len < 0)
   {
@@ -447,9 +467,17 @@ int CDVDVideoCodecFFmpeg::Decode(BYTE* pData, int iSize, double dts, double pts)
   if(m_pFrame->key_frame)
   {
     m_started = true;
-    m_iLastKeyframe = m_pCodecContext->has_b_frames + 1;
+    m_iLastKeyframe = m_pCodecContext->has_b_frames + 2;
   }
 
+  /* put a limit on convergence count to avoid huge mem usage on streams without keyframes */
+  if(m_iLastKeyframe > 300)
+    m_iLastKeyframe = 300;
+
+  /* h264 doesn't always have keyframes + won't output before first keyframe anyway */
+  if(m_pCodecContext->codec_id == CODEC_ID_H264)
+    m_started = true;
+
   if(m_pCodecContext->pix_fmt != PIX_FMT_YUV420P
   && m_pCodecContext->pix_fmt != PIX_FMT_YUVJ420P
   && m_pHardware == NULL)
@@ -538,7 +566,7 @@ void CDVDVideoCodecFFmpeg::Reset()
 
   if (m_pConvertFrame)
   {
-    delete[] m_pConvertFrame->data[0];
+    m_dllAvCodec.avpicture_free(m_pConvertFrame);
     m_dllAvUtil.av_free(m_pConvertFrame);
     m_pConvertFrame = NULL;
   }
index 741af02..53890cb 100644 (file)
@@ -66,6 +66,7 @@ public:
   IHardwareDecoder * GetHardware()                           { return m_pHardware; };
   void               SetHardware(IHardwareDecoder* hardware) 
   {
+    SAFE_RELEASE(m_pHardware);
     m_pHardware = hardware;
     m_name += "-";
     m_name += m_pHardware->Name();
index 4e0bdde..0238864 100644 (file)
@@ -669,13 +669,13 @@ bool CDVDVideoCodecVDA::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
     extrasize = hints.extrasize;
     extradata = (uint8_t*)hints.extradata;
     
-    if (hints.profile == 77 && hints.level == 32)
+    if (width <= 0 || height <= 0 || profile <= 0 || level <= 0)
     {
-      // Main@L3.2, VDA cannot handle it
-      CLog::Log(LOGNOTICE, "%s - Main@L3.2 detected, VDA cannot decode.", __FUNCTION__);
+      CLog::Log(LOGNOTICE, "%s - bailing with bogus hints, width(%d), height(%d), profile(%d), level(%d)",
+        __FUNCTION__, width, height, profile, level);
       return false;
     }
+    
     if (Cocoa_GPUForDisplayIsNvidiaPureVideo3() && !CDVDCodecUtils::IsVP3CompatibleWidth(width))
     {
       CLog::Log(LOGNOTICE, "%s - Nvidia 9400 GPU hardware limitation, cannot decode a width of %d", __FUNCTION__, width);
@@ -771,9 +771,9 @@ bool CDVDVideoCodecVDA::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
       uint32_t sps_size = VDA_RB16(spc);
       if (sps_size)
         parseh264_sps(spc+3, sps_size-1, &interlaced, &m_max_ref_frames);
-      if (false)
-      //if (interlaced)
+      if (interlaced)
       {
+        CLog::Log(LOGNOTICE, "%s - possible interlaced content.", __FUNCTION__);
         CFRelease(avcCData);
         return false;
       }
@@ -781,6 +781,14 @@ bool CDVDVideoCodecVDA::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
         m_max_ref_frames = 2;
     }
 
+    if (hints.profile == FF_PROFILE_H264_MAIN && hints.level == 32 && m_max_ref_frames > 4)
+    {
+      // Main@L3.2, VDA cannot handle greater than 4 reference frames
+      CLog::Log(LOGNOTICE, "%s - Main@L3.2 detected, VDA cannot decode.", __FUNCTION__);
+      CFRelease(avcCData);
+      return false;
+    }
     // input stream is qualified, now we can load dlls.
     m_dllSwScale = new DllSwScale;
     if (!m_dllSwScale->Load())
@@ -815,6 +823,8 @@ bool CDVDVideoCodecVDA::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
     OSType cvPixelFormatType = kCVPixelFormatType_422YpCbCr8;
     CFNumberRef pixelFormat  = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &cvPixelFormatType);
     CFDictionarySetValue(destinationImageBufferAttributes, kCVPixelBufferPixelFormatTypeKey, pixelFormat);
+    // release the retained object refs, destinationImageBufferAttributes owns it now
+    CFRelease(pixelFormat);
 
     // create the VDADecoder object
     OSStatus status;
@@ -991,7 +1001,7 @@ int CDVDVideoCodecVDA::Decode(BYTE* pData, int iSize, double dts, double pts)
     }
   }
 
-  if (!m_queue_depth || m_queue_depth < m_max_ref_frames)
+  if (m_queue_depth < m_max_ref_frames)
   {
     return VC_BUFFER;
   }
index 3c86782..a78b1b8 100644 (file)
@@ -1071,13 +1071,13 @@ bool CDVDVideoCodecVideoToolBox::Open(CDVDStreamInfo &hints, CDVDCodecOptions &o
     extrasize = hints.extrasize;
     extradata = (uint8_t*)hints.extradata;
  
-    if (hints.profile == 77 && hints.level == 32)
+    if (width <= 0 || height <= 0 || profile <= 0 || level <= 0)
     {
-      // Main@L3.2, VTB cannot handle it
-      CLog::Log(LOGNOTICE, "%s - Main@L3.2 detected, VTB cannot decode.", __FUNCTION__);
+      CLog::Log(LOGNOTICE, "%s - bailing with bogus hints, width(%d), height(%d), profile(%d), level(%d)",
+        __FUNCTION__, width, height, profile, level);
       return false;
     }
+    
     switch (hints.codec)
     {
       case CODEC_ID_MPEG4:
@@ -1198,6 +1198,16 @@ bool CDVDVideoCodecVideoToolBox::Open(CDVDStreamInfo &hints, CDVDCodecOptions &o
       m_pFormatName = "";
       return false;
     }
+
+    if (profile == FF_PROFILE_H264_MAIN && level == 32 && m_max_ref_frames > 4)
+    {
+      // Main@L3.2, VTB cannot handle greater than 4 ref frames (ie. flash video)
+      CLog::Log(LOGNOTICE, "%s - Main@L3.2 detected, VTB cannot decode with %d ref frames",
+        __FUNCTION__, m_max_ref_frames);
+      CFRelease(m_fmt_desc);
+      return false;
+    }
     if (m_max_ref_frames == 0)
       m_max_ref_frames = 2;
 
@@ -1377,7 +1387,7 @@ int CDVDVideoCodecVideoToolBox::Decode(BYTE* pData, int iSize, double dts, doubl
 
   // TODO: queue depth is related to the number of reference frames in encoded h.264.
   // so we need to buffer until we get N ref frames + 1.
-  if (!m_queue_depth || m_queue_depth < m_max_ref_frames)
+  if (m_queue_depth < m_max_ref_frames)
     return VC_BUFFER;
 
   return VC_PICTURE | VC_BUFFER;
index 99caff0..0961eff 100644 (file)
@@ -41,6 +41,7 @@
 #include "utils/AutoPtrHandle.h"
 #include "settings/AdvancedSettings.h"
 #include "cores/VideoRenderers/RenderManager.h"
+#include "win32/WIN32Util.h"
 
 #define ALLOW_ADDING_SURFACES 0
 
@@ -81,6 +82,10 @@ DEFINE_GUID(DXVADDI_Intel_ModeH264_C, 0x604F8E66,0x4951,0x4c54,0x88,0xFE,0xAB,0x
 DEFINE_GUID(DXVADDI_Intel_ModeH264_E, 0x604F8E68,0x4951,0x4c54,0x88,0xFE,0xAB,0xD2,0x5C,0x15,0xB3,0xD6);
 DEFINE_GUID(DXVADDI_Intel_ModeVC1_E , 0xBCC5DB6D,0xA2B6,0x4AF0,0xAC,0xE4,0xAD,0xB1,0xF7,0x87,0xBC,0x89);
 
+DEFINE_GUID(DXVA_ModeMPEG2and1_VLD,   0x86695f12,0x340e,0x4f04,0x9f,0xd3,0x92,0x53,0xdd,0x32,0x74,0x60);
+// When exposed by an accelerator, indicates compliance with the August 2010 spec update
+DEFINE_GUID(DXVA_ModeVC1_D2010,       0x1b81beA4,0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
+
 typedef struct {
     const char   *name;
     const GUID   *guid;
@@ -90,6 +95,7 @@ typedef struct {
 /* XXX Prefered modes must come first */
 static const dxva2_mode_t dxva2_modes[] = {
     { "MPEG2 VLD",    &DXVA2_ModeMPEG2_VLD,     CODEC_ID_MPEG2VIDEO },
+    { "MPEG1/2 VLD",  &DXVA_ModeMPEG2and1_VLD,  CODEC_ID_MPEG2VIDEO },
     { "MPEG2 MoComp", &DXVA2_ModeMPEG2_MoComp,  0 },
     { "MPEG2 IDCT",   &DXVA2_ModeMPEG2_IDCT,    0 },
 
@@ -113,11 +119,13 @@ static const dxva2_mode_t dxva2_modes[] = {
     { "Windows Media Video 9 MoComp",           &DXVA2_ModeWMV9_B, 0 },
     { "Windows Media Video 9 post processing",  &DXVA2_ModeWMV9_A, 0 },
 
-    { "VC-1 VLD",             &DXVA2_ModeVC1_D, CODEC_ID_VC1 },
-    { "VC-1 VLD",             &DXVA2_ModeVC1_D, CODEC_ID_WMV3 },
-    { "VC-1 IDCT",            &DXVA2_ModeVC1_C, 0 },
-    { "VC-1 MoComp",          &DXVA2_ModeVC1_B, 0 },
-    { "VC-1 post processing", &DXVA2_ModeVC1_A, 0 },
+    { "VC-1 VLD",             &DXVA2_ModeVC1_D,    CODEC_ID_VC1 },
+    { "VC-1 VLD",             &DXVA2_ModeVC1_D,    CODEC_ID_WMV3 },
+    { "VC-1 VLD 2010",        &DXVA_ModeVC1_D2010, CODEC_ID_VC1 },
+    { "VC-1 VLD 2010",        &DXVA_ModeVC1_D2010, CODEC_ID_WMV3 },
+    { "VC-1 IDCT",            &DXVA2_ModeVC1_C,    0 },
+    { "VC-1 MoComp",          &DXVA2_ModeVC1_B,    0 },
+    { "VC-1 post processing", &DXVA2_ModeVC1_A,    0 },
 
     { NULL, NULL, 0 }
 };
@@ -241,6 +249,22 @@ static DWORD VP3DeviceID [] = {
   0x0000
 };
 
+typedef struct {
+    DWORD VendorID;
+    DWORD DeviceID;
+} pci_device;
+
+// List of devices that drop frames with a deinterlacing processor for progressive material.
+static const pci_device NoDeintProcForProgDevices[] = {
+  { PCIV_nVidia, 0x0865 }, // ION
+  { PCIV_nVidia, 0x0874 }, // ION
+  { PCIV_nVidia, 0x0876 }, // ION
+  { PCIV_nVidia, 0x087D }, // ION
+  { PCIV_nVidia, 0x087E }, // ION LE
+  { PCIV_nVidia, 0x087F }, // ION LE
+  { 0          , 0x0000 }
+};
+
 static CStdString GUIDToString(const GUID& guid)
 {
   CStdString buffer;
@@ -368,8 +392,8 @@ do { \
 
 static bool CheckH264L41(AVCodecContext *avctx)
 {
-    unsigned widthmbs  = (avctx->width + 15) / 16;  // width in macroblocks
-    unsigned heightmbs = (avctx->height + 15) / 16; // height in macroblocks
+    unsigned widthmbs  = (avctx->coded_width + 15) / 16;  // width in macroblocks
+    unsigned heightmbs = (avctx->coded_height + 15) / 16; // height in macroblocks
     unsigned maxdpbmbs = 32768;                     // Decoded Picture Buffer (DPB) capacity in macroblocks for L4.1
 
     return (avctx->refs * widthmbs * heightmbs <= maxdpbmbs);
@@ -397,7 +421,7 @@ static bool HasVP3WidthBug(AVCodecContext *avctx)
   D3DADAPTER_IDENTIFIER9 AIdentifier = g_Windowing.GetAIdentifier();
 
   if(AIdentifier.VendorId == PCIV_nVidia
-  && !CDVDCodecUtils::IsVP3CompatibleWidth(avctx->width))
+  && !CDVDCodecUtils::IsVP3CompatibleWidth(avctx->coded_width))
   {
     // Find the card in a known list of problematic VP3 hardware
     for (unsigned idx = 0; VP3DeviceID[idx] != 0; idx++)
@@ -416,7 +440,7 @@ static bool CheckCompatibility(AVCodecContext *avctx)
   // Macroblock width incompatibility
   if (HasVP3WidthBug(avctx))
   {
-    CLog::Log(LOGWARNING,"DXVA - width %i is not supported with nVidia VP3 hardware. DXVA will not be used", avctx->width);
+    CLog::Log(LOGWARNING,"DXVA - width %i is not supported with nVidia VP3 hardware. DXVA will not be used", avctx->coded_width);
     return false;
   }
 
@@ -498,8 +522,8 @@ bool CDecoder::Open(AVCodecContext *avctx, enum PixelFormat fmt, unsigned int su
     return false;
   }
 
-  m_format.SampleWidth  = avctx->width;
-  m_format.SampleHeight = avctx->height;
+  m_format.SampleWidth  = avctx->coded_width;
+  m_format.SampleHeight = avctx->coded_height;
   m_format.SampleFormat.SampleFormat           = DXVA2_SampleProgressiveFrame;
   m_format.SampleFormat.VideoLighting          = DXVA2_VideoLighting_dim;
 
@@ -663,6 +687,7 @@ bool CDecoder::Open(AVCodecContext *avctx, enum PixelFormat fmt, unsigned int su
 #endif
   }
 
+  m_state = DXVA_OPEN;
   return true;
 }
 
@@ -801,6 +826,7 @@ bool CDecoder::OpenTarget(const GUID &guid)
 bool CDecoder::OpenDecoder()
 {
   SAFE_RELEASE(m_decoder);
+  m_context->decoder = NULL;
 
   m_context->surface_count = m_refs + 1 + 1 + m_shared; // refs + 1 decode + 1 libavcodec safety + processor buffer
 
@@ -865,8 +891,8 @@ void CDecoder::RelBuffer(AVCodecContext *avctx, AVFrame *pic)
 int CDecoder::GetBuffer(AVCodecContext *avctx, AVFrame *pic)
 {
   CSingleLock lock(m_section);
-  if(avctx->width  != m_format.SampleWidth
-  || avctx->height != m_format.SampleHeight)
+  if(avctx->coded_width  != m_format.SampleWidth
+  || avctx->coded_height != m_format.SampleHeight)
   {
     Close();
     if(!Open(avctx, avctx->pix_fmt, m_shared))
@@ -1141,6 +1167,19 @@ bool CProcessor::Open(UINT width, UINT height, unsigned int flags, unsigned int
       return false;
   }
 
+  // frame flags are not available to do the complete calculation of the deinterlacing mode, as done in Render()
+  // It's OK, as it doesn't make any difference for all hardware except the few GPUs on the quirk list.
+  // And for those GPUs, the correct values will be calculated with the first Render() and the correct processor
+  // will replace the one allocated here, before the user sees anything.
+  // It's a bit inefficient, that's all.
+  m_deinterlace_mode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
+  m_interlace_method = g_renderManager.AutoInterlaceMethod(g_settings.m_currentVideoSettings.m_InterlaceMethod);;
+
+  EvaluateQuirkNoDeintProcForProg();
+
+  if (g_advancedSettings.m_DXVANoDeintProcForProgressive || m_quirk_nodeintprocforprog)
+    CLog::Log(LOGNOTICE, "DXVA: Auto deinterlacing mode workaround activated. Deinterlacing processor will be used only for interlaced frames.");
+
   if (!OpenProcessor())
     return false;
 
@@ -1149,6 +1188,22 @@ bool CProcessor::Open(UINT width, UINT height, unsigned int flags, unsigned int
   return true;
 }
 
+void CProcessor::EvaluateQuirkNoDeintProcForProg()
+{
+  D3DADAPTER_IDENTIFIER9 AIdentifier = g_Windowing.GetAIdentifier();
+
+  for (unsigned idx = 0; NoDeintProcForProgDevices[idx].VendorID != 0; idx++)
+  {
+    if(NoDeintProcForProgDevices[idx].VendorID == AIdentifier.VendorId
+    && NoDeintProcForProgDevices[idx].DeviceID == AIdentifier.DeviceId)
+    {
+      m_quirk_nodeintprocforprog = true;
+      return;
+    }
+  }
+  m_quirk_nodeintprocforprog = false;
+}
+
 bool CProcessor::SelectProcessor()
 {
   // The CProcessor can be run after dxva or software decoding, possibly after software deinterlacing.
@@ -1395,19 +1450,23 @@ static DXVA2_Fixed32 ConvertRange(const DXVA2_ValueRange& range, int value, int
     return range.DefaultValue;
 }
 
-bool CProcessor::Render(RECT src, RECT dst, IDirect3DSurface9* target, REFERENCE_TIME time, DWORD flags)
+bool CProcessor::Render(CRect src, CRect dst, IDirect3DSurface9* target, REFERENCE_TIME time, DWORD flags)
 {
   CSingleLock lock(m_section);
 
-  if(m_interlace_methodGUI != g_settings.m_currentVideoSettings.m_InterlaceMethod
-  || (m_interlace_methodGUI == VS_INTERLACEMETHOD_AUTO && m_interlace_method != g_renderManager.AutoInterlaceMethod())
-  || m_deinterlace_mode != g_settings.m_currentVideoSettings.m_DeinterlaceMode
+  // With auto deinterlacing, the Ion Gen. 1 drops some frames with deinterlacing processor + progressive flags for progressive material.
+  // For that GPU (or when specified by an advanced setting), use the progressive processor.
+  // This is at the expense of the switch speed when video interlacing flags change and a deinterlacing processor is actually required.
+  EDEINTERLACEMODE mode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
+  if (g_advancedSettings.m_DXVANoDeintProcForProgressive || m_quirk_nodeintprocforprog)
+    mode = (flags & RENDER_FLAG_FIELD0 || flags & RENDER_FLAG_FIELD1) ? VS_DEINTERLACEMODE_FORCE : VS_DEINTERLACEMODE_OFF;
+  EINTERLACEMETHOD method = g_renderManager.AutoInterlaceMethod(g_settings.m_currentVideoSettings.m_InterlaceMethod);
+  if(m_interlace_method != method
+  || m_deinterlace_mode != mode
   || !m_process)
   {
-    m_deinterlace_mode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
-    m_interlace_method = m_interlace_methodGUI = g_settings.m_currentVideoSettings.m_InterlaceMethod;
-    if (m_interlace_methodGUI == VS_INTERLACEMETHOD_AUTO)
-      m_interlace_method = g_renderManager.AutoInterlaceMethod();
+    m_deinterlace_mode = mode;
+    m_interlace_method = method;
 
     if (!OpenProcessor())
       return false;
@@ -1439,8 +1498,11 @@ bool CProcessor::Render(RECT src, RECT dst, IDirect3DSurface9* target, REFERENCE
 
   D3DSURFACE_DESC desc;
   CHECK(target->GetDesc(&desc));
+  CRect rectTarget(0, 0, desc.Width, desc.Height);
+  CWIN32Util::CropSource(src, dst, rectTarget);
+  RECT sourceRECT = { src.x1, src.y1, src.x2, src.y2 };
+  RECT dstRECT    = { dst.x1, dst.y1, dst.x2, dst.y2 };
 
-  CWinRenderer::CropSource(src, dst, desc);
 
   // How to prepare the samples array for VideoProcessBlt
   // - always provide current picture + the number of forward and backward references required by the current processor.
@@ -1460,15 +1522,15 @@ bool CProcessor::Render(RECT src, RECT dst, IDirect3DSurface9* target, REFERENCE
     {
       DXVA2_VideoSample& vs = samp[(it->sample.Start - MinTime) / 2];
       vs = it->sample;
-      vs.SrcRect = src;
-      vs.DstRect = dst;
+      vs.SrcRect = sourceRECT;
+      vs.DstRect = dstRECT;
       if(vs.End == 0)
         vs.End = vs.Start + 2;
 
       // Override the sample format when the processor doesn't need to deinterlace or when deinterlacing is forced and flags are missing.
       if (m_progressive)
         vs.SampleFormat.SampleFormat = DXVA2_SampleProgressiveFrame;
-      else if (g_settings.m_currentVideoSettings.m_DeinterlaceMode == VS_DEINTERLACEMODE_FORCE && vs.SampleFormat.SampleFormat == DXVA2_SampleProgressiveFrame)
+      else if (m_deinterlace_mode == VS_DEINTERLACEMODE_FORCE && vs.SampleFormat.SampleFormat == DXVA2_SampleProgressiveFrame)
         vs.SampleFormat.SampleFormat = DXVA2_SampleFieldInterleavedEvenFirst;
 
       valid++;
@@ -1500,7 +1562,7 @@ bool CProcessor::Render(RECT src, RECT dst, IDirect3DSurface9* target, REFERENCE
   blt.TargetFrame = time;
   if (flags & RENDER_FLAG_FIELD1)
     blt.TargetFrame += 1;
-  blt.TargetRect  = dst;
+  blt.TargetRect  = dstRECT;
   blt.ConstrictionSize.cx = 0;
   blt.ConstrictionSize.cy = 0;
 
index 555538c..db7b040 100644 (file)
@@ -29,6 +29,7 @@
 #include <deque>
 #include <vector>
 #include "settings/VideoSettings.h"
+#include "guilib/Geometry.h"
 
 namespace DXVA {
 
@@ -123,7 +124,7 @@ public:
   bool           Open(UINT width, UINT height, unsigned int flags, unsigned int format);
   void           Close();
   REFERENCE_TIME Add(DVDVideoPicture* picture);
-  bool           Render(RECT src, RECT dst, IDirect3DSurface9* target, const REFERENCE_TIME time, DWORD flags);
+  bool           Render(CRect src, CRect dst, IDirect3DSurface9* target, const REFERENCE_TIME time, DWORD flags);
   unsigned       Size() { if (m_service) return m_size; return 0; }
 
   virtual void OnCreateDevice()  {}
@@ -136,6 +137,7 @@ protected:
   bool CreateSurfaces();
   bool OpenProcessor();
   bool SelectProcessor();
+  void EvaluateQuirkNoDeintProcForProg();
 
   IDirectXVideoProcessorService* m_service;
   IDirectXVideoProcessor*        m_process;
@@ -153,7 +155,6 @@ protected:
   unsigned         m_max_back_refs;
   unsigned         m_max_fwd_refs;
   EDEINTERLACEMODE m_deinterlace_mode;
-  EINTERLACEMETHOD m_interlace_methodGUI;
   EINTERLACEMETHOD m_interlace_method;
   bool             m_progressive; // true for progressive source or to force ignoring interlacing flags.
   unsigned         m_index;
@@ -171,6 +172,8 @@ protected:
 
   LPDIRECT3DSURFACE9* m_surfaces;
   CSurfaceContext* m_context;
+
+  bool             m_quirk_nodeintprocforprog;
 };
 
 };
index 162dc84..18fe368 100644 (file)
@@ -49,6 +49,17 @@ using namespace std;
 using namespace boost;
 using namespace VAAPI;
 
+static int compare_version(int major_l, int minor_l, int micro_l, int major_r, int minor_r, int micro_r)
+{
+  if(major_l < major_r) return -1;
+  if(major_l > major_r) return  1;
+  if(minor_l < minor_r) return -1;
+  if(minor_l > minor_r) return  1;
+  if(micro_l < micro_r) return -1;
+  if(micro_l > micro_r) return  1;
+  return 0;
+}
+
 static void RelBufferS(AVCodecContext *avctx, AVFrame *pic)
 { ((CDecoder*)((CDVDVideoCodecFFmpeg*)avctx->opaque)->GetHardware())->RelBuffer(avctx, pic); }
 
@@ -79,14 +90,30 @@ static CDisplayPtr GetGlobalDisplay()
   int major_version, minor_version;
   VAStatus res = vaInitialize(disp, &major_version, &minor_version);
 
+  CLog::Log(LOGDEBUG, "VAAPI - initialize version %d.%d", major_version, minor_version);
+
   if(res != VA_STATUS_SUCCESS)
   {
     CLog::Log(LOGERROR, "VAAPI - unable to initialize display %d - %s", res, vaErrorStr(res));
     return display;
   }
 
-  CLog::Log(LOGDEBUG, "VAAPI - initialize version %d.%d", major_version, minor_version);
-  display = CDisplayPtr(new CDisplay(disp));
+  const char* vendor = vaQueryVendorString(disp);
+  CLog::Log(LOGDEBUG, "VAAPI - vendor: %s", vendor);
+
+  bool deinterlace = true;
+  int major, minor, micro;
+  if(sscanf(vendor,  "Intel i965 driver - %d.%d.%d", &major, &minor, &micro) == 3)
+  {
+    /* older version will crash and burn */
+    if(compare_version(major, minor, micro, 1, 0, 17) < 0)
+    {
+      CLog::Log(LOGDEBUG, "VAAPI - deinterlace not support on this intel driver version");
+      deinterlace = false;
+    }
+  }
+
+  display = CDisplayPtr(new CDisplay(disp, deinterlace));
   display_global = display;
   return display;
 }
index fb29866..f6f1065 100644 (file)
@@ -37,18 +37,21 @@ typedef boost::shared_ptr<VASurfaceID const> VASurfacePtr;
 struct CDisplay
   : CCriticalSection
 {
-  CDisplay(VADisplay display)
+  CDisplay(VADisplay display, bool deinterlace)
     : m_display(display)
     , m_lost(false)
+    , m_deinterlace(deinterlace)
   {}
  ~CDisplay();
 
   VADisplay get() { return m_display; }
   bool      lost()          { return m_lost; }
   void      lost(bool lost) { m_lost = lost; }
+  bool      support_deinterlace() { return m_deinterlace; };
 private:
   VADisplay m_display;
   bool      m_lost;
+  bool      m_deinterlace;
 };
 
 typedef boost::shared_ptr<CDisplay> CDisplayPtr;
index 0ad0451..ea1f0bd 100644 (file)
@@ -73,12 +73,6 @@ static struct SInterlaceMapping
 , {VS_INTERLACEMETHOD_NONE                       , (VdpVideoMixerFeature)-1}
 };
 
-#define CHECK_VDPAU_RETURN(vdp, value) \
-        do { \
-          if(CheckStatus(vdp, __LINE__)) \
-            return value; \
-        } while(0);
-
 //since libvdpau 0.4, vdp_device_create_x11() installs a callback on the Display*,
 //if we unload libvdpau with dlclose(), we segfault on XCloseDisplay,
 //so we just keep a static handle to libvdpau around
@@ -92,13 +86,12 @@ CVDPAU::CVDPAU()
   surfaceNum      = presentSurfaceNum = 0;
   picAge.b_age    = picAge.ip_age[0] = picAge.ip_age[1] = 256*256*256*64;
   vdpauConfigured = false;
-  recover = false;
+  m_DisplayState = VDPAU_OPEN;
   m_mixerfield = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME;
   m_mixerstep  = 0;
 
   m_glPixmap = 0;
   m_Pixmap = 0;
-  m_glContext = 0;
   if (!glXBindTexImageEXT)
     glXBindTexImageEXT    = (PFNGLXBINDTEXIMAGEEXTPROC)glXGetProcAddress((GLubyte *) "glXBindTexImageEXT");
   if (!glXReleaseTexImageEXT)
@@ -106,6 +99,8 @@ CVDPAU::CVDPAU()
 
   totalAvailableOutputSurfaces = 0;
   outputSurface = presentSurface = VDP_INVALID_HANDLE;
+  vdp_flip_target = VDP_INVALID_HANDLE;
+  vdp_flip_queue = VDP_INVALID_HANDLE;
   vid_width = vid_height = OutWidth = OutHeight = 0;
   memset(&outRect, 0, sizeof(VdpRect));
   memset(&outRectVid, 0, sizeof(VdpRect));
@@ -121,14 +116,15 @@ CVDPAU::CVDPAU()
     outputSurfaces[i] = VDP_INVALID_HANDLE;
 
   videoMixer = VDP_INVALID_HANDLE;
+  m_BlackBar = NULL;
 
   upScale = g_advancedSettings.m_videoVDPAUScaling;
 }
 
 bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int surfaces)
 {
-  if(avctx->width  == 0
-  || avctx->height == 0)
+  if(avctx->coded_width  == 0
+  || avctx->coded_height == 0)
   {
     CLog::Log(LOGWARNING,"(VDPAU) no width/height available, can't init");
     return false;
@@ -150,6 +146,9 @@ bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int su
     }
   }
 
+  if (!m_dllAvUtil.Load())
+    return false;
+
   InitVDPAUProcs();
 
   if (vdp_device != VDP_INVALID_HANDLE)
@@ -165,12 +164,12 @@ bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int su
 #endif
     if(profile)
     {
-      if (!CDVDCodecUtils::IsVP3CompatibleWidth(avctx->width))
+      if (!CDVDCodecUtils::IsVP3CompatibleWidth(avctx->coded_width))
         CLog::Log(LOGWARNING,"(VDPAU) width %i might not be supported because of hardware bug", avctx->width);
    
       /* attempt to create a decoder with this width/height, some sizes are not supported by hw */
       VdpStatus vdp_st;
-      vdp_st = vdp_decoder_create(vdp_device, profile, avctx->width, avctx->height, 5, &decoder);
+      vdp_st = vdp_decoder_create(vdp_device, profile, avctx->coded_width, avctx->coded_height, 5, &decoder);
 
       if(vdp_st != VDP_STATUS_OK)
       {
@@ -183,14 +182,15 @@ bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int su
       CheckStatus(vdp_st, __LINE__);
     }
 
-    InitCSCMatrix(avctx->height);
-    MakePixmap(avctx->width,avctx->height);
+    InitCSCMatrix(avctx->coded_height);
 
     /* finally setup ffmpeg */
     avctx->get_buffer      = CVDPAU::FFGetBuffer;
     avctx->release_buffer  = CVDPAU::FFReleaseBuffer;
     avctx->draw_horiz_band = CVDPAU::FFDrawSlice;
     avctx->slice_flags=SLICE_FLAG_CODED_ORDER|SLICE_FLAG_ALLOW_FIELD;
+
+    g_Windowing.Register(this);
     return true;
   }
   return false;
@@ -208,26 +208,18 @@ void CVDPAU::Close()
   FiniVDPAUOutput();
   FiniVDPAUProcs();
 
-  if (m_glPixmap)
-  {
-    CLog::Log(LOGINFO, "GLX: Destroying glPixmap");
-    glXReleaseTexImageEXT(m_Display, m_glPixmap, GLX_FRONT_LEFT_EXT);
-    glXDestroyPixmap(m_Display, m_glPixmap);
-    m_glPixmap = NULL;
-  }
-  if (m_Pixmap)
+  while (!m_videoSurfaces.empty())
   {
-    CLog::Log(LOGINFO, "GLX: Destroying XPixmap");
-    XFreePixmap(m_Display, m_Pixmap);
-    m_Pixmap = NULL;
+    vdpau_render_state *render = m_videoSurfaces.back();
+    m_videoSurfaces.pop_back();
+    if (render->bitstream_buffers_allocated)
+      m_dllAvUtil.av_freep(&render->bitstream_buffers);
+    render->bitstream_buffers_allocated = 0;
+    free(render);
   }
 
-  if (m_glContext)
-  {
-    CLog::Log(LOGINFO, "GLX: Destroying glContext");
-    glXDestroyContext(m_Display, m_glContext);
-    m_glContext = NULL;
-  }
+  g_Windowing.Unregister(this);
+  m_dllAvUtil.Unload();
 }
 
 bool CVDPAU::MakePixmapGL()
@@ -275,36 +267,9 @@ bool CVDPAU::MakePixmapGL()
     XFree(fbConfigs);
     return false;
   }
-
-  /* to make the pixmap usable, it needs to have any context associated with it */
-  GLXContext  lastctx = glXGetCurrentContext();
-  GLXDrawable lastdrw = glXGetCurrentDrawable();
-
-  XVisualInfo *visInfo;
-  visInfo = glXGetVisualFromFBConfig(m_Display, fbConfigs[fbConfigIndex]);
-  if (!visInfo)
-  {
-    CLog::Log(LOGINFO, "GLX Error: Could not obtain X Visual Info for pixmap");
-    XFree(fbConfigs);
-    return false;
-  }
   XFree(fbConfigs);
 
-  CLog::Log(LOGINFO, "GLX: Creating Pixmap context");
-  m_glContext = glXCreateContext(m_Display, visInfo, NULL, True);
-  XFree(visInfo);
-
-  if (!glXMakeCurrent(m_Display, m_glPixmap, m_glContext))
-  {
-    CLog::Log(LOGINFO, "GLX Error: Could not make Pixmap current");
-    return false;
-  }
-
-  /* restore what thread had before */
-  glXMakeCurrent(m_Display, lastdrw, lastctx);
-
   return true;
-
 }
 
 bool CVDPAU::MakePixmap(int width, int height)
@@ -363,6 +328,13 @@ bool CVDPAU::MakePixmap(int width, int height)
 
 void CVDPAU::BindPixmap()
 {
+  CSharedLock lock(m_DecoderSection);
+
+  { CSharedLock dLock(m_DisplaySection);
+    if (m_DisplayState != VDPAU_OPEN)
+      return;
+  }
+
   if (m_glPixmap)
   {
     if(presentSurface != VDP_INVALID_HANDLE)
@@ -389,6 +361,13 @@ void CVDPAU::BindPixmap()
 
 void CVDPAU::ReleasePixmap()
 {
+  CSharedLock lock(m_DecoderSection);
+
+  { CSharedLock dLock(m_DisplaySection);
+    if (m_DisplayState != VDPAU_OPEN)
+      return;
+  }
+
   if (m_glPixmap)
   {
     glXReleaseTexImageEXT(m_Display, m_glPixmap, GLX_FRONT_LEFT_EXT);
@@ -396,22 +375,70 @@ void CVDPAU::ReleasePixmap()
   else CLog::Log(LOGERROR,"(VDPAU) ReleasePixmap called without valid pixmap");
 }
 
-bool CVDPAU::CheckRecover(bool force)
+void CVDPAU::OnLostDevice()
+{
+  CLog::Log(LOGNOTICE,"CVDPAU::OnLostDevice event");
+
+  CExclusiveLock lock(m_DecoderSection);
+  FiniVDPAUOutput();
+  FiniVDPAUProcs();
+
+  m_DisplayState = VDPAU_LOST;
+  m_DisplayEvent.Reset();
+}
+
+void CVDPAU::OnResetDevice()
+{
+  CLog::Log(LOGNOTICE,"CVDPAU::OnResetDevice event");
+
+  CExclusiveLock lock(m_DisplaySection);
+  if (m_DisplayState == VDPAU_LOST)
+  {
+    m_DisplayState = VDPAU_RESET;
+    m_DisplayEvent.Set();
+  }
+}
+
+int CVDPAU::Check(AVCodecContext* avctx)
 {
-  if (recover || force)
+  EDisplayState state;
+
+  { CSharedLock lock(m_DisplaySection);
+    state = m_DisplayState;
+  }
+
+  if (state == VDPAU_LOST)
+  {
+    CLog::Log(LOGNOTICE,"CVDPAU::Check waiting for display reset event");
+    if (!m_DisplayEvent.WaitMSec(2000))
+    {
+      CLog::Log(LOGERROR, "CVDPAU::Check - device didn't reset in reasonable time");
+      state = VDPAU_RESET;
+    }
+    else
+    {
+      CSharedLock lock(m_DisplaySection);
+      state = m_DisplayState;
+    }
+  }
+  if (state == VDPAU_RESET || state == VDPAU_ERROR)
   {
     CLog::Log(LOGNOTICE,"Attempting recovery");
 
+    CSingleLock gLock(g_graphicsContext);
+    CExclusiveLock lock(m_DecoderSection);
+
     FiniVDPAUOutput();
     FiniVDPAUProcs();
 
-    recover = false;
-
     InitVDPAUProcs();
 
-    return true;
+    if (state == VDPAU_RESET)
+      return VC_FLUSHED;
+    else
+      return VC_ERROR;
   }
-  return false;
+  return 0;
 }
 
 bool CVDPAU::IsVDPAUFormat(PixelFormat format)
@@ -436,8 +463,8 @@ void CVDPAU::CheckFeatures()
     };
 
     void const * parameter_values[] = {
-      &vid_width,
-      &vid_height,
+      &surface_width,
+      &surface_height,
       &vdp_chroma_type
     };
 
@@ -684,10 +711,13 @@ void CVDPAU::InitVDPAUProcs()
   VdpStatus vdp_st;
 
   // Create Device
+  // tested on 64bit Ubuntu 11.10 and it deadlocked without this
+  XLockDisplay(m_Display);
   vdp_st = dl_vdp_device_create_x11(m_Display, //x_display,
                                  mScreen, //x_screen,
                                  &vdp_device,
                                  &vdp_get_proc_address);
+  XUnlockDisplay(m_Display);
 
   CLog::Log(LOGNOTICE,"vdp_device = 0x%08x vdp_st = 0x%08x",vdp_device,vdp_st);
   if (vdp_st != VDP_STATUS_OK)
@@ -746,10 +776,21 @@ void CVDPAU::InitVDPAUProcs()
   
 #undef VDP_PROC
 
-  vdp_st = vdp_preemption_callback_register(vdp_device,
-                                   &VDPPreemptionCallbackFunction,
-                                   (void*)this);
-  CheckStatus(vdp_st, __LINE__);
+  // set all vdpau resources to invalid
+  vdp_flip_target = VDP_INVALID_HANDLE;
+  vdp_flip_queue = VDP_INVALID_HANDLE;
+  videoMixer = VDP_INVALID_HANDLE;
+  totalAvailableOutputSurfaces = 0;
+  presentSurface = VDP_INVALID_HANDLE;
+  outputSurface = VDP_INVALID_HANDLE;
+  for (int i = 0; i < NUM_OUTPUT_SURFACES; i++)
+    outputSurfaces[i] = VDP_INVALID_HANDLE;
+
+  m_vdpauOutputMethod = OUTPUT_NONE;
+
+  CExclusiveLock lock(m_DisplaySection);
+  m_DisplayState = VDPAU_OPEN;
+  vdpauConfigured = false;
 }
 
 void CVDPAU::FiniVDPAUProcs()
@@ -779,6 +820,8 @@ void CVDPAU::InitCSCMatrix(int Height)
 
 void CVDPAU::FiniVDPAUOutput()
 {
+  FiniOutputMethod();
+
   if (vdp_device == VDP_INVALID_HANDLE || !vdpauConfigured) return;
 
   CLog::Log(LOGNOTICE, " (VDPAU) %s", __FUNCTION__);
@@ -786,40 +829,21 @@ void CVDPAU::FiniVDPAUOutput()
   VdpStatus vdp_st;
 
   vdp_st = vdp_decoder_destroy(decoder);
-  CheckStatus(vdp_st, __LINE__);
+  if (CheckStatus(vdp_st, __LINE__))
+    return;
   decoder = VDP_INVALID_HANDLE;
 
-  vdp_st = vdp_presentation_queue_destroy(vdp_flip_queue);
-  CheckStatus(vdp_st, __LINE__);
-  vdp_flip_queue = VDP_INVALID_HANDLE;
-
-  vdp_st = vdp_presentation_queue_target_destroy(vdp_flip_target);
-  CheckStatus(vdp_st, __LINE__);
-  vdp_flip_target = VDP_INVALID_HANDLE;
-
-  outputSurface = presentSurface = VDP_INVALID_HANDLE;
-
-  for (int i = 0; i < totalAvailableOutputSurfaces; i++)
+  for (unsigned int i = 0; i < m_videoSurfaces.size(); ++i)
   {
-    vdp_st = vdp_output_surface_destroy(outputSurfaces[i]);
-    CheckStatus(vdp_st, __LINE__);
-    outputSurfaces[i] = VDP_INVALID_HANDLE;
-  }
-
-  vdp_st = vdp_video_mixer_destroy(videoMixer);
-  CheckStatus(vdp_st, __LINE__);
-  videoMixer = VDP_INVALID_HANDLE;
-
-  for(unsigned int i = 0; i < m_videoSurfaces.size(); i++)
-  {
-    vdp_st = vdp_video_surface_destroy(m_videoSurfaces[i]->surface);
-    CheckStatus(vdp_st, __LINE__);
-    m_videoSurfaces[i]->surface = VDP_INVALID_HANDLE;
-    free(m_videoSurfaces[i]);
+    vdpau_render_state *render = m_videoSurfaces[i];
+    if (render->surface != VDP_INVALID_HANDLE)
+    {
+      vdp_st = vdp_video_surface_destroy(render->surface);
+      render->surface = VDP_INVALID_HANDLE;
+    }
+    if (CheckStatus(vdp_st, __LINE__))
+      return;
   }
-  m_videoSurfaces.clear();
-  while (!m_DVDVideoPics.empty())
-    m_DVDVideoPics.pop();
 }
 
 
@@ -870,10 +894,12 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames)
   VdpDecoderProfile vdp_decoder_profile;
   vid_width = avctx->width;
   vid_height = avctx->height;
+  surface_width = avctx->coded_width;
+  surface_height = avctx->coded_height;
 
   past[1] = past[0] = current = future = NULL;
-  CLog::Log(LOGNOTICE, " (VDPAU) screenWidth:%i vidWidth:%i",OutWidth,vid_width);
-  CLog::Log(LOGNOTICE, " (VDPAU) screenHeight:%i vidHeight:%i",OutHeight,vid_height);
+  CLog::Log(LOGNOTICE, " (VDPAU) screenWidth:%i vidWidth:%i surfaceWidth:%i",OutWidth,vid_width,surface_width);
+  CLog::Log(LOGNOTICE, " (VDPAU) screenHeight:%i vidHeight:%i surfaceHeight:%i",OutHeight,vid_height,surface_height);
   ReadFormatOf(avctx->pix_fmt, vdp_decoder_profile, vdp_chroma_type);
 
   if(avctx->pix_fmt == PIX_FMT_VDPAU_H264)
@@ -887,21 +913,41 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames)
 
   vdp_st = vdp_decoder_create(vdp_device,
                               vdp_decoder_profile,
-                              vid_width,
-                              vid_height,
+                              surface_width,
+                              surface_height,
                               max_references,
                               &decoder);
-  CHECK_VDPAU_RETURN(vdp_st, false);
+  if (CheckStatus(vdp_st, __LINE__))
+    return false;
+
+  m_vdpauOutputMethod = OUTPUT_NONE;
+
+  vdpauConfigured = true;
+  return true;
+}
+
+bool CVDPAU::ConfigOutputMethod(AVCodecContext *avctx, AVFrame *pFrame)
+{
+  VdpStatus vdp_st;
+
+  if (m_vdpauOutputMethod == OUTPUT_PIXMAP)
+    return true;
+
+  FiniOutputMethod();
+
+  MakePixmap(avctx->width,avctx->height);
 
   vdp_st = vdp_presentation_queue_target_create_x11(vdp_device,
                                                     m_Pixmap, //x_window,
                                                     &vdp_flip_target);
-  CHECK_VDPAU_RETURN(vdp_st, false);
+  if (CheckStatus(vdp_st, __LINE__))
+    return false;
 
   vdp_st = vdp_presentation_queue_create(vdp_device,
                                          vdp_flip_target,
                                          &vdp_flip_queue);
-  CHECK_VDPAU_RETURN(vdp_st, false);
+  if (CheckStatus(vdp_st, __LINE__))
+    return false;
 
   totalAvailableOutputSurfaces = 0;
 
@@ -917,7 +963,8 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames)
                                        OutWidth,
                                        OutHeight,
                                        &outputSurfaces[i]);
-    CHECK_VDPAU_RETURN(vdp_st, false);
+    if (CheckStatus(vdp_st, __LINE__))
+      return false;
     totalAvailableOutputSurfaces++;
   }
   CLog::Log(LOGNOTICE, " (VDPAU) Total Output Surfaces Available: %i of a max (tmp: %i const: %i)",
@@ -925,10 +972,79 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames)
                        tmpMaxOutputSurfaces,
                        NUM_OUTPUT_SURFACES);
 
+  // create 3 pitches of black lines needed for clipping top
+  // and bottom lines when de-interlacing
+  m_BlackBar = new uint32_t[3*OutWidth];
+  memset(m_BlackBar, 0, 3*OutWidth*sizeof(uint32_t));
+
   surfaceNum = presentSurfaceNum = 0;
-  outputSurface = outputSurfaces[surfaceNum];
+  outputSurface = presentSurface = VDP_INVALID_HANDLE;
+  videoMixer = VDP_INVALID_HANDLE;
+
+  m_vdpauOutputMethod = OUTPUT_PIXMAP;
+
+  return true;
+}
+
+bool CVDPAU::FiniOutputMethod()
+{
+  VdpStatus vdp_st;
+
+  if (vdp_flip_queue != VDP_INVALID_HANDLE)
+  {
+    vdp_st = vdp_presentation_queue_destroy(vdp_flip_queue);
+    vdp_flip_queue = VDP_INVALID_HANDLE;
+    CheckStatus(vdp_st, __LINE__);
+  }
+
+  if (vdp_flip_target != VDP_INVALID_HANDLE)
+  {
+    vdp_st = vdp_presentation_queue_target_destroy(vdp_flip_target);
+    vdp_flip_target = VDP_INVALID_HANDLE;
+    CheckStatus(vdp_st, __LINE__);
+  }
+
+  if (m_glPixmap)
+  {
+    CLog::Log(LOGDEBUG, "GLX: Destroying glPixmap");
+    glXDestroyPixmap(m_Display, m_glPixmap);
+    m_glPixmap = None;
+  }
+
+  if (m_Pixmap)
+  {
+    CLog::Log(LOGDEBUG, "GLX: Destroying XPixmap");
+    XFreePixmap(m_Display, m_Pixmap);
+    m_Pixmap = None;
+  }
+
+  outputSurface = presentSurface = VDP_INVALID_HANDLE;
+
+  for (int i = 0; i < totalAvailableOutputSurfaces; i++)
+  {
+    if (outputSurfaces[i] == VDP_INVALID_HANDLE)
+       continue;
+    vdp_st = vdp_output_surface_destroy(outputSurfaces[i]);
+    outputSurfaces[i] = VDP_INVALID_HANDLE;
+    CheckStatus(vdp_st, __LINE__);
+  }
+
+  if (videoMixer != VDP_INVALID_HANDLE)
+  {
+    vdp_st = vdp_video_mixer_destroy(videoMixer);
+    videoMixer = VDP_INVALID_HANDLE;
+    if (CheckStatus(vdp_st, __LINE__));
+  }
+
+  if (m_BlackBar)
+  {
+    delete [] m_BlackBar;
+    m_BlackBar = NULL;
+  }
+
+  while (!m_DVDVideoPics.empty())
+    m_DVDVideoPics.pop();
 
-vdpauConfigured = true;
   return true;
 }
 
@@ -981,6 +1097,33 @@ void CVDPAU::SpewHardwareAvailable()  //Copyright (c) 2008 Wladimir J. van der L
 
 }
 
+bool CVDPAU::IsSurfaceValid(vdpau_render_state *render)
+{
+  // find render state in queue
+  bool found(false);
+  unsigned int i;
+  for(i = 0; i < m_videoSurfaces.size(); ++i)
+  {
+    if(m_videoSurfaces[i] == render)
+    {
+      found = true;
+      break;
+    }
+  }
+  if (!found)
+  {
+    CLog::Log(LOGERROR,"%s - video surface not found", __FUNCTION__);
+    return false;
+  }
+  if (m_videoSurfaces[i]->surface == VDP_INVALID_HANDLE)
+  {
+    m_videoSurfaces[i]->state = 0;
+    return false;
+  }
+
+  return true;
+}
+
 int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic)
 {
   //CLog::Log(LOGNOTICE,"%s",__FUNCTION__);
@@ -989,10 +1132,14 @@ int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic)
   struct pictureAge*    pA         = &vdp->picAge;
 
   // while we are waiting to recover we can't do anything
-  if(vdp->recover)
-  {
-    CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - returning due to awaiting recovery");
-    return -1;
+  CSharedLock lock(vdp->m_DecoderSection);
+
+  { CSharedLock dLock(vdp->m_DisplaySection);
+    if(vdp->m_DisplayState != VDPAU_OPEN)
+    {
+      CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - returning due to awaiting recovery");
+      return -1;
+    }
   }
 
   vdpau_render_state * render = NULL;
@@ -1015,11 +1162,22 @@ int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic)
     VdpDecoderProfile profile;
     ReadFormatOf(avctx->pix_fmt, profile, vdp->vdp_chroma_type);
     render = (vdpau_render_state*)calloc(sizeof(vdpau_render_state), 1);
+    if (render == NULL)
+    {
+      CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - calloc failed");
+      return -1;
+    }
+    render->surface = VDP_INVALID_HANDLE;
+    vdp->m_videoSurfaces.push_back(render);
+  }
+
+  if (render->surface == VDP_INVALID_HANDLE)
+  {
     vdp_st = vdp->vdp_video_surface_create(vdp->vdp_device,
-                                           vdp->vdp_chroma_type,
-                                           avctx->width,
-                                           avctx->height,
-                                           &render->surface);
+                                         vdp->vdp_chroma_type,
+                                         avctx->coded_width,
+                                         avctx->coded_height,
+                                         &render->surface);
     vdp->CheckStatus(vdp_st, __LINE__);
     if (vdp_st != VDP_STATUS_OK)
     {
@@ -1027,7 +1185,6 @@ int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic)
       CLog::Log(LOGERROR, "CVDPAU::FFGetBuffer - No Video surface available could be created");
       return -1;
     }
-    vdp->m_videoSurfaces.push_back(render);
   }
 
   if (render == NULL)
@@ -1062,19 +1219,31 @@ int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic)
 void CVDPAU::FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic)
 {
   //CLog::Log(LOGNOTICE,"%s",__FUNCTION__);
-  vdpau_render_state * render;
-  int i;
+  CDVDVideoCodecFFmpeg* ctx        = (CDVDVideoCodecFFmpeg*)avctx->opaque;
+  CVDPAU*               vdp        = (CVDPAU*)ctx->GetHardware();
+  vdpau_render_state  * render;
+  unsigned int i;
+
+  CSharedLock lock(vdp->m_DecoderSection);
 
   render=(vdpau_render_state*)pic->data[0];
   if(!render)
   {
-    CLog::Log(LOGERROR, "CVDPAU::FFDrawSlice - invalid context handle provided");
+    CLog::Log(LOGERROR, "CVDPAU::FFReleaseBuffer - invalid context handle provided");
     return;
   }
 
-  render->state &= ~FF_VDPAU_STATE_USED_FOR_REFERENCE;
   for(i=0; i<4; i++)
     pic->data[i]= NULL;
+
+  // find render state in queue
+  if (!vdp->IsSurfaceValid(render))
+  {
+    CLog::Log(LOGDEBUG, "CVDPAU::FFReleaseBuffer - ignoring invalid buffer");
+    return;
+  }
+
+  render->state &= ~FF_VDPAU_STATE_USED_FOR_REFERENCE;
 }
 
 
@@ -1085,9 +1254,14 @@ void CVDPAU::FFDrawSlice(struct AVCodecContext *s,
   CDVDVideoCodecFFmpeg* ctx = (CDVDVideoCodecFFmpeg*)s->opaque;
   CVDPAU*               vdp = (CVDPAU*)ctx->GetHardware();
 
-  /* while we are waiting to recover we can't do anything */
-  if(vdp->recover)
-    return;
+  // while we are waiting to recover we can't do anything
+  CSharedLock lock(vdp->m_DecoderSection);
+
+  { CSharedLock dLock(vdp->m_DisplaySection);
+    if(vdp->m_DisplayState != VDPAU_OPEN)
+      return;
+  }
+
 
   if(src->linesize[0] || src->linesize[1] || src->linesize[2]
   || offset[0] || offset[1] || offset[2])
@@ -1106,6 +1280,13 @@ void CVDPAU::FFDrawSlice(struct AVCodecContext *s,
     return;
   }
 
+  // ffmpeg vc-1 decoder does not flush, make sure the data buffer is still valid
+  if (!vdp->IsSurfaceValid(render))
+  {
+    CLog::Log(LOGWARNING, "CVDPAU::FFDrawSlice - ignoring invalid buffer");
+    return;
+  }
+
   uint32_t max_refs = 0;
   if(s->pix_fmt == PIX_FMT_VDPAU_H264)
     max_refs = render->info.h264.num_ref_frames;
@@ -1132,12 +1313,19 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame)
   VdpStatus vdp_st;
   VdpTime time;
 
-  if (CheckRecover(false))
-    return VC_FLUSHED;
+  int result = Check(avctx);
+  if (result)
+    return result;
+
+  CSharedLock lock(m_DecoderSection);
 
   if (!vdpauConfigured)
     return VC_ERROR;
 
+  // configure vdpau output
+  if (!ConfigOutputMethod(avctx, pFrame))
+    return VC_FLUSHED;
+
   outputSurface = outputSurfaces[surfaceNum];
 
   CheckFeatures();
@@ -1165,6 +1353,13 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame)
     if(!render)
       return VC_ERROR;
 
+    // ffmpeg vc-1 decoder does not flush, make sure the data buffer is still valid
+    if (!IsSurfaceValid(render))
+    {
+      CLog::Log(LOGWARNING, "CVDPAU::Decode - ignoring invalid buffer");
+      return VC_BUFFER;
+    }
+
     render->state |= FF_VDPAU_STATE_USED_FOR_RENDER;
 
     ClearUsedForRender(&past[0]);
@@ -1279,6 +1474,8 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame)
 
   vdp_st = vdp_presentation_queue_block_until_surface_idle(vdp_flip_queue,outputSurface,&time);
 
+  VdpRect sourceRect = {0,0,vid_width, vid_height};
+
   vdp_st = vdp_video_mixer_render(videoMixer,
                                   VDP_INVALID_HANDLE,
                                   0, 
@@ -1288,7 +1485,7 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame)
                                   current->surface,
                                   1,
                                   futu_surfaces,
-                                  NULL,
+                                  &sourceRect,
                                   outputSurface,
                                   &(outRectVid),
                                   &(outRectVid),
@@ -1306,6 +1503,29 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame)
   }
   else
   {
+    // in order to clip top and bottom lines when de-interlacing
+    // we black those lines as a work around for not working
+    // background colour using the mixer
+    // pixel perfect is preferred over overscanning or zooming
+
+    VdpRect clipRect = outRectVid;
+    clipRect.y1 = clipRect.y0 + 2;
+    uint32_t *data[] = {m_BlackBar};
+    uint32_t pitches[] = {outRectVid.x1};
+    vdp_st = vdp_output_surface_put_bits_native(outputSurface,
+                                        (void**)data,
+                                        pitches,
+                                        &clipRect);
+    CheckStatus(vdp_st, __LINE__);
+
+    clipRect = outRectVid;
+    clipRect.y0 = clipRect.y1 - 2;
+    vdp_st = vdp_output_surface_put_bits_native(outputSurface,
+                                        (void**)data,
+                                        pitches,
+                                        &clipRect);
+    CheckStatus(vdp_st, __LINE__);
+
     if(m_mixerstep == 1)
       return VC_PICTURE;
     else
@@ -1318,6 +1538,13 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame)
 
 bool CVDPAU::GetPicture(AVCodecContext* avctx, AVFrame* frame, DVDVideoPicture* picture)
 {
+  CSharedLock lock(m_DecoderSection);
+
+  { CSharedLock dLock(m_DisplaySection);
+    if (m_DisplayState != VDPAU_OPEN)
+      return false;
+  }
+
   *picture = m_DVDVideoPics.front();
   // if this is the first field of an interlaced frame, we'll need
   // this same picture for the second field later
@@ -1358,6 +1585,14 @@ void CVDPAU::Present()
 {
   //CLog::Log(LOGNOTICE,"%s",__FUNCTION__);
   VdpStatus vdp_st;
+
+  CSharedLock lock(m_DecoderSection);
+
+  { CSharedLock dLock(m_DisplaySection);
+    if (m_DisplayState != VDPAU_OPEN)
+      return;
+  }
+
   presentSurface = outputSurface;
 
   vdp_st = vdp_presentation_queue_display(vdp_flip_queue,
@@ -1368,27 +1603,25 @@ void CVDPAU::Present()
   CheckStatus(vdp_st, __LINE__);
 }
 
-void CVDPAU::VDPPreemptionCallbackFunction(VdpDevice device, void* context)
-{
-  CLog::Log(LOGERROR,"VDPAU Device Preempted - attempting recovery");
-  CVDPAU* pCtx = (CVDPAU*)context;
-  pCtx->recover = true;
-}
-
 bool CVDPAU::CheckStatus(VdpStatus vdp_st, int line)
 {
-  if (vdp_st == VDP_STATUS_HANDLE_DEVICE_MISMATCH
-  ||  vdp_st == VDP_STATUS_DISPLAY_PREEMPTED)
-    recover = true;
-
-  // no need to log errors about this case, as it will happen on cleanup
-  if (vdp_st == VDP_STATUS_INVALID_HANDLE && recover && vdpauConfigured)
-    return false;
-
   if (vdp_st != VDP_STATUS_OK)
   {
     CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", vdp_get_error_string(vdp_st), vdp_st, __FILE__, line);
-    recover = true;
+
+    CExclusiveLock lock(m_DisplaySection);
+
+    if(m_DisplayState == VDPAU_OPEN)
+    {
+      if (vdp_st == VDP_STATUS_DISPLAY_PREEMPTED)
+      {
+        m_DisplayEvent.Reset();
+        m_DisplayState = VDPAU_LOST;
+      }
+      else
+        m_DisplayState = VDPAU_ERROR;
+    }
+
     return true;
   }
   return false;
index 2056de1..2801d22 100644 (file)
@@ -21,6 +21,7 @@
  *
  */
 
+#include "DllAvUtil.h"
 #include "DVDVideoCodec.h"
 #include "DVDVideoCodecFFmpeg.h"
 #include "libavcodec/vdpau.h"
 #include <GL/glx.h>
 #include <queue>
 #include "threads/CriticalSection.h"
+#include "threads/SharedSection.h"
 #include "settings/VideoSettings.h"
+#include "guilib/DispResource.h"
+#include "threads/Event.h"
 namespace Surface { class CSurface; }
 
 #define NUM_OUTPUT_SURFACES                4
@@ -44,6 +48,7 @@ namespace Surface { class CSurface; }
 
 class CVDPAU
  : public CDVDVideoCodecFFmpeg::IHardwareDecoder
+ , public IDispResource
 {
 public:
 
@@ -69,13 +74,8 @@ public:
   virtual void Reset();
   virtual void Close();
 
-  virtual int  Check(AVCodecContext* avctx) 
-  { 
-    if(CheckRecover(false))
-      return VC_FLUSHED;
-    else
-      return 0;
-  }
+  virtual int  Check(AVCodecContext* avctx);
+
   virtual const std::string Name() { return "vdpau"; }
 
   bool MakePixmap(int width, int height);
@@ -88,7 +88,6 @@ public:
   PFNGLXRELEASETEXIMAGEEXTPROC glXReleaseTexImageEXT;
   GLXPixmap  m_glPixmap;
   Pixmap  m_Pixmap;
-  GLXContext m_glContext;
 
   static void             FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic);
   static void             FFDrawSlice(struct AVCodecContext *s,
@@ -96,15 +95,13 @@ public:
                                int y, int type, int height);
   static int              FFGetBuffer(AVCodecContext *avctx, AVFrame *pic);
 
-  static void             VDPPreemptionCallbackFunction(VdpDevice device, void* context);
-
   void Present();
   bool ConfigVDPAU(AVCodecContext *avctx, int ref_frames);
   void SpewHardwareAvailable();
   void InitCSCMatrix(int Height);
   bool CheckStatus(VdpStatus vdp_st, int line);
+  bool IsSurfaceValid(vdpau_render_state *render);
 
-  bool CheckRecover(bool force = false);
   void CheckFeatures();
   void SetColor();
   void SetNoiseReduction();
@@ -113,7 +110,6 @@ public:
   void SetHWUpscaling();
 
   pictureAge picAge;
-  bool       recover;
   vdpau_render_state *past[2], *current, *future;
   int        tmpDeintMode, tmpDeintGUI, tmpDeint;
   float      tmpNoiseReduction, tmpSharpness;
@@ -140,6 +136,8 @@ public:
   void      InitVDPAUProcs();
   void      FiniVDPAUProcs();
   void      FiniVDPAUOutput();
+  bool      ConfigOutputMethod(AVCodecContext *avctx, AVFrame *pFrame);
+  bool      FiniOutputMethod();
 
   VdpDevice                            vdp_device;
   VdpGetProcAddress *                  vdp_get_proc_address;
@@ -206,9 +204,11 @@ public:
   int      presentSurfaceNum;
   int      totalAvailableOutputSurfaces;
   uint32_t vid_width, vid_height;
+  int      surface_width, surface_height;
   uint32_t max_references;
   Display* m_Display;
   bool     vdpauConfigured;
+  uint32_t *m_BlackBar;
 
 
   VdpVideoMixerPictureStructure m_mixerfield;
@@ -227,4 +227,29 @@ public:
                           , VdpChromaType     &chroma_type);
 
   std::vector<vdpau_render_state*> m_videoSurfaces;
+  DllAvUtil   m_dllAvUtil;
+
+  enum VDPAUOutputMethod
+  {
+    OUTPUT_NONE,
+    OUTPUT_PIXMAP,
+    OUTPUT_GL_INTEROP_RGB,
+    OUTPUT_GL_INTEROP_YUV
+  };
+  VDPAUOutputMethod m_vdpauOutputMethod;
+
+  // OnLostDevice triggers transition from all states to LOST
+  // internal errors trigger transition from OPEN to RESET
+  // OnResetDevice triggers transition from LOST to RESET
+  enum EDisplayState
+  { VDPAU_OPEN
+  , VDPAU_RESET
+  , VDPAU_LOST
+  , VDPAU_ERROR
+  } m_DisplayState;
+  CSharedSection m_DecoderSection;
+  CSharedSection m_DisplaySection;
+  CEvent         m_DisplayEvent;
+  virtual void OnLostDevice();
+  virtual void OnResetDevice();
 };
index d717d48..dd8d977 100644 (file)
@@ -156,6 +156,7 @@ public:
     iLevel = 0;
     iProfile = 0;
     bPTSInvalid = false;
+    bForcedAspect = false;
     type = STREAM_VIDEO;
   }
 
@@ -169,7 +170,7 @@ public:
   int iLevel; // encoder level of the stream reported by the decoder. used to qualify hw decoders.
   int iProfile; // encoder profile of the stream reported by the decoder. used to qualify hw decoders.
   bool bPTSInvalid; // pts cannot be trusted (avi's).
-  
+  bool bForcedAspect; // aspect is forced from container
 };
 
 class CDemuxStreamAudio : public CDemuxStream
index 15ebb82..46287a8 100644 (file)
@@ -90,11 +90,12 @@ void CDemuxStreamSubtitleFFmpeg::GetStreamInfo(std::string& strInfo)
 // these need to be put somewhere that are compiled, we should have some better place for it
 
 CCriticalSection DllAvCodec::m_critSection;
+static CCriticalSection m_logSection;
 std::map<uintptr_t, CStdString> g_logbuffer;
 
 void ff_avutil_log(void* ptr, int level, const char* format, va_list va)
 {
-  CSingleLock lock(DllAvCodec::m_critSection);
+  CSingleLock lock(m_logSection);
   uintptr_t threadId = (uintptr_t)CThread::GetCurrentThreadId();
   CStdString &buffer = g_logbuffer[threadId];
 
@@ -771,7 +772,7 @@ DemuxPacket* CDVDDemuxFFmpeg::Read()
           if(duration > stream->duration)
           {
             stream->duration = duration;
-            duration = m_dllAvUtil.av_rescale_rnd(stream->duration, stream->time_base.num * AV_TIME_BASE, stream->time_base.den, AV_ROUND_NEAR_INF);
+            duration = m_dllAvUtil.av_rescale_rnd(stream->duration, (int64_t)stream->time_base.num * AV_TIME_BASE, stream->time_base.den, AV_ROUND_NEAR_INF);
             if ((m_pFormatContext->duration == (int64_t)AV_NOPTS_VALUE && m_pFormatContext->file_size > 0)
                 ||  (m_pFormatContext->duration != (int64_t)AV_NOPTS_VALUE && duration > m_pFormatContext->duration))
               m_pFormatContext->duration = duration;
@@ -951,6 +952,22 @@ int CDVDDemuxFFmpeg::GetNrOfStreams()
   return i;
 }
 
+static double SelectAspect(AVStream* st, bool* forced)
+{
+  *forced = false;
+  /* if stream aspect is 1:1 or 0:0 use codec aspect */
+  if((st->sample_aspect_ratio.den == 1 || st->sample_aspect_ratio.den == 0)
+  && (st->sample_aspect_ratio.num == 1 || st->sample_aspect_ratio.num == 0)
+  && st->codec->sample_aspect_ratio.num != 0)
+    return av_q2d(st->codec->sample_aspect_ratio);
+
+  *forced = true;
+  if(st->sample_aspect_ratio.num != 0)
+    return av_q2d(st->sample_aspect_ratio);
+
+  return 0.0;
+}
+
 void CDVDDemuxFFmpeg::AddStream(int iId)
 {
   AVStream* pStream = m_pFormatContext->streams[iId];
@@ -1016,10 +1033,7 @@ void CDVDDemuxFFmpeg::AddStream(int iId)
 
         st->iWidth = pStream->codec->width;
         st->iHeight = pStream->codec->height;
-        if (pStream->sample_aspect_ratio.num == 0)
-          st->fAspect = 0.0;
-        else
-          st->fAspect = av_q2d(pStream->sample_aspect_ratio) * pStream->codec->width / pStream->codec->height;
+        st->fAspect = SelectAspect(pStream, &st->bForcedAspect) * pStream->codec->width / pStream->codec->height;
         st->iLevel = pStream->codec->level;
         st->iProfile = pStream->codec->profile;
 
@@ -1176,7 +1190,7 @@ void CDVDDemuxFFmpeg::AddStream(int iId)
 
 std::string CDVDDemuxFFmpeg::GetFileName()
 {
-  if(m_pInput && m_pInput)
+  if(m_pInput)
     return m_pInput->GetFileName();
   else
     return "";
@@ -1274,7 +1288,7 @@ bool CDVDDemuxFFmpeg::SeekChapter(int chapter, double* startpts)
 
         AVChapter *ch = m_pFormatContext->chapters[chapter-1];
         double dts = ConvertTimestamp(ch->start, ch->time_base.den, ch->time_base.num);
-        return SeekTime(DVD_TIME_TO_MSEC(dts), false, startpts);
+        return SeekTime(DVD_TIME_TO_MSEC(dts), true, startpts);
     #else
         return false;
     #endif
index 7f91cef..2b93b28 100644 (file)
@@ -75,7 +75,7 @@ bool CDVDDemuxVobsub::Open(const string& filename, const string& subfilename)
   hints.codec = CODEC_ID_DVD_SUBTITLE;
 
   char line[2048];
-  bool res;
+  DECLARE_UNUSED(bool,res)
 
   SState state;
   state.delay = 0;
index 8cc4898..3235fb8 100644 (file)
@@ -202,7 +202,9 @@ bool CDVDFileInfo::ExtractThumb(const CStdString &strPath, const CStdString &str
         {
           {
             int nWidth = g_advancedSettings.m_thumbSize;
-            double aspect = (double)picture.iWidth / (double)picture.iHeight;
+            double aspect = (double)picture.iDisplayWidth / (double)picture.iDisplayHeight;
+            if(hint.forced_aspect && hint.aspect != 0)
+              aspect = hint.aspect;
             int nHeight = (int)((double)g_advancedSettings.m_thumbSize / aspect);
 
             DllSwScale dllSwScale;
index 27a2997..8d86fa8 100644 (file)
 #ifdef HAVE_LIBBLURAY
 
 #include "DVDInputStreamBluray.h"
-#include "DynamicDll.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
 #include "filesystem/File.h"
 #include "filesystem/Directory.h"
+#include "DllLibbluray.h"
 
 #define LIBBLURAY_BYTESEEK 0
 
-extern "C"
-{
-#include <libbluray/bluray.h>
-#include <libbluray/filesystem.h>
-#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
-#include <libbluray/log_control.h>
-#endif
-}
-
-class DllLibblurayInterface
-{
-public:
-  virtual ~DllLibblurayInterface() {};
-  virtual uint32_t bd_get_titles(BLURAY *bd, uint8_t flags, uint32_t min_title_length)=0;
-  virtual BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx, unsigned angle)=0;
-  virtual BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist, unsigned angle)=0;
-  virtual void bd_free_title_info(BLURAY_TITLE_INFO *title_info)=0;
-  virtual BLURAY *bd_open(const char* device_path, const char* keyfile_path)=0;
-  virtual void bd_close(BLURAY *bd)=0;
-  virtual int64_t bd_seek(BLURAY *bd, uint64_t pos)=0;
-  virtual int64_t bd_seek_time(BLURAY *bd, uint64_t tick)=0;
-  virtual int bd_read(BLURAY *bd, unsigned char *buf, int len)=0;
-  virtual int64_t bd_seek_chapter(BLURAY *bd, unsigned chapter)=0;
-  virtual int64_t bd_chapter_pos(BLURAY *bd, unsigned chapter)=0;
-  virtual uint32_t bd_get_current_chapter(BLURAY *bd)=0;
-  virtual int64_t bd_seek_mark(BLURAY *bd, unsigned mark)=0;
-  virtual int bd_select_playlist(BLURAY *bd, uint32_t playlist)=0;
-  virtual int bd_select_title(BLURAY *bd, uint32_t title)=0;
-  virtual int bd_select_angle(BLURAY *bd, unsigned angle)=0;
-  virtual void bd_seamless_angle_change(BLURAY *bd, unsigned angle)=0;
-  virtual uint64_t bd_get_title_size(BLURAY *bd)=0;
-  virtual uint32_t bd_get_current_title(BLURAY *bd)=0;
-  virtual unsigned bd_get_current_angle(BLURAY *bd)=0;
-  virtual uint64_t bd_tell(BLURAY *bd)=0;
-  virtual uint64_t bd_tell_time(BLURAY *bd)=0;
-  virtual BD_FILE_OPEN bd_register_file(BD_FILE_OPEN p)=0;
-  virtual BD_DIR_OPEN bd_register_dir(BD_DIR_OPEN p)=0;
-
-#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
-  virtual void     bd_set_debug_handler(BD_LOG_FUNC)=0;
-  virtual void     bd_set_debug_mask(uint32_t mask)=0;
-  virtual uint32_t bd_get_debug_mask(void)=0;
-#endif
-};
-
-class DllLibbluray : public DllDynamic, DllLibblurayInterface
-{
-  DECLARE_DLL_WRAPPER(DllLibbluray, DLL_PATH_LIBBLURAY)
-#ifdef HAVE_LIBBBLURAY_HAVE_LIBBLURAY_NOANGLE
-  DEFINE_METHOD3(uint32_t,            bd_get_titles,          (BLURAY *p1, uint8_t p2))
-  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_title_info,      (BLURAY *p1, uint32_t p2))
-  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_playlist_info,   (BLURAY *p1, uint32_t p2))
-#else
-  DEFINE_METHOD3(uint32_t,            bd_get_titles,          (BLURAY *p1, uint8_t p2, uint32_t p3))
-  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_title_info,      (BLURAY *p1, uint32_t p2, unsigned p3))
-  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_playlist_info,   (BLURAY *p1, uint32_t p2, unsigned p3))
-#endif
-  DEFINE_METHOD1(void,                bd_free_title_info,     (BLURAY_TITLE_INFO *p1))
-  DEFINE_METHOD2(BLURAY*,             bd_open,                (const char* p1, const char* p2))
-  DEFINE_METHOD1(void,                bd_close,               (BLURAY *p1))
-  DEFINE_METHOD2(int64_t,             bd_seek,                (BLURAY *p1, uint64_t p2))
-  DEFINE_METHOD2(int64_t,             bd_seek_time,           (BLURAY *p1, uint64_t p2))
-  DEFINE_METHOD3(int,                 bd_read,                (BLURAY *p1, unsigned char *p2, int p3))
-  DEFINE_METHOD2(int64_t,             bd_seek_chapter,        (BLURAY *p1, unsigned p2))
-  DEFINE_METHOD2(int64_t,             bd_chapter_pos,         (BLURAY *p1, unsigned p2))
-  DEFINE_METHOD1(uint32_t,            bd_get_current_chapter, (BLURAY *p1))
-  DEFINE_METHOD2(int64_t,             bd_seek_mark,           (BLURAY *p1, unsigned p2))
-  DEFINE_METHOD2(int,                 bd_select_playlist,     (BLURAY *p1, uint32_t p2))
-  DEFINE_METHOD2(int,                 bd_select_title,        (BLURAY *p1, uint32_t p2))
-  DEFINE_METHOD2(int,                 bd_select_angle,        (BLURAY *p1, unsigned p2))
-  DEFINE_METHOD2(void,                bd_seamless_angle_change,(BLURAY *p1, unsigned p2))
-  DEFINE_METHOD1(uint64_t,            bd_get_title_size,      (BLURAY *p1))
-  DEFINE_METHOD1(uint32_t,            bd_get_current_title,   (BLURAY *p1))
-  DEFINE_METHOD1(unsigned,            bd_get_current_angle,   (BLURAY *p1))
-  DEFINE_METHOD1(uint64_t,            bd_tell,                (BLURAY *p1))
-  DEFINE_METHOD1(uint64_t,            bd_tell_time,           (BLURAY *p1))
-  DEFINE_METHOD1(BD_FILE_OPEN,        bd_register_file,       (BD_FILE_OPEN p1))
-  DEFINE_METHOD1(BD_DIR_OPEN,         bd_register_dir,        (BD_DIR_OPEN p1))
-
-#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
-  DEFINE_METHOD1(void,                bd_set_debug_handler,   (BD_LOG_FUNC p1))
-  DEFINE_METHOD1(void,                bd_set_debug_mask,      (uint32_t p1))
-  DEFINE_METHOD0(uint32_t,            bd_get_debug_mask)
-#endif
-
-  BEGIN_METHOD_RESOLVE()
-#ifdef HAVE_LIBBBLURAY_HAVE_LIBBLURAY_NOANGLE
-    RESOLVE_METHOD_RENAME(bd_get_titles,        bd_get_titles_noangle)
-    RESOLVE_METHOD_RENAME(bd_get_title_info,    bd_get_title_info_noangle)
-    RESOLVE_METHOD_RENAME(bd_get_playlist_info, bd_get_playlist_info_noangle)
-#else
-    RESOLVE_METHOD(bd_get_titles)
-    RESOLVE_METHOD(bd_get_title_info)
-    RESOLVE_METHOD(bd_get_playlist_info)
-#endif
-    RESOLVE_METHOD_RENAME(bd_free_title_info,   bd_free_title_info)
-    RESOLVE_METHOD_RENAME(bd_open,              bd_open)
-    RESOLVE_METHOD_RENAME(bd_close,             bd_close)
-    RESOLVE_METHOD_RENAME(bd_seek,              bd_seek)
-    RESOLVE_METHOD_RENAME(bd_seek_time,         bd_seek_time)
-    RESOLVE_METHOD_RENAME(bd_read,              bd_read)
-    RESOLVE_METHOD_RENAME(bd_seek_chapter,      bd_seek_chapter)
-    RESOLVE_METHOD_RENAME(bd_chapter_pos,       bd_chapter_pos)
-    RESOLVE_METHOD_RENAME(bd_get_current_chapter, bd_get_current_chapter)
-    RESOLVE_METHOD_RENAME(bd_seek_mark,         bd_seek_mark)
-    RESOLVE_METHOD_RENAME(bd_select_playlist,   bd_select_playlist)
-    RESOLVE_METHOD_RENAME(bd_select_title,      bd_select_title)
-    RESOLVE_METHOD_RENAME(bd_select_angle,      bd_select_angle)
-    RESOLVE_METHOD_RENAME(bd_seamless_angle_change, bd_seamless_angle_change)
-    RESOLVE_METHOD_RENAME(bd_get_title_size,    bd_get_title_size)
-    RESOLVE_METHOD_RENAME(bd_get_current_title, bd_get_current_title)
-    RESOLVE_METHOD_RENAME(bd_get_current_angle, bd_get_current_angle)
-    RESOLVE_METHOD_RENAME(bd_tell,              bd_tell)
-    RESOLVE_METHOD_RENAME(bd_tell_time,         bd_tell_time)
-    RESOLVE_METHOD_RENAME(bd_register_file,     bd_register_file)
-    RESOLVE_METHOD_RENAME(bd_register_dir,      bd_register_dir)
-#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
-    RESOLVE_METHOD(bd_set_debug_handler)
-    RESOLVE_METHOD(bd_set_debug_mask)
-    RESOLVE_METHOD(bd_get_debug_mask)
-#endif
-  END_METHOD_RESOLVE()
-
-#ifdef HAVE_LIBBBLURAY_HAVE_LIBBLURAY_NOANGLE
-  uint32_t bd_get_titles(BLURAY *bd, uint8_t flags, uint32_t min_title_length)
-      {return bd_get_titles_noangle(bd, flags);           }
-  BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx, unsigned angle)
-      {return bd_get_title_info_noangle(bd, title_idx);   }
-  BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist, unsigned angle)
-      {return bd_get_playlist_info_noangle(bd, playlist); }
-#endif
-};
-
-
 using namespace std;
 using namespace XFILE;
 
@@ -183,7 +49,7 @@ static bool is_udf_iso_path(const char* filename)
   return bResult;
 }
 
-static void file_close(BD_FILE_H *file)
+void DllLibbluray::file_close(BD_FILE_H *file)
 {
   if (file)
   {
@@ -194,17 +60,17 @@ static void file_close(BD_FILE_H *file)
   }
 }
 
-static int64_t file_seek(BD_FILE_H *file, int64_t offset, int32_t origin)
+int64_t DllLibbluray::file_seek(BD_FILE_H *file, int64_t offset, int32_t origin)
 {
   return static_cast<CFile*>(file->internal)->Seek(offset, origin);
 }
 
-static int64_t file_tell(BD_FILE_H *file)
+int64_t DllLibbluray::file_tell(BD_FILE_H *file)
 {
   return static_cast<CFile*>(file->internal)->GetPosition();
 }
 
-static int file_eof(BD_FILE_H *file)
+int DllLibbluray::file_eof(BD_FILE_H *file)
 {
   if(static_cast<CFile*>(file->internal)->GetPosition() == static_cast<CFile*>(file->internal)->GetLength())
     return 1;
@@ -212,17 +78,17 @@ static int file_eof(BD_FILE_H *file)
     return 0;
 }
 
-static int64_t file_read(BD_FILE_H *file, uint8_t *buf, int64_t size)
+int64_t DllLibbluray::file_read(BD_FILE_H *file, uint8_t *buf, int64_t size)
 {
   return static_cast<CFile*>(file->internal)->Read(buf, size);
 }
 
-static int64_t file_write(BD_FILE_H *file, const uint8_t *buf, int64_t size)
+int64_t DllLibbluray::file_write(BD_FILE_H *file, const uint8_t *buf, int64_t size)
 {
     return -1;
 }
 
-static BD_FILE_H *file_open(const char* filename, const char *mode)
+BD_FILE_H * DllLibbluray::file_open(const char* filename, const char *mode)
 {
     BD_FILE_H *file = new BD_FILE_H;
 
@@ -271,7 +137,7 @@ struct SDirState
   int           curr;
 };
 
-static void dir_close(BD_DIR_H *dir)
+void DllLibbluray::dir_close(BD_DIR_H *dir)
 {
   if (dir)
   {
@@ -282,7 +148,7 @@ static void dir_close(BD_DIR_H *dir)
 }
 
 
-static int dir_read(BD_DIR_H *dir, BD_DIRENT *entry)
+int DllLibbluray::dir_read(BD_DIR_H *dir, BD_DIRENT *entry)
 {
     SDirState* state = static_cast<SDirState*>(dir->internal);
 
@@ -296,7 +162,7 @@ static int dir_read(BD_DIR_H *dir, BD_DIRENT *entry)
     return 0;
 }
 
-static BD_DIR_H *dir_open(const char* dirname)
+BD_DIR_H *DllLibbluray::dir_open(const char* dirname)
 {
     CLog::Log(LOGDEBUG, "CDVDInputStreamBluray - Opening dir %s\n", dirname);
     SDirState *st = new SDirState();
@@ -326,7 +192,7 @@ static BD_DIR_H *dir_open(const char* dirname)
 
 
 #ifndef HAVE_LIBBLURAY_NOLOGCONTROL
-static void bluray_logger(const char* msg)
+void DllLibbluray::bluray_logger(const char* msg)
 {
   CLog::Log(LOGDEBUG, "CDVDInputStreamBluray::Logger - %s", msg);
 }
@@ -377,10 +243,10 @@ bool CDVDInputStreamBluray::Open(const char* strFile, const std::string& content
   if (!m_dll)
     return false;
 
-  m_dll->bd_register_dir(dir_open);
-  m_dll->bd_register_file(file_open);
+  m_dll->bd_register_dir(DllLibbluray::dir_open);
+  m_dll->bd_register_file(DllLibbluray::file_open);
 #ifndef HAVE_LIBBLURAY_NOLOGCONTROL
-  m_dll->bd_set_debug_handler(bluray_logger);
+  m_dll->bd_set_debug_handler(DllLibbluray::bluray_logger);
   m_dll->bd_set_debug_mask(DBG_CRIT);
 #endif
 
index 6a312a9..9c1e852 100644 (file)
@@ -20,9 +20,9 @@
  */
 
 #include "DVDInputStreamFile.h"
-#include "FileItem.h"
 #include "filesystem/File.h"
 #include "utils/log.h"
+#include "utils/URIUtils.h"
 
 using namespace XFILE;
 
@@ -44,20 +44,15 @@ bool CDVDInputStreamFile::IsEOF()
 
 bool CDVDInputStreamFile::Open(const char* strFile, const std::string& content)
 {
-  if (!CDVDInputStream::Open(strFile, content)) return false;
-
-  CStdString stdFile = strFile;
+  if (!CDVDInputStream::Open(strFile, content))
+    return false;
 
   m_pFile = new CFile();
-  if (!m_pFile) return false;
-
-  unsigned int flags = READ_TRUNCATED | READ_BITRATE | READ_CHUNKED;
-
-  if( CFileItem(strFile, false).IsInternetStream() )
-    flags |= READ_CACHED;
+  if (!m_pFile)
+    return false;
 
   // open file in binary mode
-  if (!m_pFile->Open(strFile, flags))
+  if (!m_pFile->Open(strFile, READ_TRUNCATED | READ_BITRATE | READ_CHUNKED))
   {
     delete m_pFile;
     m_pFile = NULL;
index c9c8f40..dbdff52 100644 (file)
@@ -73,21 +73,29 @@ bool CDVDInputStreamNavigator::Open(const char* strFile, const std::string& cont
   // load the dvd language codes
   // g_LangCodeExpander.LoadStandardCodes();
 
-  // since libdvdnav automaticly play's the dvd if the directory contains VIDEO_TS.IFO
-  // we strip it here.
+  // libdvdcss fails if the file path contains VIDEO_TS.IFO or VIDEO_TS/VIDEO_TS.IFO
+  // libdvdnav is still able to play without, so strip them.
+
+  // stripping only works 100% correctly for absolute paths.
+  // relative paths are not expected here and wouldn't make sense, so it's safe to assume we'll have
+  // at least one path separator character.
+
   strDVDFile = strdup(strFile);
-#ifndef _LINUX
-  if (strnicmp(strDVDFile + strlen(strDVDFile) - 12, "VIDEO_TS.IFO", 12) == 0)
-#else
-  if (strncasecmp(strDVDFile + strlen(strDVDFile) - 12, "VIDEO_TS.IFO", 12) == 0)
-#endif
-  {
-    strDVDFile[strlen(strDVDFile) - 13] = '\0';
-  }
+  int len = strlen(strDVDFile);
+
+  if(len >= 13  // +1 on purpose, to include a separator char before the searched string
+  && strncasecmp(strDVDFile + len - 12, "VIDEO_TS.IFO", 12) == 0)
+    strDVDFile[len - 13] = '\0';
+
+  len = strlen(strDVDFile);
+  if(len >= 9  // +1 on purpose, to include a separator char before the searched string
+  && strncasecmp(strDVDFile + len - 8, "VIDEO_TS", 8) == 0)
+    strDVDFile[len - 9] = '\0';
+
 #if defined(__APPLE__) && !defined(__arm__)
   // if physical DVDs, libdvdnav wants "/dev/rdiskN" device name for OSX,
   // strDVDFile will get realloc'ed and replaced IF this is a physical DVD.
-  Cocoa_MountPoint2DeviceName(strDVDFile);
+  strDVDFile = Cocoa_MountPoint2DeviceName(strDVDFile);
 #endif
 
   // open up the DVD device
index 5f2c1da..89863e3 100644 (file)
  *
  */
 
+#if (defined HAVE_CONFIG_H) && (!defined WIN32)
+  #include "config.h"
+#endif
+#ifdef _WIN32
+#include "system.h"
+#endif
+
 #include "DllDvdNav.h"
 #include "tinyXML/tinyxml.h"
 
index 84e636e..6f88e3e 100644 (file)
@@ -78,7 +78,8 @@ void CDVDOverlayRenderer::Render(DVDPictureRenderer* pPicture, CDVDOverlaySSA* p
     DWORD color = img->color;
     BYTE alpha = (BYTE)(color &0xff);
 
-    if(alpha == 255)
+    // fully transparent or width or height is 0 -> not displayed
+    if(alpha == 255 || img->w == 0 || img->h == 0)
     {
       img = img->next;
       continue;
index 1089335..3f6fc09 100644 (file)
@@ -131,7 +131,7 @@ bool CSelectionStreams::Get(StreamType type, CDemuxStream::EFlags flag, Selectio
   return false;
 }
 
-int CSelectionStreams::IndexOf(StreamType type, int source, int id)
+int CSelectionStreams::IndexOf(StreamType type, int source, int id) const
 {
   CSingleLock lock(m_section);
   int count = -1;
@@ -153,7 +153,7 @@ int CSelectionStreams::IndexOf(StreamType type, int source, int id)
     return -1;
 }
 
-int CSelectionStreams::IndexOf(StreamType type, CDVDPlayer& p)
+int CSelectionStreams::IndexOf(StreamType type, CDVDPlayer& p) const
 {
   if (p.m_pInputStream && p.m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
   {
@@ -433,6 +433,8 @@ void CDVDPlayer::OnStartup()
   m_messenger.Init();
 
   g_dvdPerformanceCounter.EnableMainPerformance(ThreadHandle());
+
+  CUtil::ClearTempFonts();
 }
 
 bool CDVDPlayer::OpenInputStream()
@@ -445,7 +447,6 @@ bool CDVDPlayer::OpenInputStream()
   // correct the filename if needed
   CStdString filename(m_filename);
   if (filename.Find("dvd://") == 0
-  ||  filename.CompareNoCase("d:\\video_ts\\video_ts.ifo") == 0
   ||  filename.CompareNoCase("iso9660://video_ts/video_ts.ifo") == 0)
   {
     m_filename = g_mediaManager.TranslateDevicePath("");
@@ -702,6 +703,15 @@ void CDVDPlayer::OpenDefaultStreams()
       CLog::Log(LOGWARNING, "%s - failed to restore selected subtitle stream (%d)", __FUNCTION__, g_settings.m_currentVideoSettings.m_SubtitleStream);
   }
 
+  // check if there are external subtitles available
+  for(int i = 0;i<count && !valid; i++)
+  {
+    SelectionStream& s = m_SelectionStreams.Get(STREAM_SUBTITLE, i);
+    if ((s.source == STREAM_SOURCE_DEMUX_SUB || s.source == STREAM_SOURCE_TEXT)
+    && OpenSubtitleStream(s.id, s.source))
+      valid = true;
+  }
+
   // select default
   if(!valid
   && m_SelectionStreams.Get(STREAM_SUBTITLE, CDemuxStream::FLAG_DEFAULT, st))
@@ -1226,10 +1236,7 @@ void CDVDPlayer::ProcessAudioData(CDemuxStream* pStream, DemuxPacket* pPacket)
   CheckStartCaching(m_CurrentAudio);
 
   CheckContinuity(m_CurrentAudio, pPacket);
-  if(pPacket->dts != DVD_NOPTS_VALUE)
-    m_CurrentAudio.dts = pPacket->dts;
-  else if(pPacket->pts != DVD_NOPTS_VALUE)
-    m_CurrentAudio.dts = pPacket->pts;
+  UpdateTimestamps(m_CurrentAudio, pPacket);
 
   bool drop = false;
   if (CheckPlayerInit(m_CurrentAudio, DVDPLAYER_AUDIO))
@@ -1279,10 +1286,7 @@ void CDVDPlayer::ProcessVideoData(CDemuxStream* pStream, DemuxPacket* pPacket)
   if( pPacket->iSize != 4) //don't check the EOF_SEQUENCE of stillframes
   {
     CheckContinuity(m_CurrentVideo, pPacket);
-    if(pPacket->dts != DVD_NOPTS_VALUE)
-      m_CurrentVideo.dts = pPacket->dts;
-    else if(pPacket->pts != DVD_NOPTS_VALUE)
-      m_CurrentVideo.dts = pPacket->pts;
+    UpdateTimestamps(m_CurrentVideo, pPacket);
   }
 
   bool drop = false;
@@ -1307,10 +1311,8 @@ void CDVDPlayer::ProcessSubData(CDemuxStream* pStream, DemuxPacket* pPacket)
 
     m_CurrentSubtitle.stream = (void*)pStream;
   }
-  if(pPacket->dts != DVD_NOPTS_VALUE)
-    m_CurrentSubtitle.dts = pPacket->dts;
-  else if(pPacket->pts != DVD_NOPTS_VALUE)
-    m_CurrentSubtitle.dts = pPacket->pts;
+
+  UpdateTimestamps(m_CurrentSubtitle, pPacket);
 
   bool drop = false;
   if (CheckPlayerInit(m_CurrentSubtitle, DVDPLAYER_SUBTITLE))
@@ -1336,10 +1338,7 @@ void CDVDPlayer::ProcessTeletextData(CDemuxStream* pStream, DemuxPacket* pPacket
 
     m_CurrentTeletext.stream = (void*)pStream;
   }
-  if(pPacket->dts != DVD_NOPTS_VALUE)
-    m_CurrentTeletext.dts = pPacket->dts;
-  else if(pPacket->pts != DVD_NOPTS_VALUE)
-    m_CurrentTeletext.dts = pPacket->pts;
+  UpdateTimestamps(m_CurrentTeletext, pPacket);
 
   bool drop = false;
   if (CheckPlayerInit(m_CurrentTeletext, DVDPLAYER_TELETEXT))
@@ -1403,7 +1402,7 @@ void CDVDPlayer::HandlePlaySpeed()
     {
       if(level  < 0.0)
       {
-        CGUIDialogKaiToast::QueueNotification("Cache full", "Cache filled before reaching required amount for continous playback");
+        CGUIDialogKaiToast::QueueNotification(g_localizeStrings.Get(21454), g_localizeStrings.Get(21455));
         caching = CACHESTATE_INIT;
       }
       if(level >= 1.0)
@@ -1600,6 +1599,17 @@ bool CDVDPlayer::CheckPlayerInit(CCurrentStream& current, unsigned int source)
   return false;
 }
 
+void CDVDPlayer::UpdateTimestamps(CCurrentStream& current, DemuxPacket* pPacket)
+{
+  double dts = current.dts;
+  /* update stored values */
+  if(pPacket->dts != DVD_NOPTS_VALUE)
+    dts = pPacket->dts;
+  else if(pPacket->pts != DVD_NOPTS_VALUE)
+    dts = pPacket->pts;
+
+  current.dts = dts;
+}
 void CDVDPlayer::CheckContinuity(CCurrentStream& current, DemuxPacket* pPacket)
 {
   if (m_playSpeed < DVD_PLAYSPEED_PAUSE)
@@ -2114,13 +2124,8 @@ void CDVDPlayer::HandleMessages()
           m_State.timestamp =  CDVDClock::GetAbsoluteClock();
         }
 
-        if (speed != DVD_PLAYSPEED_PAUSE)
-        {
-          if (m_playSpeed != DVD_PLAYSPEED_PAUSE)
-          {
-            m_callback.OnPlayBackSpeedChanged(speed / DVD_PLAYSPEED_NORMAL );
-          }
-        }
+        if (speed != DVD_PLAYSPEED_PAUSE && m_playSpeed != DVD_PLAYSPEED_PAUSE && speed != m_playSpeed)
+          m_callback.OnPlayBackSpeedChanged(speed / DVD_PLAYSPEED_NORMAL);
 
         // if playspeed is different then DVD_PLAYSPEED_NORMAL or DVD_PLAYSPEED_PAUSE
         // audioplayer, stops outputing audio to audiorendere, but still tries to
@@ -2258,16 +2263,14 @@ bool CDVDPlayer::IsPaused() const
 
 bool CDVDPlayer::HasVideo() const
 {
-  if (m_pInputStream)
-  {
-    if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD) || m_CurrentVideo.id >= 0) return true;
-  }
-  return false;
+  if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)) return true;
+
+  return m_SelectionStreams.Count(STREAM_VIDEO) > 0 ? true : false;
 }
 
 bool CDVDPlayer::HasAudio() const
 {
-  return (m_CurrentAudio.id >= 0);
+  return m_SelectionStreams.Count(STREAM_AUDIO) > 0 ? true : false;
 }
 
 bool CDVDPlayer::IsPassthrough() const
@@ -2430,7 +2433,7 @@ void CDVDPlayer::GetGeneralInfo(CStdString& strGeneralInfo)
 {
   if (!m_bStop)
   {
-    double dDelay = (double)m_dvdPlayerVideo.GetDelay() / DVD_TIME_BASE;
+    double dDelay = m_dvdPlayerVideo.GetDelay() / DVD_TIME_BASE - g_renderManager.GetDisplayLatency();
 
     double apts = m_dvdPlayerAudio.GetCurrentPts();
     double vpts = m_dvdPlayerVideo.GetCurrentPts();
@@ -2737,7 +2740,10 @@ bool CDVDPlayer::OpenVideoStream(int iStream, int source)
     /* set aspect ratio as requested by navigator for dvd's */
     float aspect = static_cast<CDVDInputStreamNavigator*>(m_pInputStream)->GetVideoAspectRatio();
     if(aspect != 0.0)
+    {
       hint.aspect = aspect;
+      hint.forced_aspect = true;
+    }
     hint.software = true;
     hint.stills   = static_cast<CDVDInputStreamNavigator*>(m_pInputStream)->IsInMenu();
   }
@@ -2804,7 +2810,7 @@ bool CDVDPlayer::OpenSubtitleStream(int iStream, int source)
     {
       CLog::Log(LOGNOTICE, "Opening Subtitle file: %s", st.filename.c_str());
       auto_ptr<CDVDDemuxVobsub> demux(new CDVDDemuxVobsub());
-      if(!demux->Open(st.filename))
+      if(!demux->Open(st.filename, st.filename2))
         return false;
       m_pSubtitleDemuxer = demux.release();
     }
@@ -3301,14 +3307,12 @@ bool CDVDPlayer::OnAction(const CAction &action)
       switch (action.GetID())
       {
       case ACTION_NEXT_ITEM:
-      case ACTION_PAGE_UP:
         THREAD_ACTION(action);
         CLog::Log(LOGDEBUG, " - pushed next in menu, stream will decide");
         pStream->OnNext();
         g_infoManager.SetDisplayAfterSeek();
         return true;
       case ACTION_PREV_ITEM:
-      case ACTION_PAGE_DOWN:
         THREAD_ACTION(action);
         CLog::Log(LOGDEBUG, " - pushed prev in menu, stream will decide");
         pStream->OnPrevious();
@@ -3411,14 +3415,12 @@ bool CDVDPlayer::OnAction(const CAction &action)
     switch (action.GetID())
     {
       case ACTION_NEXT_ITEM:
-      case ACTION_PAGE_UP:
         m_messenger.Put(new CDVDMsg(CDVDMsg::PLAYER_CHANNEL_NEXT));
         g_infoManager.SetDisplayAfterSeek();
         return true;
       break;
 
       case ACTION_PREV_ITEM:
-      case ACTION_PAGE_DOWN:
         m_messenger.Put(new CDVDMsg(CDVDMsg::PLAYER_CHANNEL_PREV));
         g_infoManager.SetDisplayAfterSeek();
         return true;
@@ -3439,7 +3441,6 @@ bool CDVDPlayer::OnAction(const CAction &action)
   switch (action.GetID())
   {
     case ACTION_NEXT_ITEM:
-    case ACTION_PAGE_UP:
       if(GetChapterCount() > 0)
       {
         m_messenger.Put(new CDVDMsgPlayerSeekChapter(GetChapter()+1));
@@ -3449,7 +3450,6 @@ bool CDVDPlayer::OnAction(const CAction &action)
       else
         break;
     case ACTION_PREV_ITEM:
-    case ACTION_PAGE_DOWN:
       if(GetChapterCount() > 0)
       {
         m_messenger.Put(new CDVDMsgPlayerSeekChapter(GetChapter()-1));
@@ -3495,7 +3495,7 @@ bool CDVDPlayer::GetCurrentSubtitle(CStdString& strSubtitle)
   m_dvdPlayerSubtitle.GetCurrentSubtitle(strSubtitle, pts - m_dvdPlayerVideo.GetSubtitleDelay());
   
   // In case we stalled, don't output any subs
-  if (m_dvdPlayerVideo.IsStalled() || m_dvdPlayerAudio.IsStalled())
+  if ((m_dvdPlayerVideo.IsStalled() && HasVideo()) || (m_dvdPlayerAudio.IsStalled() && HasAudio()))
     strSubtitle = m_lastSub;
   else
     m_lastSub = strSubtitle;
@@ -3609,6 +3609,7 @@ int CDVDPlayer::AddSubtitleFile(const std::string& filename, const std::string&
     m_SelectionStreams.Update(NULL, &v);
     int index = m_SelectionStreams.IndexOf(STREAM_SUBTITLE, m_SelectionStreams.Source(STREAM_SOURCE_DEMUX_SUB, filename), 0);
     m_SelectionStreams.Get(STREAM_SUBTITLE, index).flags = flags;
+    m_SelectionStreams.Get(STREAM_SUBTITLE, index).filename2 = vobsubfile;
     return index;
   }
   if(ext == ".sub")
@@ -3630,27 +3631,27 @@ int CDVDPlayer::AddSubtitleFile(const std::string& filename, const std::string&
 
 void CDVDPlayer::UpdatePlayState(double timeout)
 {
-  CSingleLock lock(m_StateSection);
-
   if(m_State.timestamp != 0
   && m_State.timestamp + DVD_MSEC_TO_TIME(timeout) > CDVDClock::GetAbsoluteClock())
     return;
 
+  SPlayerState state(m_State);
+
   if     (m_CurrentVideo.dts != DVD_NOPTS_VALUE)
-    m_State.dts = m_CurrentVideo.dts;
+    state.dts = m_CurrentVideo.dts;
   else if(m_CurrentAudio.dts != DVD_NOPTS_VALUE)
-    m_State.dts = m_CurrentAudio.dts;
+    state.dts = m_CurrentAudio.dts;
   else
-    m_State.dts = m_clock.GetClock();
+    state.dts = m_clock.GetClock();
 
   if(m_pDemuxer)
   {
-    m_State.chapter       = m_pDemuxer->GetChapter();
-    m_State.chapter_count = m_pDemuxer->GetChapterCount();
-    m_pDemuxer->GetChapterName(m_State.chapter_name);
+    state.chapter       = m_pDemuxer->GetChapter();
+    state.chapter_count = m_pDemuxer->GetChapterCount();
+    m_pDemuxer->GetChapterName(state.chapter_name);
 
-    m_State.time       = DVD_TIME_TO_MSEC(m_clock.GetClock());
-    m_State.time_total = m_pDemuxer->GetStreamLength();
+    state.time       = DVD_TIME_TO_MSEC(m_clock.GetClock());
+    state.time_total = m_pDemuxer->GetStreamLength();
   }
 
   if(m_pInputStream)
@@ -3659,95 +3660,98 @@ void CDVDPlayer::UpdatePlayState(double timeout)
 
     if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_TV))
     {
-      m_State.canrecord = static_cast<CDVDInputStreamTV*>(m_pInputStream)->CanRecord();
-      m_State.recording = static_cast<CDVDInputStreamTV*>(m_pInputStream)->IsRecording();
+      state.canrecord = static_cast<CDVDInputStreamTV*>(m_pInputStream)->CanRecord();
+      state.recording = static_cast<CDVDInputStreamTV*>(m_pInputStream)->IsRecording();
     }
 
     CDVDInputStream::IDisplayTime* pDisplayTime = dynamic_cast<CDVDInputStream::IDisplayTime*>(m_pInputStream);
     if (pDisplayTime)
     {
-      m_State.time       = pDisplayTime->GetTime();
-      m_State.time_total = pDisplayTime->GetTotalTime();
+      state.time       = pDisplayTime->GetTime();
+      state.time_total = pDisplayTime->GetTotalTime();
     }
 
     if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
     {
       if(m_dvd.state == DVDSTATE_STILL)
       {
-        m_State.time       = XbmcThreads::SystemClockMillis() - m_dvd.iDVDStillStartTime;
-        m_State.time_total = m_dvd.iDVDStillTime;
+        state.time       = XbmcThreads::SystemClockMillis() - m_dvd.iDVDStillStartTime;
+        state.time_total = m_dvd.iDVDStillTime;
       }
 
-      if(!((CDVDInputStreamNavigator*)m_pInputStream)->GetNavigatorState(m_State.player_state))
-        m_State.player_state = "";
+      if(!((CDVDInputStreamNavigator*)m_pInputStream)->GetNavigatorState(state.player_state))
+        state.player_state = "";
     }
     else
-        m_State.player_state = "";
+        state.player_state = "";
 
 
     if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_TV))
     {
       if(((CDVDInputStreamTV*)m_pInputStream)->GetTotalTime() > 0)
       {
-        m_State.time      -= ((CDVDInputStreamTV*)m_pInputStream)->GetStartTime();
-        m_State.time_total = ((CDVDInputStreamTV*)m_pInputStream)->GetTotalTime();
+        state.time      -= ((CDVDInputStreamTV*)m_pInputStream)->GetStartTime();
+        state.time_total = ((CDVDInputStreamTV*)m_pInputStream)->GetTotalTime();
       }
     }
   }
 
   if (m_Edl.HasCut())
   {
-    m_State.time        = m_Edl.RemoveCutTime(llrint(m_State.time));
-    m_State.time_total  = m_Edl.RemoveCutTime(llrint(m_State.time_total));
+    state.time        = m_Edl.RemoveCutTime(llrint(state.time));
+    state.time_total  = m_Edl.RemoveCutTime(llrint(state.time_total));
   }
 
   if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
-    m_State.time_offset = DVD_MSEC_TO_TIME(m_State.time) - m_State.dts;
+    state.time_offset = DVD_MSEC_TO_TIME(state.time) - state.dts;
   else
-    m_State.time_offset = 0;
+    state.time_offset = 0;
 
   if (m_CurrentAudio.id >= 0 && m_pDemuxer)
   {
     CDemuxStream* pStream = m_pDemuxer->GetStream(m_CurrentAudio.id);
     if (pStream && pStream->type == STREAM_AUDIO)
-      ((CDemuxStreamAudio*)pStream)->GetStreamInfo(m_State.demux_audio);
+      ((CDemuxStreamAudio*)pStream)->GetStreamInfo(state.demux_audio);
   }
   else
-    m_State.demux_audio = "";
+    state.demux_audio = "";
 
   if (m_CurrentVideo.id >= 0 && m_pDemuxer)
   {
     CDemuxStream* pStream = m_pDemuxer->GetStream(m_CurrentVideo.id);
     if (pStream && pStream->type == STREAM_VIDEO)
-      ((CDemuxStreamVideo*)pStream)->GetStreamInfo(m_State.demux_video);
+      ((CDemuxStreamVideo*)pStream)->GetStreamInfo(state.demux_video);
   }
   else
-    m_State.demux_video = "";
+    state.demux_video = "";
 
   double level, delay, offset;
   if(GetCachingTimes(level, delay, offset))
   {
-    m_State.cache_delay  = max(0.0, delay);
-    m_State.cache_level  = max(0.0, min(1.0, level));
-    m_State.cache_offset = offset;
+    state.cache_delay  = max(0.0, delay);
+    state.cache_level  = max(0.0, min(1.0, level));
+    state.cache_offset = offset;
   }
   else
   {
-    m_State.cache_delay  = 0.0;
-    m_State.cache_level  = min(1.0, GetQueueTime() / 8000.0);
-    m_State.cache_offset = GetQueueTime() / m_State.time_total;
+    state.cache_delay  = 0.0;
+    state.cache_level  = min(1.0, GetQueueTime() / 8000.0);
+    state.cache_offset = GetQueueTime() / state.time_total;
   }
 
   if(m_pInputStream && m_pInputStream->GetCachedBytes() >= 0)
   {
-    m_State.cache_bytes = m_pInputStream->GetCachedBytes();
-    if(m_State.time_total)
-      m_State.cache_bytes += m_pInputStream->GetLength() * GetQueueTime() / m_State.time_total;
+    state.cache_bytes = m_pInputStream->GetCachedBytes();
+    if(state.time_total)
+      state.cache_bytes += m_pInputStream->GetLength() * GetQueueTime() / state.time_total;
   }
   else
-    m_State.cache_bytes = 0;
+    state.cache_bytes = 0;
 
-  m_State.timestamp = CDVDClock::GetAbsoluteClock();
+  state.timestamp = CDVDClock::GetAbsoluteClock();
+
+  CSingleLock lock(m_StateSection);
+  m_State = state;
 }
 
 void CDVDPlayer::UpdateApplication(double timeout)
@@ -3845,7 +3849,7 @@ bool CDVDPlayer::GetStreamDetails(CStreamDetails &details)
   if (m_pDemuxer)
   {
     bool result=CDVDFileInfo::DemuxerToStreamDetails(m_pInputStream, m_pDemuxer, details);
-    if (result && ((CStreamDetailVideo*)details.GetStreamCount(CStreamDetail::VIDEO) > 0)) // this is more correct (dvds in particular)
+    if (result && details.GetStreamCount(CStreamDetail::VIDEO) > 0) // this is more correct (dvds in particular)
     {
       GetVideoAspectRatio(((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_fAspect);
       ((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_iDuration = GetTotalTime();
index b6ebee2..4afb5e2 100644 (file)
@@ -119,9 +119,9 @@ public:
   }
   std::vector<SelectionStream> m_Streams;
 
-  int              IndexOf (StreamType type, int source, int id);
-  int              IndexOf (StreamType type, CDVDPlayer& p);
-  int              Count   (StreamType type) { return IndexOf(type, STREAM_SOURCE_NONE, -1) + 1; }
+  int              IndexOf (StreamType type, int source, int id) const;
+  int              IndexOf (StreamType type, CDVDPlayer& p) const;
+  int              Count   (StreamType type) const { return IndexOf(type, STREAM_SOURCE_NONE, -1) + 1; }
   SelectionStream& Get     (StreamType type, int index);
   bool             Get     (StreamType type, CDemuxStream::EFlags flag, SelectionStream& out);
 
@@ -291,6 +291,7 @@ protected:
   bool CheckSceneSkip(CCurrentStream& current);
   bool CheckPlayerInit(CCurrentStream& current, unsigned int source);
   bool CheckStartCaching(CCurrentStream& current);
+  void UpdateTimestamps(CCurrentStream& current, DemuxPacket* pPacket);
   void SendPlayerMessage(CDVDMsg* pMsg, unsigned int target);
 
   bool ReadPacket(DemuxPacket*& packet, CDemuxStream*& stream);
index 8015275..41fbaaf 100644 (file)
@@ -552,7 +552,10 @@ void CDVDPlayerAudio::Process()
 
       // Flush as the audio output may keep looping if we don't
       if(m_speed == DVD_PLAYSPEED_NORMAL)
+      {
+        m_dvdAudio.Drain();
         m_dvdAudio.Flush();
+      }
 
       continue;
     }
@@ -904,7 +907,7 @@ string CDVDPlayerAudio::GetPlayerInfo()
   if (m_synctype == SYNC_RESAMPLE)
     s << ", rr:" << fixed << setprecision(5) << 1.0 / m_resampleratio;
 
-  s << ", att:" << fixed << setprecision(1) << log(GetCurrentAttenuation()) * 10.0f << " dB";
+  s << ", att:" << fixed << setprecision(1) << log(GetCurrentAttenuation()) * 20.0f << " dB";
 
   return s.str();
 }
index 33156ce..7037dfa 100644 (file)
@@ -241,7 +241,7 @@ void CDVDTeletextData::Process()
   unsigned char   vtxt_row[42];
   unsigned char   pagedata[9][23*40];
   unsigned char   magazine  = 0xff;
-  int             doupdate  = 0;
+//  int             doupdate  = 0;
 
   CLog::Log(LOGNOTICE, "running thread: CDVDTeletextData");
 
@@ -367,8 +367,8 @@ void CDVDTeletextData::Process()
                 memset(m_TXTCache.astCachetable[m_TXTCache.CurrentPage[magazine]][m_TXTCache.CurrentSubPage[magazine]]->data, ' ', 23*40);
                 memset(pagedata[magazine],' ', 23*40);
               }
-              if (dehamming[vtxt_row[9]] & 8)   /* C8 -> update page */
-                doupdate = m_TXTCache.PageReceiving;
+//              if (dehamming[vtxt_row[9]] & 8)   /* C8 -> update page */
+//                doupdate = m_TXTCache.PageReceiving;
 
               pageinfo_thread->boxed = !!(dehamming[vtxt_row[7]] & 0x0c);
 
@@ -635,7 +635,7 @@ void CDVDTeletextData::Process()
             {
               SavePage(m_TXTCache.CurrentPage[magazine], m_TXTCache.CurrentSubPage[magazine], pagedata[magazine]);
               m_TXTCache.PageUpdate = true;
-              doupdate = 0;
+//              doupdate = 0;
               if (!m_TXTCache.ZapSubpageManual)
                 m_TXTCache.SubPage = m_TXTCache.CurrentSubPage[magazine];
             }
index e971c9b..e28faaf 100644 (file)
@@ -220,7 +220,7 @@ void CDVDPlayerVideo::OpenStream(CDVDStreamInfo &hint, CDVDVideoCodec* codec)
   m_bFpsInvalid = (hint.fpsrate == 0 || hint.fpsscale == 0);
 
   m_bCalcFrameRate = g_guiSettings.GetBool("videoplayer.usedisplayasclock") ||
-                      g_guiSettings.GetBool("videoplayer.adjustrefreshrate");
+                     g_guiSettings.GetBool("videoplayer.adjustrefreshrate");
   ResetFrameRateCalc();
 
   m_iDroppedRequest = 0;
@@ -234,7 +234,10 @@ void CDVDPlayerVideo::OpenStream(CDVDStreamInfo &hint, CDVDVideoCodec* codec)
   }
 
   // use aspect in stream if available
-  m_fForcedAspectRatio = hint.aspect;
+  if(hint.forced_aspect)
+    m_fForcedAspectRatio = hint.aspect;
+  else
+    m_fForcedAspectRatio = 0.0;
 
   if (m_pVideoCodec)
     delete m_pVideoCodec;
@@ -498,9 +501,7 @@ void CDVDPlayerVideo::Process()
 
       // ask codec to do deinterlacing if possible
       EDEINTERLACEMODE mDeintMode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
-      EINTERLACEMETHOD mInt     = g_settings.m_currentVideoSettings.m_InterlaceMethod;
-      if (mInt == VS_INTERLACEMETHOD_AUTO)
-        mInt = g_renderManager.AutoInterlaceMethod();
+      EINTERLACEMETHOD mInt       = g_renderManager.AutoInterlaceMethod(g_settings.m_currentVideoSettings.m_InterlaceMethod);
 
       unsigned int     mFilters = 0;
 
@@ -733,6 +734,9 @@ void CDVDPlayerVideo::Process()
     // all data is used by the decoder, we can safely free it now
     pMsg->Release();
   }
+
+  // we need to let decoder release any picture retained resources.
+  m_pVideoCodec->ClearPicture(&picture);
 }
 
 void CDVDPlayerVideo::OnExit()
@@ -919,13 +923,14 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
   DVDVideoPicture* pPicture = &picture;
 
 #ifdef HAS_VIDEO_PLAYBACK
+  double config_framerate = m_bFpsInvalid ? 0.0 : m_fFrameRate;
   /* check so that our format or aspect has changed. if it has, reconfigure renderer */
   if (!g_renderManager.IsConfigured()
    || m_output.width != pPicture->iWidth
    || m_output.height != pPicture->iHeight
    || m_output.dwidth != pPicture->iDisplayWidth
    || m_output.dheight != pPicture->iDisplayHeight
-   || m_output.framerate != m_fFrameRate
+   || m_output.framerate != config_framerate
    || m_output.color_format != (unsigned int)pPicture->format
    || m_output.extended_format != pPicture->extended_format
    || ( m_output.color_matrix != pPicture->color_matrix && pPicture->color_matrix != 0 ) // don't reconfigure on unspecified
@@ -935,7 +940,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
    || m_output.color_range != pPicture->color_range)
   {
     CLog::Log(LOGNOTICE, " fps: %f, pwidth: %i, pheight: %i, dwidth: %i, dheight: %i",
-      m_fFrameRate, pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight);
+      config_framerate, pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight);
     unsigned flags = 0;
     if(pPicture->color_range == 1)
       flags |= CONF_FLAGS_YUV_FULLRANGE;
@@ -1055,8 +1060,8 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
       m_bAllowFullscreen = false; // only allow on first configure
     }
 
-    CLog::Log(LOGDEBUG,"%s - change configuration. %dx%d. framerate: %4.2f. format: %s",__FUNCTION__,pPicture->iWidth, pPicture->iHeight, m_bFpsInvalid ? 0.0 : m_fFrameRate, formatstr.c_str());
-    if(!g_renderManager.Configure(pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight, m_bFpsInvalid ? 0.0 : m_fFrameRate, flags, pPicture->extended_format))
+    CLog::Log(LOGDEBUG,"%s - change configuration. %dx%d. framerate: %4.2f. format: %s",__FUNCTION__,pPicture->iWidth, pPicture->iHeight, config_framerate, formatstr.c_str());
+    if(!g_renderManager.Configure(pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight, config_framerate, flags, pPicture->extended_format))
     {
       CLog::Log(LOGERROR, "%s - failed to configure renderer", __FUNCTION__);
       return EOS_ABORT;
@@ -1066,7 +1071,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
     m_output.height = pPicture->iHeight;
     m_output.dwidth = pPicture->iDisplayWidth;
     m_output.dheight = pPicture->iDisplayHeight;
-    m_output.framerate = m_fFrameRate;
+    m_output.framerate = config_framerate;
     m_output.color_format = pPicture->format;
     m_output.extended_format = pPicture->extended_format;
     m_output.color_matrix = pPicture->color_matrix;
@@ -1106,8 +1111,8 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
     pts -= DVD_TIME_BASE * interval;
   }
 
-  //User set delay
-  pts += m_iVideoDelay;
+  // Correct pts by user set delay and rendering delay
+  pts += m_iVideoDelay - DVD_SEC_TO_TIME(g_renderManager.GetDisplayLatency());
 
   // calculate the time we need to delay this picture before displaying
   double iSleepTime, iClockSleep, iFrameSleep, iPlayingClock, iCurrentClock, iFrameDuration;
@@ -1462,9 +1467,11 @@ void CDVDPlayerVideo::ResetFrameRateCalc()
 {
   m_fStableFrameRate = 0.0;
   m_iFrameRateCount  = 0;
-  m_bAllowDrop       = !m_bCalcFrameRate && g_settings.m_currentVideoSettings.m_ScalingMethod != VS_SCALINGMETHOD_AUTO;
   m_iFrameRateLength = 1;
   m_iFrameRateErr    = 0;
+
+  m_bAllowDrop       = (!m_bCalcFrameRate && g_settings.m_currentVideoSettings.m_ScalingMethod != VS_SCALINGMETHOD_AUTO) ||
+                        g_advancedSettings.m_videoFpsDetect == 0;
 }
 
 #define MAXFRAMERATEDIFF   0.01
@@ -1472,8 +1479,8 @@ void CDVDPlayerVideo::ResetFrameRateCalc()
 
 void CDVDPlayerVideo::CalcFrameRate()
 {
-  if (m_iFrameRateLength >= 128)
-    return; //we're done calculating
+  if (m_iFrameRateLength >= 128 || g_advancedSettings.m_videoFpsDetect == 0)
+    return; //don't calculate the fps
 
   //only calculate the framerate if sync playback to display is on, adjust refreshrate is on,
   //or scaling method is set to auto
@@ -1490,7 +1497,8 @@ void CDVDPlayerVideo::CalcFrameRate()
   //and is able to calculate the correct frame duration from it
   double frameduration = m_pullupCorrection.GetFrameDuration();
 
-  if (frameduration == DVD_NOPTS_VALUE)
+  if (frameduration == DVD_NOPTS_VALUE ||
+      (g_advancedSettings.m_videoFpsDetect == 1 && m_pullupCorrection.GetPatternLength() > 1))
   {
     //reset the stored framerates if no good framerate was detected
     m_fStableFrameRate = 0.0;
@@ -1524,10 +1532,11 @@ void CDVDPlayerVideo::CalcFrameRate()
     if (m_iFrameRateCount >= MathUtils::round_int(framerate) * m_iFrameRateLength)
     {
       //store the calculated framerate if it differs too much from m_fFrameRate
-      if (fabs(m_fFrameRate - (m_fStableFrameRate / m_iFrameRateCount)) > MAXFRAMERATEDIFF)
+      if (fabs(m_fFrameRate - (m_fStableFrameRate / m_iFrameRateCount)) > MAXFRAMERATEDIFF || m_bFpsInvalid)
       {
         CLog::Log(LOGDEBUG,"%s framerate was:%f calculated:%f", __FUNCTION__, m_fFrameRate, m_fStableFrameRate / m_iFrameRateCount);
         m_fFrameRate = m_fStableFrameRate / m_iFrameRateCount;
+        m_bFpsInvalid = false;
       }
 
       //reset the stored framerates
index 70f7021..d269eac 100644 (file)
@@ -94,6 +94,7 @@ bool CDVDStreamInfo::Equal(const CDVDStreamInfo& right, bool withextradata)
   ||  level    != right.level
   ||  profile  != right.profile
   ||  ptsinvalid != right.ptsinvalid
+  ||  forced_aspect != right.forced_aspect
   ||  vfr      != right.vfr) return false;
 
   // AUDIO
@@ -148,6 +149,7 @@ void CDVDStreamInfo::Assign(const CDVDStreamInfo& right, bool withextradata)
   level    = right.level;
   profile  = right.profile;
   ptsinvalid = right.ptsinvalid;
+  forced_aspect = right.forced_aspect;
 
   // AUDIO
   channels      = right.channels;
@@ -196,6 +198,7 @@ void CDVDStreamInfo::Assign(const CDemuxStream& right, bool withextradata)
     level     = stream->iLevel;
     profile   = stream->iProfile;
     ptsinvalid = stream->bPTSInvalid;
+    forced_aspect = stream->bForcedAspect;
   }
   else if(  right.type == STREAM_SUBTITLE )
   {
index afbf563..9a70658 100644 (file)
@@ -76,6 +76,7 @@ public:
   int level; // encoder level of the stream reported by the decoder. used to qualify hw decoders.
   int profile; // encoder profile of the stream reported by the decoder. used to qualify hw decoders.
   bool ptsinvalid;  // pts cannot be trusted (avi's).
+  bool forced_aspect; // aspect is forced from container
 
   // AUDIO
   int channels;
index b48b7b6..3a896a3 100644 (file)
@@ -64,7 +64,7 @@ CDVDSubtitlesLibass::CDVDSubtitlesLibass()
   CLog::Log(LOGINFO, "CDVDSubtitlesLibass: Initializing ASS library font settings");
   // libass uses fontconfig (system lib) which is not wrapped
   //  so translate the path before calling into libass
-  m_dll.ass_set_fonts_dir(m_library,  _P(strPath).c_str());
+  m_dll.ass_set_fonts_dir(m_library,  CSpecialProtocol::TranslatePath(strPath).c_str());
   m_dll.ass_set_extract_fonts(m_library, 1);
   m_dll.ass_set_style_overrides(m_library, NULL);
 
@@ -78,13 +78,15 @@ CDVDSubtitlesLibass::CDVDSubtitlesLibass()
   //Setting default font to the Arial in \media\fonts (used if FontConfig fails)
   strPath = "special://xbmc/media/Fonts/";
   strPath += g_guiSettings.GetString("subtitles.font");
+  int fc = !g_guiSettings.GetBool("subtitles.overrideassfonts");
 
   m_dll.ass_set_margins(m_renderer, 0, 0, 0, 0);
   m_dll.ass_set_use_margins(m_renderer, 0);
   m_dll.ass_set_font_scale(m_renderer, 1);
+
   // libass uses fontconfig (system lib) which is not wrapped
   //  so translate the path before calling into libass
-  m_dll.ass_set_fonts(m_renderer, _P(strPath).c_str(), "", 1, NULL, 0);
+  m_dll.ass_set_fonts(m_renderer, CSpecialProtocol::TranslatePath(strPath).c_str(), "Arial", fc, NULL, 1);
 }
 
 
index 1e6ce3f..ae02e4f 100644 (file)
@@ -182,6 +182,8 @@ bool CEdl::ReadEdl(const CStdString& strMovie, const float fFramesPerSecond)
     if (bError)
       CLog::Log(LOGWARNING, "%s - Error on line %i in EDL file: %s", __FUNCTION__, iLine, edlFilename.c_str());
 
+    bError = false;
+
     iLine++;
 
     CStdStringArray strFields(2);
index bef5cf1..d3c8faf 100644 (file)
@@ -102,7 +102,8 @@ int BXACodec::ReadPCM(BYTE *pBuffer, int size, int *actualsize)
     return READ_SUCCESS;
   }
 
-  return READ_ERROR;
+  *actualsize = 0;
+  return READ_EOF;
 }
 
 bool BXACodec::CanInit()
index 6df0247..bc30c63 100644 (file)
 #include "URL.h"
 #include "DVDPlayerCodec.h"
 #include "BXAcodec.h" 
+#include "PCMCodec.h"
 
 ICodec* CodecFactory::CreateCodec(const CStdString& strFileType)
 {
   if (strFileType.Equals("mp3") || strFileType.Equals("mp2"))
     return new MP3Codec();
+  else if (strFileType.Equals("pcm") || strFileType.Equals("l16"))
+    return new PCMCodec();
   else if (strFileType.Equals("ape") || strFileType.Equals("mac"))
     return new DVDPlayerCodec();
   else if (strFileType.Equals("cdda"))
@@ -55,6 +58,8 @@ ICodec* CodecFactory::CreateCodec(const CStdString& strFileType)
     return new DVDPlayerCodec();
   else if (strFileType.Equals("shn"))
     return new DVDPlayerCodec();
+  else if (strFileType.Equals("mka"))
+    return new DVDPlayerCodec();
   else if (strFileType.Equals("flac"))
     return new FLACCodec();
   else if (strFileType.Equals("wav"))
@@ -70,15 +75,14 @@ ICodec* CodecFactory::CreateCodec(const CStdString& strFileType)
            strFileType.Equals("dsm")  ||  strFileType.Equals("far") ||
            strFileType.Equals("it")   ||  strFileType.Equals("j2b") ||
            strFileType.Equals("mdl")  ||  strFileType.Equals("med") ||
-           strFileType.Equals("mid")  ||  strFileType.Equals("mod") ||
+           strFileType.Equals("mod")  ||  strFileType.Equals("itgz")||
            strFileType.Equals("mt2")  ||  strFileType.Equals("mtm") ||
            strFileType.Equals("okt")  ||  strFileType.Equals("pat") ||
            strFileType.Equals("psm")  ||  strFileType.Equals("ptm") ||
            strFileType.Equals("s3m")  ||  strFileType.Equals("stm") ||
            strFileType.Equals("ult")  ||  strFileType.Equals("umx") ||
            strFileType.Equals("xm")   || strFileType.Equals("mdgz") ||
-           strFileType.Equals("s3gz") || strFileType.Equals("xmgz") ||
-           strFileType.Equals("itgz"))
+           strFileType.Equals("s3gz") || strFileType.Equals("xmgz"))
     return new ModplugCodec();
   else if (strFileType.Equals("nsf") || strFileType.Equals("nsfstream"))
     return new NSFCodec();
@@ -116,6 +120,12 @@ ICodec* CodecFactory::CreateCodecDemux(const CStdString& strFile, const CStdStri
   if( strContent.Equals("audio/mpeg")
   ||  strContent.Equals("audio/mp3") )
     return new MP3Codec();
+  else if (strContent.Left(9).Equals("audio/l16"))
+  {
+    PCMCodec * pcm_codec = new PCMCodec();
+    pcm_codec->SetMimeParams(strContent);
+    return pcm_codec;
+  }
   else if( strContent.Equals("audio/aac")
     || strContent.Equals("audio/aacp") )
   {
@@ -130,7 +140,8 @@ ICodec* CodecFactory::CreateCodecDemux(const CStdString& strFile, const CStdStri
     return CreateOGGCodec(strFile,filecache);
   else if (strContent.Equals("audio/x-xbmc-pcm"))
     return (ICodec*)new BXACodec();  
-    
+   else if (strContent.Equals("audio/flac") || strContent.Equals("audio/x-flac") || strContent.Equals("application/x-flac"))
+     return new FLACCodec();
 
   if (urlFile.GetProtocol() == "lastfm" || urlFile.GetProtocol() == "shout")
   {
index 0fdf1ca..4593d0d 100644 (file)
@@ -71,7 +71,9 @@ MP3Codec::MP3Codec()
   
   m_HaveData = false;
   flushcnt = 0;
-  madx_init(&mxhouse);
+
+  if (m_dll.Load())
+    madx_init(&mxhouse);
 }
 
 MP3Codec::~MP3Codec()
@@ -84,7 +86,8 @@ MP3Codec::~MP3Codec()
   delete[] m_OutputBuffer;
   m_OutputBuffer = NULL;
   
-  madx_deinit(&mxhouse);
+  if (m_dll.IsLoaded())
+    madx_deinit(&mxhouse);
 }
 
 //Eventhandler if filereader is clearedwe flush the decoder.
@@ -95,8 +98,9 @@ void MP3Codec::OnFileReaderClearEvent()
 
 bool MP3Codec::Init(const CStdString &strFile, unsigned int filecache)
 {
-  if (!m_dll.IsLoaded())
-    m_dll.Load();
+  if (!m_dll.Load())
+    return false;
+
   // set defaults...
   m_InputBufferPos = 0;
   m_OutputBufferPos = 0;
@@ -106,6 +110,7 @@ bool MP3Codec::Init(const CStdString &strFile, unsigned int filecache)
   m_lastByteOffset = 0;
   m_eof = false;
   m_CallAgainWithSameBuffer = false;
+  m_readRetries = 5;
 
   CFileItem item(strFile, false);
   CMusicInfoTagLoaderMP3 mp3info;
@@ -268,6 +273,8 @@ int MP3Codec::Read(int size, bool init)
       {
         if (init)
         {
+          if (result == 0 && m_readRetries-- > 0)
+            return Read(size,init);
           // Make sure some data was decoded. Without a valid frame, we cannot determine the audio format
           if (!outputsize)
             return DECODING_ERROR;
@@ -327,6 +334,7 @@ int MP3Codec::Read(int size, bool init)
       return result;
     }
   }
+  m_readRetries = 5;
   return DECODING_SUCCESS;
 }
 
index 3c97dc2..268b4a9 100644 (file)
@@ -95,6 +95,7 @@ private:
   bool    m_eof;
   bool    m_Decoding;
   bool    m_CallAgainWithSameBuffer;
+  int     m_readRetries;
 
   // Input buffer to read our mp3 data into
   BYTE*         m_InputBuffer;
index 3a7adaa..035cabd 100644 (file)
@@ -17,6 +17,7 @@ SRCS=ADPCMCodec.cpp \
      OggCallback.cpp \
      OGGcodec.cpp \
      PAPlayer.cpp \
+     PCMCodec.cpp \
      ReplayGain.cpp \
      SIDCodec.cpp \
      TimidityCodec.cpp \
index 28a7c58..43b57d3 100644 (file)
@@ -383,7 +383,7 @@ bool PAPlayer::CreateStream(int num, unsigned int channels, unsigned int sampler
       m_bitsPerSample[num], //uiBitsPerSample
       false               , //bResample
       true                , //bIsMusic
-      false                 //bPassthrough
+      IAudioRenderer::ENCODED_NONE //bPassthrough
     );
 
     if (!m_pAudioDecoder[num]) return false;
diff --git a/xbmc/cores/paplayer/PCMCodec.cpp b/xbmc/cores/paplayer/PCMCodec.cpp
new file mode 100644 (file)
index 0000000..19cedf1
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ *      Copyright (C) 2011-2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "PCMCodec.h"
+#include "utils/log.h"
+#include "utils/EndianSwap.h"
+#include "utils/StringUtils.h"
+
+PCMCodec::PCMCodec()
+{
+  m_CodecName = "PCM";
+  m_TotalTime = 0;
+  m_SampleRate = 44100;
+  m_Channels = 2;
+  m_BitsPerSample = 16;
+  m_Bitrate = m_SampleRate * m_Channels * m_BitsPerSample;
+}
+
+PCMCodec::~PCMCodec()
+{
+  DeInit();
+}
+
+bool PCMCodec::Init(const CStdString &strFile, unsigned int filecache)
+{
+  m_file.Close();
+  if (!m_file.Open(strFile, READ_CACHED))
+  {
+    CLog::Log(LOGERROR, "PCMCodec::Init - Failed to open file");
+    return false;
+  }
+
+  int64_t length = m_file.GetLength();
+
+  if (m_Bitrate)
+    m_TotalTime = 1000 * 8 * length / m_Bitrate;
+
+  m_file.Seek(0, SEEK_SET);
+
+  return true;
+}
+
+void PCMCodec::DeInit()
+{
+  m_file.Close();
+}
+
+__int64 PCMCodec::Seek(__int64 iSeekTime)
+{
+  m_file.Seek((iSeekTime / 1000) * (m_Bitrate / 8));
+  return iSeekTime;
+}
+
+int PCMCodec::ReadPCM(BYTE *pBuffer, int size, int *actualsize)
+{
+  *actualsize = 0;
+
+  int iAmountRead = m_file.Read(pBuffer, 2 * (size / 2));
+  if (iAmountRead > 0)
+  {
+    uint16_t *buffer = (uint16_t*) pBuffer;
+
+    iAmountRead = 2 * (iAmountRead / 2);
+
+    for (int i = 0; i < (iAmountRead / 2); i++)
+      buffer[i] = Endian_SwapBE16(buffer[i]);   // L16 PCM is in network byte order (Big Endian)
+
+    *actualsize = iAmountRead;
+
+    return READ_SUCCESS;
+  }
+  return READ_ERROR;
+}
+
+bool PCMCodec::CanInit()
+{
+  return true;
+}
+
+void PCMCodec::SetMimeParams(const CStdString& strMimeParams)
+{
+  CStdStringArray mimeParams;
+
+  // if there are no parameters, the default is 2 channels, 44100 samples/sec
+  m_Channels = 2;
+  m_SampleRate = 44100;
+
+  StringUtils::SplitString(strMimeParams, ";", mimeParams);
+  for (size_t i = 0; i < mimeParams.size(); i++)
+  {
+    CStdStringArray thisParam;
+    StringUtils::SplitString(mimeParams[i], "=", thisParam, 2);
+    if (thisParam.size() > 1)
+    {
+      if (thisParam[0] == "rate")
+      {
+        m_SampleRate = atoi(thisParam[1].Trim());
+      }
+      else if (thisParam[0] == "channels")
+      {
+        m_Channels = atoi(thisParam[1].Trim());
+      }
+    }
+  }
+
+  m_Bitrate = m_SampleRate * m_Channels * m_BitsPerSample;
+}
diff --git a/xbmc/cores/paplayer/PCMCodec.h b/xbmc/cores/paplayer/PCMCodec.h
new file mode 100644 (file)
index 0000000..6175fa5
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (C) 2011-2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#pragma once
+#include "CachingCodec.h"
+
+class PCMCodec : public CachingCodec
+{
+public:
+  PCMCodec(void);
+  virtual ~PCMCodec(void);
+  virtual bool Init(const CStdString &strFile, unsigned int filecache);
+  virtual void DeInit();
+  virtual __int64 Seek(__int64 iSeekTime);
+  virtual int ReadPCM(BYTE *pBuffer, int size, int *actualsize);
+  virtual bool CanInit();
+  virtual void SetMimeParams(const CStdString& strMimeParams);
+private:
+  int iBytesPerSecond;
+};
+
+
index cfaf40d..15bbfa7 100644 (file)
@@ -25,6 +25,7 @@
 #include "../DllLoader/DllLoader.h"
 #include "Util.h"
 #include "utils/log.h"
+#include "filesystem/SpecialProtocol.h"
 #ifdef _WIN32
 #include "../DllLoader/Win32DllLoader.h"
 #endif
@@ -104,7 +105,16 @@ bool TimidityCodec::Init(const CStdString &strFile, unsigned int filecache)
   if ( m_mid )
     m_dll.FreeMID( m_mid );
 
-  m_mid = m_dll.LoadMID(strFile.c_str());
+  CStdString file = strFile;
+  CURL url(strFile);
+  if (!url.IsLocal())
+  {
+    CStdString file = CUtil::GetNextFilename("special://temp/midi%03d.mid",999);
+    XFILE::CFile::Cache(strFile,file);
+    url.Parse(file);
+  }
+
+  m_mid = m_dll.LoadMID(CSpecialProtocol::TranslatePath(url.Get()).c_str());
   if (!m_mid)
   {
     CLog::Log(LOGERROR,"TimidityCodec: error opening file %s: %s",strFile.c_str(), m_dll.ErrorMsg());
index 7427603..cec5c97 100644 (file)
@@ -184,7 +184,7 @@ bool WAVCodec::Init(const CStdString &strFile, unsigned int filecache)
       // sanity check on the data length
       if (m_iDataLen > length - m_iDataStart)
       {
-        CLog::Log(LOGWARNING, "WAVCodec::Init - Wave has corrupt data length of %ld when it can't be longer then %"PRId64"", m_iDataLen, length - m_iDataStart);
+        CLog::Log(LOGWARNING, "WAVCodec::Init - Wave has corrupt data length of %i when it can't be longer then %"PRId64"", m_iDataLen, length - m_iDataStart);
         m_iDataLen = (long)(length - m_iDataStart);
       }
 
index 5cacd05..1f7575a 100644 (file)
@@ -48,6 +48,7 @@ void CPlayerSelectionRule::Initialize(TiXmlElement* pRule)
   m_tAudio = GetTristate(pRule->Attribute("audio"));
   m_tVideo = GetTristate(pRule->Attribute("video"));
 
+  m_tBD = GetTristate(pRule->Attribute("bd"));
   m_tDVD = GetTristate(pRule->Attribute("dvd"));
   m_tDVDFile = GetTristate(pRule->Attribute("dvdfile"));
   m_tDVDImage = GetTristate(pRule->Attribute("dvdimage"));
@@ -111,6 +112,7 @@ void CPlayerSelectionRule::GetPlayers(const CFileItem& item, VECPLAYERCORES &vec
   if (m_tVideo >= 0 && (m_tVideo > 0) != item.IsVideo()) return;
   if (m_tInternetStream >= 0 && (m_tInternetStream > 0) != item.IsInternetStream()) return;
 
+  if (m_tBD >= 0 && (m_tBD > 0) != (item.IsBDFile() && item.IsOnDVD())) return;
   if (m_tDVD >= 0 && (m_tDVD > 0) != item.IsDVD()) return;
   if (m_tDVDFile >= 0 && (m_tDVDFile > 0) != item.IsDVDFile()) return;
   if (m_tDVDImage >= 0 && (m_tDVDImage > 0) != item.IsDVDImage()) return;
index 7896ab3..ad3c61f 100644 (file)
@@ -49,6 +49,7 @@ private:
   int m_tVideo;
   int m_tInternetStream;
 
+  int m_tBD;
   int m_tDVD;
   int m_tDVDFile;
   int m_tDVDImage;
index ed94556..bf35173 100644 (file)
@@ -257,6 +257,7 @@ bool CDatabase::Open(const DatabaseSettings &settings)
 {
   // take a copy - we're gonna be messing with it and we don't want to touch the original
   DatabaseSettings dbSettings = settings;
+
   if (IsOpen())
   {
     m_openCount++;
@@ -268,64 +269,93 @@ bool CDatabase::Open(const DatabaseSettings &settings)
   if ( dbSettings.type.Equals("mysql") )
   {
     // check we have all information before we cancel the fallback
-    if ( ! (dbSettings.host.IsEmpty() || dbSettings.name.IsEmpty() ||
+    if ( ! (dbSettings.host.IsEmpty() ||
             dbSettings.user.IsEmpty() || dbSettings.pass.IsEmpty()) )
       m_sqlite = false;
     else
-      CLog::Log(LOGINFO, "essential mysql database information is missing (eg. host, name, user, pass)");
+      CLog::Log(LOGINFO, "Essential mysql database information is missing. Require at least host, user and pass defined.");
   }
-
-  // always safely fallback to sqlite3, and use separate, versioned database
-  if (m_sqlite)
+  else
   {
     dbSettings.type = "sqlite3";
-    dbSettings.host = _P(g_settings.GetDatabaseFolder());
+    dbSettings.host = CSpecialProtocol::TranslatePath(g_settings.GetDatabaseFolder());
+    dbSettings.name = GetBaseDBName();
+  }
+
+  // use separate, versioned database
+  int version = GetMinVersion();
+  CStdString baseDBName = (dbSettings.name.IsEmpty() ? GetBaseDBName() : dbSettings.name.c_str());
+  CStdString latestDb;
+  latestDb.Format("%s%d", baseDBName, version);
 
-    int version = GetMinVersion();
-    CStdString latestDb;
-    latestDb.Format("%s%d.db", GetBaseDBName(), version);
-    while (version >= 0)
+  while (version >= 0)
+  {
+    if (version)
+      dbSettings.name.Format("%s%d", baseDBName, version);
+    else
+      dbSettings.name.Format("%s", baseDBName);
+
+    if (Connect(dbSettings, false))
     {
-      if (version)
-        dbSettings.name.Format("%s%d.db", GetBaseDBName(), version);
-      else
-        dbSettings.name.Format("%s.db", GetBaseDBName());
-      if (Connect(dbSettings, false))
-      { 
-        // Database exists, take a copy for our current version (if needed) and reopen that one
-        if (version < GetMinVersion())
+      // Database exists, take a copy for our current version (if needed) and reopen that one
+      if (version < GetMinVersion())
+      {
+        CLog::Log(LOGNOTICE, "Old database found - updating from version %i to %i", version, GetMinVersion());
+
+        bool copy_fail = false;
+
+        try
         {
-          CLog::Log(LOGNOTICE, "Old database found - updating from version %i to %i", version, GetMinVersion());
-          Close();
-          CStdString currentDb = URIUtils::AddFileToFolder(dbSettings.host, dbSettings.name);
-          CStdString newPath = URIUtils::AddFileToFolder(dbSettings.host, latestDb);
-          if (!XFILE::CFile::Cache(currentDb, newPath))
-          {
-            CLog::Log(LOGERROR, "Unable to copy old database %s to new version %s", dbSettings.name.c_str(), latestDb.c_str());
-            return false;
-          }
-          dbSettings.name = latestDb;
-          if (!Connect(dbSettings, false))
-          {
-            CLog::Log(LOGERROR, "Unable to open freshly copied database %s", dbSettings.name.c_str());
-            return false;
-          }
+          m_pDB->copy(latestDb);
         }
-        // yay - we have a copy of our db, now do our worst with it
-        if (UpdateVersion(dbSettings.name))
-          return true;
-        // update failed - loop around and see if we have another one available
+        catch(...)
+        {
+          CLog::Log(LOGERROR, "Unable to copy old database %s to new version %s", dbSettings.name.c_str(), latestDb.c_str());
+          copy_fail = true;
+        }
+
         Close();
+
+        if ( copy_fail )
+          return false;
+
+        dbSettings.name = latestDb;
+        if (!Connect(dbSettings, false))
+        {
+          CLog::Log(LOGERROR, "Unable to open freshly copied database %s", dbSettings.name.c_str());
+          return false;
+        }
       }
-      // drop back to the previous version and try that
-      version--;
+
+      // yay - we have a copy of our db, now do our worst with it
+      if (UpdateVersion(dbSettings.name))
+        return true;
+
+      // update failed - loop around and see if we have another one available
+      Close();
     }
-    // unable to open any version fall through to create a new one
-    dbSettings.name = latestDb;
+
+    // drop back to the previous version and try that
+    version--;
   }
 
+
+  // unable to open any version fall through to create a new one
+  dbSettings.name = latestDb;
+
   if (Connect(dbSettings, true) && UpdateVersion(dbSettings.name))
+  {
     return true;
+  }
+  // safely fall back to sqlite as appropriate
+  else if ( ! m_sqlite )
+  {
+    CLog::Log(LOGDEBUG, "Falling back to sqlite.");
+    dbSettings = settings;
+    dbSettings.type = "sqlite3";
+    return Open(dbSettings);
+  }
+
   // failed to update or open the database
   Close();
   CLog::Log(LOGERROR, "Unable to open database %s", dbSettings.name.c_str());
@@ -371,30 +401,40 @@ bool CDatabase::Connect(const DatabaseSettings &dbSettings, bool create)
   if (m_pDB->connect(create) != DB_CONNECTION_OK)
     return false;
 
-  // test if db already exists, if not we need to create the tables
-  if (!m_pDB->exists() && create)
+  try
   {
+    // test if db already exists, if not we need to create the tables
+    if (!m_pDB->exists() && create)
+    {
+      if (dbSettings.type.Equals("sqlite3"))
+      {
+        //  Modern file systems have a cluster/block size of 4k.
+        //  To gain better performance when performing write
+        //  operations to the database, set the page size of the
+        //  database file to 4k.
+        //  This needs to be done before any table is created.
+        m_pDS->exec("PRAGMA page_size=4096\n");
+
+        //  Also set the memory cache size to 16k
+        m_pDS->exec("PRAGMA default_cache_size=4096\n");
+      }
+      CreateTables();
+    }
+
+    // sqlite3 post connection operations
     if (dbSettings.type.Equals("sqlite3"))
     {
-      //  Modern file systems have a cluster/block size of 4k.
-      //  To gain better performance when performing write
-      //  operations to the database, set the page size of the
-      //  database file to 4k.
-      //  This needs to be done before any table is created.
-      m_pDS->exec("PRAGMA page_size=4096\n");
-
-      //  Also set the memory cache size to 16k
-      m_pDS->exec("PRAGMA default_cache_size=4096\n");
+      m_pDS->exec("PRAGMA cache_size=4096\n");
+      m_pDS->exec("PRAGMA synchronous='NORMAL'\n");
+      m_pDS->exec("PRAGMA count_changes='OFF'\n");
     }
-    CreateTables();
   }
-
-  // sqlite3 post connection operations
-  if (dbSettings.type.Equals("sqlite3"))
+  catch (DbErrors &error)
   {
-    m_pDS->exec("PRAGMA cache_size=4096\n");
-    m_pDS->exec("PRAGMA synchronous='NORMAL'\n");
-    m_pDS->exec("PRAGMA count_changes='OFF'\n");
+    CLog::Log(LOGERROR, "%s failed with '%s'", __FUNCTION__, error.getMsg());
+    m_openCount = 1; // set to open so we can execute Close()
+    Close();
+    return false;
   }
 
   m_openCount = 1; // our database is open
@@ -558,6 +598,8 @@ bool CDatabase::UpdateVersionNumber()
   {
     CStdString strSQL=PrepareSQL("UPDATE version SET idVersion=%i\n", GetMinVersion());
     m_pDS->exec(strSQL.c_str());
+
+    CommitTransaction();
   }
   catch(...)
   {
index 65962e0..541ce8d 100644 (file)
@@ -30,7 +30,7 @@ namespace dbiplus {
 
 #include <memory>
 
-struct DatabaseSettings; // forward
+class DatabaseSettings; // forward
 
 class CDatabase
 {
@@ -112,6 +112,7 @@ protected:
 
   virtual bool Open();
   virtual bool CreateTables();
+  virtual void CreateViews() {};
   virtual bool UpdateOldVersion(int version) { return true; };
 
   virtual int GetMinVersion() const=0;
index efc1171..02fc364 100644 (file)
@@ -80,7 +80,7 @@ public:
   virtual ~Database();
   virtual Dataset *CreateDataset() const = 0;
 /* sets a new host name */
-  void setHostName(const char *newHost) { host = newHost; }
+  virtual void setHostName(const char *newHost) { host = newHost; }
 /* gets a host name */
   const char *getHostName(void) const { return host.c_str(); }
 /* sets a new port */
@@ -88,7 +88,7 @@ public:
 /* gets a port */
   const char *getPort(void) const { return port.c_str(); }
 /* sets a new database name */
-  void setDatabase(const char *newDb) { db = newDb; }
+  virtual void setDatabase(const char *newDb) { db = newDb; }
 /* gets a database name */
   const char *getDatabase(void) const { return db.c_str(); }
 /* sets a new login to database */
@@ -124,6 +124,9 @@ public:
   virtual int drop(void) { return DB_COMMAND_OK; }
   virtual long nextid(const char* seq_name)=0;
 
+/* \brief copy database */
+  virtual int copy(const char *new_name) { return -1; }
+
   virtual bool exists(void) { return false; }
 
 /* virtual methods for transaction */
index 9364c0d..8a72933 100644 (file)
@@ -32,7 +32,8 @@
 #endif
 
 
-#define MYSQL_OK        0
+#define MYSQL_OK          0
+#define ER_BAD_DB_ERROR   1049
 
 using namespace std;
 
@@ -105,23 +106,25 @@ const char *MysqlDatabase::getErrorMsg() {
 }
 
 int MysqlDatabase::connect(bool create_new) {
+  if (host.empty() || db.empty())
+    return DB_CONNECTION_NONE;
+
+  //CLog::Log(LOGDEBUG, "Connecting to mysql:%s:%s", host.c_str(), db.c_str());
+
   try
   {
-    // don't reconnect if ping is ok
-    if (conn != NULL && mysql_ping(conn) == 0)
-    {
-      return DB_CONNECTION_OK;
-    }
     disconnect();
 
     if (conn == NULL)
-    {
       conn = mysql_init(conn);
-    }
 
-    // TODO block to avoid multiple connect on db
-    if (mysql_real_connect(conn,host.c_str(),login.c_str(),passwd.c_str(),db.c_str(),atoi(port.c_str()),NULL,0) != NULL)
+    // establish connection with just user credentials
+    if (mysql_real_connect(conn, host.c_str(),login.c_str(),passwd.c_str(), NULL, atoi(port.c_str()),NULL,0) != NULL)
     {
+      // disable mysql autocommit since we handle it
+      //mysql_autocommit(conn, false);
+
+      // enforce utf8 charset usage
       default_charset = mysql_character_set_name(conn);
       if(mysql_set_character_set(conn, "utf8")) // returns 0 on success
       {
@@ -129,25 +132,37 @@ int MysqlDatabase::connect(bool create_new) {
                   db.c_str(), mysql_errno(conn), mysql_error(conn));
       }
 
-      active = true;
-      return DB_CONNECTION_OK;
-    }
-    // Database doesn't exists
-    if (mysql_errno(conn) == 1049)
-    {
-      default_charset = mysql_character_set_name(conn);
-      if (mysql_set_character_set(conn, "utf8")) // returns 0 on success
+      // check existence
+      if (exists())
       {
-        CLog::Log(LOGERROR, "Unable to set utf8 charset: %s [%d](%s)",
-                  db.c_str(), mysql_errno(conn), mysql_error(conn));
+        // nothing to see here
       }
+      else if (create_new)
+      {
+        char sqlcmd[512];
+        int ret;
 
-      if (create() == MYSQL_OK)
+        sprintf(sqlcmd, "CREATE DATABASE `%s`", db.c_str());
+        if ( (ret=query_with_reconnect(sqlcmd)) != MYSQL_OK )
+        {
+          throw DbErrors("Can't create new database: '%s' (%d)", db.c_str(), ret);
+        }
+      }
+
+      if (mysql_select_db(conn, db.c_str()) == 0)
       {
         active = true;
+        return DB_CONNECTION_OK;
+      }
+    }
 
-        // disable mysql autocommit since we handle it
-        mysql_autocommit(conn, false);
+    // if we failed above, either credentials were incorrect or the database didn't exist
+    if (mysql_errno(conn) == ER_BAD_DB_ERROR && create_new)
+    {
+
+      if (create() == MYSQL_OK)
+      {
+        active = true;
 
         return DB_CONNECTION_OK;
       }
@@ -155,6 +170,7 @@ int MysqlDatabase::connect(bool create_new) {
 
     CLog::Log(LOGERROR, "Unable to open database: %s [%d](%s)",
               db.c_str(), mysql_errno(conn), mysql_error(conn));
+
     return DB_CONNECTION_NONE;
   }
   catch(...)
@@ -166,57 +182,96 @@ int MysqlDatabase::connect(bool create_new) {
 }
 
 void MysqlDatabase::disconnect(void) {
-  if (active == false) return;
-  if (conn == NULL) return;
-  mysql_close(conn);
-  conn = NULL;
+  if (conn != NULL)
+  {
+    mysql_close(conn);
+    conn = NULL;
+  }
+
   active = false;
 }
 
 int MysqlDatabase::create() {
-  const char* seq_table = "sys_seq";
-  if (mysql_real_connect(conn, host.c_str(), login.c_str(), passwd.c_str(), NULL, atoi(port.c_str()),NULL,0) == NULL)
-  {
-    throw DbErrors("Can't create database: '%s'\nCan't connect to server",db.c_str());
-  }
-  char sqlcmd[512];
-  sprintf(sqlcmd, "CREATE DATABASE `%s`", db.c_str());
-  if ( query_with_reconnect(sqlcmd) )
-  {
-    throw DbErrors("Can't create database: '%s'\nError: %s", db.c_str(), strerror(errno));
-  }
-  // Reconnect to the server
-  if (mysql_real_connect(conn, host.c_str(), login.c_str(), passwd.c_str(), db.c_str(), atoi(port.c_str()), NULL, 0) == NULL)
-  {
-    throw DbErrors("Can't create database: '%s'\nCan't reconnect to server",db.c_str());
-  }
-  // Create the sequence table
-  sprintf(sqlcmd,"CREATE TABLE `%s` (`seq_name` VARCHAR( 64 ) NOT NULL, `nextid` INT NOT NULL, PRIMARY KEY ( `seq_name` ))", seq_table);
-  if ( query_with_reconnect(sqlcmd) )
-  {
-    throw DbErrors("Can't create sequence table in '%s'\nError: %s", db.c_str(), strerror(errno));
-  }
-  return MYSQL_OK;
+  return connect(true);
 }
 
 int MysqlDatabase::drop() {
-  if (active == false) throw DbErrors("Can't drop database: no active connection...");
+  if (!active)
+    throw DbErrors("Can't drop database: no active connection...");
   char sqlcmd[512];
+  int ret;
   sprintf(sqlcmd,"DROP DATABASE `%s`", db.c_str());
-  if ( query_with_reconnect(sqlcmd) )
+  if ( (ret=query_with_reconnect(sqlcmd)) != MYSQL_OK )
   {
-    throw DbErrors("Can't drop database: '%s'\nError: %s", db.c_str(), strerror(errno));
+    throw DbErrors("Can't drop database: '%s' (%d)", db.c_str(), ret);
   }
   disconnect();
   return DB_COMMAND_OK;
 }
 
+int MysqlDatabase::copy(const char *backup_name) {
+  if ( !active || conn == NULL)
+    throw DbErrors("Can't copy database: no active connection...");
+
+  char sql[512];
+  int ret;
+
+  // ensure we're connected to the db we are about to copy
+  if ( (ret=mysql_select_db(conn, db.c_str())) != MYSQL_OK )
+    throw DbErrors("Can't connect to source database: '%s'",db.c_str());
+
+  // grab a list of base tables only (no views)
+  sprintf(sql, "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'");
+  if ( (ret=query_with_reconnect(sql)) != MYSQL_OK )
+    throw DbErrors("Can't determine base tables for copy.");
+
+  // get list of all tables from old DB
+  MYSQL_RES* res = mysql_store_result(conn);
+
+  if (res)
+  {
+    if (mysql_num_rows(res) == 0)
+    {
+      mysql_free_result(res);
+      throw DbErrors("The source database was unexpectedly empty.");
+    }
+
+    // create the new database
+    sprintf(sql, "CREATE DATABASE `%s`", backup_name);
+    if ( (ret=query_with_reconnect(sql)) != MYSQL_OK )
+      throw DbErrors("Can't create database for copy: '%s' (%d)", db.c_str(), ret);
+
+    MYSQL_ROW row;
+
+    // duplicate each table from old db to new db
+    while ( (row=mysql_fetch_row(res)) != NULL )
+    {
+      // copy the table definition
+      sprintf(sql, "CREATE TABLE %s.%s LIKE %s",
+              backup_name, row[0], row[0]);
+
+      if ( (ret=query_with_reconnect(sql)) != MYSQL_OK )
+        throw DbErrors("Can't copy schema for table '%s'\nError: %s", db.c_str(), ret);
+
+      // copy the table data
+      sprintf(sql, "INSERT INTO %s.%s SELECT * FROM %s",
+              backup_name, row[0], row[0]);
+
+      if ( (ret=query_with_reconnect(sql)) != MYSQL_OK )
+        throw DbErrors("Can't copy data for table '%s'\nError: %s", row[0], ret);
+    }
+  }
+
+  return 1;
+}
+
 int MysqlDatabase::query_with_reconnect(const char* query) {
   int attempts = 5;
   int result;
 
-  // try to reconnect if server is gone (up to 3 times)
-  while ( ((result = mysql_real_query(conn, query, strlen(query))) == CR_SERVER_GONE_ERROR) &&
+  // try to reconnect if server is gone
+  while ( ((result = mysql_real_query(conn, query, strlen(query))) != MYSQL_OK) &&
+          ((result = mysql_errno(conn)) == CR_SERVER_GONE_ERROR) && 
           (attempts-- > 0) )
   {
     CLog::Log(LOGINFO,"MYSQL server has gone. Will try %d more attempt(s) to reconnect.", attempts);
@@ -224,11 +279,6 @@ int MysqlDatabase::query_with_reconnect(const char* query) {
     connect(true);
   }
 
-  // grab the latest error if not ok
-  if (result != MYSQL_OK)
-    result = mysql_errno(conn);
-
-  // set the error return string and return
   return result;
 }
 
@@ -297,33 +347,36 @@ void MysqlDatabase::rollback_transaction() {
   }
 }
 
-bool MysqlDatabase::exists() {
-  // Uncorrect name, check if tables are present inside the db
-  connect(true);
-  if (active && conn != NULL)
+bool MysqlDatabase::exists(void) {
+  bool ret = false;
+
+  if ( conn == NULL || mysql_ping(conn) )
   {
-    MYSQL_RES* res = mysql_list_dbs(conn, db.c_str());
-    if (res == NULL)
-    {
-      CLog::Log(LOGERROR,"Database is not present, does the user has CREATE DATABASE permission");
-      return false;
-    }
+    CLog::Log(LOGERROR, "Not connected to database, test of existence is not possible.");
+    return ret;
+  }
 
-    bool result = (mysql_num_rows(res) > 0); // Avoid counting the sequence table
-    mysql_free_result(res);
-    // Check if there is some tables ( to permit user with no create database rights
-    if (result == true)
-    {
-      res = mysql_list_tables(conn, NULL);
-      if (res != NULL)
-      {
-        result = (mysql_num_rows(res) > 1);
-      }
-      mysql_free_result(res);
-    }
-    return result;
+  MYSQL_RES* result = mysql_list_dbs(conn, db.c_str());
+  if (result == NULL)
+  {
+    CLog::Log(LOGERROR,"Database is not present, does the user has CREATE DATABASE permission");
+    return false;
   }
-  return false;
+
+  ret = (mysql_num_rows(result) > 0);
+  mysql_free_result(result);
+
+  // Check if there is some tables ( to permit user with no create database rights
+  if (ret)
+  {
+    result = mysql_list_tables(conn, NULL);
+    if (result != NULL)
+      ret = (mysql_num_rows(result) > 0);
+
+    mysql_free_result(result);
+  }
+
+  return ret;
 }
 
 // methods for formatting
@@ -1145,9 +1198,9 @@ MYSQL* MysqlDataset::handle(){
 void MysqlDataset::make_query(StringList &_sql) {
   string query;
   int result = 0;
+  if (db == NULL) throw DbErrors("No Database Connection");
   try
   {
-    if (db == NULL) throw DbErrors("No Database Connection");
     if (autocommit) db->start_transaction();
 
     for (list<string>::iterator i =_sql.begin(); i!=_sql.end(); i++)
@@ -1286,8 +1339,6 @@ int MysqlDataset::exec(const string &sql) {
   else
   {
     // TODO: collect results and store in exec_res
-
-
     return res;
   }
 }
index 8137180..b9b1731 100644 (file)
@@ -67,6 +67,9 @@ public:
 /* check if database exists (ie has tables/views defined) */
   virtual bool exists();
 
+/* \brief copy database */
+  virtual int copy(const char *backup_name);
+
   virtual long nextid(const char* seq_name);
 
 /* virtual methods for transaction */
index f7b308c..1833d6f 100644 (file)
@@ -30,7 +30,9 @@
 #include <string>
 
 #include "sqlitedataset.h"
+#include "utils/log.h"
 #include "system.h" // for Sleep(), OutputDebugString() and GetLastError()
+#include "utils/URIUtils.h"
 
 #ifdef _WIN32
 #pragma comment(lib, "sqlite3.lib")
@@ -108,6 +110,40 @@ Dataset* SqliteDatabase::CreateDataset() const {
        return new SqliteDataset((SqliteDatabase*)this); 
 }
 
+void SqliteDatabase::setHostName(const char *newHost) {
+  host = newHost;
+
+  // hostname is the relative folder to the database, ensure it's slash terminated
+  if (host[host.length()-1] != '/' && host[host.length()-1] != '\\')
+    host += "/";
+
+  // ensure the fully qualified path has slashes in the correct direction
+  if ( (host[1] == ':') && isalpha(host[0]))
+  {
+    size_t pos = 0;
+    while ( (pos = host.find("/", pos)) != string::npos )
+      host.replace(pos++, 1, "\\");
+  }
+  else
+  {
+    size_t pos = 0;
+    while ( (pos = host.find("\\", pos)) != string::npos )
+      host.replace(pos++, 1, "/");
+  }
+}
+
+void SqliteDatabase::setDatabase(const char *newDb) {
+  db = newDb;
+
+  // db is the filename for the database, ensure it's not slash prefixed
+  if (newDb[0] == '/' || newDb[0] == '\\')
+    db = db.substr(1);
+
+  // ensure the ".db" extension is appended to the end
+  if ( db.find(".db") != (db.length()-3) )
+    db += ".db";
+}
+
 int SqliteDatabase::status(void) {
   if (active == false) return DB_CONNECTION_NONE;
   return DB_CONNECTION_OK;
@@ -172,41 +208,14 @@ const char *SqliteDatabase::getErrorMsg() {
 int SqliteDatabase::connect(bool create) {
   if (host.empty() || db.empty())
     return DB_CONNECTION_NONE;
-  
-  string db_fullpath;
-  // hostname is the relative folder to the database, ensure it's slash terminated
-  if (host[host.length()-1] != '/' && host[host.length()-1] != '\\')
-    db_fullpath = host + "/";
-  else
-    db_fullpath = host;
 
-  // db is the filename for the database, ensure it's not slash prefixed
-  if (db[0] == '/' || db[0] == '\\')
-    db_fullpath += db.substr(1);
-  else
-    db_fullpath += db;
+  //CLog::Log(LOGDEBUG, "Connecting to sqlite:%s:%s", host.c_str(), db.c_str());
 
-  // ensure the fully qualified path has slashes in the correct direction
-  if ( (db_fullpath[1] == ':') && isalpha(db_fullpath[0]))
-  {
-    size_t pos = 0;
-    while ( (pos = db_fullpath.find("/", pos)) != string::npos )
-      db_fullpath.replace(pos++, 1, "\\");
-  }
-  else
-  {
-    size_t pos = 0;
-    while ( (pos = db_fullpath.find("\\", pos)) != string::npos )
-      db_fullpath.replace(pos++, 1, "/");
-  }
-
-  // ensure the ".db" extension is appended to the end
-  if ( db_fullpath.find(".db") != (db_fullpath.length()-3) )
-    db_fullpath += ".db";
+  CStdString db_fullpath;
+  URIUtils::AddFileToFolder(host, db, db_fullpath);
 
   try
   {
-
     disconnect();
     int flags = SQLITE_OPEN_READWRITE;
     if (create)
@@ -259,6 +268,52 @@ int SqliteDatabase::create() {
   return connect(true);
 }
 
+int SqliteDatabase::copy(const char *backup_name) {
+  if (active == false)
+    throw DbErrors("Can't copy database: no active connection...");
+
+  CLog::Log(LOGDEBUG, "Copying from %s to %s at %s", db.c_str(), backup_name, host.c_str());
+
+  int rc;
+  string backup_db = backup_name;
+
+  sqlite3 *pFile;           /* Database connection opened on zFilename */
+  sqlite3_backup *pBackup;  /* Backup object used to copy data */
+
+  //
+  if (backup_name[0] == '/' || backup_name[0] == '\\')
+    backup_db = backup_db.substr(1);
+
+  // ensure the ".db" extension is appended to the end
+  if ( backup_db.find(".db") != (backup_db.length()-3) )
+    backup_db += ".db";
+
+  string backup_path = host + backup_db;
+
+  /* Open the database file identified by zFilename. Exit early if this fails
+  ** for any reason. */
+  rc = sqlite3_open(backup_path.c_str(), &pFile);
+  if( rc==SQLITE_OK )
+  {
+    pBackup = sqlite3_backup_init(pFile, "main", getHandle(), "main");
+
+    if( pBackup )
+    {
+      (void)sqlite3_backup_step(pBackup, -1);
+      (void)sqlite3_backup_finish(pBackup);
+    }
+
+    rc = sqlite3_errcode(pFile);
+  }
+
+  (void)sqlite3_close(pFile);
+
+  if( rc != SQLITE_OK )
+    throw DbErrors("Can't copy database. (%d)", rc);
+
+  return rc;
+}
+
 int SqliteDatabase::drop() {
   if (active == false) throw DbErrors("Can't drop database: no active connection...");
   disconnect();
@@ -389,10 +444,10 @@ sqlite3* SqliteDataset::handle(){
 
 void SqliteDataset::make_query(StringList &_sql) {
   string query;
+  if (db == NULL) throw DbErrors("No Database Connection");
 
  try {
 
-  if (db == NULL) throw DbErrors("No Database Connection");
   if (autocommit) db->start_transaction();
 
 
index 8203d6e..af545ad 100644 (file)
@@ -61,8 +61,13 @@ public:
   virtual int setErr(int err_code,const char * qry);
 /* func. returns error message if error occurs */
   virtual const char *getErrorMsg();
-  
+/* sets a new host name */
+  virtual void setHostName(const char *newHost);
+/* sets a database name */
+  virtual void setDatabase(const char *newDb);
+
 /* func. connects to database-server */
+
   virtual int connect(bool create);
 /* func. disconnects from database-server */
   virtual void disconnect();
@@ -73,6 +78,9 @@ public:
 /* check if database exists (ie has tables/views defined) */
   virtual bool exists();
 
+/* \brief copy database */
+  virtual int copy(const char *backup_name);
+
   virtual long nextid(const char* seq_name);
 
 /* virtual methods for transaction */
@@ -103,7 +111,7 @@ protected:
   result_set exec_res;
   bool autorefresh;
   char* errmsg;
-  
+
   sqlite3* handle();
 
 /* Makes direct queries to database */
index cbb3eeb..1dc25a8 100644 (file)
@@ -94,6 +94,17 @@ bool CGUIDialogContextMenu::OnMessage(CGUIMessage &message)
   return CGUIDialog::OnMessage(message);
 }
 
+bool CGUIDialogContextMenu::OnAction(const CAction& action)
+{
+  if (action.GetID() == ACTION_CONTEXT_MENU)
+  {
+    Close();
+    return true;
+  }
+
+  return CGUIDialog::OnAction(action);
+}
+
 void CGUIDialogContextMenu::OnInitWindow()
 {
   m_clickedButton = -1;
@@ -134,7 +145,11 @@ void CGUIDialogContextMenu::SetupButtons()
       if (pGroupList)
       {
         pButton->SetPosition(pButtonTemplate->GetXPosition(), pButtonTemplate->GetYPosition());
-        pGroupList->AddControl(pButton);
+        // try inserting context buttons at position specified by template
+        // button, if template button is not in grouplist fallback to adding
+        // new buttons at the end of grouplist
+        if (!pGroupList->InsertControl(pButton, pButtonTemplate))
+          pGroupList->AddControl(pButton);
       }
 #if PRE_SKIN_VERSION_11_COMPATIBILITY
       else
@@ -205,10 +220,17 @@ void CGUIDialogContextMenu::SetupButtons()
   }
 
   // update our default control
-  if (m_defaultControl < BUTTON_START || m_defaultControl > BUTTON_END)
-    m_defaultControl = BUTTON_START;
-  while (m_defaultControl <= BUTTON_END && !(GetControl(m_defaultControl)->CanFocus()))
-    m_defaultControl++;
+  if (pGroupList)
+    m_defaultControl = pGroupList->GetID();
+#if PRE_SKIN_VERSION_11_COMPATIBILITY
+  else
+  {
+    if (m_defaultControl < BUTTON_START || m_defaultControl > BUTTON_END)
+      m_defaultControl = BUTTON_START;
+    while (m_defaultControl <= BUTTON_END && !(GetControl(m_defaultControl)->CanFocus()))
+      m_defaultControl++;
+  }
+#endif
 }
 
 void CGUIDialogContextMenu::SetPosition(float posX, float posY)
@@ -285,14 +307,10 @@ void CGUIDialogContextMenu::GetContextButtons(const CStdString &type, const CFil
     if (item->IsDVD() || item->IsCDDA())
     {
       // We need to check if there is a detected is inserted!
-      if ( g_mediaManager.IsDiscInDrive() ) 
-      {
-        buttons.Add(CONTEXT_BUTTON_PLAY_DISC, 341); // Play CD/DVD!
-        if (CGUIWindowVideoBase::GetResumeItemOffset(item.get()) > 0)
-        {
-          buttons.Add(CONTEXT_BUTTON_RESUME_DISC, CGUIWindowVideoBase::GetResumeString(*(item.get())));     // Resume Disc
-        }
-      }
+      buttons.Add(CONTEXT_BUTTON_PLAY_DISC, 341); // Play CD/DVD!
+      if (CGUIWindowVideoBase::GetResumeItemOffset(item.get()) > 0)
+        buttons.Add(CONTEXT_BUTTON_RESUME_DISC, CGUIWindowVideoBase::GetResumeString(*(item.get())));     // Resume Disc
+
       buttons.Add(CONTEXT_BUTTON_EJECT_DISC, 13391);  // Eject/Load CD/DVD!
     }
     else // Must be HDD
@@ -386,10 +404,10 @@ bool CGUIDialogContextMenu::OnContextButton(const CStdString &type, const CFileI
 
 #ifdef HAS_DVD_DRIVE
   case CONTEXT_BUTTON_PLAY_DISC:
-    return MEDIA_DETECT::CAutorun::PlayDisc(true); // restart
+    return MEDIA_DETECT::CAutorun::PlayDisc(item->GetPath(), true, true); // restart
 
   case CONTEXT_BUTTON_RESUME_DISC:
-    return MEDIA_DETECT::CAutorun::PlayDisc(false);// resume
+    return MEDIA_DETECT::CAutorun::PlayDisc(item->GetPath(), true, false); // resume
 
   case CONTEXT_BUTTON_EJECT_DISC:
 #ifdef _WIN32
index 190ba31..9a9600f 100644 (file)
@@ -130,6 +130,7 @@ public:
   CGUIDialogContextMenu(void);
   virtual ~CGUIDialogContextMenu(void);
   virtual bool OnMessage(CGUIMessage &message);
+  virtual bool OnAction(const CAction& action);
   virtual void SetPosition(float posX, float posY);
 
   static bool SourcesMenu(const CStdString &strType, const CFileItemPtr item, float posX, float posY);
index d5b597e..ffbe20f 100644 (file)
@@ -95,7 +95,6 @@ bool CGUIDialogMediaSource::OnMessage(CGUIMessage& message)
   case GUI_MSG_WINDOW_INIT:
     {
       m_confirmed = false;
-      m_bRunScan = false;
       m_bNameChanged=false;
       UpdateButtons();
     }
@@ -149,16 +148,6 @@ bool CGUIDialogMediaSource::ShowAndAddMediaSource(const CStdString &type)
       share.m_strThumbnailImage = dialog->m_paths->Get(0)->GetThumbnailImage();
     }
     g_settings.AddShare(type, share);
-
-    if (type == "video")
-    {
-      if (dialog->m_bRunScan)
-      {
-        CGUIDialogVideoScan* scanner = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
-        if (scanner)
-          scanner->StartScanning(share.strPath, true);
-      }
-    }
   }
   dialog->m_paths->Clear();
   return confirmed;
@@ -237,30 +226,10 @@ void CGUIDialogMediaSource::OnPathBrowse(int item)
     share1.m_ignore = true;
     extraShares.push_back(share1);
 
-#ifdef HAS_FILESYSTEM_SMB
-    share1.strPath = "smb://";
-    share1.strName = g_localizeStrings.Get(20171);
-    extraShares.push_back(share1);
-#endif
-
-#ifdef HAS_FILESYSTEM_NFS
-    share1.strPath = "nfs://";
-    share1.strName = g_localizeStrings.Get(20259);
-    extraShares.push_back(share1);
-#endif// HAS_FILESYSTEM_NFS
-
-    share1.strPath = "upnp://";
-    share1.strName = "UPnP Devices";
-    extraShares.push_back(share1);
-
     share1.strPath = "sap://";
     share1.strName = "SAP Streams";
     extraShares.push_back(share1);
 
-    share1.strPath = "zeroconf://";
-    share1.strName = "Zeroconf Browser";
-    extraShares.push_back(share1);
-
     if (g_guiSettings.GetString("audiocds.recordingpath",false) != "")
     {
       share1.strPath = "special://recordings/";
@@ -287,18 +256,6 @@ void CGUIDialogMediaSource::OnPathBrowse(int item)
     share1.strName = "ReplayTV Devices";
     extraShares.push_back(share1);
 
-#ifdef HAS_FILESYSTEM_SMB
-    share1.strPath = "smb://";
-    share1.strName = g_localizeStrings.Get(20171);
-    extraShares.push_back(share1);
-#endif
-
-#ifdef HAS_FILESYSTEM_NFS
-    share1.strPath = "nfs://";
-    share1.strName = g_localizeStrings.Get(20259);
-    extraShares.push_back(share1);
-#endif// HAS_FILESYSTEM_NFS
-
     share1.strPath = "hdhomerun://";
     share1.strName = "HDHomerun Devices";
     extraShares.push_back(share1);
@@ -306,14 +263,6 @@ void CGUIDialogMediaSource::OnPathBrowse(int item)
     share1.strPath = "sap://";
     share1.strName = "SAP Streams";
     extraShares.push_back(share1);
-
-    share1.strPath = "upnp://";
-    share1.strName = "UPnP Devices";
-    extraShares.push_back(share1);
-
-    share1.strPath = "zeroconf://";
-    share1.strName = "Zeroconf Browser";
-    extraShares.push_back(share1);
   }
   else if (m_type == "pictures")
   {
@@ -325,26 +274,6 @@ void CGUIDialogMediaSource::OnPathBrowse(int item)
       share1.strName = g_localizeStrings.Get(20008);
       extraShares.push_back(share1);
     }
-
-#ifdef HAS_FILESYSTEM_SMB
-    share1.strPath = "smb://";
-    share1.strName = g_localizeStrings.Get(20171);
-    extraShares.push_back(share1);
-#endif
-
-#ifdef HAS_FILESYSTEM_NFS
-    share1.strPath = "nfs://";
-    share1.strName = g_localizeStrings.Get(20259);
-    extraShares.push_back(share1);
-#endif// HAS_FILESYSTEM_NFS
-
-    share1.strPath = "upnp://";
-    share1.strName = "UPnP Devices";
-    extraShares.push_back(share1);
-
-    share1.strPath = "zeroconf://";
-    share1.strName = "Zeroconf Browser";
-    extraShares.push_back(share1);
   }
   else if (m_type == "programs")
   {
@@ -405,7 +334,7 @@ void CGUIDialogMediaSource::OnOK()
     if (m_type == "video" && !URIUtils::IsLiveTV(share.strPath) && 
         !share.strPath.Left(6).Equals("rss://"))
     {
-      CGUIWindowVideoBase::OnAssignContent(share.strPath, 0, m_info, m_settings);
+      CGUIWindowVideoBase::OnAssignContent(share.strPath);
     }
   }
 
@@ -426,6 +355,7 @@ void CGUIDialogMediaSource::UpdateButtons()
     return;
 
   CONTROL_ENABLE_ON_CONDITION(CONTROL_OK, !m_paths->Get(0)->GetPath().IsEmpty() && !m_name.IsEmpty());
+  CONTROL_ENABLE_ON_CONDITION(CONTROL_PATH_ADD, !m_paths->Get(0)->GetPath().IsEmpty());
   CONTROL_ENABLE_ON_CONDITION(CONTROL_PATH_REMOVE, m_paths->Size() > 1);
   // name
   SET_CONTROL_LABEL2(CONTROL_NAME, m_name);
index 4856efe..ba96f15 100644 (file)
@@ -22,7 +22,6 @@
  */
 
 #include "guilib/GUIDialog.h"
-#include "video/VideoInfoScanner.h"
 
 class CFileItemList;
 class CMediaSource;
@@ -61,9 +60,5 @@ protected:
   CStdString m_name;
   CFileItemList* m_paths;
   bool m_confirmed;
-  ADDON::ScraperPtr m_info;
-  bool m_bRunScan;
   bool m_bNameChanged;
-
-  VIDEO::SScanSettings m_settings;
 };
index 242b2ea..5999638 100644 (file)
@@ -164,12 +164,12 @@ void CGUIDialogSmartPlaylistEditor::OnOK()
   // save our playlist
   if (m_path.IsEmpty())
   {
-    CStdString filename(m_playlist.m_playlistName);
+    CStdString filename(CUtil::MakeLegalFileName(m_playlist.m_playlistName));
     CStdString path;
     if (CGUIDialogKeyboard::ShowAndGetInput(filename, g_localizeStrings.Get(16013), false))
     {
       path = URIUtils::AddFileToFolder(g_guiSettings.GetString("system.playlistspath"),m_playlist.GetSaveLocation());
-      path = URIUtils::AddFileToFolder(path, filename);
+      path = URIUtils::AddFileToFolder(path, CUtil::MakeLegalFileName(filename));
     }
     else
       return;
index 43e3438..8dfe1be 100644 (file)
@@ -185,6 +185,13 @@ void CGUIDialogSmartPlaylistRule::OnBrowse()
     if (m_type.Equals("songs") || m_type.Equals("albums"))
       path = "special://musicplaylists/";
     XFILE::CDirectory::GetDirectory(path, items, ".xsp",false,false,XFILE::DIR_CACHE_ONCE,true,true);
+    for (int i = 0; i < items.Size(); i++)
+    {
+      CFileItemPtr item = items[i];
+      CSmartPlaylist playlist;
+      if (playlist.OpenAndReadName(item->GetPath()))
+        item->SetLabel(playlist.GetName());
+    }
     iLabel = 559;
   }
   else if (m_rule.m_field == CSmartPlaylistRule::FIELD_PATH)
index 192487c..d43b0f9 100644 (file)
@@ -47,10 +47,12 @@ using namespace std;
 
 CAFPDirectory::CAFPDirectory(void)
 {
+  gAfpConnection.AddActiveConnection();
 }
 
 CAFPDirectory::~CAFPDirectory(void)
 {
+  gAfpConnection.AddIdleConnection();
 }
 
 bool CAFPDirectory::ResolveSymlink( const CStdString &dirName, const CStdString &fileName, 
@@ -64,7 +66,7 @@ bool CAFPDirectory::ResolveSymlink( const CStdString &dirName, const CStdString
   URIUtils::AddSlashAtEnd(fullpath);
   fullpath += fileName;
   
-  resolvedUrl.Reset();
+  CPasswordManager::GetInstance().AuthenticateURL(resolvedUrl);
   resolvedUrl.SetProtocol("afp");
   resolvedUrl.SetHostName(gAfpConnection.GetConnectedIp());   
   
@@ -210,7 +212,7 @@ bool CAFPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items
             //resolve symlinks
             if(S_ISLNK(info.st_mode))
             {
-              CURL linkUrl;
+              CURL linkUrl(url);
               if(!ResolveSymlink(strDirName, strFile, &info, linkUrl))
               {
                 lock.Leave();              
index e3fb399..84bc32e 100644 (file)
@@ -67,7 +67,7 @@ bool CDirectoryCache::GetDirectory(const CStdString& strPath, CFileItemList &ite
 {
   CSingleLock lock (m_cs);
 
-  CStdString storedPath = strPath;
+  CStdString storedPath = URIUtils::SubstitutePath(strPath);
   URIUtils::RemoveSlashAtEnd(storedPath);
 
   ciCache i = m_cache.find(storedPath);
@@ -106,7 +106,7 @@ void CDirectoryCache::SetDirectory(const CStdString& strPath, const CFileItemLis
   // this is the best solution for now.
   CSingleLock lock (m_cs);
 
-  CStdString storedPath = strPath;
+  CStdString storedPath = URIUtils::SubstitutePath(strPath);
   URIUtils::RemoveSlashAtEnd(storedPath);
 
   ClearDirectory(storedPath);
@@ -130,7 +130,7 @@ void CDirectoryCache::ClearDirectory(const CStdString& strPath)
 {
   CSingleLock lock (m_cs);
 
-  CStdString storedPath = strPath;
+  CStdString storedPath = URIUtils::SubstitutePath(strPath);
   URIUtils::RemoveSlashAtEnd(storedPath);
 
   iCache i = m_cache.find(storedPath);
@@ -142,7 +142,7 @@ void CDirectoryCache::ClearSubPaths(const CStdString& strPath)
 {
   CSingleLock lock (m_cs);
 
-  CStdString storedPath = strPath;
+  CStdString storedPath = URIUtils::SubstitutePath(strPath);
   URIUtils::RemoveSlashAtEnd(storedPath);
 
   iCache i = m_cache.begin();
index f93e693..fa6367b 100644 (file)
@@ -32,7 +32,9 @@ using namespace XCURL;
 
 /* okey this is damn ugly. our dll loader doesn't allow for postload, preunload functions */
 static long g_curlReferences = 0;
+#if(0)
 static unsigned int g_curlTimeout = 0;
+#endif
 
 bool DllLibCurlGlobal::Load()
 {
@@ -76,8 +78,10 @@ void DllLibCurlGlobal::Unload()
   }
 
   /* CheckIdle will clear this one up */
+#if(0)
   if(g_curlReferences == 1)
     g_curlTimeout = XbmcThreads::SystemClockMillis();
+#endif
 }
 
 void DllLibCurlGlobal::CheckIdle()
@@ -113,8 +117,10 @@ void DllLibCurlGlobal::CheckIdle()
   }
 
   /* check if we should unload the dll */
+#if(0) // we never unload libcurl, since libssl can break when python unloads then
   if(g_curlReferences == 1 && XbmcThreads::SystemClockMillis() - g_curlTimeout > idletime)
     Unload();
+#endif
 }
 
 void DllLibCurlGlobal::easy_aquire(const char *protocol, const char *hostname, CURL_HANDLE** easy_handle, CURLM** multi_handle)
index d946309..37dfc9c 100644 (file)
@@ -57,8 +57,8 @@ public:
   virtual int nfs_mount(struct nfs_context *nfs,     const char *server,   const char *exportname)=0;
   virtual int nfs_stat(struct nfs_context *nfs,      const char *path,     struct stat *st)=0;
   virtual int nfs_fstat(struct nfs_context *nfs,     struct nfsfh *nfsfh,  struct stat *st)=0;
-  virtual int nfs_truncate(struct nfs_context *nfs,  const char *path,     off_t length)=0;
-  virtual int nfs_ftruncate(struct nfs_context *nfs, struct nfsfh *nfsfh,  off_t length)=0;
+  virtual int nfs_truncate(struct nfs_context *nfs,  const char *path,     off64_t length)=0;
+  virtual int nfs_ftruncate(struct nfs_context *nfs, struct nfsfh *nfsfh,  off64_t length)=0;
   virtual int nfs_opendir(struct nfs_context *nfs,   const char *path,     struct nfsdir **nfsdir)=0;
   virtual int nfs_statvfs(struct nfs_context *nfs,   const char *path,     struct statvfs *svfs)=0;
   virtual int nfs_chmod(struct nfs_context *nfs,     const char *path,     int mode)=0;
@@ -76,9 +76,9 @@ public:
   virtual int nfs_read(struct nfs_context *nfs,      struct nfsfh *nfsfh,  size_t count, char *buf)=0;  
   virtual int nfs_write(struct nfs_context *nfs,     struct nfsfh *nfsfh,  size_t count, char *buf)=0;
   virtual int nfs_creat(struct nfs_context *nfs,     const char *path,     int mode,     struct nfsfh **nfsfh)=0;  
-  virtual int nfs_pread(struct nfs_context *nfs,     struct nfsfh *nfsfh,  off_t offset, size_t count, char *buf)=0;
-  virtual int nfs_pwrite(struct nfs_context *nfs,    struct nfsfh *nfsfh,  off_t offset, size_t count, char *buf)=0;
-  virtual int nfs_lseek(struct nfs_context *nfs,     struct nfsfh *nfsfh,  off_t offset, int whence,   off_t *current_offset)=0;
+  virtual int nfs_pread(struct nfs_context *nfs,     struct nfsfh *nfsfh,  off64_t offset, size_t count, char *buf)=0;
+  virtual int nfs_pwrite(struct nfs_context *nfs,    struct nfsfh *nfsfh,  off64_t offset, size_t count, char *buf)=0;
+  virtual int nfs_lseek(struct nfs_context *nfs,     struct nfsfh *nfsfh,  off64_t offset, int whence,   off64_t *current_offset)=0;
 };
 
 class DllLibNfs : public DllDynamic, DllLibNfsInterface
@@ -103,8 +103,8 @@ class DllLibNfs : public DllDynamic, DllLibNfsInterface
   DEFINE_METHOD3(int, nfs_mount,     (struct nfs_context *p1, const char *p2,    const char *p3))
   DEFINE_METHOD3(int, nfs_stat,      (struct nfs_context *p1, const char *p2,    struct stat *p3))
   DEFINE_METHOD3(int, nfs_fstat,     (struct nfs_context *p1, struct nfsfh *p2,  struct stat *p3))
-  DEFINE_METHOD3(int, nfs_truncate,  (struct nfs_context *p1, const char *p2,    off_t p3))
-  DEFINE_METHOD3(int, nfs_ftruncate, (struct nfs_context *p1, struct nfsfh *p2,  off_t p3))
+  DEFINE_METHOD3(int, nfs_truncate,  (struct nfs_context *p1, const char *p2,    off64_t p3))
+  DEFINE_METHOD3(int, nfs_ftruncate, (struct nfs_context *p1, struct nfsfh *p2,  off64_t p3))
   DEFINE_METHOD3(int, nfs_opendir,   (struct nfs_context *p1, const char *p2,    struct nfsdir **p3))
   DEFINE_METHOD3(int, nfs_statvfs,   (struct nfs_context *p1, const char *p2,    struct statvfs *p3))
   DEFINE_METHOD3(int, nfs_chmod,     (struct nfs_context *p1, const char *p2,    int p3))
@@ -122,9 +122,9 @@ class DllLibNfs : public DllDynamic, DllLibNfsInterface
   DEFINE_METHOD4(int, nfs_readlink,  (struct nfs_context *p1, const char *p2,    char *p3,   int p4))
   DEFINE_METHOD4(int, nfs_chown,     (struct nfs_context *p1, const char *p2,    int p3,     int p4))
   DEFINE_METHOD4(int, nfs_fchown,    (struct nfs_context *p1, struct nfsfh *p2,  int p3,     int p4))
-  DEFINE_METHOD5(int, nfs_pread,     (struct nfs_context *p1, struct nfsfh *p2,  off_t p3,   size_t p4,  char *p5))
-  DEFINE_METHOD5(int, nfs_pwrite,    (struct nfs_context *p1, struct nfsfh *p2,  off_t p3,   size_t p4,  char *p5))
-  DEFINE_METHOD5(int, nfs_lseek,     (struct nfs_context *p1, struct nfsfh *p2,  off_t p3,   int p4,     off_t *p5))
+  DEFINE_METHOD5(int, nfs_pread,     (struct nfs_context *p1, struct nfsfh *p2,  off64_t p3,   size_t p4,  char *p5))
+  DEFINE_METHOD5(int, nfs_pwrite,    (struct nfs_context *p1, struct nfsfh *p2,  off64_t p3,   size_t p4,  char *p5))
+  DEFINE_METHOD5(int, nfs_lseek,     (struct nfs_context *p1, struct nfsfh *p2,  off64_t p3,   int p4,     off64_t *p5))
 
 
 
index b3b5251..dc08889 100644 (file)
@@ -50,7 +50,7 @@ int CFTPParse::getFlagtryretr()
   return m_flagtryretr;
 }
 
-long CFTPParse::getSize()
+uint64_t CFTPParse::getSize()
 {
   return m_size;
 }
@@ -409,13 +409,19 @@ int CFTPParse::FTPParse(string str)
   if (unix_re.FullMatch(str, &type, &permissions, &link_count, &owner, &group, &size, &date, &name))
   {
     m_name = name;
-    m_size = strtol(size.c_str(), NULL, 0);
+    m_size = (uint64_t)strtod(size.c_str(), NULL);
     if (pcrecpp::RE("d").FullMatch(type))
       m_flagtrycwd = 1;
     if (pcrecpp::RE("-").FullMatch(type))
       m_flagtryretr = 1;
     if (pcrecpp::RE("l").FullMatch(type))
+    {
       m_flagtrycwd = m_flagtryretr = 1;
+      // handle symlink
+      size_t found = m_name.find(" -> ");
+      if (found != std::string::npos)
+        m_name = m_name.substr(0, found);
+    }
     setTime(date);
 
     return 1;
@@ -423,7 +429,7 @@ int CFTPParse::FTPParse(string str)
   if (netware_re.FullMatch(str, &type, &permissions, &owner, &size, &date, &name))
   {
     m_name = name;
-    m_size = strtol(size.c_str(), NULL, 0);
+    m_size = (uint64_t)strtod(size.c_str(), NULL);
     if (pcrecpp::RE("d").FullMatch(type))
       m_flagtrycwd = 1;
     if (pcrecpp::RE("-").FullMatch(type))
@@ -435,13 +441,19 @@ int CFTPParse::FTPParse(string str)
   if (netpresenz_re.FullMatch(str, &type, &permissions, &stuff, &size, &date, &name))
   {
     m_name = name;
-    m_size = strtol(size.c_str(), NULL, 0);
+    m_size = (uint64_t)strtod(size.c_str(), NULL);
     if (pcrecpp::RE("d").FullMatch(type))
       m_flagtrycwd = 1;
     if (pcrecpp::RE("-").FullMatch(type))
       m_flagtryretr = 1;
     if (pcrecpp::RE("l").FullMatch(type))
+    {
       m_flagtrycwd = m_flagtryretr = 1;
+      // handle symlink
+      size_t found = m_name.find(" -> ");
+      if (found != std::string::npos)
+        m_name = m_name.substr(0, found);
+    }
     setTime(date);
 
     return 1;
@@ -454,7 +466,7 @@ int CFTPParse::FTPParse(string str)
     pcrecpp::RE("(\\+|,)m(\\d+),").PartialMatch(facts, (void*)NULL, &date);
 
     m_name = name;
-    m_size = strtol(size.c_str(), NULL, 0);
+    m_size = (uint64_t)strtod(size.c_str(), NULL);
     if (pcrecpp::RE("/").FullMatch(type))
       m_flagtrycwd = 1;
     if (pcrecpp::RE("r").FullMatch(type))
@@ -491,7 +503,7 @@ int CFTPParse::FTPParse(string str)
     else
     {
       m_flagtryretr = 1;
-      m_size = strtol(size.c_str(), NULL, 0);
+      m_size = (uint64_t)strtod(size.c_str(), NULL);
     }
     setTime(date);
 
index 0e99b74..16e715c 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <string>
 #include <ctime>
+#include <stdint.h>
 
 using namespace std;
 
@@ -33,13 +34,13 @@ public:
   string getName();
   int getFlagtrycwd();
   int getFlagtryretr();
-  long getSize();
+  uint64_t getSize();
   time_t getTime();
 private:
   string m_name;            // not necessarily 0-terminated
   int m_flagtrycwd;         // 0 if cwd is definitely pointless, 1 otherwise
   int m_flagtryretr;        // 0 if retr is definitely pointless, 1 otherwise
-  long m_size;              // number of octets
+  uint64_t m_size;              // number of octets
   time_t m_time;            // modification time
   void setTime(string str); // Method used to set m_time from a string
   int getDayOfWeek(int month, int date, int year); // Method to get day of week
index 6c627af..4eff97f 100644 (file)
@@ -46,7 +46,7 @@
 
 #ifdef HAS_FILESYSTEM_SMB
 #ifdef _WIN32
-#include "WINSMBDirectory.h"
+#include "windows/WINSMBDirectory.h"
 #else
 #include "SMBDirectory.h"
 #endif
index 50c5153..6bfe7da 100644 (file)
@@ -80,6 +80,9 @@ bool CFile::Cache(const CStdString& strFileName, const CStdString& strDest, XFIL
 {
   CFile file;
 
+  if (strFileName.empty() || strDest.empty())
+    return false;
+
   // special case for zips - ignore caching
   CURL url(strFileName);
   if (URIUtils::IsInZIP(strFileName))
@@ -224,7 +227,7 @@ bool CFile::Open(const CStdString& strFileName, unsigned int flags)
     }
 
     CURL url(URIUtils::SubstitutePath(strFileName));
-    if ( (flags & READ_NO_CACHE) == 0 && URIUtils::IsInternetStream(url) && !CUtil::IsPicture(strFileName) )
+    if ( (flags & READ_NO_CACHE) == 0 && URIUtils::IsInternetStream(url, true) && !CUtil::IsPicture(strFileName) )
       m_flags |= READ_CACHED;
 
     if (m_flags & READ_CACHED)
@@ -249,18 +252,29 @@ bool CFile::Open(const CStdString& strFileName, unsigned int flags)
     {
       // the file implementation decided this item should use a different implementation.
       // the exception will contain the new implementation.
-
       CLog::Log(LOGDEBUG,"File::Open - redirecting implementation for %s", strFileName.c_str());
       SAFE_DELETE(m_pFile);
       if (pRedirectEx && pRedirectEx->m_pNewFileImp)
       {
+        auto_ptr<CURL> pNewUrl(pRedirectEx->m_pNewUrl);
         m_pFile = pRedirectEx->m_pNewFileImp;
         delete pRedirectEx;
-
-        if (!m_pFile->Open(url))
+        
+        if (pNewUrl.get())
         {
-          SAFE_DELETE(m_pFile);
-          return false;
+          if (!m_pFile->Open(*pNewUrl))
+          {
+            SAFE_DELETE(m_pFile);
+            return false;
+          }
+        }
+        else
+        {        
+          if (!m_pFile->Open(url))
+          {
+            SAFE_DELETE(m_pFile);
+            return false;
+          }
         }
       }
     }
@@ -330,6 +344,8 @@ bool CFile::OpenForWrite(const CStdString& strFileName, bool bOverWrite)
 
 bool CFile::Exists(const CStdString& strFileName, bool bUseCache /* = true */)
 {
+  CURL url;
+  
   try
   {
     if (strFileName.IsEmpty())
@@ -344,8 +360,7 @@ bool CFile::Exists(const CStdString& strFileName, bool bUseCache /* = true */)
         return false;
     }
 
-    CURL url(URIUtils::SubstitutePath(strFileName));
-
+    url = URIUtils::SubstitutePath(strFileName);
     auto_ptr<IFile> pFile(CFileFactory::CreateLoader(url));
     if (!pFile.get())
       return false;
@@ -358,6 +373,33 @@ bool CFile::Exists(const CStdString& strFileName, bool bUseCache /* = true */)
     e.writelog(__FUNCTION__);
   }
 #endif
+  catch (CRedirectException *pRedirectEx)
+  {
+    // the file implementation decided this item should use a different implementation.
+    // the exception will contain the new implementation and optional a redirected URL.
+    CLog::Log(LOGDEBUG,"File::Exists - redirecting implementation for %s", strFileName.c_str());
+    if (pRedirectEx && pRedirectEx->m_pNewFileImp)
+    {
+      auto_ptr<IFile> pImp(pRedirectEx->m_pNewFileImp);
+      auto_ptr<CURL> pNewUrl(pRedirectEx->m_pNewUrl);
+      delete pRedirectEx;
+        
+      if (pNewUrl.get())
+      {
+        if (pImp.get() && !pImp->Exists(*pNewUrl))
+        {
+          return false;
+        }
+      }
+      else     
+      {
+        if (pImp.get() && !pImp->Exists(url))
+        {
+          return false;
+        }
+      }
+    }
+  }
   catch(...)
   {
     CLog::Log(LOGERROR, "%s - Unhandled exception", __FUNCTION__);
@@ -373,14 +415,15 @@ int CFile::Stat(struct __stat64 *buffer)
 
 int CFile::Stat(const CStdString& strFileName, struct __stat64* buffer)
 {
+  CURL url;
+  
   try
   {
-    CURL url(URIUtils::SubstitutePath(strFileName));
-
+    url = URIUtils::SubstitutePath(strFileName);
+    
     auto_ptr<IFile> pFile(CFileFactory::CreateLoader(url));
     if (!pFile.get())
       return false;
-
     return pFile->Stat(url, buffer);
   }
 #ifndef _LINUX
@@ -389,6 +432,33 @@ int CFile::Stat(const CStdString& strFileName, struct __stat64* buffer)
     e.writelog(__FUNCTION__);
   }
 #endif
+  catch (CRedirectException *pRedirectEx)
+  {
+    // the file implementation decided this item should use a different implementation.
+    // the exception will contain the new implementation and optional a redirected URL.
+    CLog::Log(LOGDEBUG,"File::Stat - redirecting implementation for %s", strFileName.c_str());
+    if (pRedirectEx && pRedirectEx->m_pNewFileImp)
+    {
+      auto_ptr<IFile> pImp(pRedirectEx->m_pNewFileImp);
+      auto_ptr<CURL> pNewUrl(pRedirectEx->m_pNewUrl);
+      delete pRedirectEx;
+        
+      if (pNewUrl.get())
+      {
+        if (pImp.get() && !pImp->Stat(*pNewUrl, buffer))
+        {
+          return false;
+        }
+      }
+      else     
+      {
+        if (pImp.get() && !pImp->Stat(url, buffer))
+        {
+          return false;
+        }
+      }
+    }
+  }
   catch(...)
   {
     CLog::Log(LOGERROR, "%s - Unhandled exception", __FUNCTION__);
@@ -757,8 +827,9 @@ bool CFile::SetHidden(const CStdString& fileName, bool hidden)
 int CFile::IoControl(EIoControl request, void* param)
 {
   int result = -1;
-  if (m_pFile)
-    result = m_pFile->IoControl(request, param);
+  if (m_pFile == NULL)
+    return -1;
+  result = m_pFile->IoControl(request, param);
 
   if(result == -1 && request == IOCTRL_SEEK_POSSIBLE)
   {
index 89db63f..ff45413 100644 (file)
@@ -68,11 +68,11 @@ void AfpConnectionLog(void *priv, enum loglevels loglevel, int logtype, const ch
 
 CAfpConnection::CAfpConnection()
  : m_OpenConnections(0)
- , m_LastActive(0)
+ , m_IdleTimeout(0)
  , m_pAfpServer(NULL)
  , m_pAfpVol(NULL)
- , m_pAfpClient((struct libafpclient*)malloc(sizeof(struct libafpclient)))
  , m_pAfpUrl((struct afp_url*)malloc(sizeof(struct afp_url)))
+ , m_pAfpClient((struct libafpclient*)malloc(sizeof(struct libafpclient)))
  , m_pLibAfp(new DllLibAfp())
  , m_bDllInited(false)
 {
@@ -115,10 +115,22 @@ bool CAfpConnection::initLib()
   return m_bDllInited;
 }
 
+//only unmount here - afpclient lib is not
+//stoppable (no afp_main_quick_shutdown as counter part
+//for afp_main_quick_startup)
+void CAfpConnection::Deinit()
+{
+  if(m_pAfpVol && m_pLibAfp->IsLoaded())
+  {
+    disconnectVolume();
+    Disconnect();
+    m_pAfpUrl->servername[0] = '\0';
+  }        
+}
+
 void CAfpConnection::Disconnect()
 {
   CSingleLock lock(*this);
-  disconnectVolume();
   m_pAfpServer = NULL;
 }
 
@@ -286,7 +298,6 @@ CAfpConnection::afpConnnectError CAfpConnection::Connect(const CURL& url)
   // if server changed reconnect volume
   if (serverChanged)
   {
-    disconnectVolume();                   // disconnect old volume
     connectVolume(m_pAfpUrl->volumename, m_pAfpVol); // connect new volume
   }
   return AfpOk;
@@ -347,6 +358,47 @@ int CAfpConnection::stat(const CURL &url, struct stat *statbuff)
   return iResult;
 }
 
+
+/* This is called from CApplication::ProcessSlow() and is used to tell if afp have been idle for too long */
+void CAfpConnection::CheckIfIdle()
+{
+  /* We check if there are open connections. This is done without a lock to not halt the mainthread. It should be thread safe as
+   worst case scenario is that m_OpenConnections could read 0 and then changed to 1 if this happens it will enter the if wich will lead to another check, wich is locked.  */
+  if (m_OpenConnections == 0 && m_pAfpVol != NULL)
+  { /* I've set the the maxiumum IDLE time to be 1 min and 30 sec. */
+    CSingleLock lock(*this);
+    if (m_OpenConnections == 0 /* check again - when locked */)
+    {
+      if (m_IdleTimeout > 0)
+      {
+        m_IdleTimeout--;
+      }
+      else
+      {
+        CLog::Log(LOGNOTICE, "AFP is idle. Closing the remaining connections.");
+        gAfpConnection.Deinit();
+      }
+    }
+  }
+}
+
+/* The following two function is used to keep track on how many Opened files/directories there are.
+needed for unloading the dylib*/
+void CAfpConnection::AddActiveConnection()
+{
+  CSingleLock lock(*this);
+  m_OpenConnections++;
+}
+
+void CAfpConnection::AddIdleConnection()
+{
+  CSingleLock lock(*this);
+  m_OpenConnections--;
+  /* If we close a file we reset the idle timer so that we don't have any wierd behaviours if a user
+   leaves the movie paused for a long while and then press stop */
+  m_IdleTimeout = 180;
+}
+
 CStdString CAfpConnection::GetPath(const CURL &url)
 {
   struct afp_url tmpurl;
@@ -373,11 +425,14 @@ CFileAFP::CFileAFP()
  : m_fileSize(0)
  , m_fileOffset(0)
  , m_pFp(NULL)
+ , m_pAfpVol(NULL)
 {
+  gAfpConnection.AddActiveConnection();
 }
 
 CFileAFP::~CFileAFP()
 {
+  gAfpConnection.AddIdleConnection();
   Close();
 }
 
@@ -407,12 +462,13 @@ bool CFileAFP::Open(const CURL& url)
   CSingleLock lock(gAfpConnection);
   if (gAfpConnection.Connect(url) != CAfpConnection::AfpOk || !gAfpConnection.GetVolume())
     return false;
+  m_pAfpVol = gAfpConnection.GetVolume();
 
   CStdString strPath = gAfpConnection.GetPath(url);
 
-  if (gAfpConnection.GetImpl()->afp_wrap_open(gAfpConnection.GetVolume(), strPath.c_str(), O_RDONLY, &m_pFp))
+  if (gAfpConnection.GetImpl()->afp_wrap_open(m_pAfpVol, strPath.c_str(), O_RDONLY, &m_pFp))
   {
-    if (gAfpConnection.GetImpl()->afp_wrap_open(gAfpConnection.GetVolume(), URLEncode(strPath.c_str()).c_str(), O_RDONLY, &m_pFp))
+    if (gAfpConnection.GetImpl()->afp_wrap_open(m_pAfpVol, URLEncode(strPath.c_str()).c_str(), O_RDONLY, &m_pFp))
     {
       // write error to logfile
       CLog::Log(LOGINFO, "CFileAFP::Open: Unable to open file : '%s'\nunix_err:'%x' error : '%s'", strPath.c_str(), errno, strerror(errno));
@@ -488,7 +544,7 @@ int CFileAFP::Stat(const CURL& url, struct __stat64* buffer)
 unsigned int CFileAFP::Read(void *lpBuf, int64_t uiBufSize)
 {
   CSingleLock lock(gAfpConnection);
-  if (m_pFp == NULL || !gAfpConnection.GetVolume())
+  if (m_pFp == NULL || !m_pAfpVol)
     return 0;
 
   if (uiBufSize > AFP_MAX_READ_SIZE)
@@ -503,7 +559,7 @@ unsigned int CFileAFP::Read(void *lpBuf, int64_t uiBufSize)
 
 #endif
   int eof = 0;
-  int bytesRead = gAfpConnection.GetImpl()->afp_wrap_read(gAfpConnection.GetVolume(),
+  int bytesRead = gAfpConnection.GetImpl()->afp_wrap_read(m_pAfpVol,
     name, (char *)lpBuf,(size_t)uiBufSize, m_fileOffset, m_pFp, &eof);
   if (bytesRead > 0)
     m_fileOffset += bytesRead;
@@ -548,7 +604,7 @@ int64_t CFileAFP::Seek(int64_t iFilePosition, int iWhence)
 void CFileAFP::Close()
 {
   CSingleLock lock(gAfpConnection);
-  if (m_pFp != NULL && gAfpConnection.GetVolume())
+  if (m_pFp != NULL && m_pAfpVol)
   {
     CLog::Log(LOGDEBUG, "CFileAFP::Close closing fd %d", m_pFp->fileid);
 #ifdef USE_CVS_AFPFS
@@ -558,16 +614,17 @@ void CFileAFP::Close()
     if (strlen(name) == 0)
       name = m_pFp->basename;
 #endif
-    gAfpConnection.GetImpl()->afp_wrap_close(gAfpConnection.GetVolume(), name, m_pFp);
+    gAfpConnection.GetImpl()->afp_wrap_close(m_pAfpVol, name, m_pFp);
     delete m_pFp;
     m_pFp = NULL;
+    m_pAfpVol = NULL;
   }
 }
 
 int CFileAFP::Write(const void* lpBuf, int64_t uiBufSize)
 {
   CSingleLock lock(gAfpConnection);
-  if (m_pFp == NULL || !gAfpConnection.GetVolume())
+  if (m_pFp == NULL || !m_pAfpVol)
    return -1;
 
   int numberOfBytesWritten = 0;
@@ -584,7 +641,7 @@ int CFileAFP::Write(const void* lpBuf, int64_t uiBufSize)
   if (strlen(name) == 0)
     name = m_pFp->basename;
 #endif
-  numberOfBytesWritten = gAfpConnection.GetImpl()->afp_wrap_write(gAfpConnection.GetVolume(),
+  numberOfBytesWritten = gAfpConnection.GetImpl()->afp_wrap_write(m_pAfpVol,
     name, (const char *)lpBuf, (size_t)uiBufSize, m_fileOffset, m_pFp, uid, gid);
 
   return numberOfBytesWritten;
@@ -640,15 +697,17 @@ bool CFileAFP::OpenForWrite(const CURL& url, bool bOverWrite)
   if (!IsValidFile(url.GetFileName()))
     return false;
 
+  m_pAfpVol = gAfpConnection.GetVolume();
+
   CStdString strPath = gAfpConnection.GetPath(url);
 
   if (bOverWrite)
   {
     CLog::Log(LOGWARNING, "FileAFP::OpenForWrite() called with overwriting enabled! - %s", strPath.c_str());
-    ret = gAfpConnection.GetImpl()->afp_wrap_creat(gAfpConnection.GetVolume(), strPath.c_str(), 0);
+    ret = gAfpConnection.GetImpl()->afp_wrap_creat(m_pAfpVol, strPath.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
   }
 
-  ret = gAfpConnection.GetImpl()->afp_wrap_open(gAfpConnection.GetVolume(), strPath.c_str(), O_RDWR, &m_pFp);
+  ret = gAfpConnection.GetImpl()->afp_wrap_open(m_pAfpVol, strPath.c_str(), O_RDWR, &m_pFp);
 
   if (ret || m_pFp == NULL)
   {
index 1b4526e..bf6e0f9 100644 (file)
@@ -70,6 +70,11 @@ public:
   //it uses the same global server connection
   //but its own volume
   int                   stat(const CURL &url, struct stat *statbuff);
+  
+  void AddActiveConnection();
+  void AddIdleConnection();
+  void CheckIfIdle();  
+  void Deinit();  
 
 private:
   bool                  initLib(void);
@@ -78,7 +83,7 @@ private:
   CStdString            getAuthenticatedPath(const CURL &url);
 
   int                   m_OpenConnections;
-  int                   m_LastActive;
+  int                   m_IdleTimeout;
   struct afp_server     *m_pAfpServer;
   struct afp_volume     *m_pAfpVol;
   struct afp_url        *m_pAfpUrl;
@@ -125,6 +130,7 @@ protected:
   int64_t               m_fileSize;
   off_t                 m_fileOffset; // current SEEK pointer
   struct afp_file_info *m_pFp;
+  struct afp_volume    *m_pAfpVol;  
 };
 }
 #endif // _LINUX
index aff4349..bae2d87 100644 (file)
@@ -130,9 +130,11 @@ unsigned int CFileCDDA::Read(void* lpBuf, int64_t uiBufSize)
   if (m_lsnCurrent + iSectorCount > m_lsnEnd)
     iSectorCount = m_lsnEnd - m_lsnCurrent;
 
-  if (m_cdio->cdio_read_audio_sectors(m_pCdIo, lpBuf, m_lsnCurrent, iSectorCount) != DRIVER_OP_SUCCESS)
+  int iret = m_cdio->cdio_read_audio_sectors(m_pCdIo, lpBuf, m_lsnCurrent, iSectorCount);
+
+  if ( iret != DRIVER_OP_SUCCESS)
   {
-    CLog::Log(LOGERROR, "file cdda: Reading %d sectors of audio data starting at lsn %d failed", iSectorCount, m_lsnCurrent);
+    CLog::Log(LOGERROR, "file cdda: Reading %d sectors of audio data starting at lsn %d failed with error code %i", iSectorCount, m_lsnCurrent, iret);
     return 0;
   }
 
index e4837b7..fa47836 100644 (file)
@@ -103,6 +103,7 @@ CFileCache::CFileCache(CCacheStrategy *pCache, bool bDeleteCache)
   m_readPos = 0;
   m_writePos = 0;
   m_nSeekResult = 0;
+  m_chunkSize = 0;
 }
 
 CFileCache::~CFileCache()
@@ -163,6 +164,7 @@ bool CFileCache::Open(const CURL& url)
 
   // check if source can seek
   m_seekPossible = m_source.IoControl(IOCTRL_SEEK_POSSIBLE, NULL);
+  m_chunkSize = CFile::GetChunkSize(m_source.GetChunkSize(), READ_CACHE_CHUNK_SIZE);
 
   m_readPos = 0;
   m_writePos = 0;
@@ -185,11 +187,8 @@ void CFileCache::Process()
     return;
   }
 
-  // setup read chunks size
-  int chunksize = CFile::GetChunkSize(m_source.GetChunkSize(), READ_CACHE_CHUNK_SIZE);
-
   // create our read buffer
-  auto_aptr<char> buffer(new char[chunksize]);
+  auto_aptr<char> buffer(new char[m_chunkSize]);
   if (buffer.get() == NULL)
   {
     CLog::Log(LOGERROR, "%s - failed to allocate read buffer", __FUNCTION__);
@@ -243,7 +242,7 @@ void CFileCache::Process()
       }
     }
 
-    int iRead = m_source.Read(buffer.get(), chunksize);
+    int iRead = m_source.Read(buffer.get(), m_chunkSize);
     if (iRead == 0)
     {
       CLog::Log(LOGINFO, "CFileCache::Process - Hit eof.");
@@ -393,13 +392,28 @@ int64_t CFileCache::Seek(int64_t iFilePosition, int iWhence)
     if (m_seekPossible == 0)
       return m_nSeekResult;
 
-    m_seekPos = iTarget;
+    /* never request closer to end than 2k, speeds up tag reading */
+    m_seekPos = std::min(iTarget, std::max((int64_t)0, m_source.GetLength() - m_chunkSize));
+
     m_seekEvent.Set();
-    if (!m_seekEnded.WaitMSec(INFINITE))
+    if (!m_seekEnded.Wait())
     {
       CLog::Log(LOGWARNING,"%s - seek to %"PRId64" failed.", __FUNCTION__, m_seekPos);
       return -1;
     }
+
+    /* wait for any remainin data */
+    if(m_seekPos < iTarget)
+    {
+      CLog::Log(LOGDEBUG,"%s - waiting for position %"PRId64".", __FUNCTION__, iTarget);
+      if(m_pCache->WaitForData((unsigned)(iTarget - m_seekPos), 10000) < iTarget - m_seekPos)
+      {
+        CLog::Log(LOGWARNING,"%s - failed to get remaining data", __FUNCTION__);
+        return -1;
+      }
+      m_pCache->Seek(iTarget);
+    }
+    m_readPos = iTarget;
     m_seekEvent.Reset();
   }
   else
index cbc3a62..5509f82 100644 (file)
@@ -73,6 +73,7 @@ namespace XFILE
     int64_t      m_seekPos;
     int64_t      m_readPos;
     int64_t      m_writePos;
+    unsigned     m_chunkSize;
     unsigned     m_writeRate;
     unsigned     m_writeRateActual;
     bool         m_cacheFull;
index cce4449..e8783e7 100644 (file)
@@ -1135,8 +1135,8 @@ int CFileCurl::Stat(const CURL& url, struct __stat64* buffer)
 
   if(buffer)
   {
-    char content[255];
-    if (CURLE_OK != g_curlInterface.easy_getinfo(m_state->m_easyHandle, CURLINFO_CONTENT_TYPE, content))
+    char *content;
+    if (CURLE_OK != g_curlInterface.easy_getinfo(m_state->m_easyHandle, CURLINFO_CONTENT_TYPE, &content))
     {
       g_curlInterface.easy_release(&m_state->m_easyHandle, NULL);
       errno = ENOENT;
@@ -1146,7 +1146,7 @@ int CFileCurl::Stat(const CURL& url, struct __stat64* buffer)
     {
       memset(buffer, 0, sizeof(struct __stat64));
       buffer->st_size = (int64_t)length;
-      if(strstr(content, "text/html")) //consider html files directories
+      if(content && strstr(content, "text/html")) //consider html files directories
         buffer->st_mode = _S_IFDIR;
       else
         buffer->st_mode = _S_IFREG;
@@ -1372,19 +1372,23 @@ bool CFileCurl::GetHttpHeader(const CURL &url, CHttpHeader &headers)
 
 bool CFileCurl::GetMimeType(const CURL &url, CStdString &content, CStdString useragent)
 {
-   CFileCurl file;
-   if (!useragent.IsEmpty())
-     file.SetUserAgent(useragent);
-
-   if( file.Stat(url, NULL) == 0 )
-   {
-     content = file.GetMimeType();
-     CLog::Log(LOGDEBUG, "CFileCurl::GetMimeType - %s -> %s", url.Get().c_str(), content.c_str());
-     return true;
-   }
-   CLog::Log(LOGDEBUG, "CFileCurl::GetMimeType - %s -> failed", url.Get().c_str());
-   content = "";
-   return false;
+  CFileCurl file;
+  if (!useragent.IsEmpty())
+    file.SetUserAgent(useragent);
+
+  struct __stat64 buffer;
+  if( file.Stat(url, &buffer) == 0 )
+  {
+    if (buffer.st_mode == _S_IFDIR)
+      content = "x-directory/normal";
+    else
+      content = file.GetMimeType();
+    CLog::Log(LOGDEBUG, "CFileCurl::GetMimeType - %s -> %s", url.Get().c_str(), content.c_str());
+    return true;
+  }
+  CLog::Log(LOGDEBUG, "CFileCurl::GetMimeType - %s -> failed", url.Get().c_str());
+  content = "";
+  return false;
 }
 
 int CFileCurl::IoControl(EIoControl request, void* param)
index 9e515f8..7fc2e36 100644 (file)
@@ -32,7 +32,7 @@
 #include "FileFileReader.h"
 #ifdef HAS_FILESYSTEM_SMB
 #ifdef _WIN32
-#include "WINFileSmb.h"
+#include "windows/WINFileSmb.h"
 #else
 #include "FileSmb.h"
 #endif
@@ -68,6 +68,7 @@
 #ifdef HAS_FILESYSTEM_AFP
 #include "FileAFP.h"
 #endif
+#include "FileUPnP.h"
 #include "PipesManager.h"
 #include "FilePipe.h"
 #include "FileMusicDatabase.h"
@@ -169,6 +170,7 @@ IFile* CFileFactory::CreateLoader(const CURL& url)
     else if (strProtocol == "afp") return new CFileAFP();
 #endif
     else if (strProtocol == "pipe") return new CFilePipe();    
+    else if (strProtocol == "upnp") return new CFileUPnP();
   }
 
   CLog::Log(LOGWARNING, "%s - Unsupported protocol(%s) in %s", __FUNCTION__, strProtocol.c_str(), url.Get().c_str() );
index 90f4f51..271c363 100644 (file)
@@ -31,6 +31,7 @@
 #include "utils/log.h"
 #include "utils/URIUtils.h"
 #include "network/DNSNameCache.h"
+#include "threads/SystemClock.h"
 
 #include <nfsc/libnfs-raw-mount.h>
 
 //do the nfs keep alive for the open files
 #define KEEP_ALIVE_TIMEOUT 480
 
+//4 mins cached context timeout
+#define CONTEXT_TIMEOUT 240000
+
+//return codes for getContextForExport
+#define CONTEXT_INVALID  0    //getcontext failed
+#define CONTEXT_NEW      1    //new context created
+#define CONTEXT_CACHED   2    //context cached and therefore already mounted (no new mount needed)
+
 using namespace XFILE;
 
 CNfsConnection::CNfsConnection()
@@ -69,10 +78,7 @@ CNfsConnection::~CNfsConnection()
 void CNfsConnection::resolveHost(const CURL &url)
 { 
   //resolve if hostname has changed
-  if( !url.GetHostName().Equals(m_hostName) )
-  {
-    CDNSNameCache::Lookup(url.GetHostName(), m_resolvedHostName);
-  }
+  CDNSNameCache::Lookup(url.GetHostName(), m_resolvedHostName);
 }
 
 std::list<CStdString> CNfsConnection::GetExportList(const CURL &url)
@@ -119,27 +125,79 @@ void CNfsConnection::clearMembers()
     m_writeChunkSize = 0;
     m_readChunkSize = 0;  
     m_pNfsContext = NULL;
-    m_KeepAliveTimeouts.clear();    
+    m_KeepAliveTimeouts.clear();
 }
 
-bool CNfsConnection::resetContext()
+void CNfsConnection::destroyOpenContexts()
 {
-  bool ret = HandleDyLoad(); 
-    
-  if(ret)
+  for(tOpenContextMap::iterator it = m_openContextMap.begin();it!=m_openContextMap.end();it++)
+  {
+    m_pLibNfs->nfs_destroy_context(it->second.pContext);
+  }
+  m_openContextMap.clear();
+}
+
+struct nfs_context *CNfsConnection::getContextFromMap(const CStdString &exportname)
+{
+  struct nfs_context *pRet = NULL;
+
+  tOpenContextMap::iterator it = m_openContextMap.find(exportname.c_str());
+  if(it != m_openContextMap.end())
   {
-    if(m_pNfsContext)
+    //check if context has timed out already
+    uint64_t now = XbmcThreads::SystemClockMillis();
+    if((now - it->second.lastAccessedTime) < CONTEXT_TIMEOUT)
     {
-      m_pLibNfs->nfs_destroy_context(m_pNfsContext);
+      //its not timedout yet
+      //refresh access time of that
+      //context and return it
+      CLog::Log(LOGDEBUG, "NFS: Refreshing context for %s, old: %"PRId64", new: %"PRId64, exportname.c_str(), it->second.lastAccessedTime, now);
+      it->second.lastAccessedTime = now;
+      pRet = it->second.pContext;
     }
+    else 
+    {
+      //context is timed out
+      //destroy it and return NULL
+      CLog::Log(LOGDEBUG, "NFS: Old context timed out - destroying it");
+      m_pLibNfs->nfs_destroy_context(it->second.pContext);
+    }
+  }
+  return pRet;
+}
 
+int CNfsConnection::getContextForExport(const CStdString &exportname)
+{
+  int ret = CONTEXT_INVALID; 
+    
+  if(HandleDyLoad())
+  {
     clearMembers();  
-    m_pNfsContext = m_pLibNfs->nfs_init_context();
     
-    if (!m_pNfsContext) 
+    m_pNfsContext = getContextFromMap(exportname);
+
+    if(!m_pNfsContext)
     {
-      CLog::Log(LOGERROR,"NFS: Error initcontext in resetContext.");
-      ret = false;
+      CLog::Log(LOGDEBUG,"NFS: Context for %s not open - get a new context.", exportname.c_str());
+      m_pNfsContext = m_pLibNfs->nfs_init_context();
+    
+      if(!m_pNfsContext) 
+      {
+        CLog::Log(LOGERROR,"NFS: Error initcontext in getContextForExport.");
+      }
+      else 
+      {
+        struct contextTimeout tmp;
+        tmp.pContext = m_pNfsContext;
+        tmp.lastAccessedTime = XbmcThreads::SystemClockMillis();
+        m_openContextMap[exportname] = tmp; //add context to list of all contexts      
+        ret = CONTEXT_NEW;
+      }
+    }
+    else
+    {
+      ret = CONTEXT_CACHED;
+      CLog::Log(LOGDEBUG,"NFS: Using cached context.");
     }
   }
   return ret;
@@ -149,7 +207,8 @@ bool CNfsConnection::splitUrlIntoExportAndPath(const CURL& url, CStdString &expo
 {
     bool ret = false;
     
-    if(m_exportList.empty())
+    //refresh exportlist if empty or hostname change
+    if(m_exportList.empty() || !url.GetHostName().Equals(m_hostName,false))
     {
       m_exportList = GetExportList(url);
     }
@@ -198,27 +257,36 @@ bool CNfsConnection::Connect(const CURL& url, CStdString &relativePath)
   
   if(ret && (!exportPath.Equals(m_exportPath,true) || !url.GetHostName().Equals(m_hostName,false)) )
   {
-    if(!resetContext())//we need a new context because sharename or hostname has changed - old context will be freed
+    int contextRet = getContextForExport(url.GetHostName() + exportPath);
+    
+    if(contextRet == CONTEXT_INVALID)//we need a new context because sharename or hostname has changed
     {
       return false;
     }
     
-    //we connect to the directory of the path. This will be the "root" path of this connection then.
-    //So all fileoperations are relative to this mountpoint...
-    nfsRet = m_pLibNfs->nfs_mount(m_pNfsContext, m_resolvedHostName.c_str(), exportPath.c_str());
-
-    if  (nfsRet != 0) 
+    if(contextRet == CONTEXT_NEW) //new context was created - we need to mount it
     {
-      CLog::Log(LOGERROR,"NFS: Failed to mount nfs share: %s (%s)\n", exportPath.c_str(), m_pLibNfs->nfs_get_error(m_pNfsContext));
-      return false;
+      //we connect to the directory of the path. This will be the "root" path of this connection then.
+      //So all fileoperations are relative to this mountpoint...
+      nfsRet = m_pLibNfs->nfs_mount(m_pNfsContext, m_resolvedHostName.c_str(), exportPath.c_str());
+
+      if(nfsRet != 0) 
+      {
+        CLog::Log(LOGERROR,"NFS: Failed to mount nfs share: %s (%s)\n", exportPath.c_str(), m_pLibNfs->nfs_get_error(m_pNfsContext));
+        return false;
+      }
+      CLog::Log(LOGDEBUG,"NFS: Connected to server %s and export %s\n", url.GetHostName().c_str(), exportPath.c_str());
     }
     m_exportPath = exportPath;
     m_hostName = url.GetHostName();
     //read chunksize only works after mount
     m_readChunkSize = m_pLibNfs->nfs_get_readmax(m_pNfsContext);
-    m_writeChunkSize = m_pLibNfs->nfs_get_writemax(m_pNfsContext);   
-    
-    CLog::Log(LOGDEBUG,"NFS: Connected to server %s and export %s (chunks: r/w %i/%i)\n", url.GetHostName().c_str(), exportPath.c_str(),(int)m_readChunkSize,(int)m_writeChunkSize);
+    m_writeChunkSize = m_pLibNfs->nfs_get_writemax(m_pNfsContext);
+
+    if(contextRet == CONTEXT_NEW)
+    {
+      CLog::Log(LOGDEBUG,"NFS: chunks: r/w %i/%i\n", (int)m_readChunkSize,(int)m_writeChunkSize);          
+    }
   }
   return ret; 
 }
@@ -227,7 +295,8 @@ void CNfsConnection::Deinit()
 {
   if(m_pNfsContext && m_pLibNfs->IsLoaded())
   {
-    m_pLibNfs->nfs_destroy_context(m_pNfsContext);
+    destroyOpenContexts();
+    m_pNfsContext = NULL;
     m_pLibNfs->Unload();    
   }        
   clearMembers();
@@ -296,7 +365,7 @@ void CNfsConnection::resetKeepAlive(struct nfsfh  *_pFileHandle)
 //we were before
 void CNfsConnection::keepAlive(struct nfsfh  *_pFileHandle)
 {
-  off_t offset = 0;
+  off64_t offset = 0;
   char buffer[32];
   CLog::Log(LOGNOTICE, "NFS: sending keep alive after %i s.",KEEP_ALIVE_TIMEOUT/2);
   CSingleLock lock(*this);
@@ -368,6 +437,7 @@ CNfsConnection gNfsConnection;
 CFileNFS::CFileNFS()
 : m_fileSize(0)
 , m_pFileHandle(NULL)
+, m_pNfsContext(NULL)
 {
   gNfsConnection.AddActiveConnection();
 }
@@ -381,7 +451,7 @@ CFileNFS::~CFileNFS()
 int64_t CFileNFS::GetPosition()
 {
   int ret = 0;
-  off_t offset = 0;
+  off64_t offset = 0;
   CSingleLock lock(gNfsConnection);
   
   if (gNfsConnection.GetNfsContext() == NULL || m_pFileHandle == NULL) return 0;
@@ -420,11 +490,13 @@ bool CFileNFS::Open(const CURL& url)
   if(!gNfsConnection.Connect(url, filename))
     return false;
   
-  ret = gNfsConnection.GetImpl()->nfs_open(gNfsConnection.GetNfsContext(), filename.c_str(), O_RDONLY, &m_pFileHandle);
+  m_pNfsContext = gNfsConnection.GetNfsContext(); 
+  
+  ret = gNfsConnection.GetImpl()->nfs_open(m_pNfsContext, filename.c_str(), O_RDONLY, &m_pFileHandle);
   
   if (ret != 0) 
   {
-    CLog::Log(LOGINFO, "CFileNFS::Open: Unable to open file : '%s'  error : '%s'", url.GetFileName().c_str(), gNfsConnection.GetImpl()->nfs_get_error(gNfsConnection.GetNfsContext()));
+    CLog::Log(LOGINFO, "CFileNFS::Open: Unable to open file : '%s'  error : '%s'", url.GetFileName().c_str(), gNfsConnection.GetImpl()->nfs_get_error(m_pNfsContext));
     return false;
   } 
   
@@ -503,9 +575,9 @@ unsigned int CFileNFS::Read(void *lpBuf, int64_t uiBufSize)
   int numberOfBytesRead = 0;
   CSingleLock lock(gNfsConnection);
   
-  if (m_pFileHandle == NULL || gNfsConnection.GetNfsContext()==NULL ) return 0;
+  if (m_pFileHandle == NULL || m_pNfsContext == NULL ) return 0;
 
-  numberOfBytesRead = gNfsConnection.GetImpl()->nfs_read(gNfsConnection.GetNfsContext(), m_pFileHandle, uiBufSize, (char *)lpBuf);  
+  numberOfBytesRead = gNfsConnection.GetImpl()->nfs_read(m_pNfsContext, m_pFileHandle, (size_t)uiBufSize, (char *)lpBuf);  
 
   lock.Leave();//no need to keep the connection lock after that
   
@@ -514,7 +586,7 @@ unsigned int CFileNFS::Read(void *lpBuf, int64_t uiBufSize)
   //something went wrong ...
   if (numberOfBytesRead < 0) 
   {
-    CLog::Log(LOGERROR, "%s - Error( %d, %s )", __FUNCTION__, numberOfBytesRead, gNfsConnection.GetImpl()->nfs_get_error(gNfsConnection.GetNfsContext()));
+    CLog::Log(LOGERROR, "%s - Error( %d, %s )", __FUNCTION__, numberOfBytesRead, gNfsConnection.GetImpl()->nfs_get_error(m_pNfsContext));
     return 0;
   }
   return (unsigned int)numberOfBytesRead;
@@ -523,16 +595,16 @@ unsigned int CFileNFS::Read(void *lpBuf, int64_t uiBufSize)
 int64_t CFileNFS::Seek(int64_t iFilePosition, int iWhence)
 {
   int ret = 0;
-  off_t offset = 0;
+  off64_t offset = 0;
 
   CSingleLock lock(gNfsConnection);  
-  if (m_pFileHandle == NULL || gNfsConnection.GetNfsContext()==NULL) return -1;
+  if (m_pFileHandle == NULL || m_pNfsContext == NULL) return -1;
   
  
-  ret = (int)gNfsConnection.GetImpl()->nfs_lseek(gNfsConnection.GetNfsContext(), m_pFileHandle, iFilePosition, iWhence, &offset);
+  ret = (int)gNfsConnection.GetImpl()->nfs_lseek(m_pNfsContext, m_pFileHandle, iFilePosition, iWhence, &offset);
   if (ret < 0) 
   {
-    CLog::Log(LOGERROR, "%s - Error( seekpos: %"PRId64", whence: %i, fsize: %"PRId64", %s)", __FUNCTION__, iFilePosition, iWhence, m_fileSize, gNfsConnection.GetImpl()->nfs_get_error(gNfsConnection.GetNfsContext()));
+    CLog::Log(LOGERROR, "%s - Error( seekpos: %"PRId64", whence: %i, fsize: %"PRId64", %s)", __FUNCTION__, iFilePosition, iWhence, m_fileSize, gNfsConnection.GetImpl()->nfs_get_error(m_pNfsContext));
     return -1;
   }
   return (int64_t)offset;
@@ -542,18 +614,19 @@ void CFileNFS::Close()
 {
   CSingleLock lock(gNfsConnection);
   
-  if (m_pFileHandle != NULL && gNfsConnection.GetNfsContext()!=NULL)
+  if (m_pFileHandle != NULL && m_pNfsContext != NULL)
   {
     int ret = 0;
     CLog::Log(LOGDEBUG,"CFileNFS::Close closing file %s", m_url.GetFileName().c_str());
-    ret = gNfsConnection.GetImpl()->nfs_close(gNfsConnection.GetNfsContext(), m_pFileHandle);
+    ret = gNfsConnection.GetImpl()->nfs_close(m_pNfsContext, m_pFileHandle);
     gNfsConnection.removeFromKeepAliveList(m_pFileHandle);
         
          if (ret < 0) 
     {
-      CLog::Log(LOGERROR, "Failed to close(%s) - %s\n", m_url.GetFileName().c_str(), gNfsConnection.GetImpl()->nfs_get_error(gNfsConnection.GetNfsContext()));
+      CLog::Log(LOGERROR, "Failed to close(%s) - %s\n", m_url.GetFileName().c_str(), gNfsConnection.GetImpl()->nfs_get_error(m_pNfsContext));
     }
-    m_pFileHandle=NULL;
+    m_pFileHandle = NULL;
+    m_pNfsContext = NULL;    
     m_fileSize = 0;
   }
 }
@@ -565,12 +638,13 @@ int CFileNFS::Write(const void* lpBuf, int64_t uiBufSize)
 {
   int numberOfBytesWritten = 0;
   int writtenBytes = 0;
-  int leftBytes = uiBufSize;
-  int chunkSize = gNfsConnection.GetMaxWriteChunkSize();
+  int64_t leftBytes = uiBufSize;
+  //clamp max write chunksize to 32kb - fixme - this might be superfluious with future libnfs versions
+  int64_t chunkSize = gNfsConnection.GetMaxWriteChunkSize() > 32768 ? 32768 : gNfsConnection.GetMaxWriteChunkSize();
   
   CSingleLock lock(gNfsConnection);
   
-  if (m_pFileHandle == NULL || gNfsConnection.GetNfsContext() == NULL) return -1;
+  if (m_pFileHandle == NULL || m_pNfsContext == NULL) return -1;
   
   //write as long as some bytes are left to be written
   while( leftBytes )
@@ -581,7 +655,7 @@ int CFileNFS::Write(const void* lpBuf, int64_t uiBufSize)
       chunkSize = leftBytes;//write last chunk with correct size
     }
     //write chunk
-    writtenBytes = gNfsConnection.GetImpl()->nfs_write(gNfsConnection.GetNfsContext(), 
+    writtenBytes = gNfsConnection.GetImpl()->nfs_write(m_pNfsContext,
                                   m_pFileHandle, 
                                   (size_t)chunkSize, 
                                   (char *)lpBuf + numberOfBytesWritten);
@@ -593,7 +667,7 @@ int CFileNFS::Write(const void* lpBuf, int64_t uiBufSize)
     //danger - something went wrong
     if (writtenBytes < 0) 
     {
-      CLog::Log(LOGERROR, "Failed to pwrite(%s) %s\n", m_url.GetFileName().c_str(), gNfsConnection.GetImpl()->nfs_get_error(gNfsConnection.GetNfsContext()));        
+      CLog::Log(LOGERROR, "Failed to pwrite(%s) %s\n", m_url.GetFileName().c_str(), gNfsConnection.GetImpl()->nfs_get_error(m_pNfsContext));        
       break;
     }     
   }
@@ -656,19 +730,21 @@ bool CFileNFS::OpenForWrite(const CURL& url, bool bOverWrite)
   if(!gNfsConnection.Connect(url,filename))
     return false;
   
+  m_pNfsContext = gNfsConnection.GetNfsContext();
+  
   if (bOverWrite)
   {
     CLog::Log(LOGWARNING, "FileNFS::OpenForWrite() called with overwriting enabled! - %s", filename.c_str());
     //create file with proper permissions
-    ret = gNfsConnection.GetImpl()->nfs_creat(gNfsConnection.GetNfsContext(), filename.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, &m_pFileHandle);    
+    ret = gNfsConnection.GetImpl()->nfs_creat(m_pNfsContext, filename.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, &m_pFileHandle);    
     //if file was created the file handle isn't valid ... so close it and open later
     if(ret == 0)
     {
-      gNfsConnection.GetImpl()->nfs_close(gNfsConnection.GetNfsContext(),m_pFileHandle);
+      gNfsConnection.GetImpl()->nfs_close(m_pNfsContext,m_pFileHandle);
     }
   }
 
-  ret = gNfsConnection.GetImpl()->nfs_open(gNfsConnection.GetNfsContext(), filename.c_str(), O_RDWR, &m_pFileHandle);
+  ret = gNfsConnection.GetImpl()->nfs_open(m_pNfsContext, filename.c_str(), O_RDWR, &m_pFileHandle);
   
   if (ret || m_pFileHandle == NULL)
   {
@@ -709,3 +785,4 @@ bool CFileNFS::IsValidFile(const CStdString& strFileName)
   return true;
 }
 #endif//HAS_FILESYSTEM_NFS
+
index d7d61fb..ca42686 100644 (file)
@@ -52,6 +52,14 @@ class CNfsConnection : public CCriticalSection
 {     
 public:
   typedef std::map<struct nfsfh  *, unsigned int> tFileKeepAliveMap;  
+
+  struct contextTimeout
+  {
+    struct nfs_context *pContext;
+    uint64_t lastAccessedTime;
+  };
+
+  typedef std::map<std::string, struct contextTimeout> tOpenContextMap;    
   
   CNfsConnection();
   ~CNfsConnection();
@@ -72,7 +80,6 @@ public:
   void AddActiveConnection();
   void AddIdleConnection();
   void CheckIfIdle();
-  void SetActivityTime();
   void Deinit();
   bool HandleDyLoad();//loads the lib if needed
   //adds the filehandle to the keep alive list or resets
@@ -94,12 +101,15 @@ private:
   int m_OpenConnections;//number of open connections
   unsigned int m_IdleTimeout;//timeout for idle connection close and dyunload
   tFileKeepAliveMap m_KeepAliveTimeouts;//mapping filehandles to its idle timeout
+  tOpenContextMap m_openContextMap;//unique map for tracking all open contexts
   DllLibNfs *m_pLibNfs;//the lib
   std::list<CStdString> m_exportList;//list of exported pathes of current connected servers
   CCriticalSection keepAliveLock;
  
   void clearMembers();
-  bool resetContext();//clear old nfs context and init new context
+  struct nfs_context *getContextFromMap(const CStdString &exportname);
+  int  getContextForExport(const CStdString &exportname);//get context for given export and add to open contexts map - sets m_pNfsContext (my return a already mounted cached context)
+  void destroyOpenContexts();
   void resolveHost(const CURL &url);//resolve hostname by dnslookup
   void keepAlive(struct nfsfh  *_pFileHandle);
 };
@@ -136,7 +146,9 @@ namespace XFILE
     bool IsValidFile(const CStdString& strFileName);
     int64_t m_fileSize;
     struct nfsfh  *m_pFileHandle;
+    struct nfs_context *m_pNfsContext;//current nfs context    
   };
 }
 #endif // FILENFS_H_
 
+
index 2d91f2d..1a55336 100644 (file)
@@ -82,7 +82,7 @@ unsigned int CFilePipe::Read(void* lpBuf, int64_t uiBufSize)
   if (!m_pipe)
     return -1;
   
-  return m_pipe->Read((char *)lpBuf,uiBufSize,INFINITE);
+  return m_pipe->Read((char *)lpBuf,(int)uiBufSize,INFINITE);
 }
 
 int CFilePipe::Write(const void* lpBuf, int64_t uiBufSize)
@@ -90,7 +90,7 @@ int CFilePipe::Write(const void* lpBuf, int64_t uiBufSize)
   if (!m_pipe)
     return -1;
   
-  return (int)(m_pipe->Write((const char *)lpBuf,uiBufSize,INFINITE)); // its not the size. its bool. either all was written or not.
+  return (int)(m_pipe->Write((const char *)lpBuf,(int)uiBufSize,INFINITE)); // its not the size. its bool. either all was written or not.
 }
 
 void CFilePipe::SetEof()
@@ -123,8 +123,8 @@ void CFilePipe::Close()
 {
   if (m_pipe)
   {
-    PipesManager::GetInstance().ClosePipe(m_pipe);
     m_pipe->RemoveListener(this);
+    PipesManager::GetInstance().ClosePipe(m_pipe);    
   }
   m_pipe = NULL;
 }
index edcf6ea..b1a7e4f 100644 (file)
@@ -80,8 +80,9 @@ bool CFileRTV::Open(const char* strHostName, const char* strFileName, int iport)
   if (iport)
   {
     char buffer[10];
+    sprintf(buffer,"%i",iport);
     strHostAndPort += ':';
-    strHostAndPort += itoa(iport, buffer, 10);
+    strHostAndPort += buffer;
   }
 
   // Get the file size of strFileName.  If size is 0 or negative, file doesn't exist so exit.
index 5bacd3e..9c87a35 100644 (file)
@@ -31,6 +31,7 @@
 #include "settings/AdvancedSettings.h"
 #include "FileItem.h"
 #include "utils/log.h"
+#include "UnrarXLib/rar.hpp"
 
 #ifndef _LINUX
 #include <process.h>
@@ -90,7 +91,19 @@ void CFileRarExtractThread::Process()
     if (AbortableWait(hRestart,1) == WAIT_SIGNALED)
     {
       bool Repeat = false;
-      m_pExtract->ExtractCurrentFile(m_pCmd,*m_pArc,m_iSize,Repeat);
+      try
+      {
+        m_pExtract->ExtractCurrentFile(m_pCmd,*m_pArc,m_iSize,Repeat);
+      }
+      catch (int rarErrCode)
+      {
+        CLog::Log(LOGERROR,"filerar CFileRarExtractThread::Process failed. CmdExtract::ExtractCurrentFile threw a UnrarXLib error code of %d",rarErrCode);
+      }
+      catch (...)
+      {
+        CLog::Log(LOGERROR,"filerar CFileRarExtractThread::Process failed. CmdExtract::ExtractCurrentFile threw an Unknown exception");
+      }
+
       hRunning.Reset();
     }
   }
@@ -183,6 +196,9 @@ bool CFileRar::Open(const CURL& url)
     }
     else
     {
+      CFileInfo* info = g_RarManager.GetFileInRar(m_strRarPath,m_strPathInRar);
+      if ((!info || !CFile::Exists(info->m_strCachedPath)) && m_bFileOptions & EXFILE_NOCACHE)
+        return false;
       m_bUseFile = true;
       CStdString strPathInCache;
 
@@ -530,40 +546,51 @@ void CFileRar::InitFromUrl(const CURL& url)
 void CFileRar::CleanUp()
 {
 #ifdef HAS_FILESYSTEM_RAR
-  if (m_pExtractThread)
+  try
   {
-    if (m_pExtractThread->hRunning.WaitMSec(1))
+    if (m_pExtractThread)
     {
-      m_pExtract->GetDataIO().hQuit->Set();
-      while (m_pExtractThread->hRunning.WaitMSec(1))
-        Sleep(1);
+      if (m_pExtractThread->hRunning.WaitMSec(1))
+      {
+        m_pExtract->GetDataIO().hQuit->Set();
+        while (m_pExtractThread->hRunning.WaitMSec(1))
+          Sleep(1);
+      }
+      delete m_pExtract->GetDataIO().hBufferFilled;
+      delete m_pExtract->GetDataIO().hBufferEmpty;
+      delete m_pExtract->GetDataIO().hSeek;
+      delete m_pExtract->GetDataIO().hSeekDone;
+      delete m_pExtract->GetDataIO().hQuit;
+    }
+    if (m_pExtract)
+    {
+      delete m_pExtract;
+      m_pExtract = NULL;
+    }
+    if (m_pArc)
+    {
+      delete m_pArc;
+      m_pArc = NULL;
+    }
+    if (m_pCmd)
+    {
+      delete m_pCmd;
+      m_pCmd = NULL;
+    }
+    if (m_szBuffer)
+    {
+      delete[] m_szBuffer;
+      m_szBuffer = NULL;
+      m_szStartOfBuffer = NULL;
     }
-    delete m_pExtract->GetDataIO().hBufferFilled;
-    delete m_pExtract->GetDataIO().hBufferEmpty;
-    delete m_pExtract->GetDataIO().hSeek;
-    delete m_pExtract->GetDataIO().hSeekDone;
-    delete m_pExtract->GetDataIO().hQuit;
-  }
-  if (m_pExtract)
-  {
-    delete m_pExtract;
-    m_pExtract = NULL;
-  }
-  if (m_pArc)
-  {
-    delete m_pArc;
-    m_pArc = NULL;
   }
-  if (m_pCmd)
+  catch (int rarErrCode)
   {
-    delete m_pCmd;
-    m_pCmd = NULL;
+    CLog::Log(LOGERROR,"filerar failed in UnrarXLib while deleting CFileRar with an UnrarXLib error code of %d",rarErrCode);
   }
-  if (m_szBuffer)
+  catch (...)
   {
-    delete[] m_szBuffer;
-    m_szBuffer = NULL;
-    m_szStartOfBuffer = NULL;
+    CLog::Log(LOGERROR,"filerar failed in UnrarXLib while deleting CFileRar with an Unknown exception");
   }
 #endif
 }
@@ -571,112 +598,125 @@ void CFileRar::CleanUp()
 bool CFileRar::OpenInArchive()
 {
 #ifdef HAS_FILESYSTEM_RAR
-  int iHeaderSize;
-
-  InitCRC();
-
-  m_pCmd = new CommandData;
-  if (!m_pCmd)
+  try
   {
-    CleanUp();
-    return false;
-  }
+    int iHeaderSize;
 
-  // Set the arguments for the extract command
-  strcpy(m_pCmd->Command, "X");
+    InitCRC();
 
-  m_pCmd->AddArcName(const_cast<char*>(m_strRarPath.c_str()),NULL);
+    m_pCmd = new CommandData;
+    if (!m_pCmd)
+    {
+      CleanUp();
+      return false;
+    }
 
-  strncpy(m_pCmd->ExtrPath, m_strCacheDir.c_str(), sizeof (m_pCmd->ExtrPath) - 2);
-  m_pCmd->ExtrPath[sizeof (m_pCmd->ExtrPath) - 2] = 0;
-  AddEndSlash(m_pCmd->ExtrPath);
+    // Set the arguments for the extract command
+    strcpy(m_pCmd->Command, "X");
 
-  // Set password for encrypted archives
-  if ((m_strPassword.size() > 0) &&
-      (m_strPassword.size() < sizeof (m_pCmd->Password)))
-  {
-    strcpy(m_pCmd->Password, m_strPassword.c_str());
-  }
+    m_pCmd->AddArcName(const_cast<char*>(m_strRarPath.c_str()),NULL);
 
-  m_pCmd->ParseDone();
+    strncpy(m_pCmd->ExtrPath, m_strCacheDir.c_str(), sizeof (m_pCmd->ExtrPath) - 2);
+    m_pCmd->ExtrPath[sizeof (m_pCmd->ExtrPath) - 2] = 0;
+    AddEndSlash(m_pCmd->ExtrPath);
 
-  // Open the archive
-  m_pArc = new Archive(m_pCmd);
-  if (!m_pArc)
-  {
-    CleanUp();
-    return false;
-  }
-  if (!m_pArc->WOpen(m_strRarPath.c_str(),NULL))
-  {
-    CleanUp();
-    return false;
-  }
-  if (!(m_pArc->IsOpened() && m_pArc->IsArchive(true)))
-  {
-    CleanUp();
-    return false;
-  }
+    // Set password for encrypted archives
+    if ((m_strPassword.size() > 0) &&
+        (m_strPassword.size() < sizeof (m_pCmd->Password)))
+    {
+      strcpy(m_pCmd->Password, m_strPassword.c_str());
+    }
 
-  m_pExtract = new CmdExtract;
-  if (!m_pExtract)
-  {
-    CleanUp();
-    return false;
-  }
-  m_pExtract->GetDataIO().SetUnpackToMemory(m_szBuffer,0);
-  m_pExtract->GetDataIO().SetCurrentCommand(*(m_pCmd->Command));
-  struct FindData FD;
-  if (FindFile::FastFind(m_strRarPath.c_str(),NULL,&FD))
-    m_pExtract->GetDataIO().TotalArcSize+=FD.Size;
-  m_pExtract->ExtractArchiveInit(m_pCmd,*m_pArc);
-
-  while (true)
-  {
-    if ((iHeaderSize = m_pArc->ReadHeader()) <= 0)
+    m_pCmd->ParseDone();
+
+    // Open the archive
+    m_pArc = new Archive(m_pCmd);
+    if (!m_pArc)
     {
       CleanUp();
       return false;
     }
-
-    if (m_pArc->GetHeaderType() == FILE_HEAD)
+    if (!m_pArc->WOpen(m_strRarPath.c_str(),NULL))
+    {
+      CleanUp();
+      return false;
+    }
+    if (!(m_pArc->IsOpened() && m_pArc->IsArchive(true)))
     {
-      CStdString strFileName;
+      CleanUp();
+      return false;
+    }
 
-      if (m_pArc->NewLhd.FileNameW && wcslen(m_pArc->NewLhd.FileNameW) > 0)
+    m_pExtract = new CmdExtract;
+    if (!m_pExtract)
+    {
+      CleanUp();
+      return false;
+    }
+    m_pExtract->GetDataIO().SetUnpackToMemory(m_szBuffer,0);
+    m_pExtract->GetDataIO().SetCurrentCommand(*(m_pCmd->Command));
+    struct FindData FD;
+    if (FindFile::FastFind(m_strRarPath.c_str(),NULL,&FD))
+      m_pExtract->GetDataIO().TotalArcSize+=FD.Size;
+    m_pExtract->ExtractArchiveInit(m_pCmd,*m_pArc);
+
+    while (true)
+    {
+      if ((iHeaderSize = m_pArc->ReadHeader()) <= 0)
       {
-        g_charsetConverter.wToUTF8(m_pArc->NewLhd.FileNameW, strFileName);
+        CleanUp();
+        return false;
       }
-      else
+
+      if (m_pArc->GetHeaderType() == FILE_HEAD)
       {
-        g_charsetConverter.unknownToUTF8(m_pArc->NewLhd.FileName, strFileName);
-      }
+        CStdString strFileName;
 
-      /* replace back slashes into forward slashes */
-      /* this could get us into troubles, file could two different files, one with / and one with \ */
-      strFileName.Replace('\\', '/');
+        if (m_pArc->NewLhd.FileNameW && wcslen(m_pArc->NewLhd.FileNameW) > 0)
+        {
+          g_charsetConverter.wToUTF8(m_pArc->NewLhd.FileNameW, strFileName);
+        }
+        else
+        {
+          g_charsetConverter.unknownToUTF8(m_pArc->NewLhd.FileName, strFileName);
+        }
 
-      if (strFileName == m_strPathInRar)
-      {
-        break;
+        /* replace back slashes into forward slashes */
+        /* this could get us into troubles, file could two different files, one with / and one with \ */
+        strFileName.Replace('\\', '/');
+
+        if (strFileName == m_strPathInRar)
+        {
+          break;
+        }
       }
-    }
 
-    m_pArc->SeekToNext();
-  }
+      m_pArc->SeekToNext();
+    }
 
-  m_szBuffer = new byte[MAXWINMEMSIZE];
-  m_szStartOfBuffer = m_szBuffer;
-  m_pExtract->GetDataIO().SetUnpackToMemory(m_szBuffer,0);
-  m_iDataInBuffer = -1;
-  m_iFilePosition = 0;
-  m_iBufferStart = 0;
+    m_szBuffer = new byte[MAXWINMEMSIZE];
+    m_szStartOfBuffer = m_szBuffer;
+    m_pExtract->GetDataIO().SetUnpackToMemory(m_szBuffer,0);
+    m_iDataInBuffer = -1;
+    m_iFilePosition = 0;
+    m_iBufferStart = 0;
 
-  delete m_pExtractThread;
-  m_pExtractThread = new CFileRarExtractThread();
-  m_pExtractThread->Start(m_pArc,m_pCmd,m_pExtract,iHeaderSize);
+    delete m_pExtractThread;
+    m_pExtractThread = new CFileRarExtractThread();
+    m_pExtractThread->Start(m_pArc,m_pCmd,m_pExtract,iHeaderSize);
 
-  return true;
+    return true;
+  }
+  catch (int rarErrCode)
+  {
+    CLog::Log(LOGERROR,"filerar failed in UnrarXLib while CFileRar::OpenInArchive with an UnrarXLib error code of %d",rarErrCode);
+    return false;
+  }
+  catch (...)
+  {
+    CLog::Log(LOGERROR,"filerar failed in UnrarXLib while CFileRar::OpenInArchive with an Unknown exception");
+    return false;
+  }
 #else
   return false;
 #endif
index dd825d2..83941dc 100644 (file)
 #define FILERAR_H_
 
 #include "File.h"
-#include "UnrarXLib/rar.hpp"
 #include "threads/Thread.h"
 #include "threads/Event.h"
 
+class CmdExtract;
+class CommandData;
+class Archive;
+
 namespace XFILE
 {
 #ifdef HAS_FILESYSTEM_RAR
index 9a138ee..79fa6ac 100644 (file)
@@ -111,7 +111,7 @@ unsigned int CFileShoutcast::Read(void* lpBuf, int64_t uiBufSize)
   if (m_metaint > 0)
     toRead = std::min((unsigned int)uiBufSize,(unsigned int)m_metaint-m_currint);
   else
-    toRead = std::min(uiBufSize,int64_t(16*255));
+    toRead = std::min((unsigned int)uiBufSize,(unsigned int)16*255);
   toRead = m_file.Read(lpBuf,toRead);
   m_currint += toRead;
   return toRead;
diff --git a/xbmc/filesystem/FileUPnP.cpp b/xbmc/filesystem/FileUPnP.cpp
new file mode 100644 (file)
index 0000000..665e096
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "FileUPnP.h"
+#include "UPnPDirectory.h"
+#include "FileFactory.h"
+#include "FileItem.h"
+#include "utils/log.h"
+
+using namespace XFILE;
+
+CFileUPnP::CFileUPnP()
+{
+}
+
+CFileUPnP::~CFileUPnP()
+{
+}
+
+bool CFileUPnP::Open(const CURL& url)
+{
+  CFileItem item_new;
+  if (CUPnPDirectory::GetResource(url.Get(), item_new))
+  {
+    //CLog::Log(LOGDEBUG,"FileUPnP - file redirect to %s.", item_new.GetPath().c_str());
+    IFile *pNewImp = CFileFactory::CreateLoader(item_new.GetPath());    
+    CURL *pNewUrl = new CURL(item_new.GetPath());    
+    if (pNewImp)
+    {
+      throw new CRedirectException(pNewImp, pNewUrl);
+    }
+    SAFE_DELETE(pNewUrl);    
+  }
+  return false;
+}
+
+int CFileUPnP::Stat(const CURL& url, struct __stat64* buffer)
+{
+  CFileItem item_new;
+  if (CUPnPDirectory::GetResource(url.Get(), item_new))
+  {
+    //CLog::Log(LOGDEBUG,"FileUPnP - file redirect to %s.", item_new.GetPath().c_str());
+    IFile *pNewImp = CFileFactory::CreateLoader(item_new.GetPath());
+    CURL *pNewUrl = new CURL(item_new.GetPath());
+    if (pNewImp)
+    {
+      throw new CRedirectException(pNewImp, pNewUrl);
+    }
+    SAFE_DELETE(pNewUrl);
+  }
+  return -1;
+}
+
+bool CFileUPnP::Exists(const CURL& url)
+{
+  CFileItem item_new;
+  if (CUPnPDirectory::GetResource(url.Get(), item_new))
+  {
+    //CLog::Log(LOGDEBUG,"FileUPnP - file redirect to %s.", item_new.GetPath().c_str());
+    IFile *pNewImp = CFileFactory::CreateLoader(item_new.GetPath());
+    CURL *pNewUrl = new CURL(item_new.GetPath());
+    if (pNewImp)
+    {
+      throw new CRedirectException(pNewImp, pNewUrl);
+    }
+    SAFE_DELETE(pNewUrl);
+  }
+  return false;
+}
diff --git a/xbmc/filesystem/FileUPnP.h b/xbmc/filesystem/FileUPnP.h
new file mode 100644 (file)
index 0000000..3d31364
--- /dev/null
@@ -0,0 +1,42 @@
+#pragma once
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "IFile.h"
+
+namespace XFILE
+{
+  class CFileUPnP : public IFile
+  {
+    public:
+      CFileUPnP();
+      virtual ~CFileUPnP();
+      virtual bool Open(const CURL& url);      
+      virtual bool Exists(const CURL& url);
+      virtual int Stat(const CURL& url, struct __stat64* buffer);
+      
+      virtual unsigned int Read(void* lpBuf, int64_t uiBufSize) {return -1;}
+      virtual int64_t Seek(int64_t iFilePosition, int iWhence = SEEK_SET) {return -1;}
+      virtual void Close(){}
+      virtual int64_t GetPosition() {return -1;}
+      virtual int64_t GetLength() {return -1;}
+  };
+}
index 829c92e..9a180ef 100644 (file)
@@ -216,7 +216,8 @@ bool CHTSPSession::Connect(const std::string& hostname, int port)
   char errbuf[1024];
   int  errlen = sizeof(errbuf);
   htsmsg_t *m;
-  const char *method, *server, *version;
+//  const char *method;
+  const char *server, *version;
   const void * chall = NULL;
   size_t chall_len = 0;
   int32_t proto = 0;
@@ -245,7 +246,7 @@ bool CHTSPSession::Connect(const std::string& hostname, int port)
     CLog::Log(LOGERROR, "CHTSPSession::Open - failed to read greeting from server");
     return false;
   }
-  method  = htsmsg_get_str(m, "method");
+//  method  = htsmsg_get_str(m, "method");
             htsmsg_get_s32(m, "htspversion", &proto);
   server  = htsmsg_get_str(m, "servername");
   version = htsmsg_get_str(m, "serverversion");
index a1a4b2f..6b703a4 100644 (file)
@@ -29,6 +29,7 @@
 #include "utils/CharsetConverter.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
+#include "utils/HTMLUtil.h"
 #include "climits"
 
 using namespace XFILE;
@@ -50,9 +51,21 @@ bool CHTTPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &item
     return false;
   }
 
-  CRegExp reItem;
+  CRegExp reItem(true); // HTML is case-insensitive
   reItem.RegComp("<a href=\"(.*)\">(.*)</a>");
 
+  CRegExp reDateTime(true);
+  reDateTime.RegComp("<td align=\"right\">([0-9]{2})-([A-Z]{3})-([0-9]{4}) ([0-9]{2}):([0-9]{2}) +</td>");
+
+  CRegExp reDateTimeNginx(true);
+  reDateTimeNginx.RegComp("</a> +([0-9]{2})-([A-Z]{3})-([0-9]{4}) ([0-9]{2}):([0-9]{2}) ");
+
+  CRegExp reSize(true);
+  reSize.RegComp(">*([0-9.]+)(B|K|M|G| )</td>");
+
+  CRegExp reSizeNginx;
+  reSizeNginx.RegComp("([0-9]+)$");
+
   /* read response from server into string buffer */
   char buffer[MAX_PATH + 1024];
   while(http.ReadString(buffer, sizeof(buffer)-1))
@@ -74,53 +87,91 @@ bool CHTTPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &item
       URIUtils::RemoveSlashAtEnd(strNameTemp);
       CURL::Decode(strLinkTemp);
 
-      if (strNameTemp == strLinkTemp)
+      if (strNameTemp == strLinkTemp && strLinkTemp != "..")
       {
+        CStdStringW wName, wLink, wConverted;
+
         g_charsetConverter.unknownToUTF8(strName);
+        g_charsetConverter.utf8ToW(strName, wName, false);
+        HTML::CHTMLUtil::ConvertHTMLToW(wName, wConverted);
+        g_charsetConverter.wToUTF8(wConverted, strName);
         URIUtils::RemoveSlashAtEnd(strName);
 
+        g_charsetConverter.unknownToUTF8(strLink);
+        g_charsetConverter.utf8ToW(strLink, wLink, false);
+        HTML::CHTMLUtil::ConvertHTMLToW(wLink, wConverted);
+        g_charsetConverter.wToUTF8(wConverted, strLink);
+
         CFileItemPtr pItem(new CFileItem(strName));
-        pItem->SetPath(strBasePath + strLink);
         pItem->SetProperty("IsHTTPDirectory", true);
+        url.SetFileName(strBasePath + strLink);
+        pItem->SetPath(url.Get());
 
         if(URIUtils::HasSlashAtEnd(pItem->GetPath()))
           pItem->m_bIsFolder = true;
 
-        url.SetFileName(pItem->GetPath());
-        pItem->SetPath(url.Get());
+        CStdString day, month, year, hour, minute;
+
+        if (reDateTime.RegFind(strBuffer.c_str()) >= 0)
+        {
+          day = reDateTime.GetReplaceString("\\1");
+          month = reDateTime.GetReplaceString("\\2");
+          year = reDateTime.GetReplaceString("\\3");
+          hour = reDateTime.GetReplaceString("\\4");
+          minute = reDateTime.GetReplaceString("\\5");
+        }
+        else if (reDateTimeNginx.RegFind(strBuffer.c_str()) >= 0)
+        {
+          day = reDateTimeNginx.GetReplaceString("\\1");
+          month = reDateTimeNginx.GetReplaceString("\\2");
+          year = reDateTimeNginx.GetReplaceString("\\3");
+          hour = reDateTimeNginx.GetReplaceString("\\4");
+          minute = reDateTimeNginx.GetReplaceString("\\5");
+        }
 
-        if (!pItem->m_bIsFolder && g_advancedSettings.m_bHTTPDirectoryStatFilesize)
+        if (day.length() > 0 && month.length() > 0 && year.length() > 0)
         {
-          CFileCurl file;
-          file.Open(url);
-          pItem->m_dwSize= file.GetLength();
-          file.Close();
+          pItem->m_dateTime = CDateTime(atoi(year.c_str()), CDateTime::MonthStringToMonthNum(month), atoi(day.c_str()), atoi(hour.c_str()), atoi(minute.c_str()), 0);
         }
 
-        if (!pItem->m_bIsFolder && pItem->m_dwSize == 0)
+        if (!pItem->m_bIsFolder)
         {
-          CRegExp reSize;
-          reSize.RegComp(">([0-9.]+)(K|M|G)</td>");
           if (reSize.RegFind(strBuffer.c_str()) >= 0)
           {
             double Size = atof(reSize.GetReplaceString("\\1"));
             CStdString strUnit = reSize.GetReplaceString("\\2");
 
-            if (strUnit == "M")
+            if (strUnit == "K")
               Size = Size * 1024;
+            else if (strUnit == "M")
+              Size = Size * 1024 * 1024;
             else if (strUnit == "G")
-              Size = Size * 1000 * 1024;
+              Size = Size * 1000 * 1024 * 1024;
 
-            pItem->m_dwSize = (int64_t)(Size * 1024);
+            pItem->m_dwSize = (int64_t)Size;
+          }
+          else if (reSizeNginx.RegFind(strBuffer.c_str()) >= 0)
+          {
+            double Size = atof(reSizeNginx.GetReplaceString("\\1"));
+            pItem->m_dwSize = (int64_t)Size;
+          }
+          else
+          if (g_advancedSettings.m_bHTTPDirectoryStatFilesize) // As a fallback get the size by stat-ing the file (slow)
+          {
+            CFileCurl file;
+            file.Open(url);
+            pItem->m_dwSize=file.GetLength();
+            file.Close();
           }
         }
-
         items.Add(pItem);
       }
     }
   }
   http.Close();
 
+  items.SetProperty("IsHTTPDirectory", true);
+
   return true;
 }
 
@@ -128,5 +179,15 @@ bool CHTTPDirectory::Exists(const char* strPath)
 {
   CFileCurl http;
   CURL url(strPath);
-  return http.Exists(url);
+  struct __stat64 buffer;
+
+  if( http.Stat(url, &buffer) != 0 )
+  {
+    return false;
+  }
+
+  if (buffer.st_mode == _S_IFDIR)
+         return true;
+
+  return false;
 }
index 874d163..67f91d6 100644 (file)
@@ -68,6 +68,16 @@ bool IDirectory::IsAllowed(const CStdString& strFile) const
       if (fileName.length() == 12 && fileName.Left(4).Equals("vts_") && fileName.Right(6).Equals("_0.ifo")) return true;
       return false;
     }
+    if (strExtension.Equals(".dat|"))
+    {
+      CStdString fileName = URIUtils::GetFileName(strFile);
+      /* VCD filenames are of the form AVSEQ##(#).DAT, ITEM###(#).DAT, MUSIC##(#).DAT - i.e. all 11 or 12 characters long
+         starting with AVSEQ, MUSIC or ITEM */
+      if ((fileName.length() == 11 || fileName.length() == 12) &&
+          (fileName.Left(5).Equals("AVSEQ") || fileName.Left(5).Equals("MUSIC") || fileName.Left(4).Equals("ITEM")))
+        return true;
+      return false;
+    }
     return true;
   }
   return false;
index a17a811..1d02724 100644 (file)
@@ -59,7 +59,7 @@ typedef enum {
   IOCTRL_NATIVE        = 1, /**< SNativeIoControl structure, containing what should be passed to native ioctrl */
   IOCTRL_SEEK_POSSIBLE = 2, /**< return 0 if known not to work, 1 if it should work */
   IOCTRL_CACHE_STATUS  = 3, /**< SCacheStatus structure */
-  IOCTRL_CACHE_SETRATE = 4, /**< unsigned int with with speed limit for caching in bytes per second */
+  IOCTRL_CACHE_SETRATE = 4, /**< unsigned int with speed limit for caching in bytes per second */
 } EIoControl;
 
 class IFile
@@ -105,9 +105,14 @@ class CRedirectException
 {
 public:
   IFile *m_pNewFileImp;
-
-  CRedirectException() : m_pNewFileImp(NULL) { }
-  CRedirectException(IFile *pNewFileImp) : m_pNewFileImp(pNewFileImp) { }
+  CURL  *m_pNewUrl;
+
+  CRedirectException() : m_pNewFileImp(NULL), m_pNewUrl(NULL) { }
+  
+  CRedirectException(IFile *pNewFileImp, CURL *pNewUrl=NULL) 
+  : m_pNewFileImp(pNewFileImp)
+  , m_pNewUrl(pNewUrl) 
+  { }
 };
 
 }
index e517bb9..467df2b 100644 (file)
@@ -35,6 +35,7 @@ SRCS=AddonsDirectory.cpp \
      FileSpecialProtocol.cpp \
      FileTuxBox.cpp \
      FileUDF.cpp \
+     FileUPnP.cpp \
      FileZip.cpp \
      FTPDirectory.cpp \
      FTPParse.cpp \
index 866bd88..1a1221a 100644 (file)
@@ -2,10 +2,10 @@ SRCS=DirectoryNode.cpp \
      DirectoryNodeAlbum.cpp \
      DirectoryNodeAlbumCompilations.cpp \
      DirectoryNodeAlbumCompilationsSongs.cpp \
-     DirectoryNodeAlbumRecentlyPlayed.cpp \
-     DirectoryNodeAlbumRecentlyPlayedSong.cpp \
      DirectoryNodeAlbumRecentlyAdded.cpp \
      DirectoryNodeAlbumRecentlyAddedSong.cpp \
+     DirectoryNodeAlbumRecentlyPlayed.cpp \
+     DirectoryNodeAlbumRecentlyPlayedSong.cpp \
      DirectoryNodeAlbumTop100.cpp \
      DirectoryNodeAlbumTop100Song.cpp \
      DirectoryNodeArtist.cpp \
index 70f7f5e..aa4612e 100644 (file)
@@ -25,6 +25,7 @@
 #include "PluginDirectory.h"
 #include "utils/URIUtils.h"
 #include "addons/AddonManager.h"
+#include "addons/AddonInstaller.h"
 #include "addons/IAddon.h"
 #ifdef HAS_PYTHON
 #include "interfaces/python/XBPython.h"
@@ -77,7 +78,7 @@ bool CPluginDirectory::StartScript(const CStdString& strPath, bool retrievingDir
 {
   CURL url(strPath);
 
-  if (!CAddonMgr::Get().GetAddon(url.GetHostName(), m_addon, ADDON_PLUGIN))
+  if (!CAddonMgr::Get().GetAddon(url.GetHostName(), m_addon, ADDON_PLUGIN) && !CAddonInstaller::Get().PromptForInstall(url.GetHostName(), m_addon))
   {
     CLog::Log(LOGERROR, "Unable to find plugin %s", url.GetHostName().c_str());
     return false;
@@ -408,7 +409,7 @@ bool CPluginDirectory::RunScriptWithParams(const CStdString& strPath)
     return false;
 
   AddonPtr addon;
-  if (!CAddonMgr::Get().GetAddon(url.GetHostName(), addon, ADDON_PLUGIN))
+  if (!CAddonMgr::Get().GetAddon(url.GetHostName(), addon, ADDON_PLUGIN) && !CAddonInstaller::Get().PromptForInstall(url.GetHostName(), addon))
   {
     CLog::Log(LOGERROR, "Unable to find plugin %s", url.GetHostName().c_str());
     return false;
index c66dbd4..4bbd265 100644 (file)
@@ -33,6 +33,7 @@
 #include "URL.h"
 #include "settings/GUISettings.h"
 #include "climits"
+#include "threads/SingleLock.h"
 
 using namespace XFILE;
 using namespace std;
@@ -65,6 +66,9 @@ namespace {
 
 }
 
+std::map<CStdString,CDateTime> CRSSDirectory::m_cache;
+CCriticalSection CRSSDirectory::m_section;
+
 CRSSDirectory::CRSSDirectory()
 {
   SetCacheDirectory(DIR_CACHE_ONCE);
@@ -585,17 +589,17 @@ bool CRSSDirectory::GetDirectory(const CStdString& path, CFileItemList &items)
 {
   CStdString strPath(path);
   URIUtils::RemoveSlashAtEnd(strPath);
-
-  /* check cache */
-  if(m_path == strPath)
+  std::map<CStdString,CDateTime>::iterator it;
+  items.SetPath(strPath);
+  CSingleLock lock(m_section);
+  if ((it=m_cache.find(strPath)) != m_cache.end())
   {
-    items.Copy(m_items);
-    return true;
+    if (it->second > CDateTime::GetCurrentDateTime() && 
+        items.Load())
+      return true;
+    m_cache.erase(it);
   }
-
-  /* clear cache */
-  m_items.Clear();
-  m_path == "";
+  lock.Leave();
 
   TiXmlDocument xmlDoc;
   if (!xmlDoc.LoadFile(strPath))
@@ -639,8 +643,16 @@ bool CRSSDirectory::GetDirectory(const CStdString& path, CFileItemList &items)
   items.AddSortMethod(SORT_METHOD_SIZE     , 553, LABEL_MASKS("%L", "%I", "%L", "%I"));  // FileName, Size | Foldername, Size
   items.AddSortMethod(SORT_METHOD_DATE     , 552, LABEL_MASKS("%L", "%J", "%L", "%J"));  // FileName, Date | Foldername, Date
 
-  m_items.Copy(items);
-  m_path  = strPath;
+  CDateTime time = CDateTime::GetCurrentDateTime();
+  int mins = 60;
+  TiXmlElement* ttl = docHandle.FirstChild("rss").FirstChild("ttl").Element();
+  if (ttl)
+    mins = strtol(ttl->FirstChild()->Value(),NULL,10);
+  time += CDateTimeSpan(0,0,mins,0);
+  items.SetPath(strPath);
+  items.Save();
+  CSingleLock lock2(m_section);
+  m_cache.insert(make_pair(strPath,time));
 
   return true;
 }
index 2f464ba..cd918cb 100644 (file)
@@ -36,10 +36,11 @@ namespace XFILE
     virtual bool Exists(const char* strPath);
     virtual bool IsAllowed(const CStdString &strFile) const { return true; };
     virtual bool ContainsFiles(const CStdString& strPath);
-    virtual DIR_CACHE_TYPE GetCacheType(const CStdString& strPath) const { return DIR_CACHE_ALWAYS; };
-
-    CFileItemList m_items;
-    CStdString    m_path;
+    virtual DIR_CACHE_TYPE GetCacheType(const CStdString& strPath) const { return DIR_CACHE_ONCE; };
+  protected:
+    // key is path, value is cache invalidation date
+    static std::map<CStdString,CDateTime> m_cache;
+    static CCriticalSection m_section;
   };
 }
 
index 01fc1a7..176dd73 100644 (file)
@@ -122,8 +122,9 @@ bool CRTVDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items
   if (url.HasPort())
   {
     char buffer[10];
+    sprintf(buffer,"%i",url.GetPort());
     strHostAndPort += ':';
-    strHostAndPort += itoa(url.GetPort(), buffer, 10);
+    strHostAndPort += buffer;
   }
 
   // No path given, list shows from ReplayGuide
@@ -157,10 +158,10 @@ bool CRTVDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items
       if ( !strcmpi(strTagName.c_str(), "ITEM") )
       {
         const TiXmlNode *nameNode = pChild->FirstChild("DISPLAYNAME");
-        const TiXmlNode *qualityNode = pChild->FirstChild("QUALITY");
+//        const TiXmlNode *qualityNode = pChild->FirstChild("QUALITY");
         const TiXmlNode *recordedNode = pChild->FirstChild("RECORDED");
         const TiXmlNode *pathNode = pChild->FirstChild("PATH");
-        const TiXmlNode *durationNode = pChild->FirstChild("DURATION");
+//        const TiXmlNode *durationNode = pChild->FirstChild("DURATION");
         const TiXmlNode *sizeNode = pChild->FirstChild("SIZE");
         const TiXmlNode *atrbNode = pChild->FirstChild("ATTRIB");
 
@@ -182,11 +183,11 @@ bool CRTVDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items
         }
 
         // QUALITY
-        const char* szQuality = NULL;
-        if (qualityNode)
-        {
-          szQuality = qualityNode->FirstChild()->Value() ;
-        }
+//        const char* szQuality = NULL;
+//        if (qualityNode)
+//        {
+//          szQuality = qualityNode->FirstChild()->Value() ;
+//        }
 
         // RECORDED
         if (recordedNode)
@@ -224,11 +225,11 @@ bool CRTVDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items
         }
 
         // DURATION
-        const char* szDuration = NULL;
-        if (durationNode)
-        {
-          szDuration = durationNode->FirstChild()->Value() ;
-        }
+//        const char* szDuration = NULL;
+//        if (durationNode)
+//        {
+//          szDuration = durationNode->FirstChild()->Value() ;
+//        }
 
         // SIZE
         // NOTE: Size here is actually just duration in minutes because
index c4d9809..1a89fbd 100644 (file)
@@ -71,7 +71,10 @@ namespace XFILE
       return( true);
     }
     else
+    {
+      CLog::Log(LOGWARNING,"%s: rar lib returned no files in archive %s, likely corrupt",__FUNCTION__,strArchive.c_str());
       return( false );
+    }
   }
 
   bool CRarDirectory::Exists(const char* strPath)
index 60886b3..2321e0d 100644 (file)
@@ -21,9 +21,6 @@
 
 #include "system.h"
 #include "RarManager.h"
-#ifdef HAS_FILESYSTEM_RAR
-#include "UnrarXLib/rar.hpp"
-#endif
 #include "Util.h"
 #include "utils/CharsetConverter.h"
 #include "utils/URIUtils.h"
@@ -35,6 +32,9 @@
 #include "utils/log.h"
 #include "filesystem/File.h"
 
+#include "dialogs/GUIDialogYesNo.h"
+#include "guilib/GUIWindowManager.h"
+
 #include <set>
 
 #define EXTRACTION_WARN_SIZE 50*1024*1024
@@ -99,9 +99,6 @@ bool CRarManager::CacheRarredFile(CStdString& strPathInCache, const CStdString&
   }
 
   int iRes = 0;
-#if 0 // temporary workaround. disable dialogs as they cause deadlocks since we cannot render
-      // from spawned threads and dvdplayer stalls the app thread during startup
-  //Extract archived file, using existing local copy or overwriting if wanted...
   if (iSize > EXTRACTION_WARN_SIZE)
   {
     CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO);
@@ -116,7 +113,6 @@ bool CRarManager::CacheRarredFile(CStdString& strPathInCache, const CStdString&
         iRes = 2; // pretend to be canceled
     }
   }
-#endif
   if (CheckFreeSpace(strDir) < iSize && iRes != 2)
   {
     ClearCache();
@@ -456,7 +452,7 @@ void CRarManager::ExtractArchive(const CStdString& strArchive, const CStdString&
 int64_t CRarManager::CheckFreeSpace(const CStdString& strDrive)
 {
   ULARGE_INTEGER lTotalFreeBytes;
-  if (GetDiskFreeSpaceEx(_P(strDrive.c_str()), NULL, NULL, &lTotalFreeBytes))
+  if (GetDiskFreeSpaceEx(CSpecialProtocol::TranslatePath(strDrive.c_str()), NULL, NULL, &lTotalFreeBytes))
     return lTotalFreeBytes.QuadPart;
 
   return 0;
index 53c240a..dd4b2f0 100644 (file)
@@ -38,6 +38,7 @@ class CFileItemList;
 #define EXFILE_OVERWRITE 1
 #define EXFILE_AUTODELETE 2
 #define EXFILE_UNIXPATH 4
+#define EXFILE_NOCACHE 8
 #define RAR_DEFAULT_CACHE "special://temp/"
 #define RAR_DEFAULT_PASSWORD ""
 
index 449e26b..45cf607 100644 (file)
@@ -27,6 +27,7 @@
 #include "Directory.h"
 #include "File.h"
 #include "FileItem.h"
+#include "utils/URIUtils.h"
 
 namespace XFILE
 {
@@ -45,11 +46,12 @@ namespace XFILE
     if (!playlist.Load(strPath))
       return false;
     bool success = false, success2 = false;
+    std::set<CStdString> playlists;
     if (playlist.GetType().Equals("tvshows"))
     {
       CVideoDatabase db;
       db.Open();
-      CStdString whereOrder = playlist.GetWhereClause(db) + " " + playlist.GetOrderClause(db);
+      CStdString whereOrder = playlist.GetWhereClause(db, playlists) + " " + playlist.GetOrderClause(db);
       success = db.GetTvShowsByWhere("videodb://2/2/", whereOrder, items);
       items.SetContent("tvshows");
       db.Close();
@@ -58,7 +60,7 @@ namespace XFILE
     {
       CVideoDatabase db;
       db.Open();
-      CStdString whereOrder = playlist.GetWhereClause(db) + " " + playlist.GetOrderClause(db);
+      CStdString whereOrder = playlist.GetWhereClause(db, playlists) + " " + playlist.GetOrderClause(db);
       success = db.GetEpisodesByWhere("videodb://2/2/", whereOrder, items);
       items.SetContent("episodes");
       db.Close();
@@ -67,7 +69,7 @@ namespace XFILE
     {
       CVideoDatabase db;
       db.Open();
-      success = db.GetMoviesByWhere("videodb://1/2/", playlist.GetWhereClause(db), playlist.GetOrderClause(db), items, true);
+      success = db.GetMoviesByWhere("videodb://1/2/", playlist.GetWhereClause(db, playlists), playlist.GetOrderClause(db), items, true);
       items.SetContent("movies");
       db.Close();
     }
@@ -75,7 +77,7 @@ namespace XFILE
     {
       CMusicDatabase db;
       db.Open();
-      success = db.GetAlbumsByWhere("musicdb://3/", playlist.GetWhereClause(db), playlist.GetOrderClause(db), items);
+      success = db.GetAlbumsByWhere("musicdb://3/", playlist.GetWhereClause(db, playlists), playlist.GetOrderClause(db), items);
       items.SetContent("albums");
       db.Close();
     }
@@ -89,7 +91,7 @@ namespace XFILE
       if (playlist.GetType().Equals("mixed"))
         playlist.SetType("songs");
 
-      CStdString whereOrder = playlist.GetWhereClause(db) + " " + playlist.GetOrderClause(db);
+      CStdString whereOrder = playlist.GetWhereClause(db, playlists) + " " + playlist.GetOrderClause(db);
       success = db.GetSongsByWhere("", whereOrder, items);
       items.SetContent("songs");
       db.Close();
@@ -102,7 +104,7 @@ namespace XFILE
       CStdString type=playlist.GetType();
       if (playlist.GetType().Equals("mixed"))
         playlist.SetType("musicvideos");
-      CStdString whereOrder = playlist.GetWhereClause(db) + " " + playlist.GetOrderClause(db);
+      CStdString whereOrder = playlist.GetWhereClause(db, playlists) + " " + playlist.GetOrderClause(db);
       CFileItemList items2;
       success2 = db.GetMusicVideosByWhere("videodb://3/2/", whereOrder, items2, false); // TODO: SMARTPLAYLISTS Don't check locks???
       db.Close();
@@ -137,15 +139,25 @@ namespace XFILE
     CFileItemList list;
     bool filesExist = false;
     if (playlistType == "songs" || playlistType == "albums")
-      filesExist = CDirectory::GetDirectory("special://musicplaylists/", list, "*.xsp");
+      filesExist = CDirectory::GetDirectory("special://musicplaylists/", list, ".xsp", false);
     else // all others are video
-      filesExist = CDirectory::GetDirectory("special://videoplaylists/", list, "*.xsp");
+      filesExist = CDirectory::GetDirectory("special://videoplaylists/", list, ".xsp", false);
     if (filesExist)
     {
       for (int i = 0; i < list.Size(); i++)
       {
         CFileItemPtr item = list[i];
-        if (item->GetLabel().CompareNoCase(name) == 0)
+        CSmartPlaylist playlist;
+        if (playlist.OpenAndReadName(item->GetPath()))
+        {
+          if (playlist.GetName().CompareNoCase(name) == 0)
+            return item->GetPath();
+        }
+      }
+      for (int i = 0; i < list.Size(); i++)
+      { // check based on filename
+        CFileItemPtr item = list[i];
+        if (URIUtils::GetFileName(item->GetPath()) == name)
         { // found :)
           return item->GetPath();
         }
index 15ce760..c351bab 100644 (file)
@@ -236,24 +236,6 @@ CStdString CSpecialProtocol::TranslatePathConvertCase(const CStdString& path)
 #endif
 }
 
-CStdString CSpecialProtocol::ReplaceOldPath(const CStdString &oldPath, int pathVersion)
-{
-  if (pathVersion < 1)
-  {
-    if (oldPath.Left(2).CompareNoCase("P:") == 0)
-      return URIUtils::AddFileToFolder("special://profile/", oldPath.Mid(2));
-    else if (oldPath.Left(2).CompareNoCase("Q:") == 0)
-      return URIUtils::AddFileToFolder("special://xbmc/", oldPath.Mid(2));
-    else if (oldPath.Left(2).CompareNoCase("T:") == 0)
-      return URIUtils::AddFileToFolder("special://masterprofile/", oldPath.Mid(2));
-    else if (oldPath.Left(2).CompareNoCase("U:") == 0)
-      return URIUtils::AddFileToFolder("special://home/", oldPath.Mid(2));
-    else if (oldPath.Left(2).CompareNoCase("Z:") == 0)
-      return URIUtils::AddFileToFolder("special://temp/", oldPath.Mid(2));
-  }
-  return oldPath;
-}
-
 void CSpecialProtocol::LogPaths()
 {
   CLog::Log(LOGNOTICE, "special://xbmc/ is mapped to: %s", GetPath("xbmc").c_str());
index dcb3b9a..86ac838 100644 (file)
@@ -68,8 +68,6 @@ public:
   static CStdString TranslatePath(const CStdString &path);
   static CStdString TranslatePath(const CURL &url);
   static CStdString TranslatePathConvertCase(const CStdString& path);
-  static CStdString ReplaceOldPath(const CStdString &oldPath, int pathVersion);
-  static const int path_version = 1;
 
 private:
   static void SetPath(const CStdString &key, const CStdString &path);
@@ -78,9 +76,6 @@ private:
   static std::map<CStdString, CStdString> m_pathMap;
 };
 
-#define _P(x)     CSpecialProtocol::TranslatePath(x)
-#define PTH_IC(x) CSpecialProtocol::TranslatePathConvertCase(x)
-
 #ifdef _WIN32
 #define PATH_SEPARATOR_CHAR '\\'
 #define PATH_SEPARATOR_STRING "\\"
index 53de24e..98f95ca 100644 (file)
@@ -161,12 +161,21 @@ bool CUPnPDirectory::GetResource(const CURL& path, CFileItem &item)
     CURL::Decode(object);
 
     PLT_DeviceDataReference device;
-    if(!FindDeviceWait(upnp, uuid.c_str(), device))
+    if(!FindDeviceWait(upnp, uuid.c_str(), device)) {
+        CLog::Log(LOGERROR, "CUPnPDirectory::GetResource - unable to find uuid %s", uuid.c_str());
         return false;
+    }
 
     PLT_MediaObjectListReference list;
-    if (NPT_FAILED(upnp->m_MediaBrowser->BrowseSync(device, object.c_str(), list, true)))
+    if (NPT_FAILED(upnp->m_MediaBrowser->BrowseSync(device, object.c_str(), list, true))) {
+        CLog::Log(LOGERROR, "CUPnPDirectory::GetResource - unable to find object %s", object.c_str());
         return false;
+    }
+
+    if (list.IsNull() || !list->GetItemCount()) {
+      CLog::Log(LOGERROR, "CUPnPDirectory::GetResource - no items returned for object %s", object.c_str());
+      return false;
+    }
 
     PLT_MediaObjectList::Iterator entry = list->GetFirstItem();
     if (entry == 0)
@@ -180,8 +189,10 @@ bool CUPnPDirectory::GetResource(const CURL& path, CFileItem &item)
                       CProtocolFinder("xbmc-get"), resource))) {
         if((*entry)->m_Resources.GetItemCount())
             resource = (*entry)->m_Resources[0];
-        else
+        else {
+            CLog::Log(LOGERROR, "CUPnPDirectory::GetResource - no resources returned for object %s", object.c_str());
             return false;
+        }
     }
 
     // store original path so we remember it
@@ -383,12 +394,10 @@ CUPnPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items)
 
             CStdString id = (char*) (*entry)->m_ObjectID;
             CURL::Encode(id);
-            pItem->SetPath(CStdString((const char*) "upnp://" + uuid + "/" + id.c_str() + "/"));
+            pItem->SetPath(CStdString((const char*) "upnp://" + uuid + "/" + id.c_str()));
 
             // if it's a container, format a string as upnp://uuid/object_id
             if (pItem->m_bIsFolder) {
-                CStdString id = (char*) (*entry)->m_ObjectID;
-                CURL::Encode(id);
                 pItem->SetPath(pItem->GetPath() + "/");
 
                 // look for metadata
index 7eaa408..ce8ba39 100644 (file)
@@ -204,6 +204,10 @@ bool CVideoDatabaseDirectory::GetLabel(const CStdString& strDirectory, CStdStrin
       strLabel = g_localizeStrings.Get(20389); break;
     case NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS: // Recently Added Music Videos
       strLabel = g_localizeStrings.Get(20390); break;
+    case NODE_TYPE_SEASONS: // Seasons
+      strLabel = g_localizeStrings.Get(33054); break;
+    case NODE_TYPE_EPISODES: // Episodes
+      strLabel = g_localizeStrings.Get(20360); break;
     default:
       CLog::Log(LOGWARNING, "%s - Unknown nodetype requested %d", __FUNCTION__, pNode->GetChildType());
       return false;
index 3c1f1ec..3bfee10 100644 (file)
@@ -41,7 +41,12 @@ bool CDirectoryNodeEpisodes::GetContent(CFileItemList& items) const
   CollectQueryParams(params);
 
   CStdString strBaseDir=BuildPath();
-  bool bSuccess=videodatabase.GetEpisodesNav(strBaseDir, items, params.GetGenreId(), params.GetYear(), params.GetActorId(), params.GetDirectorId(), params.GetTvShowId(), params.GetSeason());
+
+  int season = (int)params.GetSeason();
+  if (season == -2)
+    season = -1;
+
+  bool bSuccess=videodatabase.GetEpisodesNav(strBaseDir, items, params.GetGenreId(), params.GetYear(), params.GetActorId(), params.GetDirectorId(), params.GetTvShowId(), season);
 
   videodatabase.Close();
 
index 36c071f..79580f0 100644 (file)
@@ -48,6 +48,13 @@ CStdString CDirectoryNodeSeasons::GetLocalizedName() const
     return g_localizeStrings.Get(20381); // Specials
   case -1:
     return g_localizeStrings.Get(20366); // All Seasons
+  case -2:
+  {
+    CDirectoryNode *pParent = GetParent();
+    if (pParent)
+      return pParent->GetLocalizedName();
+    return "";
+  }
   default:
     CStdString season;
     season.Format(g_localizeStrings.Get(20358), GetID()); // Season <season>
@@ -85,8 +92,8 @@ bool CDirectoryNodeSeasons::GetContent(CFileItemList& items) const
   if (bFlatten)
   { // flatten if one season or flatten always
     items.Clear();
-    bSuccess=videodatabase.GetEpisodesNav(BuildPath()+"-1/",items,params.GetGenreId(),params.GetYear(),params.GetActorId(),params.GetDirectorId(),params.GetTvShowId());
-    items.SetPath(BuildPath()+"-1/");
+    bSuccess=videodatabase.GetEpisodesNav(BuildPath()+"-2/",items,params.GetGenreId(),params.GetYear(),params.GetActorId(),params.GetDirectorId(),params.GetTvShowId());
+    items.SetPath(BuildPath()+"-2/");
   }
 
   videodatabase.Close();
index 8ca1903..2bd4107 100644 (file)
@@ -5,6 +5,7 @@ SRCS=DirectoryNode.cpp \
      DirectoryNodeEpisodes.cpp \
      DirectoryNodeGenre.cpp \
      DirectoryNodeMoviesOverview.cpp \
+     DirectoryNodeMusicVideoAlbum.cpp \
      DirectoryNodeMusicVideosOverview.cpp \
      DirectoryNodeOverview.cpp \
      DirectoryNodeRecentlyAddedEpisodes.cpp \
@@ -15,7 +16,6 @@ SRCS=DirectoryNode.cpp \
      DirectoryNodeSets.cpp \
      DirectoryNodeStudio.cpp \
      DirectoryNodeTitleMovies.cpp \
-     DirectoryNodeMusicVideoAlbum.cpp \
      DirectoryNodeTitleMusicVideos.cpp \
      DirectoryNodeTitleTvShows.cpp \
      DirectoryNodeTvShowsOverview.cpp \
index 63e09e5..3e3a49c 100644 (file)
@@ -182,10 +182,12 @@ void CVirtualDirectory::GetSources(VECSOURCES &shares) const
       {
         share.strStatus = "Audio-CD";
         share.strPath = "cdda://local/";
+        share.strDiskUniqueId = "";
       }
       else
       {
         share.strStatus = g_mediaManager.GetDiskLabel(share.strPath);
+        share.strDiskUniqueId = g_mediaManager.GetDiskUniqueId(share.strPath);
         if (!share.strPath.length()) // unmounted CD
         {
           if (g_mediaManager.GetDiscPath() == "iso9660://")
diff --git a/xbmc/filesystem/windows/WINFileSMB.cpp b/xbmc/filesystem/windows/WINFileSMB.cpp
new file mode 100644 (file)
index 0000000..e5d1cdd
--- /dev/null
@@ -0,0 +1,321 @@
+\r
+/*\r
+ * XBMC Media Center\r
+ * Copyright (c) 2002 Frodo\r
+ * Portions Copyright (c) by the authors of ffmpeg and xvid\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
+*/\r
+#include "WINFileSMB.h"\r
+#include "URL.h"\r
+#include "settings/GUISettings.h"\r
+\r
+#include <sys/stat.h>\r
+#include <io.h>\r
+#include "utils/log.h"\r
+#include "utils/CharsetConverter.h"\r
+#include "utils/URIUtils.h"\r
+#include "WINSMBDirectory.h"\r
+\r
+using namespace XFILE;\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// Construction/Destruction\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+//*********************************************************************************************\r
+CWINFileSMB::CWINFileSMB()\r
+    : m_hFile(INVALID_HANDLE_VALUE)\r
+{}\r
+\r
+//*********************************************************************************************\r
+CWINFileSMB::~CWINFileSMB()\r
+{\r
+  if (m_hFile != INVALID_HANDLE_VALUE) Close();\r
+}\r
+//*********************************************************************************************\r
+CStdString CWINFileSMB::GetLocal(const CURL &url)\r
+{\r
+  CStdString path( url.GetFileName() );\r
+\r
+  if( url.GetProtocol().Equals("smb", false) )\r
+  {\r
+    CStdString host( url.GetHostName() );\r
+\r
+    if(host.size() > 0)\r
+    {\r
+      path = "//" + host + "/" + path;\r
+    }\r
+  }\r
+\r
+  path.Replace('/', '\\');\r
+\r
+  return path;\r
+}\r
+\r
+//*********************************************************************************************\r
+bool CWINFileSMB::Open(const CURL& url)\r
+{\r
+  CStdString strFile = GetLocal(url);\r
+\r
+  CStdStringW strWFile;\r
+  g_charsetConverter.utf8ToW(strFile, strWFile, false);\r
+  m_hFile.attach(CreateFileW(strWFile.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL));\r
+\r
+  if (!m_hFile.isValid())\r
+  {\r
+    if(GetLastError() == ERROR_FILE_NOT_FOUND)\r
+      return false;\r
+\r
+    XFILE::CWINSMBDirectory smb;\r
+    smb.ConnectToShare(url);\r
+    m_hFile.attach(CreateFileW(strWFile.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL));\r
+    if (!m_hFile.isValid())\r
+    {\r
+      CLog::Log(LOGERROR,"CWINFileSMB: Unable to open file '%s' Error '%d%",strWFile.c_str(), GetLastError());\r
+      return false;\r
+    }\r
+  }\r
+\r
+  m_i64FilePos = 0;\r
+  Seek(0, SEEK_SET);\r
+\r
+  return true;\r
+}\r
+\r
+bool CWINFileSMB::Exists(const CURL& url)\r
+{\r
+  struct __stat64 buffer;\r
+  if(url.GetFileName() == url.GetShareName())\r
+    return false;\r
+  CStdString strFile = GetLocal(url);\r
+  URIUtils::RemoveSlashAtEnd(strFile);\r
+  CStdStringW strWFile;\r
+  g_charsetConverter.utf8ToW(strFile, strWFile, false);\r
+  if(_wstat64(strWFile.c_str(), &buffer) == 0)\r
+    return true;\r
+\r
+  if(errno == ENOENT)\r
+    return false;\r
+\r
+  XFILE::CWINSMBDirectory smb;\r
+  if(smb.ConnectToShare(url) == false)\r
+    return false;\r
+\r
+  return (_wstat64(strWFile.c_str(), &buffer) == 0);\r
+}\r
+\r
+int CWINFileSMB::Stat(struct __stat64* buffer)\r
+{\r
+  int fd;\r
+  HANDLE hFileDup;\r
+  if (0 == DuplicateHandle(GetCurrentProcess(), (HANDLE)m_hFile, GetCurrentProcess(), &hFileDup, 0, FALSE, DUPLICATE_SAME_ACCESS))\r
+  {\r
+    CLog::Log(LOGERROR, __FUNCTION__" - DuplicateHandle()");\r
+    return -1;\r
+  }\r
+\r
+  fd = _open_osfhandle((intptr_t)((HANDLE)hFileDup), 0);\r
+  if (fd == -1)\r
+  {\r
+    CLog::Log(LOGERROR, "CWINFileSMB Stat: fd == -1");\r
+    return -1;\r
+  }\r
+\r
+  int result = _fstat64(fd, buffer);\r
+  _close(fd);\r
+  return result;\r
+}\r
+\r
+int CWINFileSMB::Stat(const CURL& url, struct __stat64* buffer)\r
+{\r
+  CStdString strFile = GetLocal(url);\r
+  /* _wstat64 calls FindFirstFileEx. According to MSDN, the path should not end in a trailing backslash.\r
+    Remove it before calling _wstat64 */\r
+  if (strFile.length() > 3 && URIUtils::HasSlashAtEnd(strFile))\r
+    URIUtils::RemoveSlashAtEnd(strFile);\r
+  CStdStringW strWFile;\r
+  g_charsetConverter.utf8ToW(strFile, strWFile, false);\r
+  if(_wstat64(strWFile.c_str(), buffer) == 0)\r
+    return 0;\r
+\r
+  if(errno == ENOENT)\r
+    return -1;\r
+\r
+  XFILE::CWINSMBDirectory smb;\r
+  if(smb.ConnectToShare(url) == false)\r
+    return -1;\r
+\r
+  return _wstat64(strWFile.c_str(), buffer);\r
+}\r
+\r
+\r
+//*********************************************************************************************\r
+bool CWINFileSMB::OpenForWrite(const CURL& url, bool bOverWrite)\r
+{\r
+  CStdString strPath = GetLocal(url);\r
+\r
+  CStdStringW strWPath;\r
+  g_charsetConverter.utf8ToW(strPath, strWPath, false);\r
+  m_hFile.attach(CreateFileW(strWPath.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, bOverWrite ? CREATE_ALWAYS : OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL));\r
+\r
+  if (!m_hFile.isValid())\r
+  {\r
+    if(GetLastError() == ERROR_FILE_NOT_FOUND)\r
+      return false;\r
+\r
+    XFILE::CWINSMBDirectory smb;\r
+    smb.ConnectToShare(url);\r
+    m_hFile.attach(CreateFileW(strWPath.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, bOverWrite ? CREATE_ALWAYS : OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL));\r
+    if (!m_hFile.isValid())\r
+    {\r
+      CLog::Log(LOGERROR,"CWINFileSMB: Unable to open file for writing '%s' Error '%d%",strWPath.c_str(), GetLastError());\r
+      return false;\r
+    }\r
+  }\r
+\r
+  m_i64FilePos = 0;\r
+  Seek(0, SEEK_SET);\r
+\r
+  return true;\r
+}\r
+\r
+//*********************************************************************************************\r
+unsigned int CWINFileSMB::Read(void *lpBuf, int64_t uiBufSize)\r
+{\r
+  if (!m_hFile.isValid()) return 0;\r
+  DWORD nBytesRead;\r
+  if ( ReadFile((HANDLE)m_hFile, lpBuf, (DWORD)uiBufSize, &nBytesRead, NULL) )\r
+  {\r
+    m_i64FilePos += nBytesRead;\r
+    return nBytesRead;\r
+  }\r
+  return 0;\r
+}\r
+\r
+//*********************************************************************************************\r
+int CWINFileSMB::Write(const void *lpBuf, int64_t uiBufSize)\r
+{\r
+  if (!m_hFile.isValid())\r
+    return 0;\r
+  \r
+  DWORD nBytesWriten;\r
+  if ( WriteFile((HANDLE)m_hFile, (void*) lpBuf, (DWORD)uiBufSize, &nBytesWriten, NULL) )\r
+    return nBytesWriten;\r
+  \r
+  return 0;\r
+}\r
+\r
+//*********************************************************************************************\r
+void CWINFileSMB::Close()\r
+{\r
+  m_hFile.reset();\r
+}\r
+\r
+//*********************************************************************************************\r
+int64_t CWINFileSMB::Seek(int64_t iFilePosition, int iWhence)\r
+{\r
+  LARGE_INTEGER lPos, lNewPos;\r
+  lPos.QuadPart = iFilePosition;\r
+  int bSuccess;\r
+\r
+  int64_t length = GetLength();\r
+\r
+  switch (iWhence)\r
+  {\r
+  case SEEK_SET:\r
+    if (iFilePosition <= length || length == 0)\r
+      bSuccess = SetFilePointerEx((HANDLE)m_hFile, lPos, &lNewPos, FILE_BEGIN);\r
+    else\r
+      bSuccess = false;\r
+    break;\r
+\r
+  case SEEK_CUR:\r
+    if ((GetPosition()+iFilePosition) <= length || length == 0)\r
+      bSuccess = SetFilePointerEx((HANDLE)m_hFile, lPos, &lNewPos, FILE_CURRENT);\r
+    else\r
+      bSuccess = false;\r
+    break;\r
+\r
+  case SEEK_END:\r
+    bSuccess = SetFilePointerEx((HANDLE)m_hFile, lPos, &lNewPos, FILE_END);\r
+    break;\r
+\r
+  default:\r
+    return -1;\r
+  }\r
+  if (bSuccess)\r
+  {\r
+    m_i64FilePos = lNewPos.QuadPart;\r
+    return m_i64FilePos;\r
+  }\r
+  else\r
+    return -1;\r
+}\r
+\r
+//*********************************************************************************************\r
+int64_t CWINFileSMB::GetLength()\r
+{\r
+  LARGE_INTEGER i64Size;\r
+  GetFileSizeEx((HANDLE)m_hFile, &i64Size);\r
+  return i64Size.QuadPart;\r
+}\r
+\r
+//*********************************************************************************************\r
+int64_t CWINFileSMB::GetPosition()\r
+{\r
+  return m_i64FilePos;\r
+}\r
+\r
+bool CWINFileSMB::Delete(const CURL& url)\r
+{\r
+  CStdString strFile=GetLocal(url);\r
+\r
+  CStdStringW strWFile;\r
+  g_charsetConverter.utf8ToW(strFile, strWFile, false);\r
+  return ::DeleteFileW(strWFile.c_str()) ? true : false;\r
+}\r
+\r
+bool CWINFileSMB::Rename(const CURL& url, const CURL& urlnew)\r
+{\r
+  CStdString strFile=GetLocal(url);\r
+  CStdString strNewFile=GetLocal(urlnew);\r
+\r
+  CStdStringW strWFile;\r
+  CStdStringW strWNewFile;\r
+  g_charsetConverter.utf8ToW(strFile, strWFile, false);\r
+  g_charsetConverter.utf8ToW(strNewFile, strWNewFile, false);\r
+  return ::MoveFileW(strWFile.c_str(), strWNewFile.c_str()) ? true : false;\r
+}\r
+\r
+bool CWINFileSMB::SetHidden(const CURL &url, bool hidden)\r
+{\r
+  CStdStringW path;\r
+  g_charsetConverter.utf8ToW(GetLocal(url), path, false);\r
+  DWORD attributes = hidden ? FILE_ATTRIBUTE_HIDDEN : FILE_ATTRIBUTE_NORMAL;\r
+  if (SetFileAttributesW(path.c_str(), attributes))\r
+    return true;\r
+  return false;\r
+}\r
+\r
+void CWINFileSMB::Flush()\r
+{\r
+  ::FlushFileBuffers(m_hFile);\r
+}\r
+\r
+int CWINFileSMB::IoControl(EIoControl request, void* param)\r
+{ \r
+  return -1;\r
+}\r
diff --git a/xbmc/filesystem/windows/WINFileSMB.h b/xbmc/filesystem/windows/WINFileSMB.h
new file mode 100644 (file)
index 0000000..316941c
--- /dev/null
@@ -0,0 +1,64 @@
+/*\r
+ * XBMC Media Center\r
+ * Copyright (c) 2002 Frodo\r
+ * Portions Copyright (c) by the authors of ffmpeg and xvid\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
+*/\r
+\r
+// WINFileSMB.h: interface for the CWINFileSMB class.\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#include "filesystem/IFile.h"\r
+#include "utils/AutoPtrHandle.h"\r
+\r
+namespace XFILE\r
+{\r
+class CWINFileSMB : public IFile\r
+{\r
+public:\r
+  CWINFileSMB();\r
+  virtual ~CWINFileSMB();\r
+  virtual int64_t GetPosition();\r
+  virtual int64_t GetLength();\r
+  virtual bool Open(const CURL& url);\r
+  virtual bool Exists(const CURL& url);\r
+  virtual int Stat(const CURL& url, struct __stat64* buffer);\r
+  virtual int Stat(struct __stat64* buffer);\r
+  virtual unsigned int Read(void* lpBuf, int64_t uiBufSize);\r
+  virtual int Write(const void* lpBuf, int64_t uiBufSize);\r
+  virtual int64_t Seek(int64_t iFilePosition, int iWhence = SEEK_SET);\r
+  virtual void Close();\r
+  virtual void Flush();\r
+\r
+  virtual bool OpenForWrite(const CURL& url, bool bOverWrite = false);\r
+\r
+  virtual bool Delete(const CURL& url);\r
+  virtual bool Rename(const CURL& url, const CURL& urlnew);\r
+  virtual bool SetHidden(const CURL& url, bool hidden);\r
+\r
+  virtual int IoControl(EIoControl request, void* param);\r
+protected:\r
+  CStdString GetLocal(const CURL &url); /* crate a properly format path from an url */\r
+  AUTOPTR::CAutoPtrHandle m_hFile;\r
+  int64_t m_i64FilePos;\r
+};\r
+\r
+}\r
diff --git a/xbmc/filesystem/windows/WINSMBDirectory.cpp b/xbmc/filesystem/windows/WINSMBDirectory.cpp
new file mode 100644 (file)
index 0000000..d934449
--- /dev/null
@@ -0,0 +1,441 @@
+/*\r
+ *      Copyright (C) 2005-2008 Team XBMC\r
+ *      http://www.xbmc.org\r
+ *\r
+ *  This Program is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *\r
+ *  This Program is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ *  GNU General Public License for more details.\r
+ *\r
+ *  You should have received a copy of the GNU General Public License\r
+ *  along with XBMC; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.\r
+ *  http://www.gnu.org/copyleft/gpl.html\r
+ *\r
+ */\r
+\r
+\r
+#include "WINSMBDirectory.h"\r
+#include "URL.h"\r
+#include "utils/URIUtils.h"\r
+#include "settings/GUISettings.h"\r
+#include "FileItem.h"\r
+#include "WIN32Util.h"\r
+#include "utils/AutoPtrHandle.h"\r
+#include "utils/log.h"\r
+#include "utils/CharsetConverter.h"\r
+#include "PasswordManager.h"\r
+#include "Util.h"\r
+\r
+#ifndef INVALID_FILE_ATTRIBUTES\r
+#define INVALID_FILE_ATTRIBUTES ((DWORD) -1)\r
+#endif\r
+\r
+\r
+using namespace AUTOPTR;\r
+using namespace XFILE;\r
+\r
+CWINSMBDirectory::CWINSMBDirectory(void)\r
+{\r
+  m_bHost=false;\r
+}\r
+\r
+CWINSMBDirectory::~CWINSMBDirectory(void)\r
+{\r
+}\r
+\r
+CStdString CWINSMBDirectory::GetLocal(const CStdString& strPath)\r
+{\r
+  CURL url(strPath);\r
+  CStdString path( url.GetFileName() );\r
+  if( url.GetProtocol().Equals("smb", false) )\r
+  {\r
+    CStdString host( url.GetHostName() );\r
+\r
+    if(host.size() > 0)\r
+    {\r
+      path = "//" + host + "/" + path;\r
+    }\r
+  }\r
+  path.Replace('/', '\\');\r
+  return path;\r
+}\r
+\r
+bool CWINSMBDirectory::GetDirectory(const CStdString& strPath1, CFileItemList &items)\r
+{\r
+  WIN32_FIND_DATAW wfd;\r
+\r
+  CStdString strPath=strPath1;\r
+\r
+  CURL url(strPath);\r
+\r
+  if(url.GetShareName().empty())\r
+  {\r
+    LPNETRESOURCEW lpnr = NULL;\r
+    bool ret;\r
+    if(!url.GetHostName().empty())\r
+    {\r
+      lpnr = (LPNETRESOURCEW) GlobalAlloc(GPTR, 16384);\r
+      if(lpnr == NULL)\r
+        return false;\r
+\r
+      ConnectToShare(url);\r
+      CStdString strHost = "\\\\" + url.GetHostName();\r
+      CStdStringW strHostW;\r
+      g_charsetConverter.utf8ToW(strHost,strHostW);\r
+      lpnr->lpRemoteName = (LPWSTR)strHostW.c_str();\r
+      m_bHost = true;\r
+      ret = EnumerateFunc(lpnr, items);\r
+      GlobalFree((HGLOBAL) lpnr);\r
+      m_bHost = false;\r
+    }\r
+    else\r
+      ret = EnumerateFunc(lpnr, items);  \r
\r
+    return ret; \r
+  }\r
+\r
+  memset(&wfd, 0, sizeof(wfd));\r
+  //rebuild the URL\r
+  CStdString strUNCShare = "\\\\" + url.GetHostName() + "\\" + url.GetFileName();\r
+  strUNCShare.Replace("/", "\\");\r
+  if(!URIUtils::HasSlashAtEnd(strUNCShare))\r
+    strUNCShare.append("\\");\r
+\r
+  CStdStringW strSearchMask;\r
+  g_charsetConverter.utf8ToW(strUNCShare, strSearchMask, false); \r
+  strSearchMask += "*";\r
+\r
+  FILETIME localTime;\r
+  CAutoPtrFind hFind ( FindFirstFileW(strSearchMask.c_str(), &wfd));\r
+  \r
+  // on error, check if path exists at all, this will return true if empty folder\r
+  if (!hFind.isValid()) \r
+  {\r
+    DWORD ret = GetLastError();\r
+    if(ret == ERROR_INVALID_PASSWORD || ret == ERROR_LOGON_FAILURE || ret == ERROR_ACCESS_DENIED || ret == ERROR_INVALID_HANDLE)\r
+    {\r
+      if(ConnectToShare(url) == false)\r
+        return false;\r
+      hFind.attach(FindFirstFileW(strSearchMask.c_str(), &wfd));\r
+    }\r
+    else\r
+      return Exists(strPath1);\r
+  }\r
+\r
+  if (hFind.isValid())\r
+  {\r
+    do\r
+    {\r
+      if (wfd.cFileName[0] != 0)\r
+      {\r
+        CStdString strLabel;\r
+        g_charsetConverter.wToUTF8(wfd.cFileName,strLabel);\r
+        if ( (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )\r
+        {\r
+          if (strLabel != "." && strLabel != "..")\r
+          {\r
+            CFileItemPtr pItem(new CFileItem(strLabel));\r
+            CStdString path = URIUtils::AddFileToFolder(strPath, strLabel);\r
+            URIUtils::AddSlashAtEnd(path);\r
+            pItem->SetPath(path);\r
+            pItem->m_bIsFolder = true;\r
+            FileTimeToLocalFileTime(&wfd.ftLastWriteTime, &localTime);\r
+            pItem->m_dateTime=localTime;\r
+\r
+            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)\r
+              pItem->SetProperty("file:hidden", true);\r
+\r
+            items.Add(pItem);\r
+          }\r
+        }\r
+        else\r
+        {\r
+          CFileItemPtr pItem(new CFileItem(strLabel));\r
+          pItem->SetPath(URIUtils::AddFileToFolder(strPath, strLabel));\r
+          pItem->m_bIsFolder = false;\r
+          pItem->m_dwSize = CUtil::ToInt64(wfd.nFileSizeHigh, wfd.nFileSizeLow);\r
+          FileTimeToLocalFileTime(&wfd.ftLastWriteTime, &localTime);\r
+          pItem->m_dateTime=localTime;\r
+\r
+          if (wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)\r
+            pItem->SetProperty("file:hidden", true);\r
+          items.Add(pItem);\r
+        }\r
+      }\r
+    }\r
+    while (FindNextFileW((HANDLE)hFind, &wfd));\r
+  }\r
+  return true;\r
+}\r
+\r
+bool CWINSMBDirectory::Create(const char* strPath)\r
+{\r
+  CStdString strPath1 = GetLocal(strPath);\r
+  CStdStringW strWPath1;\r
+  g_charsetConverter.utf8ToW(strPath1, strWPath1, false);\r
+  if(::CreateDirectoryW(strWPath1, NULL))\r
+    return true;\r
+  else if(GetLastError() == ERROR_ALREADY_EXISTS)\r
+    return true;\r
+\r
+  return false;\r
+}\r
+\r
+bool CWINSMBDirectory::Remove(const char* strPath)\r
+{\r
+  CStdStringW strWPath;\r
+  CStdString strPath1 = GetLocal(strPath);\r
+  g_charsetConverter.utf8ToW(strPath1, strWPath, false);\r
+  return ::RemoveDirectoryW(strWPath) ? true : false;\r
+}\r
+\r
+bool CWINSMBDirectory::Exists(const char* strPath)\r
+{\r
+  CStdString strReplaced=GetLocal(strPath);\r
+  CStdStringW strWReplaced;\r
+  g_charsetConverter.utf8ToW(strReplaced, strWReplaced, false);\r
+  // this will fail on shares, needs a subdirectory inside a share\r
+  DWORD attributes = GetFileAttributesW(strWReplaced);\r
+  if(attributes == INVALID_FILE_ATTRIBUTES)\r
+    return false;\r
+  if (FILE_ATTRIBUTE_DIRECTORY & attributes) \r
+    return true;\r
+  return false;\r
+}\r
+\r
+bool CWINSMBDirectory::EnumerateFunc(LPNETRESOURCEW lpnr, CFileItemList &items)\r
+{\r
+  DWORD dwResult, dwResultEnum;\r
+  HANDLE hEnum;\r
+  DWORD cbBuffer = 16384;     // 16K is a good size\r
+  LPNETRESOURCEW lpnrLocal;   // pointer to enumerated structures\r
+  DWORD cEntries = -1;        // enumerate all possible entries\r
+  //\r
+  // Call the WNetOpenEnum function to begin the enumeration.\r
+  //\r
+  dwResult = WNetOpenEnumW( RESOURCE_GLOBALNET,  // all network resources\r
+                            RESOURCETYPE_DISK,   // all disk resources\r
+                            0,                   // enumerate all resources\r
+                            lpnr,                // NULL first time the function is called\r
+                            &hEnum);             // handle to the resource\r
+\r
+  if (dwResult != NO_ERROR) \r
+  {\r
+    CLog::Log(LOGERROR,"WnetOpenEnum failed with error %d", dwResult);\r
+    if(dwResult == ERROR_EXTENDED_ERROR)\r
+    {\r
+      DWORD dwWNetResult, dwLastError;   \r
+      CHAR szDescription[256]; \r
+      CHAR szProvider[256]; \r
+      dwWNetResult = WNetGetLastError(&dwLastError, // error code\r
+                            (LPSTR) szDescription,  // buffer for error description \r
+                            sizeof(szDescription),  // size of error buffer\r
+                            (LPSTR) szProvider,     // buffer for provider name \r
+                            sizeof(szProvider));    // size of name buffer\r
+      if(dwWNetResult == NO_ERROR) \r
+        CLog::Log(LOGERROR,"%s failed with code %ld; %s", szProvider, dwLastError, szDescription);\r
+    }\r
+    return false;\r
+  }\r
+  //\r
+  // Call the GlobalAlloc function to allocate resources.\r
+  //\r
+  lpnrLocal = (LPNETRESOURCEW) GlobalAlloc(GPTR, cbBuffer);\r
+  if (lpnrLocal == NULL) \r
+  {\r
+    CLog::Log(LOGERROR,"Can't allocate buffer %d", cbBuffer);\r
+    return false;\r
+  }\r
+\r
+  do \r
+  {\r
+    //\r
+    // Initialize the buffer.\r
+    //\r
+    ZeroMemory(lpnrLocal, cbBuffer);\r
+    //\r
+    // Call the WNetEnumResource function to continue\r
+    //  the enumeration.\r
+    //\r
+    dwResultEnum = WNetEnumResourceW( hEnum,          // resource handle\r
+                                      &cEntries,      // defined locally as -1\r
+                                      lpnrLocal,      // LPNETRESOURCE\r
+                                      &cbBuffer);     // buffer size\r
+    //\r
+    // If the call succeeds, loop through the structures.\r
+    //\r
+    if (dwResultEnum == NO_ERROR) \r
+    {\r
+      for (DWORD i = 0; i < cEntries; i++) \r
+      {\r
+        DWORD dwDisplayType = lpnrLocal[i].dwDisplayType;\r
+        DWORD dwType = lpnrLocal[i].dwType;\r
+\r
+        if((((dwDisplayType == RESOURCEDISPLAYTYPE_SERVER) && (m_bHost == false)) || \r
+           ((dwDisplayType == RESOURCEDISPLAYTYPE_SHARE) && m_bHost)) &&\r
+           (dwType != RESOURCETYPE_PRINT))\r
+        {\r
+          CStdString strurl = "smb:";\r
+          CStdStringW strRemoteNameW = lpnrLocal[i].lpRemoteName;\r
+          CStdString  strName,strRemoteName;\r
+\r
+          g_charsetConverter.wToUTF8(strRemoteNameW,strRemoteName);\r
+          CLog::Log(LOGDEBUG,"Found Server/Share: %s", strRemoteName.c_str());\r
+\r
+          strurl.append(strRemoteName);\r
+          strurl.Replace("\\","/");\r
+          CURL rooturl(strurl);\r
+          rooturl.SetFileName("");\r
+\r
+          if(!rooturl.GetShareName().empty())\r
+            strName = rooturl.GetShareName();\r
+          else\r
+            strName = rooturl.GetHostName();\r
+\r
+          strName.Replace("\\","");\r
+\r
+          URIUtils::AddSlashAtEnd(strurl);\r
+          CFileItemPtr pItem(new CFileItem(strName));\r
+          pItem->SetPath(strurl);\r
+          pItem->m_bIsFolder = true;\r
+          items.Add(pItem);\r
+        }\r
+\r
+        // If the NETRESOURCE structure represents a container resource, \r
+        //  call the EnumerateFunc function recursively.\r
+        if (RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER))\r
+          EnumerateFunc(&lpnrLocal[i], items);\r
+      }\r
+    }\r
+    // Process errors.\r
+    //\r
+    else if (dwResultEnum != ERROR_NO_MORE_ITEMS) \r
+    {\r
+      CLog::Log(LOGERROR,"WNetEnumResource failed with error %d", dwResultEnum);\r
+      break;\r
+    }\r
+  }\r
+  //\r
+  // End do.\r
+  //\r
+  while (dwResultEnum != ERROR_NO_MORE_ITEMS);\r
+  //\r
+  // Call the GlobalFree function to free the memory.\r
+  //\r
+  GlobalFree((HGLOBAL) lpnrLocal);\r
+  //\r
+  // Call WNetCloseEnum to end the enumeration.\r
+  //\r
+  dwResult = WNetCloseEnum(hEnum);\r
+\r
+  if (dwResult != NO_ERROR) \r
+  {\r
+      //\r
+      // Process errors.\r
+      //\r
+      CLog::Log(LOGERROR,"WNetCloseEnum failed with error %d", dwResult);\r
+      return false;\r
+  }\r
+\r
+  return true;\r
+}\r
+\r
+bool CWINSMBDirectory::ConnectToShare(const CURL& url)\r
+{\r
+  NETRESOURCE nr;\r
+  CURL urlIn(url);\r
+  DWORD dwRet=-1;\r
+  CStdString strUNC("\\\\"+url.GetHostName());\r
+  if(!url.GetShareName().empty())\r
+    strUNC.append("\\"+url.GetShareName());\r
+\r
+  CStdString strPath;\r
+  memset(&nr,0,sizeof(nr));\r
+  nr.dwType = RESOURCETYPE_ANY;\r
+  nr.lpRemoteName = (char*)strUNC.c_str();\r
+\r
+  // in general we shouldn't need the password manager as we won't disconnect from shares yet\r
+  CPasswordManager::GetInstance().AuthenticateURL(urlIn);\r
+\r
+  CStdString strAuth = URLEncode(urlIn);\r
+\r
+  while(dwRet != NO_ERROR)\r
+  {\r
+    strPath = URLEncode(urlIn);\r
+    LPCTSTR pUser = urlIn.GetUserNameA().empty() ? NULL : (LPCTSTR)urlIn.GetUserNameA().c_str();\r
+    LPCTSTR pPass = urlIn.GetPassWord().empty() ? NULL : (LPCTSTR)urlIn.GetPassWord().c_str();\r
+    dwRet = WNetAddConnection2(&nr, pPass, pUser, CONNECT_TEMPORARY);\r
+#ifdef _DEBUG\r
+    CLog::Log(LOGDEBUG,"Trying to connect to %s with username(%s) and password(%s)", strUNC.c_str(), urlIn.GetUserNameA().c_str(), urlIn.GetPassWord().c_str());\r
+#else\r
+    CLog::Log(LOGDEBUG,"Trying to connect to %s with username(%s) and password(%s)", strUNC.c_str(), urlIn.GetUserNameA().c_str(), "XXXX");\r
+#endif\r
+    if(dwRet == ERROR_ACCESS_DENIED || dwRet == ERROR_INVALID_PASSWORD || dwRet == ERROR_LOGON_FAILURE)\r
+    {\r
+      CLog::Log(LOGERROR,"Couldn't connect to %s, access denied", strUNC.c_str());\r
+      if (m_allowPrompting)\r
+        RequireAuthentication(urlIn.Get());\r
+      break;\r
+    }\r
+    else if(dwRet == ERROR_SESSION_CREDENTIAL_CONFLICT)\r
+    {\r
+      DWORD dwRet2=-1;\r
+      CStdString strRN = nr.lpRemoteName;\r
+      do\r
+      {\r
+        dwRet2 = WNetCancelConnection2((LPCSTR)strRN.c_str(), 0, false);\r
+        strRN.erase(strRN.find_last_of("\\"),CStdString::npos);\r
+      } \r
+      while(dwRet2 == ERROR_NOT_CONNECTED && !strRN.Equals("\\\\"));\r
+    }\r
+    else if(dwRet != NO_ERROR)\r
+    {\r
+      break;\r
+    }\r
+  }\r
+\r
+  if(dwRet != NO_ERROR)\r
+  {\r
+    CLog::Log(LOGERROR,"Couldn't connect to %s, error code %d", strUNC.c_str(), dwRet);\r
+    return false;\r
+  }\r
+  return true;\r
+}\r
+\r
+CStdString CWINSMBDirectory::URLEncode(const CURL &url)\r
+{\r
+  /* due to smb wanting encoded urls we have to build it manually */\r
+\r
+  CStdString flat = "smb://";\r
+\r
+  /* samba messes up of password is set but no username is set. don't know why yet */\r
+  /* probably the url parser that goes crazy */\r
+  if(url.GetUserName().length() > 0 /* || url.GetPassWord().length() > 0 */)\r
+  {\r
+    flat += url.GetUserName();\r
+    flat += ":";\r
+    flat += url.GetPassWord();\r
+    flat += "@";\r
+  }\r
+  flat += url.GetHostName();\r
+\r
+  /* okey sadly since a slash is an invalid name we have to tokenize */\r
+  std::vector<CStdString> parts;\r
+  std::vector<CStdString>::iterator it;\r
+  CUtil::Tokenize(url.GetFileName(), parts, "/");\r
+  for( it = parts.begin(); it != parts.end(); it++ )\r
+  {\r
+    flat += "/";\r
+    flat += (*it);\r
+  }\r
+\r
+  /* okey options should go here, thou current samba doesn't support any */\r
+\r
+  return flat;\r
+}\r
diff --git a/xbmc/filesystem/windows/WINSMBDirectory.h b/xbmc/filesystem/windows/WINSMBDirectory.h
new file mode 100644 (file)
index 0000000..de52194
--- /dev/null
@@ -0,0 +1,48 @@
+#pragma once\r
+/*\r
+ *      Copyright (C) 2005-2008 Team XBMC\r
+ *      http://www.xbmc.org\r
+ *\r
+ *  This Program is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *\r
+ *  This Program is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ *  GNU General Public License for more details.\r
+ *\r
+ *  You should have received a copy of the GNU General Public License\r
+ *  along with XBMC; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.\r
+ *  http://www.gnu.org/copyleft/gpl.html\r
+ *\r
+ */\r
+\r
+\r
+#include "filesystem/IDirectory.h"\r
+#include "URL.h"\r
+\r
+namespace XFILE\r
+{\r
+\r
+class CWINSMBDirectory : public IDirectory\r
+{\r
+public:\r
+  CWINSMBDirectory(void);\r
+  virtual ~CWINSMBDirectory(void);\r
+  virtual bool GetDirectory(const CStdString& strPath, CFileItemList &items);\r
+  virtual DIR_CACHE_TYPE GetCacheType(const CStdString &strPath) const { return DIR_CACHE_ONCE; };\r
+  virtual bool Create(const char* strPath);\r
+  virtual bool Exists(const char* strPath);\r
+  virtual bool Remove(const char* strPath);\r
+\r
+  bool ConnectToShare(const CURL& url);\r
+private:\r
+  bool m_bHost;\r
+  bool EnumerateFunc(LPNETRESOURCEW lpnr, CFileItemList &items);\r
+  CStdString GetLocal(const CStdString& strPath);\r
+  CStdString URLEncode(const CURL &url);\r
+};\r
+}\r
index f96d977..1b904ad 100644 (file)
@@ -224,7 +224,7 @@ int CAnimatedGifSet::LoadGIF (const char * szFileName)
   int GraphicExtensionFound = 0;
 
   // OPEN FILE
-  FILE *fd = fopen_utf8(_P(szFileName), "rb");
+  FILE *fd = fopen_utf8(CSpecialProtocol::TranslatePath(szFileName), "rb");
   if (!fd)
   {
     return 0;
index ca6417f..ffaa13f 100644 (file)
@@ -33,12 +33,18 @@ void CUnionDirtyRegionSolver::Solve(const CDirtyRegionList &input, CDirtyRegionL
     output.push_back(unifiedRegion);
 }
 
-void CFillViewportRegionSolver::Solve(const CDirtyRegionList &input, CDirtyRegionList &output)
+void CFillViewportAlwaysRegionSolver::Solve(const CDirtyRegionList &input, CDirtyRegionList &output)
 {
   CDirtyRegion unifiedRegion(g_graphicsContext.GetViewWindow());
   output.push_back(unifiedRegion);
 }
 
+void CFillViewportOnChangeRegionSolver::Solve(const CDirtyRegionList &input, CDirtyRegionList &output)
+{
+  if (input.size() > 0)
+    output.assign(1,g_graphicsContext.GetViewWindow());
+}
+
 CGreedyDirtyRegionSolver::CGreedyDirtyRegionSolver()
 {
   m_costNewRegion = 10.0f;
index f87fb94..9324c48 100644 (file)
@@ -28,7 +28,13 @@ public:
   virtual void Solve(const CDirtyRegionList &input, CDirtyRegionList &output);
 };
 
-class CFillViewportRegionSolver : public IDirtyRegionSolver
+class CFillViewportAlwaysRegionSolver : public IDirtyRegionSolver
+{
+public:
+  virtual void Solve(const CDirtyRegionList &input, CDirtyRegionList &output);
+};
+
+class CFillViewportOnChangeRegionSolver : public IDirtyRegionSolver
 {
 public:
   virtual void Solve(const CDirtyRegionList &input, CDirtyRegionList &output);
index e899076..8ef6191 100644 (file)
@@ -41,18 +41,22 @@ void CDirtyRegionTracker::SelectAlgorithm()
 
   switch (g_advancedSettings.m_guiAlgorithmDirtyRegions)
   {
-    case DIRTYREGION_SOLVER_UNION:
-      m_solver = new CUnionDirtyRegionSolver();
-      CLog::Log(LOGDEBUG, "guilib: Union as algorithm for solving rendering passes");
+    case DIRTYREGION_SOLVER_FILL_VIEWPORT_ON_CHANGE:
+      CLog::Log(LOGDEBUG, "guilib: Fill viewport on change for solving rendering passes");
+      m_solver = new CFillViewportOnChangeRegionSolver();
       break;
     case DIRTYREGION_SOLVER_COST_REDUCTION:
       CLog::Log(LOGDEBUG, "guilib: Cost reduction as algorithm for solving rendering passes");
       m_solver = new CGreedyDirtyRegionSolver();
       break;
-    case DIRTYREGION_SOLVER_NONE:
+    case DIRTYREGION_SOLVER_UNION:
+      m_solver = new CUnionDirtyRegionSolver();
+      CLog::Log(LOGDEBUG, "guilib: Union as algorithm for solving rendering passes");
+      break;
+    case DIRTYREGION_SOLVER_FILL_VIEWPORT_ALWAYS:
     default:
-      CLog::Log(LOGDEBUG, "guilib: No algorithm for solving rendering passes");
-      m_solver = new CFillViewportRegionSolver();
+      CLog::Log(LOGDEBUG, "guilib: Fill viewport always for solving rendering passes");
+      m_solver = new CFillViewportAlwaysRegionSolver();
       break;
   }
 }
index fce3fc4..4726e6a 100644 (file)
 
 #if defined(TARGET_DARWIN_IOS)
 #define DEFAULT_BUFFERING 4
-#elif defined(_WIN32)
-#define DEFAULT_BUFFERING 3
 #else
-#define DEFAULT_BUFFERING 2
+#define DEFAULT_BUFFERING 3
 #endif
 
 class CDirtyRegionTracker
diff --git a/xbmc/guilib/DispResource.h b/xbmc/guilib/DispResource.h
new file mode 100644 (file)
index 0000000..b021500
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+*      Copyright (C) 2005-2008 Team XBMC
+*      http://www.xbmc.org
+*
+*  This Program is free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2, or (at your option)
+*  any later version.
+*
+*  This Program is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+*  GNU General Public License for more details.
+*
+*  You should have received a copy of the GNU General Public License
+*  along with XBMC; see the file COPYING.  If not, write to
+*  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+*  http://www.gnu.org/copyleft/gpl.html
+*
+*/
+
+#pragma once
+
+#if defined(HAS_GLX) || defined(TARGET_DARWIN_OSX)
+class IDispResource
+{
+public:
+  virtual ~IDispResource() {};
+  virtual void OnLostDevice() {};
+  virtual void OnResetDevice() {};
+};
+
+#endif
index da6345f..23beb9f 100644 (file)
@@ -32,6 +32,12 @@ CGUIAction::CGUIAction()
   m_sendThreadMessages = false;
 }
 
+CGUIAction::CGUIAction(int controlID)
+{
+  m_sendThreadMessages = false;
+  SetNavigation(controlID);
+}
+
 bool CGUIAction::Execute(int controlID, int parentID, int direction /*= 0*/) const
 {
   if (m_actions.size() == 0) return false;
@@ -105,7 +111,7 @@ bool CGUIAction::HasActionsMeetingCondition() const
 {
   for (ciActions it = m_actions.begin() ; it != m_actions.end() ; it++)
   {
-    if (it->condition.IsEmpty() || g_infoManager.EvaluateBool(it->action))
+    if (it->condition.IsEmpty() || g_infoManager.EvaluateBool(it->condition))
       return true;
   }
   return false;
index 19c5f32..0a7a6d7 100644 (file)
@@ -32,6 +32,7 @@ class CGUIAction
 {
 public:
   CGUIAction();
+  CGUIAction(int controlID);
 
   /**
    * Execute actions, if action is paired with condition - evaluate condition first
index c3c1f66..a721409 100644 (file)
@@ -24,6 +24,7 @@
 #include "Key.h"
 #include "AudioContext.h"
 #include "GUISound.h"
+#include "settings/Settings.h"
 #include "settings/GUISettings.h"
 #include "input/ButtonTranslator.h"
 #include "threads/SingleLock.h"
@@ -71,8 +72,11 @@ void CGUIAudioManager::Initialize(int iDevice)
     m_bInitialized = true;
 #elif defined(HAS_SDL_AUDIO)
     Mix_CloseAudio();
-    if (Mix_OpenAudio(44100, AUDIO_S16, 2, 4096))
-       CLog::Log(LOGERROR, "Unable to open audio mixer");
+    if (Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 4096))
+      CLog::Log(LOGERROR, "Unable to open audio mixer");
+    else
+      Mix_Volume(0, (int)(128.f * (g_settings.m_nVolumeLevel - VOLUME_MINIMUM) / (float)(VOLUME_MAXIMUM - VOLUME_MINIMUM)));
+    
     m_bInitialized = true;
 #endif
   }
index f0c428f..6df37fc 100644 (file)
@@ -813,23 +813,25 @@ void CGUIBaseContainer::UpdateVisibility(const CGUIListItem *item)
 {
   CGUIControl::UpdateVisibility(item);
 
-  if (!IsVisible())
-    return; // no need to update the content if we're not visible
+  if (!IsVisible() && !CGUIControl::CanFocus())
+    return; // no need to update the content if we're not visible and we can't focus
 
   // check whether we need to update our layouts
   if ((m_layout && !m_layout->CheckCondition()) ||
       (m_focusedLayout && !m_focusedLayout->CheckCondition()))
   {
     // and do it
-    int item = GetSelectedItem();
+    int itemIndex = GetSelectedItem();
     UpdateLayout(true); // true to refresh all items
-    SelectItem(item);
+    SelectItem(itemIndex);
   }
 
   if (m_staticContent)
   { // update our item list with our new content, but only add those items that should
     // be visible.  Save the previous item and keep it if we are adding that one.
     CGUIListItem *lastItem = m_lastItem;
+    int selected = GetSelectedItem();
+    CGUIListItem* selectedItem = (selected >= 0 && (unsigned int)selected < m_items.size()) ? m_items[selected].get() : NULL;
     Reset();
     bool updateItems = false;
     if (!m_staticUpdateTime)
@@ -841,18 +843,21 @@ void CGUIBaseContainer::UpdateVisibility(const CGUIListItem *item)
     }
     for (unsigned int i = 0; i < m_staticItems.size(); ++i)
     {
-      CGUIStaticItemPtr item = boost::static_pointer_cast<CGUIStaticItem>(m_staticItems[i]);
-      if (item->UpdateVisibility(GetParentID()))
+      CGUIStaticItemPtr staticItem = boost::static_pointer_cast<CGUIStaticItem>(m_staticItems[i]);
+      if (staticItem->UpdateVisibility(GetParentID()))
         MarkDirtyRegion();
-      if (item->IsVisible())
+      if (staticItem->IsVisible())
       {
-        m_items.push_back(item);
-        if (item.get() == lastItem)
+        m_items.push_back(staticItem);
+        if (staticItem.get() == lastItem)
           m_lastItem = lastItem;
+        // if item is selected and it changed position, re-select it
+        if (staticItem.get() == selectedItem && selected != (int)m_items.size() - 1)
+          SelectItem(m_items.size() - 1);
       }
       // update any properties
       if (updateItems)
-        item->UpdateProperties(GetParentID());
+        staticItem->UpdateProperties(GetParentID());
     }
     UpdateScrollByLetter();
   }
@@ -871,7 +876,7 @@ void CGUIBaseContainer::CalculateLayout()
   if (oldLayout == m_layout && oldFocusedLayout == m_focusedLayout)
     return; // nothing has changed, so don't update stuff
 
-  m_itemsPerPage = (int)((Size() - m_focusedLayout->Size(m_orientation)) / m_layout->Size(m_orientation)) + 1;
+  m_itemsPerPage = std::max((int)((Size() - m_focusedLayout->Size(m_orientation)) / m_layout->Size(m_orientation)) + 1, 1);
 
   // ensure that the scroll offset is a multiple of our size
   m_scroller.SetValue(GetOffset() * m_layout->Size(m_orientation));
index 7c60bd3..5b7a33a 100644 (file)
@@ -213,13 +213,13 @@ void CGUIButtonControl::SetInvalid()
 
 void CGUIButtonControl::SetLabel(const string &label)
 { // NOTE: No fallback for buttons at this point
-  m_info.SetLabel(label, "");
+  m_info.SetLabel(label, "", GetParentID());
   SetInvalid();
 }
 
 void CGUIButtonControl::SetLabel2(const string &label2)
 { // NOTE: No fallback for buttons at this point
-  m_info2.SetLabel(label2, "");
+  m_info2.SetLabel(label2, "", GetParentID());
   SetInvalid();
 }
 
index 996c2c1..6e69c86 100644 (file)
@@ -49,7 +49,7 @@ void CGUIColorManager::Load(const CStdString &colorFile)
 
   // load the global color map if it exists
   TiXmlDocument xmlDoc;
-  if (xmlDoc.LoadFile(PTH_IC("special://xbmc/system/colors.xml")))
+  if (xmlDoc.LoadFile(CSpecialProtocol::TranslatePathConvertCase("special://xbmc/system/colors.xml")))
     LoadXML(xmlDoc);
 
   // first load the default color map if it exists
@@ -57,7 +57,7 @@ void CGUIColorManager::Load(const CStdString &colorFile)
   URIUtils::AddFileToFolder(g_SkinInfo->Path(), "colors", basePath);
   URIUtils::AddFileToFolder(basePath, "defaults.xml", path);
 
-  if (xmlDoc.LoadFile(PTH_IC(path)))
+  if (xmlDoc.LoadFile(CSpecialProtocol::TranslatePathConvertCase(path)))
     LoadXML(xmlDoc);
 
   // now the color map requested
index 981e891..c5e329e 100644 (file)
@@ -478,6 +478,33 @@ void CGUIControl::SetNavigationActions(const CGUIAction &up, const CGUIAction &d
   if (!m_actionBack.HasAnyActions()  || replace) m_actionBack  = back;
 }
 
+void CGUIControl::SetNavigationAction(int direction, const CGUIAction &action, bool replace /*= true*/)
+{
+  switch (direction)
+  {
+  case ACTION_MOVE_UP:
+    if (!m_actionUp.HasAnyActions() || replace)
+      m_actionUp = action;
+    break;
+  case ACTION_MOVE_DOWN:
+    if (!m_actionDown.HasAnyActions() || replace)
+      m_actionDown = action;
+    break;
+  case ACTION_MOVE_LEFT:
+    if (!m_actionLeft.HasAnyActions() || replace)
+      m_actionLeft = action;
+    break;
+  case ACTION_MOVE_RIGHT:
+    if (!m_actionRight.HasAnyActions() || replace)
+      m_actionRight = action;
+    break;
+  case ACTION_NAV_BACK:
+    if (!m_actionBack.HasAnyActions() || replace)
+      m_actionBack = action;
+    break;
+  }
+}
+
 void CGUIControl::SetWidth(float width)
 {
   if (m_width != width)
index e18a04e..72f4189 100644 (file)
@@ -193,6 +193,7 @@ public:
   virtual void SetNavigationActions(const CGUIAction &up, const CGUIAction &down,
                                     const CGUIAction &left, const CGUIAction &right,
                                     const CGUIAction &back, bool replace = true);
+  void SetNavigationAction(int direction, const CGUIAction &action, bool replace = true);
   int GetControlIdUp() const { return m_actionUp.GetNavigation(); };
   int GetControlIdDown() const { return  m_actionDown.GetNavigation(); };
   int GetControlIdLeft() const { return m_actionLeft.GetNavigation(); };
index 6853b93..5f00ad2 100644 (file)
@@ -230,11 +230,11 @@ bool CGUIControlFactory::GetAspectRatio(const TiXmlNode* pRootNode, const char*
   return true;
 }
 
-bool CGUIControlFactory::GetInfoTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image, CGUIInfoLabel &info)
+bool CGUIControlFactory::GetInfoTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image, CGUIInfoLabel &info, int parentID)
 {
   GetTexture(pRootNode, strTag, image);
   image.filename = "";
-  GetInfoLabel(pRootNode, strTag, info);
+  GetInfoLabel(pRootNode, strTag, info, parentID);
   return true;
 }
 
@@ -446,26 +446,26 @@ bool CGUIControlFactory::GetColor(const TiXmlNode *control, const char *strTag,
   return false;
 }
 
-bool CGUIControlFactory::GetInfoColor(const TiXmlNode *control, const char *strTag, CGUIInfoColor &value)
+bool CGUIControlFactory::GetInfoColor(const TiXmlNode *control, const char *strTag, CGUIInfoColor &value,int parentID)
 {
   const TiXmlElement* node = control->FirstChildElement(strTag);
   if (node && node->FirstChild())
   {
-    value.Parse(node->FirstChild()->Value());
+    value.Parse(node->FirstChild()->Value(), parentID);
     return true;
   }
   return false;
 }
 
-void CGUIControlFactory::GetInfoLabel(const TiXmlNode *pControlNode, const CStdString &labelTag, CGUIInfoLabel &infoLabel)
+void CGUIControlFactory::GetInfoLabel(const TiXmlNode *pControlNode, const CStdString &labelTag, CGUIInfoLabel &infoLabel, int parentID)
 {
   vector<CGUIInfoLabel> labels;
-  GetInfoLabels(pControlNode, labelTag, labels);
+  GetInfoLabels(pControlNode, labelTag, labels, parentID);
   if (labels.size())
     infoLabel = labels[0];
 }
 
-bool CGUIControlFactory::GetInfoLabelFromElement(const TiXmlElement *element, CGUIInfoLabel &infoLabel)
+bool CGUIControlFactory::GetInfoLabelFromElement(const TiXmlElement *element, CGUIInfoLabel &infoLabel, int parentID)
 {
   if (!element || !element->FirstChild())
     return false;
@@ -483,11 +483,11 @@ bool CGUIControlFactory::GetInfoLabelFromElement(const TiXmlElement *element, CG
     fallback = g_localizeStrings.Get(atoi(fallback));
   else
     g_charsetConverter.unknownToUTF8(fallback);
-  infoLabel.SetLabel(label, fallback);
+  infoLabel.SetLabel(label, fallback, parentID);
   return true;
 }
 
-void CGUIControlFactory::GetInfoLabels(const TiXmlNode *pControlNode, const CStdString &labelTag, vector<CGUIInfoLabel> &infoLabels)
+void CGUIControlFactory::GetInfoLabels(const TiXmlNode *pControlNode, const CStdString &labelTag, vector<CGUIInfoLabel> &infoLabels, int parentID)
 {
   // we can have the following infolabels:
   // 1.  <number>1234</number> -> direct number
@@ -506,7 +506,7 @@ void CGUIControlFactory::GetInfoLabels(const TiXmlNode *pControlNode, const CStd
   while (labelNode)
   {
     CGUIInfoLabel label;
-    if (GetInfoLabelFromElement(labelNode, label))
+    if (GetInfoLabelFromElement(labelNode, label, parentID))
       infoLabels.push_back(label);
     labelNode = labelNode->NextSiblingElement(labelTag);
   }
@@ -523,7 +523,7 @@ void CGUIControlFactory::GetInfoLabels(const TiXmlNode *pControlNode, const CStd
       {
         CStdString info;
         info.Format("$INFO[%s]", infoNode->FirstChild()->Value());
-        infoLabels.push_back(CGUIInfoLabel(info, fallback));
+        infoLabels.push_back(CGUIInfoLabel(info, fallback, parentID));
       }
       infoNode = infoNode->NextSibling("info");
     }
@@ -721,12 +721,12 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
   hitRect.SetRect(posX, posY, posX + width, posY + height);
   GetHitRect(pControlNode, hitRect);
 
-  if (!GetActions(pControlNode, "onup",    upActions))    upActions.SetNavigation(id);
-  if (!GetActions(pControlNode, "ondown",  downActions))  downActions.SetNavigation(id);
-  if (!GetActions(pControlNode, "onleft",  leftActions))  leftActions.SetNavigation(id);
-  if (!GetActions(pControlNode, "onright", rightActions)) rightActions.SetNavigation(id);
-  if (!GetActions(pControlNode, "onnext",  nextActions))  nextActions.SetNavigation(id);
-  if (!GetActions(pControlNode, "onprev",  prevActions))  prevActions.SetNavigation(id);
+  GetActions(pControlNode, "onup",    upActions);
+  GetActions(pControlNode, "ondown",  downActions);
+  GetActions(pControlNode, "onleft",  leftActions);
+  GetActions(pControlNode, "onright", rightActions);
+  GetActions(pControlNode, "onnext",  nextActions);
+  GetActions(pControlNode, "onprev",  prevActions);
   GetActions(pControlNode, "onback",  backActions);
 
   if (XMLUtils::GetInt(pControlNode, "defaultcontrol", defaultControl))
@@ -737,7 +737,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
   }
   XMLUtils::GetInt(pControlNode, "pagecontrol", pageControl);
 
-  GetInfoColor(pControlNode, "colordiffuse", colorDiffuse);
+  GetInfoColor(pControlNode, "colordiffuse", colorDiffuse, parentID);
 
   GetConditionalVisibility(pControlNode, visibleCondition, allowHiddenFocus);
   XMLUtils::GetString(pControlNode, "enable", enableCondition);
@@ -745,11 +745,11 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
   CRect animRect(posX, posY, posX + width, posY + height);
   GetAnimations(pControlNode, animRect, parentID, animations);
 
-  GetInfoColor(pControlNode, "textcolor", labelInfo.textColor);
-  GetInfoColor(pControlNode, "focusedcolor", labelInfo.focusedColor);
-  GetInfoColor(pControlNode, "disabledcolor", labelInfo.disabledColor);
-  GetInfoColor(pControlNode, "shadowcolor", labelInfo.shadowColor);
-  GetInfoColor(pControlNode, "selectedcolor", labelInfo.selectedColor);
+  GetInfoColor(pControlNode, "textcolor", labelInfo.textColor, parentID);
+  GetInfoColor(pControlNode, "focusedcolor", labelInfo.focusedColor, parentID);
+  GetInfoColor(pControlNode, "disabledcolor", labelInfo.disabledColor, parentID);
+  GetInfoColor(pControlNode, "shadowcolor", labelInfo.shadowColor, parentID);
+  GetInfoColor(pControlNode, "selectedcolor", labelInfo.selectedColor, parentID);
   XMLUtils::GetFloat(pControlNode, "textoffsetx", labelInfo.offsetX);
   XMLUtils::GetFloat(pControlNode, "textoffsety", labelInfo.offsetY);
   int angle = 0;  // use the negative angle to compensate for our vertically flipped cartesian plane
@@ -795,7 +795,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
   GetTexture(pControlNode, "textureleftfocus", textureLeftFocus);
   GetTexture(pControlNode, "texturerightfocus", textureRightFocus);
 
-  GetInfoColor(pControlNode, "spincolor", spinInfo.textColor);
+  GetInfoColor(pControlNode, "spincolor", spinInfo.textColor, parentID);
   if (XMLUtils::GetString(pControlNode, "spinfont", strFont))
     spinInfo.font = g_fontManager.GetFont(strFont);
   if (!spinInfo.font) spinInfo.font = labelInfo.font;
@@ -824,8 +824,8 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
 
   XMLUtils::GetString(pControlNode, "title", strTitle);
   XMLUtils::GetString(pControlNode, "tagset", strRSSTags);
-  GetInfoColor(pControlNode, "headlinecolor", headlineColor);
-  GetInfoColor(pControlNode, "titlecolor", textColor3);
+  GetInfoColor(pControlNode, "headlinecolor", headlineColor, parentID);
+  GetInfoColor(pControlNode, "titlecolor", textColor3, parentID);
 
   if (XMLUtils::GetString(pControlNode, "subtype", strSubType))
   {
@@ -856,7 +856,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
   GetTexture(pControlNode, "overlaytexture", textureOverlay);
 
   // the <texture> tag can be overridden by the <info> tag
-  GetInfoTexture(pControlNode, "texture", texture, textureFile);
+  GetInfoTexture(pControlNode, "texture", texture, textureFile, parentID);
 #ifdef PRE_SKIN_VERSION_9_10_COMPATIBILITY
   if (type == CGUIControl::GUICONTROL_IMAGE && insideContainer && textureFile.IsConstant())
     aspect.ratio = CAspectRatio::AR_STRETCH;
@@ -869,7 +869,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
 
   // fade label can have a whole bunch, but most just have one
   vector<CGUIInfoLabel> infoLabels;
-  GetInfoLabels(pControlNode, "label", infoLabels);
+  GetInfoLabels(pControlNode, "label", infoLabels, parentID);
 
   GetString(pControlNode, "label", strLabel);
   GetString(pControlNode, "altlabel", altLabel);
@@ -889,7 +889,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
   XMLUtils::GetBoolean(pControlNode, "scroll", bScrollLabel);
   XMLUtils::GetBoolean(pControlNode,"pulseonselect", bPulse);
 
-  GetInfoTexture(pControlNode, "imagepath", texture, texturePath);
+  GetInfoTexture(pControlNode, "imagepath", texture, texturePath, parentID);
 
   XMLUtils::GetUInt(pControlNode,"timeperimage", timePerImage);
   XMLUtils::GetUInt(pControlNode,"fadetime", fadeTime);
@@ -1032,7 +1032,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
       labelInfo, strLabel);
 
     CGUIInfoLabel hint_text;
-    GetInfoLabel(pControlNode, "hinttext", hint_text);
+    GetInfoLabel(pControlNode, "hinttext", hint_text, parentID);
     ((CGUIEditControl *) control)->SetHint(hint_text);
 
     if (bPassword)
index 48803bc..4f2bd03 100644 (file)
@@ -74,7 +74,7 @@ public:
    */
   static bool GetDimension(const TiXmlNode* pRootNode, const char* strTag, float &value, float &min);
   static bool GetAspectRatio(const TiXmlNode* pRootNode, const char* strTag, CAspectRatio &aspectRatio);
-  static bool GetInfoTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image, CGUIInfoLabel &info);
+  static bool GetInfoTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image, CGUIInfoLabel &info, int parentID);
   static bool GetTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image);
   static bool GetAlignment(const TiXmlNode* pRootNode, const char* strTag, uint32_t& dwAlignment);
   static bool GetAlignmentY(const TiXmlNode* pRootNode, const char* strTag, uint32_t& dwAlignment);
@@ -90,11 +90,11 @@ public:
    \param infoLabel returned infoLabel
    \return true if a valid info label was read, false otherwise
    */
-  static bool GetInfoLabelFromElement(const TiXmlElement *element, CGUIInfoLabel &infoLabel);
-  static void GetInfoLabel(const TiXmlNode *pControlNode, const CStdString &labelTag, CGUIInfoLabel &infoLabel);
-  static void GetInfoLabels(const TiXmlNode *pControlNode, const CStdString &labelTag, std::vector<CGUIInfoLabel> &infoLabels);
+  static bool GetInfoLabelFromElement(const TiXmlElement *element, CGUIInfoLabel &infoLabel, int parentID);
+  static void GetInfoLabel(const TiXmlNode *pControlNode, const CStdString &labelTag, CGUIInfoLabel &infoLabel, int parentID);
+  static void GetInfoLabels(const TiXmlNode *pControlNode, const CStdString &labelTag, std::vector<CGUIInfoLabel> &infoLabels, int parentID);
   static bool GetColor(const TiXmlNode* pRootNode, const char* strTag, color_t &value);
-  static bool GetInfoColor(const TiXmlNode* pRootNode, const char* strTag, CGUIInfoColor &value);
+  static bool GetInfoColor(const TiXmlNode* pRootNode, const char* strTag, CGUIInfoColor &value, int parentID);
   static CStdString FilterLabel(const CStdString &label);
   static bool GetConditionalVisibility(const TiXmlNode* control, CStdString &condition);
   static bool GetActions(const TiXmlNode* pRootNode, const char* strTag, CGUIAction& actions);
index 050a511..604c5ad 100644 (file)
@@ -262,35 +262,42 @@ void CGUIControlGroupList::AddControl(CGUIControl *control, int position /*= -1*
       if (m_orientation == VERTICAL)
       {
         if (before) // update the DOWN action to point to us
-          before->SetNavigation(before->GetControlIdUp(), control->GetID(), GetControlIdLeft(), GetControlIdRight(), GetControlIdBack());
+          before->SetNavigationAction(ACTION_MOVE_DOWN, CGUIAction(control->GetID()));
         if (after) // update the UP action to point to us
-          after->SetNavigation(control->GetID(), after->GetControlIdDown(), GetControlIdLeft(), GetControlIdRight(), GetControlIdBack());
+          after->SetNavigationAction(ACTION_MOVE_UP, CGUIAction(control->GetID()));
       }
       else
       {
         if (before) // update the RIGHT action to point to us
-          before->SetNavigation(GetControlIdUp(), GetControlIdDown(), before->GetControlIdLeft(), control->GetID(), GetControlIdBack());
+          before->SetNavigationAction(ACTION_MOVE_RIGHT, CGUIAction(control->GetID()));
         if (after) // update the LEFT action to point to us
-          after->SetNavigation(GetControlIdUp(), GetControlIdDown(), control->GetID(), after->GetControlIdRight(), GetControlIdBack());
+          after->SetNavigationAction(ACTION_MOVE_LEFT, CGUIAction(control->GetID()));
       }
     }
     // now the control's nav
-    CGUIAction empty;
+    // set navigation path on orientation axis
+    // and try to apply other nav actions from grouplist
+    // don't override them if child have already defined actions
     if (m_orientation == VERTICAL)
     {
-      control->SetNavigation(beforeID, afterID, GetControlIdLeft(), GetControlIdRight(), GetControlIdBack());
-      control->SetNavigationActions(empty, empty, m_actionLeft, m_actionRight, empty, false);
+      control->SetNavigationAction(ACTION_MOVE_UP, CGUIAction(beforeID));
+      control->SetNavigationAction(ACTION_MOVE_DOWN, CGUIAction(afterID));
+      control->SetNavigationAction(ACTION_MOVE_LEFT, m_actionLeft, false);
+      control->SetNavigationAction(ACTION_MOVE_RIGHT, m_actionRight, false);
     }
     else
     {
-      control->SetNavigation(GetControlIdUp(), GetControlIdDown(), beforeID, afterID, GetControlIdBack());
-      control->SetNavigationActions(m_actionUp, m_actionDown, empty, empty, empty, false);
+      control->SetNavigationAction(ACTION_MOVE_LEFT, CGUIAction(beforeID));
+      control->SetNavigationAction(ACTION_MOVE_RIGHT, CGUIAction(afterID));
+      control->SetNavigationAction(ACTION_MOVE_UP, m_actionUp, false);
+      control->SetNavigationAction(ACTION_MOVE_DOWN, m_actionDown, false);
     }
+    control->SetNavigationAction(ACTION_NAV_BACK, m_actionBack, false);
 
     if (!m_useControlPositions)
       control->SetPosition(0,0);
-    m_totalSize += (m_children.size() > 0 ? m_itemGap : 0) + Size(control);
     CGUIControlGroup::AddControl(control, position);
+    m_totalSize = GetTotalSize();
   }
 }
 
index b610fee..dceba43 100644 (file)
@@ -67,7 +67,7 @@ void CGUIFadeLabelControl::SetInfo(const vector<CGUIInfoLabel> &infoLabels)
 
 void CGUIFadeLabelControl::AddLabel(const string &label)
 {
-  m_infoLabels.push_back(CGUIInfoLabel(label));
+  m_infoLabels.push_back(CGUIInfoLabel(label, "", GetParentID()));
 }
 
 void CGUIFadeLabelControl::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions)
index 383226a..bde4e8e 100644 (file)
@@ -73,6 +73,21 @@ void GUIFontManager::RescaleFontSizeAndAspect(float *size, float *aspect, const
   *size /= g_graphicsContext.GetGUIScaleY();
 }
 
+static bool CheckFont(CStdString& strPath, const CStdString& newPath,
+                      const CStdString& filename)
+{
+  if (!XFILE::CFile::Exists(strPath))
+  {
+    strPath = URIUtils::AddFileToFolder(newPath,filename);
+#ifdef _LINUX
+    strPath = CSpecialProtocol::TranslatePathConvertCase(strPath);
+#endif
+    return false;
+  }
+
+  return true;
+}
+
 CGUIFont* GUIFontManager::LoadTTF(const CStdString& strFontName, const CStdString& strFilename, color_t textColor, color_t shadowColor, const int iSize, const int iStyle, bool border, float lineSpacing, float aspect, const RESOLUTION_INFO *sourceRes, bool preserveAspect)
 {
   float originalAspect = aspect;
@@ -99,17 +114,13 @@ CGUIFont* GUIFontManager::LoadTTF(const CStdString& strFontName, const CStdStrin
     strPath = strFilename;
 
 #ifdef _LINUX
-  strPath = PTH_IC(strPath);
+  strPath = CSpecialProtocol::TranslatePathConvertCase(strPath);
 #endif
 
   // Check if the file exists, otherwise try loading it from the global media dir
-  if (!XFILE::CFile::Exists(strPath))
-  {
-    strPath = URIUtils::AddFileToFolder("special://xbmc/media/Fonts", URIUtils::GetFileName(strFilename));
-#ifdef _LINUX
-    strPath = PTH_IC(strPath);
-#endif
-  }
+  CStdString file = URIUtils::GetFileName(strFilename);
+  if (!CheckFont(strPath,"special://home/media/Fonts",file))
+    CheckFont(strPath,"special://xbmc/media/Fonts",file);
 
   // check if we already have this font file loaded (font object could differ only by color or style)
   CStdString TTFfontName;
@@ -506,7 +517,7 @@ bool GUIFontManager::GetFirstFontSetUnicode(CStdString& strFontSet)
 
     // If no fontset was loaded
     if (pChild == NULL)
-      CLog::Log(LOGWARNING, "file doesnt have <fontset> with with attibute unicode=\"true\"");
+      CLog::Log(LOGWARNING, "file doesnt have <fontset> with attribute unicode=\"true\"");
   }
   else
   {
index 35c36ed..58f7f48 100644 (file)
@@ -82,7 +82,7 @@ public:
     FT_Face face;
 
     // ok, now load the font face
-    if (FT_New_Face( m_library, _P(filename).c_str(), 0, &face ))
+    if (FT_New_Face( m_library, CSpecialProtocol::TranslatePath(filename).c_str(), 0, &face ))
       return NULL;
 
     unsigned int ydpi = GetDPI();
index 5204ef1..1614068 100644 (file)
@@ -302,7 +302,7 @@ void CGUIImage::SetCrossFade(unsigned int time)
 void CGUIImage::SetFileName(const CStdString& strFileName, bool setConstant)
 {
   if (setConstant)
-    m_info.SetLabel(strFileName, "");
+    m_info.SetLabel(strFileName, "", GetParentID());
 
   if (m_crossFadeTime)
   {
index 8cdf3c5..0ca7ce3 100644 (file)
@@ -85,6 +85,7 @@ void CGUIIncludes::ClearIncludes()
   m_includes.clear();
   m_defaults.clear();
   m_constants.clear();
+  m_skinvariables.clear();
   m_files.clear();
 }
 
@@ -153,7 +154,16 @@ bool CGUIIncludes::LoadIncludesFromXML(const TiXmlElement *root)
     node = node->NextSiblingElement("constant");
   }
 
-  INFO::CSkinVariable::LoadFromXML(root);
+  node = root->FirstChildElement("variable");
+  while (node)
+  {
+    if (node->Attribute("name") && node->FirstChild())
+    {
+      CStdString tagName = node->Attribute("name");
+      m_skinvariables.insert(make_pair(tagName, *node));
+    }
+    node = node->NextSiblingElement("variable");
+  }
 
   return true;
 }
@@ -273,3 +283,11 @@ CStdString CGUIIncludes::ResolveConstant(const CStdString &constant) const
   StringUtils::JoinString(values, ",", value);
   return value;
 }
+
+const INFO::CSkinVariableString* CGUIIncludes::CreateSkinVariable(const CStdString& name, int context)
+{
+  map<CStdString, TiXmlElement>::const_iterator it = m_skinvariables.find(name);
+  if (it != m_skinvariables.end())
+    return INFO::CSkinVariable::CreateFromXML(it->second, context);
+  return NULL;
+}
index 7c8ec90..2558908 100644 (file)
 
 // forward definitions
 class TiXmlElement;
+namespace INFO
+{
+  class CSkinVariableString;
+}
 
 class CGUIIncludes
 {
@@ -45,6 +49,7 @@ public:
    \param node an XML Element - all child elements are traversed.
    */
   void ResolveIncludes(TiXmlElement *node);
+  const INFO::CSkinVariableString* CreateSkinVariable(const CStdString& name, int context);
 
 private:
   void ResolveIncludesForNode(TiXmlElement *node);
@@ -52,6 +57,7 @@ private:
   bool HasIncludeFile(const CStdString &includeFile) const;
   std::map<CStdString, TiXmlElement> m_includes;
   std::map<CStdString, TiXmlElement> m_defaults;
+  std::map<CStdString, TiXmlElement> m_skinvariables;
   std::map<CStdString, CStdString> m_constants;
   std::vector<CStdString> m_files;
   typedef std::vector<CStdString>::const_iterator iFiles;
index 0216e23..2d52e96 100644 (file)
@@ -28,6 +28,7 @@
 #include "GUIColorManager.h"
 #include "GUIListItem.h"
 #include "utils/StringUtils.h"
+#include "addons/Skin.h"
 
 using namespace std;
 using ADDON::CAddonMgr;
@@ -99,13 +100,22 @@ bool CGUIInfoColor::Update()
     return false;
 }
 
-void CGUIInfoColor::Parse(const CStdString &label)
+void CGUIInfoColor::Parse(const CStdString &label, int context)
 {
   // Check for the standard $INFO[] block layout, and strip it if present
   CStdString label2 = label;
   if (label.Equals("-", false))
     return;
 
+  if (label.Left(4).Equals("$VAR", false))
+  {
+    label2 = label.Mid(5, label.length() - 6);
+    m_info = g_infoManager.TranslateSkinVariableString(label2, context);
+    if (!m_info)
+      m_info = g_infoManager.RegisterSkinVariableString(g_SkinInfo->CreateSkinVariable(label2, context));
+    return;
+  }
+
   if (label.Left(5).Equals("$INFO", false))
     label2 = label.Mid(6, label.length()-7);
 
@@ -118,15 +128,15 @@ CGUIInfoLabel::CGUIInfoLabel()
 {
 }
 
-CGUIInfoLabel::CGUIInfoLabel(const CStdString &label, const CStdString &fallback)
+CGUIInfoLabel::CGUIInfoLabel(const CStdString &label, const CStdString &fallback, int context)
 {
-  SetLabel(label, fallback);
+  SetLabel(label, fallback, context);
 }
 
-void CGUIInfoLabel::SetLabel(const CStdString &label, const CStdString &fallback)
+void CGUIInfoLabel::SetLabel(const CStdString &label, const CStdString &fallback, int context)
 {
   m_fallback = fallback;
-  Parse(label);
+  Parse(label, context);
 }
 
 CStdString CGUIInfoLabel::GetLabel(int contextWindow, bool preferImage) const
@@ -260,7 +270,7 @@ const static infoformat infoformatmap[] = {{ "$INFO[",    FORMATINFO },
                                            { "$ESCINFO[", FORMATESCINFO},
                                            { "$VAR[",     FORMATVAR}};
 
-void CGUIInfoLabel::Parse(const CStdString &label)
+void CGUIInfoLabel::Parse(const CStdString &label, int context)
 {
   m_info.clear();
   // Step 1: Replace all $LOCALIZE[number] with the real string
@@ -301,12 +311,11 @@ void CGUIInfoLabel::Parse(const CStdString &label)
         int info;
         if (format == FORMATVAR)
         {
-          info = g_infoManager.TranslateSkinVariableString(params[0]);
+          info = g_infoManager.TranslateSkinVariableString(params[0], context);
           if (info == 0)
-          {
-            // we didn't register this conditional label yet!
-            CLog::Log(LOGWARNING, "Label Formating: $VAR[%s] is not yet defined", params[0].c_str());
-          }
+            info = g_infoManager.RegisterSkinVariableString(g_SkinInfo->CreateSkinVariable(params[0], context));
+          if (info == 0) // skinner didn't define this conditional label!
+            CLog::Log(LOGWARNING, "Label Formating: $VAR[%s] is not defined", params[0].c_str());
         }
         else
           info = g_infoManager.TranslateString(params[0]);
@@ -358,6 +367,6 @@ CStdString CGUIInfoLabel::CInfoPortion::GetLabel(const CStdString &info) const
 
 CStdString CGUIInfoLabel::GetLabel(const CStdString &label, int contextWindow, bool preferImage)
 { // translate the label
-  CGUIInfoLabel info(label, "");
+  CGUIInfoLabel info(label, "", contextWindow);
   return info.GetLabel(contextWindow, preferImage);
 }
index 3734631..27f3ecc 100644 (file)
@@ -60,7 +60,7 @@ public:
   operator color_t() const { return m_color; };
 
   bool Update();
-  void Parse(const CStdString &label);
+  void Parse(const CStdString &label, int context);
 
 private:
   color_t GetColor() const;
@@ -72,9 +72,9 @@ class CGUIInfoLabel
 {
 public:
   CGUIInfoLabel();
-  CGUIInfoLabel(const CStdString &label, const CStdString &fallback = "");
+  CGUIInfoLabel(const CStdString &label, const CStdString &fallback = "", int context = 0);
 
-  void SetLabel(const CStdString &label, const CStdString &fallback);
+  void SetLabel(const CStdString &label, const CStdString &fallback, int context = 0);
   CStdString GetLabel(int contextWindow, bool preferImage = false) const;
   CStdString GetItemLabel(const CGUIListItem *item, bool preferImage = false) const;
   bool IsConstant() const;
@@ -99,7 +99,7 @@ public:
   static CStdString ReplaceAddonStrings(const CStdString &label);
 
 private:
-  void Parse(const CStdString &label);
+  void Parse(const CStdString &label, int context);
 
   class CInfoPortion
   {
index af7e39f..f78c8a9 100644 (file)
@@ -142,7 +142,7 @@ bool CGUILabelControl::CanFocus() const
 
 void CGUILabelControl::SetLabel(const string &strLabel)
 {
-  m_infoLabel.SetLabel(strLabel, "");
+  m_infoLabel.SetLabel(strLabel, "", GetParentID());
   if (m_iCursorPos > (int)strLabel.size())
     m_iCursorPos = strLabel.size();
 
index 1efe123..2f9d725 100644 (file)
@@ -189,14 +189,14 @@ void CGUIListItemLayout::CreateListControlLayouts(float width, float height, boo
     m_group.AddControl(tex);
   }
   CGUIImage *image = new CGUIImage(0, 0, 8, 0, iconWidth, texHeight, CTextureInfo(""));
-  image->SetInfo(CGUIInfoLabel("$INFO[ListItem.Icon]"));
+  image->SetInfo(CGUIInfoLabel("$INFO[ListItem.Icon]", "", m_group.GetParentID()));
   image->SetAspectRatio(CAspectRatio::AR_KEEP);
   m_group.AddControl(image);
   float x = iconWidth + labelInfo.offsetX + 10;
-  CGUIListLabel *label = new CGUIListLabel(0, 0, x, labelInfo.offsetY, width - x - 18, height, labelInfo, CGUIInfoLabel("$INFO[ListItem.Label]"), false);
+  CGUIListLabel *label = new CGUIListLabel(0, 0, x, labelInfo.offsetY, width - x - 18, height, labelInfo, CGUIInfoLabel("$INFO[ListItem.Label]", "", m_group.GetParentID()), false);
   m_group.AddControl(label);
   x = labelInfo2.offsetX ? labelInfo2.offsetX : m_width - 16;
-  label = new CGUIListLabel(0, 0, x, labelInfo2.offsetY, x - iconWidth - 20, height, labelInfo2, CGUIInfoLabel("$INFO[ListItem.Label2]"), false);
+  label = new CGUIListLabel(0, 0, x, labelInfo2.offsetY, x - iconWidth - 20, height, labelInfo2, CGUIInfoLabel("$INFO[ListItem.Label2]", "", m_group.GetParentID()), false);
   m_group.AddControl(label);
 }
 //#endif
index a3ef506..9018f12 100644 (file)
  */
 #define GUI_MSG_GESTURE_NOTIFY  38
 
+/*!
+ \brief A request to add a control
+ */
+#define GUI_MSG_ADD_CONTROL     39
+
+/*!
+ \brief A request to remove a control
+ */
+#define GUI_MSG_REMOVE_CONTROL  40
+
 #define GUI_MSG_USER         1000
 
 /*!
index 92544dd..c9ade8d 100644 (file)
@@ -309,7 +309,7 @@ void CGUIProgressControl::UpdateInfo(const CGUIListItem *item)
     {
       int value;
       if (g_infoManager.GetInt(value, m_iInfoCode, m_parentID, item))
-        m_fPercent = value;
+        m_fPercent = (float)value;
 
       if (m_fPercent < 0.0f) m_fPercent = 0.0f;
       if (m_fPercent > 100.0f) m_fPercent = 100.0f;
index c169611..a384480 100644 (file)
@@ -23,7 +23,6 @@
 #include "GUIUserMessages.h"
 #include "addons/Visualisation.h"
 #include "threads/SingleLock.h"
-#include "utils/GLUtils.h"
 
 using namespace std;
 using namespace ADDON;
@@ -67,7 +66,6 @@ void CGUIRenderingControl::LoadAddon(const AddonPtr &addon)
   }
 
   g_graphicsContext.ApplyStateBlock();
-  VerifyGLState();
 }
 
 void CGUIRenderingControl::UpdateVisibility(const CGUIListItem *item)
index 7548516..bd362f2 100644 (file)
@@ -36,29 +36,42 @@ CGUISettingsSliderControl::~CGUISettingsSliderControl(void)
 
 void CGUISettingsSliderControl::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions)
 {
-  m_buttonControl.Process(currentTime, dirtyregions);
+  if (m_bInvalidated)
+  {
+    float sliderPosX = m_buttonControl.GetXPosition() + m_buttonControl.GetWidth() - m_width - m_buttonControl.GetLabelInfo().offsetX;
+    float sliderPosY = m_buttonControl.GetYPosition() + (m_buttonControl.GetHeight() - m_height) * 0.5f;
+    CGUISliderControl::SetPosition(sliderPosX, sliderPosY);
+  }
+  m_buttonControl.SetFocus(HasFocus());
+  m_buttonControl.SetPulseOnSelect(m_pulseOnSelect);
+  m_buttonControl.SetEnabled(m_enabled);
+  m_buttonControl.DoProcess(currentTime, dirtyregions);
+  ProcessText();
   CGUISliderControl::Process(currentTime, dirtyregions);
 }
 
 void CGUISettingsSliderControl::Render()
 {
-  // make sure the button has focus if it should have...
-  m_buttonControl.SetFocus(HasFocus());
-  m_buttonControl.SetPulseOnSelect(m_pulseOnSelect);
-  m_buttonControl.SetEnabled(m_enabled);
   m_buttonControl.Render();
   CGUISliderControl::Render();
+  m_label.Render();
+}
 
-  // now render our text
-  m_label.SetMaxRect(m_buttonControl.GetXPosition(), m_posY, m_posX - m_buttonControl.GetXPosition(), m_height);
-  m_label.SetText(CGUISliderControl::GetDescription());
+void CGUISettingsSliderControl::ProcessText()
+{
+  bool changed = false;
+
+  changed |= m_label.SetMaxRect(m_buttonControl.GetXPosition(), m_posY, m_posX - m_buttonControl.GetXPosition(), m_height);
+  changed |= m_label.SetText(CGUISliderControl::GetDescription());
   if (IsDisabled())
-    m_label.SetColor(CGUILabel::COLOR_DISABLED);
+    changed |= m_label.SetColor(CGUILabel::COLOR_DISABLED);
   else if (HasFocus())
-    m_label.SetColor(CGUILabel::COLOR_FOCUSED);
+    changed |= m_label.SetColor(CGUILabel::COLOR_FOCUSED);
   else
-    m_label.SetColor(CGUILabel::COLOR_TEXT);
-  m_label.Render();
+    changed |= m_label.SetColor(CGUILabel::COLOR_TEXT);
+
+  if (changed)
+    MarkDirtyRegion();
 }
 
 bool CGUISettingsSliderControl::OnAction(const CAction &action)
@@ -93,21 +106,19 @@ void CGUISettingsSliderControl::SetInvalid()
 void CGUISettingsSliderControl::SetPosition(float posX, float posY)
 {
   m_buttonControl.SetPosition(posX, posY);
-  float sliderPosX = posX + m_buttonControl.GetWidth() - m_width - m_buttonControl.GetLabelInfo().offsetX;
-  float sliderPosY = posY + (m_buttonControl.GetHeight() - m_height) * 0.5f;
-  CGUISliderControl::SetPosition(sliderPosX, sliderPosY);
+  CGUISliderControl::SetInvalid();
 }
 
 void CGUISettingsSliderControl::SetWidth(float width)
 {
   m_buttonControl.SetWidth(width);
-  SetPosition(GetXPosition(), GetYPosition());
+  CGUISliderControl::SetInvalid();
 }
 
 void CGUISettingsSliderControl::SetHeight(float height)
 {
   m_buttonControl.SetHeight(height);
-  SetPosition(GetXPosition(), GetYPosition());
+  CGUISliderControl::SetInvalid();
 }
 
 void CGUISettingsSliderControl::SetEnabled(bool bEnable)
index e781d12..5353e3e 100644 (file)
@@ -70,7 +70,8 @@ public:
 
 protected:
   virtual bool UpdateColors();
-  
+  virtual void ProcessText();
+
 private:
   CGUIButtonControl m_buttonControl;
   CGUILabel m_label;
index 8ad0063..bd70e5a 100644 (file)
@@ -22,9 +22,7 @@
 
 #include "system.h"
 
-#pragma message("msg1")
 #if HAS_GLES == 2
-#pragma message("msg2")
 
 #include "GUIShader.h"
 #include "MatrixGLES.h"
index 7e954bf..316792b 100644 (file)
@@ -80,7 +80,7 @@ bool CGUISound::Load(const CStdString& strFile)
 
   return bReady;
 #elif defined(HAS_SDL_AUDIO)
-  m_soundBuffer = Mix_LoadWAV(_P(strFile));
+  m_soundBuffer = Mix_LoadWAV(CSpecialProtocol::TranslatePath(strFile));
   if (!m_soundBuffer)
     return false;
 
index c5405ac..42d07f9 100644 (file)
@@ -69,9 +69,12 @@ void CGUISpinControlEx::Process(unsigned int currentTime, CDirtyRegionList &dirt
   m_buttonControl.SetPulseOnSelect(m_pulseOnSelect);
   m_buttonControl.SetEnabled(m_enabled);
   if (m_bInvalidated)
-    SetPosition(GetXPosition(), GetYPosition());
-
-  m_buttonControl.Process(currentTime, dirtyregions);
+  {
+    float spinPosX = m_buttonControl.GetXPosition() + m_buttonControl.GetWidth() - GetSpinWidth() * 2 - (m_spinPosX ? m_spinPosX : m_buttonControl.GetLabelInfo().offsetX);
+    float spinPosY = m_buttonControl.GetYPosition() + (m_buttonControl.GetHeight() - GetSpinHeight()) * 0.5f;
+    CGUISpinControl::SetPosition(spinPosX, spinPosY);
+  }
+  m_buttonControl.DoProcess(currentTime, dirtyregions);
   CGUISpinControl::Process(currentTime, dirtyregions);
 }
 
@@ -84,21 +87,19 @@ void CGUISpinControlEx::Render()
 void CGUISpinControlEx::SetPosition(float posX, float posY)
 {
   m_buttonControl.SetPosition(posX, posY);
-  float spinPosX = posX + m_buttonControl.GetWidth() - GetSpinWidth() * 2 - (m_spinPosX ? m_spinPosX : m_buttonControl.GetLabelInfo().offsetX);
-  float spinPosY = posY + (m_buttonControl.GetHeight() - GetSpinHeight()) * 0.5f;
-  CGUISpinControl::SetPosition(spinPosX, spinPosY);
+  CGUISpinControl::SetInvalid();
 }
 
 void CGUISpinControlEx::SetWidth(float width)
 {
   m_buttonControl.SetWidth(width);
-  SetPosition(m_buttonControl.GetXPosition(), m_buttonControl.GetYPosition());
+  CGUISpinControl::SetInvalid();
 }
 
 void CGUISpinControlEx::SetHeight(float height)
 {
   m_buttonControl.SetHeight(height);
-  SetPosition(m_buttonControl.GetXPosition(), m_buttonControl.GetYPosition());
+  CGUISpinControl::SetInvalid();
 }
 
 bool CGUISpinControlEx::UpdateColors()
index 8c318b8..0138af2 100644 (file)
@@ -39,10 +39,10 @@ CGUIStaticItem::CGUIStaticItem(const TiXmlElement *item, int parentID) : CFileIt
   if (click && click->FirstChild())
   {
     CGUIInfoLabel label, label2, thumb, icon;
-    CGUIControlFactory::GetInfoLabel(item, "label", label);
-    CGUIControlFactory::GetInfoLabel(item, "label2", label2);
-    CGUIControlFactory::GetInfoLabel(item, "thumb", thumb);
-    CGUIControlFactory::GetInfoLabel(item, "icon", icon);
+    CGUIControlFactory::GetInfoLabel(item, "label", label, parentID);
+    CGUIControlFactory::GetInfoLabel(item, "label2", label2, parentID);
+    CGUIControlFactory::GetInfoLabel(item, "thumb", thumb, parentID);
+    CGUIControlFactory::GetInfoLabel(item, "icon", icon, parentID);
     const char *id = item->Attribute("id");
     CStdString condition;
     CGUIControlFactory::GetConditionalVisibility(item, condition);
@@ -63,7 +63,7 @@ CGUIStaticItem::CGUIStaticItem(const TiXmlElement *item, int parentID) : CFileIt
     {
       CStdString name = property->Attribute("name");
       CGUIInfoLabel prop;
-      if (!name.IsEmpty() && CGUIControlFactory::GetInfoLabelFromElement(property, prop))
+      if (!name.IsEmpty() && CGUIControlFactory::GetInfoLabelFromElement(property, prop, parentID))
       {
         SetProperty(name, prop.GetLabel(parentID, true).c_str());
         if (!prop.IsConstant())
index 66fc49c..37a9216 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #include "GUIInfoTypes.h"
-#include "../xbmc/FileItem.h"
+#include "xbmc/FileItem.h"
 #include "GUIAction.h"
 
 class TiXmlElement;
index 81c0367..3e8c77c 100644 (file)
@@ -244,7 +244,7 @@ bool CGUITextBox::OnMessage(CGUIMessage& message)
       m_scrollOffset = 0;
       ResetAutoScrolling();
       CGUITextLayout::Reset();
-      m_info.SetLabel(message.GetLabel(), "");
+      m_info.SetLabel(message.GetLabel(), "", GetParentID());
     }
 
     if (message.GetMessage() == GUI_MSG_LABEL_RESET)
index 370a931..6686b1d 100644 (file)
@@ -58,7 +58,7 @@ void CGUIToggleButtonControl::Process(unsigned int currentTime, CDirtyRegionList
     m_selectButton.SetVisible(IsVisible());
     m_selectButton.SetEnabled(!IsDisabled());
     m_selectButton.SetPulseOnSelect(m_pulseOnSelect);
-    m_selectButton.Process(currentTime, dirtyregions);
+    m_selectButton.DoProcess(currentTime, dirtyregions);
   }
   CGUIButtonControl::Process(currentTime, dirtyregions);
 }
index 686f191..85789f3 100644 (file)
@@ -91,7 +91,7 @@ bool CGUIVisualisationControl::OnAction(const CAction &action)
   }
 }
 
-void CGUIVisualisationControl::Render()
+void CGUIVisualisationControl::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions)
 {
   if (g_application.IsPlayingAudio())
   {
@@ -107,7 +107,7 @@ void CGUIVisualisationControl::Render()
       m_bAttemptedLoad = true;
     }
   }
-  CGUIRenderingControl::Render();
+  CGUIRenderingControl::Process(currentTime, dirtyregions);
 }
 
 void CGUIVisualisationControl::FreeResources(bool immediately)
index 3d355a1..cb6fdae 100644 (file)
@@ -29,7 +29,7 @@ public:
   CGUIVisualisationControl(const CGUIVisualisationControl &from);
   virtual CGUIVisualisationControl *Clone() const { return new CGUIVisualisationControl(*this); }; //TODO check for naughties
   virtual void FreeResources(bool immediately = false);
-  virtual void Render();
+  virtual void Process(unsigned int currentTime, CDirtyRegionList &dirtyregions);
   virtual bool OnAction(const CAction &action);
   virtual bool OnMessage(CGUIMessage &message);
 private:
index f08b065..c3dad9a 100644 (file)
@@ -143,7 +143,7 @@ bool CGUIWindow::Load(TiXmlDocument &xmlDoc)
   // now load in the skin file
   SetDefaults();
 
-  CGUIControlFactory::GetInfoColor(pRootElement, "backgroundcolor", m_clearBackground);
+  CGUIControlFactory::GetInfoColor(pRootElement, "backgroundcolor", m_clearBackground, GetID());
   CGUIControlFactory::GetActions(pRootElement, "onload", m_loadActions);
   CGUIControlFactory::GetActions(pRootElement, "onunload", m_unloadActions);
   CGUIControlFactory::GetHitRect(pRootElement, m_hitRect);
@@ -354,9 +354,9 @@ void CGUIWindow::Close_Internal(bool forceClose /*= false*/, int nextWindowID /*
     return;
   }
 
+  m_closing = false;
   CGUIMessage msg(GUI_MSG_WINDOW_DEINIT, 0, 0);
   OnMessage(msg);
-  m_closing = false;
 }
 
 void CGUIWindow::Close(bool forceClose /*= false*/, int nextWindowID /*= 0*/, bool enableSound /*= true*/)
@@ -482,7 +482,6 @@ void CGUIWindow::OnInitWindow()
 }
 
 // Called on window close.
-//  * Executes the window close animation(s)
 //  * Saves control state(s)
 // Override this function and call the base class before doing any dynamic memory freeing
 void CGUIWindow::OnDeinitWindow(int nextWindowID)
@@ -603,6 +602,27 @@ bool CGUIWindow::OnMessage(CGUIMessage& message)
       message.SetParam1(result);
       return result != EVENT_RESULT_UNHANDLED;
     }
+  case GUI_MSG_ADD_CONTROL:
+    {
+      if (message.GetPointer())
+      {
+        CGUIControl *control = (CGUIControl *)message.GetPointer();
+        control->AllocResources();
+        AddControl(control);
+      }
+      return true;
+    }
+  case GUI_MSG_REMOVE_CONTROL:
+    {
+      if (message.GetPointer())
+      {
+        CGUIControl *control = (CGUIControl *)message.GetPointer();
+        RemoveControl(control);
+        control->FreeResources(true);
+        delete control;
+      }
+      return true;
+    }
   case GUI_MSG_NOTIFY_ALL:
     {
       // only process those notifications that come from this window, or those intended for every window
index 225ea13..477449a 100644 (file)
@@ -549,11 +549,19 @@ bool CGUIWindowManager::Render()
 
   bool hasRendered = false;
   // If we visualize the regions we will always render the entire viewport
-  if (g_advancedSettings.m_guiVisualizeDirtyRegions || g_advancedSettings.m_guiAlgorithmDirtyRegions == DIRTYREGION_SOLVER_NONE)
+  if (g_advancedSettings.m_guiVisualizeDirtyRegions || g_advancedSettings.m_guiAlgorithmDirtyRegions == DIRTYREGION_SOLVER_FILL_VIEWPORT_ALWAYS)
   {
     RenderPass();
     hasRendered = true;
   }
+  else if (g_advancedSettings.m_guiAlgorithmDirtyRegions == DIRTYREGION_SOLVER_FILL_VIEWPORT_ON_CHANGE)
+  {
+    if (dirtyRegions.size() > 0)
+    {
+      RenderPass();
+      hasRendered = true;
+    }
+  }
   else
   {
     for (CDirtyRegionList::const_iterator i = dirtyRegions.begin(); i != dirtyRegions.end(); i++)
index 6ca33d9..1b56402 100644 (file)
@@ -41,7 +41,7 @@ void CGUIWrappingListContainer::UpdatePageControl(int offset)
 {
   if (m_pageControl)
   { // tell our pagecontrol (scrollbar or whatever) to update (offset it by our cursor position)
-    CGUIMessage msg(GUI_MSG_ITEM_SELECT, GetID(), m_pageControl, CorrectOffset(offset, GetCursor()) % GetNumItems());
+    CGUIMessage msg(GUI_MSG_ITEM_SELECT, GetID(), m_pageControl, GetNumItems() ? CorrectOffset(offset, GetCursor()) % GetNumItems() : 0);
     SendWindowMessage(msg);
   }
 }
index f222e1d..d24416c 100644 (file)
@@ -696,15 +696,19 @@ CRect CGraphicContext::generateAABB(const CRect &rect) const
 
   float z = 0.0f;
   ScaleFinalCoords(x1, y1, z);
+  g_Windowing.Project(x1, y1, z);
 
   z = 0.0f;
   ScaleFinalCoords(x2, y2, z);
+  g_Windowing.Project(x2, y2, z);
 
   z = 0.0f;
   ScaleFinalCoords(x3, y3, z);
+  g_Windowing.Project(x3, y3, z);
 
   z = 0.0f;
   ScaleFinalCoords(x4, y4, z);
+  g_Windowing.Project(x4, y4, z);
 
   return CRect( min(min(min(x1, x2), x3), x4),
                 min(min(min(y1, y2), y3), y4),
@@ -775,7 +779,7 @@ bool CGraphicContext::ToggleFullScreenRoot ()
     if (g_guiSettings.m_LookAndFeelResolution > RES_DESKTOP)
       newRes = g_guiSettings.m_LookAndFeelResolution;
     else
-      newRes = RES_DESKTOP;
+      newRes = (RESOLUTION) g_Windowing.DesktopResolution(g_Windowing.GetCurrentScreen());
     uiRes = newRes;
 
 #if defined(HAS_VIDEO_PLAYBACK)
index e6d4fa8..e7d733f 100644 (file)
 
 #include "DirtyRegion.h"
 
-#define DIRTYREGION_SOLVER_NONE 0
+#define DIRTYREGION_SOLVER_FILL_VIEWPORT_ALWAYS 0
 #define DIRTYREGION_SOLVER_UNION 1
 #define DIRTYREGION_SOLVER_COST_REDUCTION 2
+#define DIRTYREGION_SOLVER_FILL_VIEWPORT_ON_CHANGE 3
 
 class IDirtyRegionSolver
 {
index 79682a4..15819bd 100644 (file)
@@ -159,7 +159,7 @@ bool CJpegIO::Open(const CStdString &texturePath, unsigned int minx, unsigned in
   XFILE::CFile file;
   if (file.Open(m_texturePath.c_str(), 0))
   {
-    m_imgsize = file.GetLength();
+    m_imgsize = (unsigned int)file.GetLength();
     m_inputBuff = new unsigned char[m_imgsize];
     m_inputBuffSize = file.Read(m_inputBuff, m_imgsize);
     file.Close();
index a20eb37..d46a3e2 100644 (file)
@@ -79,7 +79,7 @@ void CKey::Reset()
   m_rightThumbX = 0.0f;
   m_rightThumbY = 0.0f;
   m_repeat = 0.0f;
-  m_fromHttpApi = false;
+  m_fromService = false;
   m_buttonCode = KEY_INVALID;
   m_vkey = 0;
   m_unicode = 0;
@@ -98,7 +98,7 @@ const CKey& CKey::operator=(const CKey& key)
   m_rightThumbX  = key.m_rightThumbX;
   m_rightThumbY  = key.m_rightThumbY;
   m_repeat       = key.m_repeat;
-  m_fromHttpApi  = key.m_fromHttpApi;
+  m_fromService  = key.m_fromService;
   m_buttonCode   = key.m_buttonCode;
   m_vkey         = key.m_vkey;
   m_unicode     = key.m_unicode;
@@ -164,22 +164,15 @@ float CKey::GetRepeat() const
   return m_repeat;
 }
 
-bool CKey::GetFromHttpApi() const
+void CKey::SetFromService(bool fromService)
 {
-  return m_fromHttpApi;
-}
-
-void CKey::SetFromHttpApi(bool bFromHttpApi)
-{
-  if(bFromHttpApi && (m_buttonCode & KEY_ASCII) )
-  {
-      m_unicode = m_buttonCode - KEY_ASCII;      
-  }
+  if (fromService && (m_buttonCode & KEY_ASCII))
+    m_unicode = m_buttonCode - KEY_ASCII;
     
-  m_fromHttpApi = bFromHttpApi;
+  m_fromService = fromService;
 }
 
-CAction::CAction(int actionID, float amount1 /* = 1.0f */, float amount2 /* = 0.0f */, const CStdString &name /* = "" */)
+CAction::CAction(int actionID, float amount1 /* = 1.0f */, float amount2 /* = 0.0f */, const CStdString &name /* = "" */, unsigned int holdTime /*= 0*/)
 {
   m_id = actionID;
   m_amount[0] = amount1;
@@ -190,7 +183,7 @@ CAction::CAction(int actionID, float amount1 /* = 1.0f */, float amount2 /* = 0.
   m_repeat = 0;
   m_buttonCode = 0;
   m_unicode = 0;
-  m_holdTime = 0;
+  m_holdTime = holdTime;
 }
 
 CAction::CAction(int actionID, unsigned int state, float posX, float posY, float offsetX, float offsetY, const CStdString &name)
index aa0e7ae..fd70669 100644 (file)
 #define WINDOW_SETTINGS_MYMUSIC           10015
 #define WINDOW_SETTINGS_SYSTEM            10016
 #define WINDOW_SETTINGS_MYVIDEOS          10017
-#define WINDOW_SETTINGS_NETWORK           10018
+#define WINDOW_SETTINGS_SERVICE           10018 // former (Eden) WINDOW_SETTINGS_NETWORK
 #define WINDOW_SETTINGS_APPEARANCE        10019
 
 #define WINDOW_SCRIPTS                    10020 // virtual window for backward compatibility
@@ -436,7 +436,7 @@ class CKey;
 class CAction
 {
 public:
-  CAction(int actionID, float amount1 = 1.0f, float amount2 = 0.0f, const CStdString &name = "");
+  CAction(int actionID, float amount1 = 1.0f, float amount2 = 0.0f, const CStdString &name = "", unsigned int holdTime = 0);
   CAction(int actionID, wchar_t unicode);
   CAction(int actionID, unsigned int state, float posX, float posY, float offsetX, float offsetY, const CStdString &name = "");
   CAction(int actionID, const CStdString &name, const CKey &key);
@@ -543,8 +543,8 @@ public:
   bool FromKeyboard() const;
   bool IsAnalogButton() const;
   bool IsIRRemote() const;
-  void SetFromHttpApi(bool);
-  bool GetFromHttpApi() const;
+  void SetFromService(bool fromService);
+  bool GetFromService() const { return m_fromService; }
 
   inline uint32_t GetButtonCode() const { return m_buttonCode; }
   inline uint8_t  GetVKey() const       { return m_vkey; }
@@ -578,7 +578,7 @@ private:
   float m_rightThumbX;
   float m_rightThumbY;
   float m_repeat; // time since last keypress
-  bool m_fromHttpApi;
+  bool m_fromService;
 };
 #endif
 
index 13eab06..fd94350 100644 (file)
@@ -73,7 +73,7 @@ bool CLocalizeStrings::LoadSkinStrings(const CStdString& path, const CStdString&
 bool CLocalizeStrings::LoadXML(const CStdString &filename, CStdString &encoding, uint32_t offset /* = 0 */)
 {
   TiXmlDocument xmlDoc;
-  if (!xmlDoc.LoadFile(PTH_IC(filename)))
+  if (!xmlDoc.LoadFile(CSpecialProtocol::TranslatePathConvertCase(filename)))
   {
     CLog::Log(LOGDEBUG, "unable to load %s: %s at line %d", filename.c_str(), xmlDoc.ErrorDesc(), xmlDoc.ErrorRow());
     return false;
index d42b69c..c8c64aa 100644 (file)
@@ -34,9 +34,9 @@ CMatrixGLES g_matrices;
 
 CMatrixGLES::CMatrixGLES()
 {
-  for (int i=0; i<(int)MM_MATRIXSIZE; i++)
+  for (unsigned int i=0; i < MM_MATRIXSIZE; i++)
   {
-    m_matrices[i].push_back(new GLfloat[16]);
+    m_matrices[i].push_back(MatrixWrapper());
     MatrixMode((EMATRIXMODE)i);
     LoadIdentity();
   }
@@ -46,15 +46,6 @@ CMatrixGLES::CMatrixGLES()
 
 CMatrixGLES::~CMatrixGLES()
 {
-  for (int i=0; i<(int)MM_MATRIXSIZE; i++)
-  {
-    while (!m_matrices[i].empty())
-    {
-      m_matrices[i].pop_back();
-    }
-  }
-  m_matrixMode = (EMATRIXMODE)-1;
-  m_pMatrix    = NULL;
 }
 
 GLfloat* CMatrixGLES::GetMatrix(EMATRIXMODE mode)
@@ -87,10 +78,8 @@ void CMatrixGLES::PushMatrix()
 {
   if (m_pMatrix && MODE_WITHIN_RANGE(m_matrixMode))
   {
-    GLfloat *matrix = new GLfloat[16];
-    memcpy(matrix, m_pMatrix, sizeof(GLfloat)*16);
-    m_matrices[m_matrixMode].push_back(matrix);
-    m_pMatrix = matrix;
+    m_matrices[m_matrixMode].push_back(MatrixWrapper(m_pMatrix));
+    m_pMatrix =  m_matrices[m_matrixMode].back();
   }
 }
 
@@ -99,7 +88,9 @@ void CMatrixGLES::PopMatrix()
   if (MODE_WITHIN_RANGE(m_matrixMode))
   {
     if (m_matrices[m_matrixMode].size() > 1)
+    { 
       m_matrices[m_matrixMode].pop_back();
+    }
     m_pMatrix = m_matrices[m_matrixMode].back();
   }
 }
@@ -341,9 +332,54 @@ void CMatrixGLES::LookAt(GLfloat eyex, GLfloat eyey, GLfloat eyez, GLfloat cente
   Translatef(-eyex, -eyey, -eyez);
 }
 
+static void __gluMultMatrixVecf(const GLfloat matrix[16], const GLfloat in[4], GLfloat out[4])
+{
+  int i;
+
+  for (i=0; i<4; i++)
+  {
+    out[i] = in[0] * matrix[0*4+i] +
+             in[1] * matrix[1*4+i] +
+             in[2] * matrix[2*4+i] +
+             in[3] * matrix[3*4+i];
+  }
+}
+
+// gluProject implementation taken from Mesa3D
+bool CMatrixGLES::Project(GLfloat objx, GLfloat objy, GLfloat objz, const GLfloat modelMatrix[16], const GLfloat projMatrix[16], const GLint viewport[4], GLfloat* winx, GLfloat* winy, GLfloat* winz)
+{
+  GLfloat in[4];
+  GLfloat out[4];
+
+  in[0]=objx;
+  in[1]=objy;
+  in[2]=objz;
+  in[3]=1.0;
+  __gluMultMatrixVecf(modelMatrix, in, out);
+  __gluMultMatrixVecf(projMatrix, out, in);
+  if (in[3] == 0.0)
+    return false;
+  in[0] /= in[3];
+  in[1] /= in[3];
+  in[2] /= in[3];
+  /* Map x, y and z to range 0-1 */
+  in[0] = in[0] * 0.5 + 0.5;
+  in[1] = in[1] * 0.5 + 0.5;
+  in[2] = in[2] * 0.5 + 0.5;
+
+  /* Map x,y to viewport */
+  in[0] = in[0] * viewport[2] + viewport[0];
+  in[1] = in[1] * viewport[3] + viewport[1];
+
+  *winx=in[0];
+  *winy=in[1];
+  *winz=in[2];
+  return true;
+}
+
 void CMatrixGLES::PrintMatrix(void)
 {
-  for (int i=0; i<(int)MM_MATRIXSIZE; i++)
+  for (unsigned int i=0; i < MM_MATRIXSIZE; i++)
   {
     GLfloat *m = GetMatrix((EMATRIXMODE)i);
     CLog::Log(LOGDEBUG, "MatrixGLES - Matrix:%d", i);
index 8de26f3..2c86a24 100644 (file)
@@ -25,6 +25,7 @@
 #pragma once
 
 #include <vector>
+#include <string.h>
 
 using namespace std;
 
@@ -57,9 +58,23 @@ public:
   void MultMatrixf(const GLfloat *matrix);
   void LookAt(GLfloat eyex, GLfloat eyey, GLfloat eyez, GLfloat centerx, GLfloat centery, GLfloat centerz, GLfloat upx, GLfloat upy, GLfloat upz);
   void PrintMatrix(void);
+  bool Project(GLfloat objx, GLfloat objy, GLfloat objz, const GLfloat modelMatrix[16], const GLfloat projMatrix[16], const GLint viewport[4], GLfloat* winx, GLfloat* winy, GLfloat* winz);
 
 protected:
-  vector<GLfloat*> m_matrices[(int)MM_MATRIXSIZE];
+
+  struct MatrixWrapper 
+  {
+    MatrixWrapper(){};
+    MatrixWrapper( const float values[16]) { memcpy(m_values,values,sizeof(m_values)); }
+    MatrixWrapper( const MatrixWrapper &rhs ) { memcpy(m_values, rhs.m_values, sizeof(m_values)); }
+    MatrixWrapper &operator=( const MatrixWrapper &rhs ) { memcpy(m_values, rhs.m_values, sizeof(m_values)); return *this;}
+    operator float*() { return m_values; }
+    operator const float*() const { return m_values; }
+
+    float m_values[16];
+  };
+
+  vector<struct MatrixWrapper> m_matrices[(int)MM_MATRIXSIZE];
   GLfloat *m_pMatrix;
   EMATRIXMODE m_matrixMode;
 };
index c01f4a3..7c886b1 100644 (file)
@@ -170,136 +170,6 @@ bool CBaseTexture::LoadFromFile(const CStdString& texturePath, unsigned int maxW
     return false;
   }
 
-#if 0
-//#if defined(__APPLE__) && defined(__arm__)
-  XFILE::CFile file;
-  UInt8 *imageBuff      = NULL;
-  int64_t imageBuffSize = 0;
-
-  //open path and read data to buffer
-  //this handles advancedsettings.xml pathsubstitution
-  //and resulting networking
-  if (file.Open(texturePath, 0))
-  {
-    imageBuffSize =file.GetLength();
-    imageBuff = new UInt8[imageBuffSize];
-    imageBuffSize = file.Read(imageBuff, imageBuffSize);
-    file.Close();
-  }
-  else
-  {
-    CLog::Log(LOGERROR, "Texture manager unable to open file %s", texturePath.c_str());
-    return false;
-  }
-
-  if (imageBuffSize <= 0)
-  {
-    CLog::Log(LOGERROR, "Texture manager read texture file failed.");
-    delete [] imageBuff;
-    return false;
-  }
-
-  // create the image from buffer;
-  CGImageSourceRef imageSource;
-  // create a CFDataRef using CFDataCreateWithBytesNoCopy and kCFAllocatorNull for deallocator.
-  // this allows us to do a nocopy reference and we handle the free of imageBuff
-  CFDataRef cfdata = CFDataCreateWithBytesNoCopy(NULL, imageBuff, imageBuffSize, kCFAllocatorNull);
-  imageSource = CGImageSourceCreateWithData(cfdata, NULL);   
-    
-  if (imageSource == nil)
-  {
-    CLog::Log(LOGERROR, "Texture manager unable to load file: %s", CSpecialProtocol::TranslatePath(texturePath).c_str());
-    CFRelease(cfdata);
-    delete [] imageBuff;
-    return false;
-  }
-
-  CGImageRef image = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
-
-  int rotate = 0;
-  if (autoRotate)
-  { // get the orientation of the image for displaying it correctly
-    CFDictionaryRef imagePropertiesDictionary = CGImageSourceCopyPropertiesAtIndex(imageSource,0, NULL);
-    if (imagePropertiesDictionary != nil)
-    {
-      CFNumberRef orientation = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyOrientation);
-      if (orientation != nil)
-      {
-        int value = 0;
-        CFNumberGetValue(orientation, kCFNumberIntType, &value);
-        if (value)
-          rotate = value - 1;
-      }
-      CFRelease(imagePropertiesDictionary);
-    }
-  }
-
-  CFRelease(imageSource);
-
-  unsigned int width  = CGImageGetWidth(image);
-  unsigned int height = CGImageGetHeight(image);
-
-  m_hasAlpha = (CGImageGetAlphaInfo(image) != kCGImageAlphaNone);
-
-  if (originalWidth)
-    *originalWidth = width;
-  if (originalHeight)
-    *originalHeight = height;
-
-  // check texture size limits and limit to screen size - preserving aspectratio of image  
-  if ( width > g_Windowing.GetMaxTextureSize() || height > g_Windowing.GetMaxTextureSize() )
-  {
-    float aspect;
-
-    if ( width > height )
-    {
-      aspect = (float)width / (float)height;
-      width  = g_Windowing.GetWidth();
-      height = (float)width / (float)aspect;
-    }
-    else
-    {
-      aspect = (float)height / (float)width;
-      height = g_Windowing.GetHeight();
-      width  = (float)height / (float)aspect;
-    }
-    CLog::Log(LOGDEBUG, "Texture manager texture clamp:new texture size: %i x %i", width, height);
-  }
-
-  // use RGBA to skip swizzling
-  Allocate(width, height, XB_FMT_RGBA8);
-  m_orientation = rotate;
-    
-  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
-
-  // hw convert jmpeg to RGBA
-  CGContextRef context = CGBitmapContextCreate(m_pixels,
-    width, height, 8, GetPitch(), colorSpace,
-    kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
-
-  CGColorSpaceRelease(colorSpace);
-
-  // Flip so that it isn't upside-down
-  //CGContextTranslateCTM(context, 0, height);
-  //CGContextScaleCTM(context, 1.0f, -1.0f);
-  #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
-    CGContextClearRect(context, CGRectMake(0, 0, width, height));
-  #else
-    #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
-    // (just a way of checking whether we're running in 10.5 or later)
-    if (CGContextDrawLinearGradient == 0)
-      CGContextClearRect(context, CGRectMake(0, 0, width, height));
-    else
-    #endif
-      CGContextSetBlendMode(context, kCGBlendModeCopy);
-  #endif
-  //CGContextSetBlendMode(context, kCGBlendModeCopy);
-  CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
-  CGContextRelease(context);
-  CGImageRelease(image);
-  CFRelease(cfdata);
-  delete [] imageBuff;
-#else
   //ImageLib is sooo sloow for jpegs. Try our own decoder first. If it fails, fall back to ImageLib.
   if (URIUtils::GetExtension(texturePath).Equals(".jpg") || URIUtils::GetExtension(texturePath).Equals(".tbn"))
   {
@@ -384,7 +254,6 @@ bool CBaseTexture::LoadFromFile(const CStdString& texturePath, unsigned int maxW
     }
   }
   dll.ReleaseImage(&image);
-#endif
 
   ClampToEdge();
 
index ff94284..09bc869 100644 (file)
@@ -75,7 +75,7 @@ bool CTextureBundleXBT::OpenBundle()
     strPath = URIUtils::AddFileToFolder(g_graphicsContext.GetMediaDir(), "media/Textures.xbt");
   }
 
-  strPath = PTH_IC(strPath);
+  strPath = CSpecialProtocol::TranslatePathConvertCase(strPath);
 
   // Load the texture file
   if (!m_XBTFReader.Open(strPath))
index d6df822..c7e68bb 100644 (file)
@@ -138,11 +138,11 @@ bool CTextureBundleXPR::OpenBundle()
   else
     strPath = URIUtils::AddFileToFolder(g_graphicsContext.GetMediaDir(), "media/Textures.xpr");
 
-  strPath = PTH_IC(strPath);
+  strPath = CSpecialProtocol::TranslatePathConvertCase(strPath);
 
 #ifndef _LINUX
   CStdStringW strPathW;
-  g_charsetConverter.utf8ToW(_P(strPath), strPathW, false);
+  g_charsetConverter.utf8ToW(CSpecialProtocol::TranslatePath(strPath), strPathW, false);
   m_hFile = _wfopen(strPathW.c_str(), L"rb");
 #else
   m_hFile = fopen(strPath.c_str(), "rb");
@@ -279,10 +279,11 @@ bool CTextureBundleXPR::LoadFile(const CStdString& Filename, CAutoTexBuffer& Unp
   if (!buffer || !UnpackedBuf.Set((BYTE*)XPhysicalAlloc(file->second.UnpackedSize, MAXULONG_PTR, 128, PAGE_READWRITE)))
   { // failed due to lack of memory
 #ifndef _LINUX
-    MEMORYSTATUS stat;
-    GlobalMemoryStatus(&stat);
-    CLog::Log(LOGERROR, "Out of memory loading texture: %s (need %lu bytes, have %lu bytes)", name.c_str(),
-              file->second.UnpackedSize + file->second.PackedSize, stat.dwAvailPhys);
+    MEMORYSTATUSEX stat;
+    stat.dwLength = sizeof(MEMORYSTATUSEX);
+    GlobalMemoryStatusEx(&stat);
+    CLog::Log(LOGERROR, "Out of memory loading texture: %s (need %lu bytes, have %"PRIu64" bytes)", name.c_str(),
+              file->second.UnpackedSize + file->second.PackedSize, stat.ullAvailPhys);
 #elif defined(__APPLE__) || defined(__FreeBSD__)
     CLog::Log(LOGERROR, "Out of memory loading texture: %s (need %d bytes)", name.c_str(),
               file->second.UnpackedSize + file->second.PackedSize);
index 99dd586..7701712 100644 (file)
@@ -90,8 +90,8 @@ void CGLTexture::LoadToGPU()
     m_textureWidth = maxSize;
   }
 
-  GLenum format;
-  GLint numcomponents;
+  GLenum format = GL_BGRA;
+  GLint numcomponents = GL_RGBA;
 
   switch (m_format)
   {
@@ -111,8 +111,6 @@ void CGLTexture::LoadToGPU()
     break;
   case XB_FMT_A8R8G8B8:
   default:
-    format = GL_BGRA;
-    numcomponents = GL_RGBA;
     break;
   }
 
index b32dce7..f084476 100644 (file)
@@ -525,18 +525,21 @@ unsigned int CGUITextureManager::GetMemoryUsage() const
 
 void CGUITextureManager::SetTexturePath(const CStdString &texturePath)
 {
+  CSingleLock lock(m_section);
   m_texturePaths.clear();
   AddTexturePath(texturePath);
 }
 
 void CGUITextureManager::AddTexturePath(const CStdString &texturePath)
 {
+  CSingleLock lock(m_section);
   if (!texturePath.IsEmpty())
     m_texturePaths.push_back(texturePath);
 }
 
 void CGUITextureManager::RemoveTexturePath(const CStdString &texturePath)
 {
+  CSingleLock lock(m_section);
   for (vector<CStdString>::iterator it = m_texturePaths.begin(); it != m_texturePaths.end(); ++it)
   {
     if (*it == texturePath)
@@ -553,6 +556,7 @@ CStdString CGUITextureManager::GetTexturePath(const CStdString &textureName, boo
     return textureName;
   else
   { // texture doesn't include the full path, so check all fallbacks
+    CSingleLock lock(m_section);
     for (vector<CStdString>::iterator it = m_texturePaths.begin(); it != m_texturePaths.end(); ++it)
     {
       CStdString path = URIUtils::AddFileToFolder(it->c_str(), "media");
index c9dac5d..dd47f48 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <vector>
 #include "TextureBundle.h"
+#include "threads/CriticalSection.h"
 
 #pragma once
 
@@ -131,6 +132,7 @@ protected:
   CTextureBundle m_TexBundle[2];
 
   std::vector<CStdString> m_texturePaths;
+  CCriticalSection m_section;
 };
 
 /*!
index db96fd1..8394c03 100644 (file)
@@ -60,7 +60,7 @@ bool CXBTFReader::Open(const CStdString& fileName)
 
 #ifdef _WIN32
   CStdStringW strPathW;
-  g_charsetConverter.utf8ToW(_P(m_fileName), strPathW, false);
+  g_charsetConverter.utf8ToW(CSpecialProtocol::TranslatePath(m_fileName), strPathW, false);
   m_file = _wfopen(strPathW.c_str(), L"rb");
 #else
   m_file = fopen(m_fileName.c_str(), "rb");
index 782e559..fd9c3b2 100644 (file)
@@ -236,7 +236,8 @@ static const ActionMapping windows[] =
         {"musicsettings"            , WINDOW_SETTINGS_MYMUSIC},
         {"systemsettings"           , WINDOW_SETTINGS_SYSTEM},
         {"videossettings"           , WINDOW_SETTINGS_MYVIDEOS},
-        {"networksettings"          , WINDOW_SETTINGS_NETWORK},
+        {"networksettings"          , WINDOW_SETTINGS_SERVICE}, // backward compat
+        {"servicesettings"          , WINDOW_SETTINGS_SERVICE},
         {"appearancesettings"       , WINDOW_SETTINGS_APPEARANCE},
         {"scripts"                  , WINDOW_PROGRAMS}, // backward compat
         {"videofiles"               , WINDOW_VIDEO_FILES},
@@ -309,7 +310,9 @@ static const ActionMapping windows[] =
         {"musicoverlay"             , WINDOW_DIALOG_MUSIC_OVERLAY},
         {"videooverlay"             , WINDOW_DIALOG_VIDEO_OVERLAY},
         {"startwindow"              , WINDOW_START},
-        {"startup"                  , WINDOW_STARTUP_ANIM}};
+        {"startup"                  , WINDOW_STARTUP_ANIM},
+        {"peripherals"              , WINDOW_DIALOG_PERIPHERAL_MANAGER},
+        {"peripheralsettings"       , WINDOW_DIALOG_PERIPHERAL_SETTINGS}};
 
 static const ActionMapping mousecommands[] =
 {
@@ -360,19 +363,65 @@ CButtonTranslator& CButtonTranslator::GetInstance()
 }
 
 CButtonTranslator::CButtonTranslator()
-{}
+{
+  m_deviceList.clear();
+  m_Loaded = false;
+}
 
 CButtonTranslator::~CButtonTranslator()
-{}
+{
+#if defined(HAS_LIRC) || defined(HAS_IRSERVERSUITE)
+  vector<lircButtonMap*> maps;
+  for (map<CStdString,lircButtonMap*>::iterator it  = lircRemotesMap.begin();
+                                                it != lircRemotesMap.end();++it)
+    maps.push_back(it->second);
+  sort(maps.begin(),maps.end());
+  vector<lircButtonMap*>::iterator itend = unique(maps.begin(),maps.end());
+  for (vector<lircButtonMap*>::iterator it = maps.begin(); it != itend;++it)
+    delete *it;
+#endif
+}
+
+// Add the supplied device name to the list of connected devices
+void CButtonTranslator::AddDevice(CStdString& strDevice)
+{
+  // Only add the device if it isn't already in the list
+  std::list<CStdString>::iterator it;
+  for (it = m_deviceList.begin(); it != m_deviceList.end(); it++)
+    if (*it == strDevice)
+      return;
+
+  // Add the device
+  m_deviceList.push_back(strDevice);
+  m_deviceList.sort();
+
+  // New device added so reload the key mappings
+  Load();
+}
+
+void CButtonTranslator::RemoveDevice(CStdString& strDevice)
+{
+  // Find the device
+  std::list<CStdString>::iterator it;
+  for (it = m_deviceList.begin(); it != m_deviceList.end(); it++)
+    if (*it == strDevice)
+      break;
+  if (it == m_deviceList.end())
+    return;
+
+  // Remove the device
+  m_deviceList.remove(strDevice);
+
+  // Device removed so reload the key mappings
+  Load();
+}
 
-bool CButtonTranslator::Load()
+bool CButtonTranslator::Load(bool AlwaysLoad)
 {
-  deviceMappings.clear();
+  m_translatorMap.clear();
 
-  //directories to search for keymaps
-  //they're applied in this order,
-  //so keymaps in profile/keymaps/
-  //override e.g. system/keymaps
+  // Directories to search for keymaps. They're applied in this order,
+  // so keymaps in profile/keymaps/ override e.g. system/keymaps
   static const char* DIRS_TO_CHECK[] = {
     "special://xbmc/system/keymaps/",
     "special://masterprofile/keymaps/",
@@ -380,15 +429,40 @@ bool CButtonTranslator::Load()
   };
   bool success = false;
 
-  for(unsigned int dirIndex = 0; dirIndex < sizeof(DIRS_TO_CHECK)/sizeof(DIRS_TO_CHECK[0]); ++dirIndex) {
-    if( XFILE::CDirectory::Exists(DIRS_TO_CHECK[dirIndex]) )
+  for (unsigned int dirIndex = 0; dirIndex < sizeof(DIRS_TO_CHECK)/sizeof(DIRS_TO_CHECK[0]); ++dirIndex)
+  {
+    if (XFILE::CDirectory::Exists(DIRS_TO_CHECK[dirIndex]))
     {
       CFileItemList files;
-      XFILE::CDirectory::GetDirectory(DIRS_TO_CHECK[dirIndex], files, "*.xml");
-      //sort the list for filesystem based prioties, e.g. 01-keymap.xml, 02-keymap-overrides.xml
+      XFILE::CDirectory::GetDirectory(DIRS_TO_CHECK[dirIndex], files, ".xml");
+      // Sort the list for filesystem based priorities, e.g. 01-keymap.xml, 02-keymap-overrides.xml
       files.Sort(SORT_METHOD_FILE, SORT_ORDER_ASC);
       for(int fileIndex = 0; fileIndex<files.Size(); ++fileIndex)
-        success |= LoadKeymap(files[fileIndex]->GetPath());
+      {
+        if (!files[fileIndex]->m_bIsFolder)
+          success |= LoadKeymap(files[fileIndex]->GetPath());
+      }
+
+      // Load mappings for any HID devices we have connected
+      std::list<CStdString>::iterator it;
+      for (it = m_deviceList.begin(); it != m_deviceList.end(); it++)
+      {
+        CStdString devicedir = DIRS_TO_CHECK[dirIndex];
+        devicedir.append(*it);
+        devicedir.append("/");
+        if( XFILE::CDirectory::Exists(devicedir) )
+        {
+          CFileItemList files;
+          XFILE::CDirectory::GetDirectory(devicedir, files, ".xml");
+          // Sort the list for filesystem based priorities, e.g. 01-keymap.xml, 02-keymap-overrides.xml
+          files.Sort(SORT_METHOD_FILE, SORT_ORDER_ASC);
+          for(int fileIndex = 0; fileIndex<files.Size(); ++fileIndex)
+          {
+            if (!files[fileIndex]->m_bIsFolder)
+              success |= LoadKeymap(files[fileIndex]->GetPath());
+          }
+        }
+      }
     }
   }
 
@@ -420,11 +494,11 @@ bool CButtonTranslator::Load()
 
   if (!success)
     CLog::Log(LOGERROR, "CButtonTranslator::Load - unable to load remote map %s", REMOTEMAP);
-    // don't return false - it is to only indicate a fatal error (which this is not)
-
+  // don't return false - it is to only indicate a fatal error (which this is not)
 #endif
 
   // Done!
+  m_Loaded = true;
   return true;
 }
 
@@ -518,14 +592,11 @@ bool CButtonTranslator::LoadLircMap(const CStdString &lircmapPath)
 void CButtonTranslator::MapRemote(TiXmlNode *pRemote, const char* szDevice)
 {
   CLog::Log(LOGINFO, "* Adding remote mapping for device '%s'", szDevice);
-  lircButtonMap buttons;
   vector<string> RemoteNames;
-  map<CStdString, lircButtonMap>::iterator it = lircRemotesMap.find(szDevice);
-  if (it != lircRemotesMap.end())
-  {
-    buttons = it->second;
-    lircRemotesMap.erase(it);
-  }
+  map<CStdString, lircButtonMap*>::iterator it = lircRemotesMap.find(szDevice);
+  if (it == lircRemotesMap.end())
+    lircRemotesMap[szDevice] = new lircButtonMap;
+  lircButtonMap& buttons = *lircRemotesMap[szDevice];
 
   TiXmlElement *pButton = pRemote->FirstChildElement();
   while (pButton)
@@ -540,34 +611,24 @@ void CButtonTranslator::MapRemote(TiXmlNode *pRemote, const char* szDevice)
 
     pButton = pButton->NextSiblingElement();
   }
-
-  lircRemotesMap[szDevice] = buttons;
-  vector<string>::iterator itr = RemoteNames.begin();
-  while (itr!=RemoteNames.end())
+  for (vector<string>::iterator it  = RemoteNames.begin();
+                                it != RemoteNames.end();++it)
   {
-    it = lircRemotesMap.find(itr->c_str());
-    if (it != lircRemotesMap.end())
-    {
-      buttons = it->second;
-      lircRemotesMap.erase(it);
-    }
-    CLog::Log(LOGINFO, "* Linking remote mapping for '%s' to '%s'", szDevice, itr->c_str());
-    lircRemotesMap[itr->c_str()] = buttons;
-    itr++;
+    CLog::Log(LOGINFO, "* Linking remote mapping for '%s' to '%s'", szDevice, it->c_str());
+    lircRemotesMap[*it] = &buttons;
   }
-  RemoteNames.clear();
 }
 
 int CButtonTranslator::TranslateLircRemoteString(const char* szDevice, const char *szButton)
 {
   // Find the device
-  map<CStdString, lircButtonMap>::iterator it = lircRemotesMap.find(szDevice);
+  map<CStdString, lircButtonMap*>::iterator it = lircRemotesMap.find(szDevice);
   if (it == lircRemotesMap.end())
     return 0;
 
   // Find the button
-  lircButtonMap::iterator it2 = (*it).second.find(szButton);
-  if (it2 == (*it).second.end())
+  lircButtonMap::iterator it2 = (*it).second->find(szButton);
+  if (it2 == (*it).second->end())
     return 0;
 
   // Convert the button to code
@@ -789,21 +850,12 @@ CAction CButtonTranslator::GetAction(int window, const CKey &key, bool fallback)
   return action;
 }
 
-const std::map<int, CButtonTranslator::buttonMap> &CButtonTranslator::GetDeviceMap() const
-{
-  std::map<CStdString, std::map<int, buttonMap> >::const_iterator activeMapIt = deviceMappings.find(g_settings.m_activeKeyboardMapping);
-  if (activeMapIt == deviceMappings.end())
-    return deviceMappings.find("default")->second;
-  return activeMapIt->second;
-}
-
 int CButtonTranslator::GetActionCode(int window, const CKey &key, CStdString &strAction) const
 {
   uint32_t code = key.GetButtonCode();
 
-  const std::map<int, buttonMap> &deviceMap = GetDeviceMap();
-  map<int, buttonMap>::const_iterator it = deviceMap.find(window);
-  if (it == deviceMap.end())
+  map<int, buttonMap>::const_iterator it = m_translatorMap.find(window);
+  if (it == m_translatorMap.end())
     return 0;
   buttonMap::const_iterator it2 = (*it).second.find(code);
   int action = 0;
@@ -870,27 +922,15 @@ void CButtonTranslator::MapWindowActions(TiXmlNode *pWindow, int windowID)
     CStdString type(types[i]);
     if (HasDeviceType(pWindow, type))
     {
-      pDevice = pWindow->FirstChild(type);
-      TiXmlElement *pDeviceElement = pDevice->ToElement();
-      //check if exists, if not use "default"
-      CStdString deviceName = pDeviceElement->Attribute("name");
-      if (deviceName.empty())
-        deviceName = "default";
-
-      std::map<CStdString, std::map<int, buttonMap> >::iterator deviceMapIt = deviceMappings.find(deviceName);
-      if (deviceMapIt == deviceMappings.end())
+      buttonMap map;
+      std::map<int, buttonMap>::iterator it = m_translatorMap.find(windowID);
+      if (it != m_translatorMap.end())
       {
-        //First time encountering this device, lets initialise the buttonMap for it.
-        deviceMapIt = deviceMappings.insert(pair<CStdString, std::map<int, buttonMap> >(deviceName, std::map<int, buttonMap>())).first;
+        map = it->second;
+        m_translatorMap.erase(it);
       }
-      
-      std::map<int, buttonMap>::iterator windowIt = deviceMapIt->second.find(windowID);
-      if (windowIt == deviceMapIt->second.end())
-      {
-        //add it now
-        windowIt = deviceMapIt->second.insert(pair<int, buttonMap>(windowID, buttonMap())).first;
-      }
-      buttonMap& windowMap = windowIt->second;
+
+      pDevice = pWindow->FirstChild(type);
 
       TiXmlElement *pButton = pDevice->FirstChildElement();
 
@@ -911,9 +951,13 @@ void CButtonTranslator::MapWindowActions(TiXmlNode *pWindow, int windowID)
             buttonCode = TranslateAppCommand(pButton->Value());
 
         if (buttonCode && pButton->FirstChild())
-          MapAction(buttonCode, pButton->FirstChild()->Value(), windowMap);
+          MapAction(buttonCode, pButton->FirstChild()->Value(), map);
         pButton = pButton->NextSiblingElement();
       }
+
+      // add our map to our table
+      if (map.size() > 0)
+        m_translatorMap.insert(pair<int, buttonMap>( windowID, map));
     }
   }
 
@@ -1222,7 +1266,7 @@ uint32_t CButtonTranslator::TranslateMouseCommand(const char *szButton)
 
 void CButtonTranslator::Clear()
 {
-  deviceMappings.clear();
+  m_translatorMap.clear();
 #if defined(HAS_LIRC) || defined(HAS_IRSERVERSUITE)
   lircRemotesMap.clear();
 #endif
@@ -1232,4 +1276,6 @@ void CButtonTranslator::Clear()
   m_joystickAxisMap.clear();
   m_joystickHatMap.clear();
 #endif
+
+  m_Loaded = false;
 }
index 23fb897..0a8cec7 100644 (file)
@@ -64,8 +64,12 @@ public:
   ///access to singleton
   static CButtonTranslator& GetInstance();
 
+  // Add/remove a HID device with custom mappings
+  void AddDevice(CStdString& strDevice);
+  void RemoveDevice(CStdString& strDevice);
+
   /// loads Lircmap.xml/IRSSmap.xml (if enabled) and Keymap.xml
-  bool Load();
+  bool Load(bool AlwaysLoad = false);
   /// clears the maps
   void Clear();
 
@@ -96,9 +100,12 @@ public:
 
 private:
   typedef std::multimap<uint32_t, CButtonAction> buttonMap; // our button map to fill in
-  
-  std::map<CStdString, std::map<int, buttonMap> > deviceMappings;
-  const std::map<int, buttonMap> &GetDeviceMap() const;
+
+  // m_translatorMap contains all mappings i.e. m_BaseMap + HID device mappings
+  std::map<int, buttonMap> m_translatorMap;
+  // m_deviceList contains the list of connected HID devices
+  std::list<CStdString> m_deviceList;
+
   int GetActionCode(int window, const CKey &key, CStdString &strAction) const;
 
   static uint32_t TranslateGamepadString(const char *szButton);
@@ -120,7 +127,7 @@ private:
   bool LoadLircMap(const CStdString &lircmapPath);
   void MapRemote(TiXmlNode *pRemote, const char* szDevice);
   typedef std::map<CStdString, CStdString> lircButtonMap;
-  std::map<CStdString, lircButtonMap> lircRemotesMap;
+  std::map<CStdString, lircButtonMap*> lircRemotesMap;
 #endif
 
 #if defined(HAS_SDL_JOYSTICK) || defined(HAS_EVENT_SERVER)
@@ -131,6 +138,8 @@ private:
   std::map<std::string, JoystickMap> m_joystickAxisMap;        // <joy name, axis map>
   std::map<std::string, JoystickMap> m_joystickHatMap;        // <joy name, hat map>
 #endif
+
+  bool m_Loaded;
 };
 
 #endif
index cdba751..1dfe459 100644 (file)
@@ -52,29 +52,34 @@ CInertialScrollingHandler::CInertialScrollingHandler()
 bool CInertialScrollingHandler::CheckForInertialScrolling(const CAction* action)
 {
   bool ret = false;//return value - false no inertial scrolling - true - inertial scrolling
-  
+
   if(g_Windowing.HasInertialGestures())
   {
     return ret;//no need for emulating inertial scrolling - windowing does support it nativly.
   }
-  
+
   //reset screensaver during pan
   if( action->GetID() == ACTION_GESTURE_PAN )
   {
     g_application.ResetScreenSaver();
     return false;
   }
-    
+
   //mouse click aborts scrolling
   if( m_bScrolling && action->GetID() == ACTION_MOUSE_LEFT_CLICK )
   {
     ret = true;
     m_bAborting = true;//lets abort
   }
-  
+
   //on begin/tap stop all inertial scrolling
   if ( action->GetID() == ACTION_GESTURE_BEGIN )
   {
+    //release any former exclusive mouse mode
+    //for making switching between multiple lists
+    //possible
+    CGUIMessage message(GUI_MSG_EXCLUSIVE_MOUSE, 0, 0);
+    g_windowManager.SendMessage(message);     
     m_bScrolling = false;
     //wakeup screensaver on pan begin
     g_application.ResetScreenSaver();    
@@ -85,8 +90,8 @@ bool CInertialScrollingHandler::CheckForInertialScrolling(const CAction* action)
     if (action->GetID() == ACTION_GESTURE_END && ( fabs(action->GetAmount(0)) > MINIMUM_SPEED_FOR_INERTIA || fabs(action->GetAmount(1)) > MINIMUM_SPEED_FOR_INERTIA ) )
     {
       bool inertialRequested = false;
-      CGUIMessage message(GUI_MSG_GESTURE_NOTIFY, 0, 0, action->GetAmount(2), action->GetAmount(3));    
-      
+      CGUIMessage message(GUI_MSG_GESTURE_NOTIFY, 0, 0, (int)action->GetAmount(2), (int)action->GetAmount(3));
+
       //ask if the control wants inertial scrolling
       if(g_windowManager.SendMessage(message))
       {
@@ -103,13 +108,13 @@ bool CInertialScrollingHandler::CheckForInertialScrolling(const CAction* action)
         m_iFlickVelocity.y = action->GetAmount(1)/2;//in pixels per sec     
         m_iLastGesturePoint.x = action->GetAmount(2);//last gesture point x
         m_iLastGesturePoint.y = action->GetAmount(3);//last gesture point y
-      
+
         //calc deacceleration for fullstop in TIME_TO_ZERO_SPEED secs
         //v = a*t + v0 -> set v = 0 because we want to stop scrolling
         //a = -v0 / t
         m_inertialDeacceleration.x = -1*m_iFlickVelocity.x/TIME_TO_ZERO_SPEED;    
         m_inertialDeacceleration.y = -1*m_iFlickVelocity.y/TIME_TO_ZERO_SPEED;
-      
+
         //CLog::Log(LOGDEBUG, "initial vel: %f dec: %f", m_iFlickVelocity.y, m_inertialDeacceleration.y);
         m_inertialStartTime = CTimeUtils::GetFrameTime();//start time of inertial scrolling
         ret = true;
@@ -127,36 +132,36 @@ bool CInertialScrollingHandler::ProcessInertialScroll(float frameTime)
   {
     float yMovement = 0.0;
     float xMovement = 0.0;
-    
+
     //decrease based on negativ acceleration
     //calc the overall inertial scrolling time in secs
     float absolutInertialTime = (CTimeUtils::GetFrameTime() - m_inertialStartTime)/(float)1000;
-    
+
     //as long as we aren't over the overall inertial scroll time - do the deacceleration
     if ( absolutInertialTime < TIME_TO_ZERO_SPEED + TIME_FOR_DEACELLERATION_DECREASE )
     {
       //v = s/t -> s = t * v
       yMovement = frameTime * m_iFlickVelocity.y;
       xMovement = frameTime * m_iFlickVelocity.x;
-      
+
       //calc new velocity based on deacceleration
       //v = a*t + v0
       m_iFlickVelocity.y = m_inertialDeacceleration.y * frameTime + m_iFlickVelocity.y;
       m_iFlickVelocity.x = m_inertialDeacceleration.x * frameTime + m_iFlickVelocity.x;      
-      
+
       //CLog::Log(LOGDEBUG,"velocity: %f dec: %f time: %f", m_iFlickVelocity.y, m_inertialDeacceleration.y, absolutInertialTime);      
-      
+
       //check if the signs are equal - which would mean we deaccelerated to long and reversed the direction
       if( (m_inertialDeacceleration.y < 0) == (m_iFlickVelocity.y < 0) )
       {
         m_iFlickVelocity.y = 0;
       }
-      
+
       if( (m_inertialDeacceleration.x < 0) == (m_iFlickVelocity.x < 0) )
       {
         m_iFlickVelocity.x = 0;
       }      
-      
+
       //did we scroll long enought for decrease the deacceleration?
       if( absolutInertialTime > TIME_TO_ZERO_SPEED - TIME_FOR_DEACELLERATION_DECREASE )
       {
@@ -165,7 +170,7 @@ bool CInertialScrollingHandler::ProcessInertialScroll(float frameTime)
         m_inertialDeacceleration.x *= DEACELLERATION_DECREASE_FACTOR;                          
       }         
     }
-    
+
     //if we have movement
     if( xMovement || yMovement )
     {
@@ -180,7 +185,7 @@ bool CInertialScrollingHandler::ProcessInertialScroll(float frameTime)
       m_bAborting = true;//we are done
     }
   }
-  
+
   //if we are done - or we where aborted
   if( m_bAborting )
   {
@@ -191,6 +196,6 @@ bool CInertialScrollingHandler::ProcessInertialScroll(float frameTime)
     m_iFlickVelocity.x = 0;
     m_iFlickVelocity.y = 0;      
   }
-  
+
   return true;
 }
index f29068b..ee4b589 100644 (file)
@@ -238,8 +238,8 @@ void CJoystick::Update(SDL_Event& joyEvent)
   int buttonId = -1;
   int axisId = -1;
   int joyId = -1;
-  bool ignore = false; // not used for now
-  bool axis = false;
+  DECLARE_UNUSED(bool,ignore = false)
+  DECLARE_UNUSED(bool,axis = false);
 
   switch(joyEvent.type)
   {
@@ -408,4 +408,24 @@ float CJoystick::SetDeadzone(float val)
   return val;
 }
 
+bool CJoystick::Reinitialize()
+{
+  // Restart SDL joystick subsystem
+  SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
+  if (SDL_WasInit(SDL_INIT_JOYSTICK) !=  0)
+  {
+    CLog::Log(LOGERROR, "Stop joystick subsystem failed");
+    return false;
+  }
+  if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0)
+  {
+    CLog::Log(LOGERROR, "Restart joystick subsystem failed : %s",SDL_GetError());
+    return false;
+  }
+
+  Initialize();
+
+  return true;
+}
+
 #endif
index a08364f..e7803d1 100644 (file)
@@ -64,6 +64,7 @@ public:
   float GetAmount(int axis);
   float GetAmount() { return GetAmount(m_AxisId); }
   float SetDeadzone(float val);
+  bool Reinitialize();
 
 private:
   void SetAxisActive(bool active=true) { m_ActiveFlags = active?(m_ActiveFlags|JACTIVE_AXIS):(m_ActiveFlags&(~JACTIVE_AXIS)); }
index 3403ccd..59e0413 100644 (file)
 #include "utils/Variant.h"
 #include "FileItem.h"
 #include "music/tags/MusicInfoTag.h"
+#include "music/MusicDatabase.h"
 #include "video/VideoDatabase.h"
 
+#define LOOKUP_PROPERTY "database-lookup"
+
 using namespace std;
 using namespace ANNOUNCEMENT;
 
@@ -36,12 +39,18 @@ vector<IAnnouncer *> CAnnouncementManager::m_announcers;
 
 void CAnnouncementManager::AddAnnouncer(IAnnouncer *listener)
 {
+  if (!listener)
+    return;
+
   CSingleLock lock (m_critSection);
   m_announcers.push_back(listener);
 }
 
 void CAnnouncementManager::RemoveAnnouncer(IAnnouncer *listener)
 {
+  if (!listener)
+    return;
+
   CSingleLock lock (m_critSection);
   for (unsigned int i = 0; i < m_announcers.size(); i++)
   {
@@ -53,13 +62,13 @@ void CAnnouncementManager::RemoveAnnouncer(IAnnouncer *listener)
   }
 }
 
-void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender, const char *message)
+void CAnnouncementManager::Announce(AnnouncementFlag flag, const char *sender, const char *message)
 {
   CVariant data;
   Announce(flag, sender, message, data);
 }
 
-void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender, const char *message, CVariant &data)
+void CAnnouncementManager::Announce(AnnouncementFlag flag, const char *sender, const char *message, CVariant &data)
 {
   CLog::Log(LOGDEBUG, "CAnnouncementManager - Announcement: %s from %s", message, sender);
   CSingleLock lock (m_critSection);
@@ -67,14 +76,20 @@ void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender,
     m_announcers[i]->Announce(flag, sender, message, data);
 }
 
-void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item)
+void CAnnouncementManager::Announce(AnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item)
 {
   CVariant data;
   Announce(flag, sender, message, item, data);
 }
 
-void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item, CVariant &data)
+void CAnnouncementManager::Announce(AnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item, CVariant &data)
 {
+  if (!item.get())
+  {
+    Announce(flag, sender, message, data);
+    return;
+  }
+
   // Extract db id of item
   CVariant object = data.isNull() || data.isObject() ? data : CVariant::VariantTypeObject;
   CStdString type;
@@ -82,12 +97,29 @@ void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender,
 
   if (item->HasVideoInfoTag())
   {
-    CVideoDatabase::VideoContentTypeToString((VIDEODB_CONTENT_TYPE)item->GetVideoContentType(), type);
-
     id = item->GetVideoInfoTag()->m_iDbId;
 
+    // TODO: Can be removed once this is properly handled when starting playback of a file
+    if (id <= 0 && !item->GetPath().empty() &&
+       (!item->HasProperty(LOOKUP_PROPERTY) || item->GetProperty(LOOKUP_PROPERTY).asBoolean()))
+    {
+      CVideoDatabase videodatabase;
+      if (videodatabase.Open())
+      {
+        if (videodatabase.LoadVideoInfo(item->GetPath(), *item->GetVideoInfoTag()))
+          id = item->GetVideoInfoTag()->m_iDbId;
+
+        videodatabase.Close();
+      }
+    }
+
+    CVideoDatabase::VideoContentTypeToString((VIDEODB_CONTENT_TYPE)item->GetVideoContentType(), type);
+
     if (id <= 0)
     {
+      // TODO: Can be removed once this is properly handled when starting playback of a file
+      item->SetProperty(LOOKUP_PROPERTY, false);
+
       object["title"] = item->GetVideoInfoTag()->m_strTitle;
 
       switch (item->GetVideoContentType())
@@ -118,8 +150,30 @@ void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender,
     id = item->GetMusicInfoTag()->GetDatabaseId();
     type = "song";
 
+    // TODO: Can be removed once this is properly handled when starting playback of a file
+    if (id <= 0 && !item->GetPath().empty() &&
+       (!item->HasProperty(LOOKUP_PROPERTY) || item->GetProperty(LOOKUP_PROPERTY).asBoolean()))
+    {
+      CMusicDatabase musicdatabase;
+      if (musicdatabase.Open())
+      {
+        CSong song;
+        if (musicdatabase.GetSongByFileName(item->GetPath(), song))
+        {
+          item->GetMusicInfoTag()->SetSong(song);
+          item->SetMusicThumb();
+          id = item->GetMusicInfoTag()->GetDatabaseId();
+        }
+
+        musicdatabase.Close();
+      }
+    }
+
     if (id <= 0)
     {
+      // TODO: Can be removed once this is properly handled when starting playback of a file
+      item->SetProperty(LOOKUP_PROPERTY, false);
+
       object["title"] = item->GetMusicInfoTag()->GetTitle();
 
       if (item->GetMusicInfoTag()->GetTrackNumber() > 0)
index c05fd28..1890ed9 100644 (file)
@@ -32,10 +32,10 @@ namespace ANNOUNCEMENT
   public:
     static void AddAnnouncer(IAnnouncer *listener);
     static void RemoveAnnouncer(IAnnouncer *listener);
-    static void Announce(EAnnouncementFlag flag, const char *sender, const char *message);
-    static void Announce(EAnnouncementFlag flag, const char *sender, const char *message, CVariant &data);
-    static void Announce(EAnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item);
-    static void Announce(EAnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item, CVariant &data);
+    static void Announce(AnnouncementFlag flag, const char *sender, const char *message);
+    static void Announce(AnnouncementFlag flag, const char *sender, const char *message, CVariant &data);
+    static void Announce(AnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item);
+    static void Announce(AnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item, CVariant &data);
   private:
     static std::vector<IAnnouncer *> m_announcers;
     static CCriticalSection m_critSection;
diff --git a/xbmc/interfaces/AnnouncementUtils.h b/xbmc/interfaces/AnnouncementUtils.h
deleted file mode 100644 (file)
index 2baa5e6..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2005-2011 Team XBMC
- *      http://www.xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, write to
- *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *  http://www.gnu.org/copyleft/gpl.html
- *
- */
-
-#include "IAnnouncer.h"
-
-namespace ANNOUNCEMENT
-{
-  class CAnnouncementUtils
-  {
-  public:
-    /*!
-     \brief Returns a string representation for the 
-     given EAnnouncementFlag
-     \param notification Specific EAnnouncementFlag
-     \return String representation of the given EAnnouncementFlag
-     */
-    static inline const char *AnnouncementFlagToString(const EAnnouncementFlag &notification)
-    {
-      switch (notification)
-      {
-      case Player:
-        return "Player";
-      case GUI:
-        return "GUI";
-      case System:
-        return "System";
-      case VideoLibrary:
-        return "VideoLibrary";
-      case AudioLibrary:
-        return "AudioLibrary";
-      case Other:
-        return "Other";
-      default:
-        return "Unknown";
-      }
-    }
-  };
-}
index 23641d5..588be8d 100644 (file)
@@ -487,11 +487,8 @@ int CBuiltins::Execute(const CStdString& execString)
     }
 
     CFileItem item(params[0], false);
-    if (URIUtils::HasSlashAtEnd(params[0]) || 
-       (params.size() == 2 && params[1].Equals("isdir")))
+    if (URIUtils::HasSlashAtEnd(params[0]))
       item.m_bIsFolder = true;
-    else if (item.IsPlugin())
-      item.SetProperty("IsPlayable", true);
 
     // restore to previous window if needed
     if( g_windowManager.GetActiveWindow() == WINDOW_SLIDESHOW ||
@@ -503,25 +500,31 @@ int CBuiltins::Execute(const CStdString& execString)
     g_application.ResetScreenSaver();
     g_application.WakeUpScreenSaverAndDPMS();
 
-    // set fullscreen or windowed
-    if ((params.size() >= 3 && params[2] == "1") ||
-       (params.size() == 2 && params[1] == "1"))
-      g_settings.m_bStartVideoWindowed = true;
-
     // ask if we need to check guisettings to resume
     bool askToResume = true;
-    if ((params.size() == 2 && params[1].Equals("resume")) || (params.size() == 3 && params[2].Equals("resume")))
+    for (unsigned int i = 1 ; i < params.size() ; i++)
     {
-      // force the item to resume (if applicable) (see CApplication::PlayMedia)
-      item.m_lStartOffset = STARTOFFSET_RESUME;
-      askToResume = false;
+      if (params[i].Equals("isdir"))
+        item.m_bIsFolder = true;
+      else if (params[i].Equals("1")) // set fullscreen or windowed
+        g_settings.m_bStartVideoWindowed = true;
+      else if (params[i].Equals("resume"))
+      {
+        // force the item to resume (if applicable) (see CApplication::PlayMedia)
+        item.m_lStartOffset = STARTOFFSET_RESUME;
+        askToResume = false;
+      }
+      else if (params[i].Equals("noresume"))
+      {
+        // force the item to start at the beginning (m_lStartOffset is initialized to 0)
+        askToResume = false;
+      }
+      else if (params[i].Left(11).Equals("playoffset="))
+        item.SetProperty("playlist_starting_track", atoi(params[i].Mid(11)) - 1);
     }
 
-    if ((params.size() == 2 && params[1].Equals("noresume")) || (params.size() == 3 && params[2].Equals("noresume")))
-    {
-      // force the item to start at the beginning (m_lStartOffset is initialized to 0)
-      askToResume = false;
-    }
+    if (!item.m_bIsFolder && item.IsPlugin())
+      item.SetProperty("IsPlayable", true);
 
     if ( askToResume == true )
     {
@@ -532,14 +535,28 @@ int CBuiltins::Execute(const CStdString& execString)
     {
       CFileItemList items;
       CDirectory::GetDirectory(item.GetPath(),items,g_settings.m_videoExtensions);
-      g_playlistPlayer.Add(PLAYLIST_VIDEO,items);
-      g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_VIDEO);
+      int playlist = PLAYLIST_MUSIC;
+      for (int i = 0; i < items.Size(); i++)
+      {
+        if (items[i]->IsVideo())
+        {
+          playlist = PLAYLIST_VIDEO;
+          break;
+        }
+      }
+      g_playlistPlayer.ClearPlaylist(playlist);
+      g_playlistPlayer.Add(playlist, items);
+      g_playlistPlayer.SetCurrentPlaylist(playlist);
       g_playlistPlayer.Play();
     }
     else
     {
+      int playlist = item.IsAudio() ? PLAYLIST_MUSIC : PLAYLIST_VIDEO;
+      g_playlistPlayer.ClearPlaylist(playlist);
+      g_playlistPlayer.SetCurrentPlaylist(playlist);
+
       // play media
-      if (!g_application.PlayMedia(item, item.IsAudio() ? PLAYLIST_MUSIC : PLAYLIST_VIDEO))
+      if (!g_application.PlayMedia(item, playlist))
       {
         CLog::Log(LOGERROR, "XBMC.PlayMedia could not play media: %s", params[0].c_str());
         return false;
@@ -807,7 +824,14 @@ int CBuiltins::Execute(const CStdString& execString)
   }
   else if (execute.Equals("setvolume"))
   {
-    g_application.SetVolume(atoi(parameter.c_str()));
+    int oldVolume = g_application.GetVolume();
+    int volume = atoi(parameter.c_str());
+
+    g_application.SetVolume(volume);   
+    if(oldVolume != volume)
+    {
+      g_application.getApplicationMessenger().ShowVolumeBar(oldVolume < volume);  
+    }
   }
   else if (execute.Equals("playlist.playoffset"))
   {
@@ -874,10 +898,7 @@ int CBuiltins::Execute(const CStdString& execString)
     else
     { // check if shutdown is specified in particular, and get the time for it
       CStdString strHeading;
-      CStdString command;
-      vector<CStdString> commandParams;
-      CUtil::SplitExecFunction(params[1], command, commandParams);
-      if (command.CompareNoCase("shutdown") == 0)
+      if (parameter.CompareNoCase("shutdowntimer") == 0)
         strHeading = g_localizeStrings.Get(20145);
       else
         strHeading = g_localizeStrings.Get(13209);
@@ -927,7 +948,7 @@ int CBuiltins::Execute(const CStdString& execString)
     bool restart = false;
     if (params.size() > 0 && params[0].CompareNoCase("restart") == 0)
       restart = true;
-    CAutorun::PlayDisc(restart);
+    CAutorun::PlayDisc(g_mediaManager.GetDiscPath(), true, restart);
 #endif
   }
   else if (execute.Equals("ripcd"))
@@ -1102,6 +1123,7 @@ int CBuiltins::Execute(const CStdString& execString)
     }
     else // execute.Equals("skin.setpath"))
     {
+      g_mediaManager.GetNetworkLocations(localShares);
       if (CGUIDialogFileBrowser::ShowAndGetDirectory(localShares, g_localizeStrings.Get(1031), value))
         g_settings.SetSkinString(string, value);
     }
diff --git a/xbmc/interfaces/DbusServer.cpp b/xbmc/interfaces/DbusServer.cpp
deleted file mode 100644 (file)
index 24e0685..0000000
+++ /dev/null
@@ -1,568 +0,0 @@
-/*
- *      Copyright (C) 2009 Azur Digital Networks
- *      http://www.azurdigitalnetworks.net
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, write to
- *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *  http://www.gnu.org/copyleft/gpl.html
- *
- */
-
-#include "system.h"
-
-#ifdef HAS_DBUS_SERVER
-#ifndef DBUS_API_SUBJECT_TO_CHANGE
-#define DBUS_API_SUBJECT_TO_CHANGE 1
-#endif
-#include <dbus/dbus.h>
-#include "DbusServer.h"
-#include "threads/CriticalSection.h"
-#include "Application.h"
-#include "threads/SingleLock.h"
-#include "utils/log.h"
-#include <map>
-#include <queue>
-#include "math.h"
-
-using namespace DBUSSERVER;
-using namespace std;
-
-/* XML data to answer org.freedesktop.DBus.Introspectable.Introspect requests */
-const char* psz_introspection_xml_data_root =
-"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
-"\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
-"<node>\n"
-"  <node name=\"Player\"/>\n"
-"  <node name=\"TrackList\"/>\n"
-"  <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
-"    <method name=\"Introspect\">\n"
-"      <arg name=\"data\" direction=\"out\" type=\"s\"/>\n"
-"    </method>\n"
-"  </interface>\n"
-"  <interface name=\"org.freedesktop.MediaPlayer\">\n"
-"    <method name=\"Identity\">\n"
-"      <arg type=\"s\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"MprisVersion\">\n"
-"      <arg type=\"(qq)\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"Quit\">\n"
-"    </method>\n"
-"  </interface>\n"
-"</node>\n"
-;
-
-const char* psz_introspection_xml_data_player =
-"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
-"\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
-"<node>"
-"  <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
-"    <method name=\"Introspect\">\n"
-"      <arg name=\"data\" direction=\"out\" type=\"s\"/>\n"
-"    </method>\n"
-"  </interface>\n"
-"  <interface name=\"org.freedesktop.MediaPlayer\">\n"
-"    <method name=\"GetStatus\">\n"
-"      <arg type=\"(iiii)\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"Prev\">\n"
-"    </method>\n"
-"    <method name=\"Next\">\n"
-"    </method>\n"
-"    <method name=\"Stop\">\n"
-"    </method>\n"
-"    <method name=\"Play\">\n"
-"    </method>\n"
-"    <method name=\"Pause\">\n"
-"    </method>\n"
-"    <method name=\"Repeat\">\n"
-"      <arg type=\"b\" direction=\"in\" />\n"
-"    </method>\n"
-"    <method name=\"VolumeSet\">\n"
-"      <arg type=\"i\" direction=\"in\" />\n"
-"    </method>\n"
-"    <method name=\"VolumeGet\">\n"
-"      <arg type=\"i\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"PositionSet\">\n"
-"      <arg type=\"i\" direction=\"in\" />\n"
-"    </method>\n"
-"    <method name=\"PositionGet\">\n"
-"      <arg type=\"i\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"GetMetadata\">\n"
-"      <arg type=\"a{sv}\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"GetCaps\">\n"
-"      <arg type=\"i\" direction=\"out\" />\n"
-"    </method>\n"
-"    <signal name=\"TrackChange\">\n"
-"      <arg type=\"a{sv}\"/>\n"
-"    </signal>\n"
-"    <signal name=\"StatusChange\">\n"
-"      <arg type=\"(iiii)\"/>\n"
-"    </signal>\n"
-"    <signal name=\"CapsChange\">\n"
-"      <arg type=\"i\"/>\n"
-"    </signal>\n"
-"  </interface>\n"
-"</node>\n"
-;
-
-const char* psz_introspection_xml_data_tracklist =
-"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
-"\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
-"<node>"
-"  <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
-"    <method name=\"Introspect\">\n"
-"      <arg name=\"data\" direction=\"out\" type=\"s\"/>\n"
-"    </method>\n"
-"  </interface>\n"
-"  <interface name=\"org.freedesktop.MediaPlayer\">\n"
-"    <method name=\"AddTrack\">\n"
-"      <arg type=\"s\" direction=\"in\" />\n"
-"      <arg type=\"b\" direction=\"in\" />\n"
-"      <arg type=\"i\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"DelTrack\">\n"
-"      <arg type=\"i\" direction=\"in\" />\n"
-"    </method>\n"
-"    <method name=\"GetMetadata\">\n"
-"      <arg type=\"i\" direction=\"in\" />\n"
-"      <arg type=\"a{sv}\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"GetCurrentTrack\">\n"
-"      <arg type=\"i\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"GetLength\">\n"
-"      <arg type=\"i\" direction=\"out\" />\n"
-"    </method>\n"
-"    <method name=\"SetLoop\">\n"
-"      <arg type=\"b\" direction=\"in\" />\n"
-"    </method>\n"
-"    <method name=\"SetRandom\">\n"
-"      <arg type=\"b\" direction=\"in\" />\n"
-"    </method>\n"
-"    <signal name=\"TrackListChange\">\n"
-"      <arg type=\"i\" />\n"
-"    </signal>\n"
-"  </interface>\n"
-"</node>\n"
-;
-
-DBusHandlerResult xbmc_dbus_message_handler_root(DBusConnection *connection, DBusMessage *message, void *user_data)
-{
-  return static_cast<CDbusServer *>(user_data)->got_message_root(connection,message);
-}
-
-DBusHandlerResult xbmc_dbus_message_handler_player(DBusConnection *connection, DBusMessage *message, void *user_data)
-{
-  return static_cast<CDbusServer *>(user_data)->got_message_player(connection,message);
-}
-
-DBusHandlerResult xbmc_dbus_message_handler_tracklist(DBusConnection *connection, DBusMessage *message, void *user_data)
-{
-  return static_cast<CDbusServer *>(user_data)->got_message_tracklist(connection,message);
-}
-
-/************************************************************************/
-/* CDbusServer                                                         */
-/************************************************************************/
-CDbusServer* CDbusServer::m_pInstance = NULL;
-CDbusServer::CDbusServer()
-{
-  m_bStop            = false;
-  m_pThread          = NULL;
-  m_bRunning         = false;
-  p_conn             = NULL;
-  p_application      = NULL;
-}
-
-void CDbusServer::RemoveInstance()
-{
-  if (m_pInstance)
-  {
-    delete m_pInstance;
-    m_pInstance=NULL;
-  }
-}
-
-CDbusServer* CDbusServer::GetInstance()
-{
-  if (!m_pInstance)
-  {
-    m_pInstance = new CDbusServer();
-  }
-  return m_pInstance;
-}
-
-bool CDbusServer::connect(DBusConnection **conn)
-{
-    /* initialisation of the dbus connection */
-  DBusError       error;
-  dbus_error_init( &error );
-
-  /* connect to the session bus */
-  *conn = dbus_bus_get_private( DBUS_BUS_SESSION, &error );
-  if( !*conn ) {
-    CLog::Log(LOGERROR, " DS: Failed to connect to the D-Bus session daemon: %s", error.message );
-    dbus_error_free( &error );
-    return false;
-  }
-
-  dbus_connection_set_exit_on_disconnect(*conn, false);
-  /* register a well-known name on the bus */
-  dbus_bus_request_name( *conn, XBMC_MPRIS_DBUS_SERVICE, 0, &error );
-  if( dbus_error_is_set( &error ) )
-   {
-       CLog::Log(LOGERROR, " DS: Error requesting service : %s", error.message );
-       dbus_error_free( &error );
-       return false;
-   }
-  dbus_error_free( &error );
-  return true;
-}
-
-void CDbusServer::StartServer(CApplication *parent)
-{
-  CSingleLock lock(m_critSection);
-  if (m_pThread)
-    return;
-
-  if (!connect(&p_conn)) {
-    return;
-  }
-
-  p_application = parent;
-
-
-  // ******* redirect to what path ? ( / == root, /Player == player, /Tracklist = tracklist )
-  DBusObjectPathVTable xbmc_dbus_vtable_root = {NULL, xbmc_dbus_message_handler_root, NULL};
-  if (!dbus_connection_register_object_path(p_conn, MPRIS_DBUS_ROOT_PATH, &xbmc_dbus_vtable_root, this ))
-  {
-    CLog::Log(LOGERROR, " DS: Not Enough memory for register dbus root object path." );
-    return;
-  }
-
-  DBusObjectPathVTable xbmc_dbus_vtable_player = {NULL, xbmc_dbus_message_handler_player, NULL};
-  if (!dbus_connection_register_object_path(p_conn, MPRIS_DBUS_PLAYER_PATH, &xbmc_dbus_vtable_player, this ))
-  {
-    CLog::Log(LOGERROR, " DS: Not Enough memory for register dbus player object path." );
-    return;
-  }
-
-  DBusObjectPathVTable xbmc_dbus_vtable_tracklist = {NULL, xbmc_dbus_message_handler_tracklist, NULL};
-  if (!dbus_connection_register_object_path(p_conn, MPRIS_DBUS_TRACKLIST_PATH, &xbmc_dbus_vtable_tracklist, this ))
-  {
-    CLog::Log(LOGERROR, " DS: Not Enough memory for register dbus tracklist object path." );
-    return;
-  }
-
-  m_bStop = false;
-  m_pThread = new CThread(this, "DbusServer");
-  m_pThread->Create();
-}
-
-void CDbusServer::StopServer(bool bWait)
-{
-  m_bStop = true;
-  if (m_pThread && bWait)
-  {
-    m_pThread->WaitForThreadExit(2000);
-    dbus_connection_close(p_conn);
-    dbus_connection_unref( p_conn );
-    delete m_pThread;
-    m_pThread = NULL;
-  }
-}
-
-void CDbusServer::Run()
-{
-  CLog::Log(LOGNOTICE, "DS: Starting DBUS server in Run Application aka thread");
-  m_bRunning = false;
-
-  while (!m_bStop)
-  {
-    // start listening until we timeout
-    dbus_connection_read_write_dispatch(p_conn,1000);
-  }
-
-  CLog::Log(LOGNOTICE, "DS: DBUS server stopped");
-  m_bRunning = false;
-}
-
-// ************ root message parser *********************
-DBusHandlerResult CDbusServer::got_message_root( DBusConnection *connection, DBusMessage *message )
-{
-  if ((!connection) || (!message)) {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  }
-  std::string method = dbus_message_get_member(message);
-  if (method == "Introspect") {
-    return handle_introspect_root( connection, message );
-  } else if(method == "Identity") {
-    return root_Identity( connection, message );
-  } else if(method == "MprisVersion") {
-    return root_MprisVersion( connection, message );
-  }
-  CLog::Log(LOGERROR, "DS: messages for root not yet used" );
-  return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-// ******************* root distribution methods ***********************************
-// ******************* INTROSPECTION
-DBusHandlerResult CDbusServer::handle_introspect_root( DBusConnection *connection, DBusMessage *message )
-{
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-  ADD_STRING( &psz_introspection_xml_data_root );
-  REPLY_SEND;
-}
-
-DBusHandlerResult CDbusServer::root_Identity( DBusConnection *connection, DBusMessage *message )
-{
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-  char *psz_identity;
-  if( asprintf( &psz_identity, "%s %s", XBMC_MPRIS_PACKAGE, XBMC_MPRIS_VERSION ) != -1 )
-  {
-    ADD_STRING( &psz_identity );
-    free( psz_identity );
-  }
-  else
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-  REPLY_SEND;
-}
-
-DBusHandlerResult CDbusServer::root_MprisVersion( DBusConnection *connection, DBusMessage *message )
-{
- /*implemented version of the mpris spec */
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-  dbus_uint16_t i_major = XBMC_MPRIS_VERSION_MAJOR;
-  dbus_uint16_t i_minor = XBMC_MPRIS_VERSION_MINOR;
-  DBusMessageIter version;
-
-  if( !dbus_message_iter_open_container( &args, DBUS_TYPE_STRUCT, NULL,&version ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-  if( !dbus_message_iter_append_basic( &version, DBUS_TYPE_UINT16,&i_major ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-  if( !dbus_message_iter_append_basic( &version, DBUS_TYPE_UINT16,&i_minor ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-  if( !dbus_message_iter_close_container( &args, &version ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-  REPLY_SEND;
-}
-
-// ************ player message parser *********************
-DBusHandlerResult CDbusServer::got_message_player( DBusConnection *connection, DBusMessage *message)
-{
-  if ((!connection) || (!message)) {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  }
-  std::string method = dbus_message_get_member(message);
-  if (method == "Introspect") {
-    return handle_introspect_player( connection, message );
-  } else if (method == "GetStatus") {
-    return player_GetStatus( connection, message );
-  } else if (method == "Prev") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "Next") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "Stop") {
-    return player_Stop( connection, message );
-  } else if (method == "Play") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "Pause") {
-    return player_Pause( connection, message );
-  } else if (method == "Repeat") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "VolumeSet") {
-    return player_VolumeSet( connection, message );
-  } else if (method == "VolumeGet") {
-    return player_VolumeGet( connection, message );
-  } else if (method == "PositionGet") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "PositionSet") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "GetMetadata") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "GetCaps") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "TrackChange") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "StatusChange") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "CapsChange") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  }
-  CLog::Log(LOGERROR, "DS: messages for player not yet used");
-  return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-// ******************* player distribution methods ***********************************
-// ************** INTROSPECTION ****************
-DBusHandlerResult CDbusServer::handle_introspect_player( DBusConnection *connection, DBusMessage *message )
-{
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-  ADD_STRING( &psz_introspection_xml_data_player );
-  REPLY_SEND;
-}
-
-DBusHandlerResult CDbusServer::player_VolumeGet( DBusConnection *connection, DBusMessage *message )
-{
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-  dbus_int32_t i_dbus_vol = lrint(p_application->GetVolume());
-  ADD_INT32( &i_dbus_vol );
-  REPLY_SEND;
-}
-
-DBusHandlerResult CDbusServer::player_VolumeSet( DBusConnection *connection, DBusMessage *message )
-{
-/* set volume in percentage */
-  REPLY_INIT;
-
-  DBusError error;
-  dbus_error_init( &error );
-
-  dbus_int32_t i_dbus_vol;
-
-  dbus_message_get_args( message, &error,
-    DBUS_TYPE_INT32, &i_dbus_vol,
-    DBUS_TYPE_INVALID );
-
-  if( dbus_error_is_set( &error ) )
-  {
-    CLog::Log(LOGERROR, "DS: messages from dbus %s", error.message );
-    dbus_error_free( &error );
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  }
-
-  p_application->SetVolume(i_dbus_vol);
-  REPLY_SEND;
-}
-
-DBusHandlerResult CDbusServer::player_GetStatus( DBusConnection *connection, DBusMessage *message )
-{
-/* returns the current status as a struct of 4 ints */
-/*
-  First   0 = Playing, 1 = Paused, 2 = Stopped.
-  Second  0 = Playing linearly , 1 = Playing randomly.
-  Third   0 = Go to the next element once the current has finished playing , 1 = Repeat the current element
-  Fourth  0 = Stop playing once the last element has been played, 1 = Never give up playing *
-*/
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-
-  dbus_uint16_t i_status_1 = 2;
-
-  if(p_application->IsPaused()) {
-    if (p_application->IsPlaying()) {
-      i_status_1 = 1;
-    }
-  } else {
-    if (p_application->IsPlaying()) {
-      i_status_1 = 0;
-    }
-  }
-
-  dbus_uint16_t i_status_2 = 0;
-  dbus_uint16_t i_status_3 = 0;
-  dbus_uint16_t i_status_4 = 0;
-
-  DBusMessageIter status;
-
-  if( !dbus_message_iter_open_container( &args, DBUS_TYPE_STRUCT, NULL, &status ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-  if( !dbus_message_iter_append_basic( &status, DBUS_TYPE_UINT16, &i_status_1 ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-  if( !dbus_message_iter_append_basic( &status, DBUS_TYPE_UINT16, &i_status_2 ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-  if( !dbus_message_iter_append_basic( &status, DBUS_TYPE_UINT16, &i_status_3 ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-  if( !dbus_message_iter_append_basic( &status, DBUS_TYPE_UINT16, &i_status_4 ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-  if( !dbus_message_iter_close_container( &args, &status ) )
-    return DBUS_HANDLER_RESULT_NEED_MEMORY;
-  REPLY_SEND;
-}
-
-DBusHandlerResult CDbusServer::player_Stop( DBusConnection *connection, DBusMessage *message )
-{
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-  p_application->StopPlaying();
-  REPLY_SEND;
-}
-
-DBusHandlerResult CDbusServer::player_Pause( DBusConnection *connection, DBusMessage *message )
-{
-/*
- * TODO a real pause system not stop ;)
- */
-
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-  p_application->StopPlaying();
-  REPLY_SEND;
-}
-
-
-
-// ************ tracklist message parser *********************
-DBusHandlerResult CDbusServer::got_message_tracklist( DBusConnection *connection, DBusMessage *message )
-{
-  if ((!connection) || (!message)) {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  }
-
-  std::string method = dbus_message_get_member(message);
-  if (method == "Introspect") {
-    return handle_introspect_tracklist( connection, message );
-  } else if (method == "AddTrack") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "DelTrack") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "GetMetadata") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "GetCurrentTrack") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "GetLength") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "SetLoop") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "SetRandom") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  } else if (method == "TrackListChange") {
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-  }
-
-  CLog::Log(LOGERROR, "DS: messages for tracklist not yet used");
-  return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-// ******************* tracklist distribution methods ***********************************
-// ************** INTROSPECTION ****************
-DBusHandlerResult CDbusServer::handle_introspect_tracklist( DBusConnection *connection, DBusMessage *message )
-{
-  REPLY_INIT;
-  OUT_ARGUMENTS;
-  ADD_STRING( &psz_introspection_xml_data_tracklist );
-  REPLY_SEND;
-}
-
-#endif // HAS_DBUS_SERVER
diff --git a/xbmc/interfaces/DbusServer.h b/xbmc/interfaces/DbusServer.h
deleted file mode 100644 (file)
index 598c2db..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-#ifndef __DBUS_SERVER_H__
-#define __DBUS_SERVER_H__
-
-/*
- *      Copyright (C) 2009 Azur Digital Networks
- *      http://www.azurdigitalnetworks.net
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, write to
- *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *  http://www.gnu.org/copyleft/gpl.html
- *
- */
-
-#include "system.h"
-#include "threads/Thread.h"
-#include "threads/CriticalSection.h"
-#include <map>
-#include <queue>
-#include <dbus/dbus.h>
-
-#ifdef HAS_DBUS_SERVER
-
-/* MPRIS VERSION */
-#define XBMC_MPRIS_VERSION_MAJOR     1
-#define XBMC_MPRIS_VERSION_MINOR     0
-
-/* PACKAGE/VERSION */
-#define XBMC_MPRIS_VERSION     "0.9.04"
-#define XBMC_MPRIS_PACKAGE     "xbmc"
-
-/* DBUS IDENTIFIERS */
-
-/* name registered on the session bus */
-#define XBMC_MPRIS_DBUS_SERVICE     "org.mpris.xbmc"
-#define XBMC_MPRIS_DBUS_INTROSPECT  "Introspect"
-#define MPRIS_DBUS_INTERFACE        "org.freedesktop.MediaPlayer"
-#define MPRIS_DBUS_ROOT_PATH        "/"
-#define MPRIS_DBUS_PLAYER_PATH      "/Player"
-#define MPRIS_DBUS_TRACKLIST_PATH   "/TrackList"
-
-/* MACROS */
-
-#define DBUS_METHOD( method_function ) \
-    DBusHandlerResult method_function( DBusConnection *p_conn, DBusMessage *p_from, void *p_this )
-
-#define DBUS_METHOD_IMPL( method_function ) \
-    DBusHandlerResult CDbusServer::method_function( DBusConnection *p_conn, DBusMessage *p_from, void *p_this )
-
-#define DBUS_SIGNAL( signal_function ) \
-    DBusHandlerResult signal_function( DBusConnection *p_conn, void *p_data )
-
-#define REPLY_INIT \
-    DBusMessage* p_msg = dbus_message_new_method_return( message ); \
-    if( !p_msg ) return DBUS_HANDLER_RESULT_NEED_MEMORY; \
-
-#define REPLY_SEND \
-    if( !dbus_connection_send( p_conn, p_msg, NULL ) ) \
-        return DBUS_HANDLER_RESULT_NEED_MEMORY; \
-    dbus_connection_flush( p_conn ); \
-    dbus_message_unref( p_msg ); \
-    return DBUS_HANDLER_RESULT_HANDLED
-
-#define SIGNAL_INIT( signal ) \
-    DBusMessage *p_msg = dbus_message_new_signal( MPRIS_DBUS_PLAYER_PATH, \
-        MPRIS_DBUS_INTERFACE, signal ); \
-    if( !p_msg ) return DBUS_HANDLER_RESULT_NEED_MEMORY; \
-
-#define SIGNAL_SEND \
-    if( !dbus_connection_send( p_conn, p_msg, NULL ) ) \
-        return DBUS_HANDLER_RESULT_NEED_MEMORY; \
-    dbus_message_unref( p_msg ); \
-    dbus_connection_flush( p_conn ); \
-    return DBUS_HANDLER_RESULT_HANDLED
-
-#define OUT_ARGUMENTS \
-    DBusMessageIter args; \
-    dbus_message_iter_init_append( p_msg, &args )
-
-#define DBUS_ADD( dbus_type, value ) \
-    if( !dbus_message_iter_append_basic( &args, dbus_type, value ) ) \
-        return DBUS_HANDLER_RESULT_NEED_MEMORY
-
-#define ADD_STRING( s ) DBUS_ADD( DBUS_TYPE_STRING, s )
-#define ADD_BOOL( b ) DBUS_ADD( DBUS_TYPE_BOOLEAN, b )
-#define ADD_INT32( i ) DBUS_ADD( DBUS_TYPE_INT32, i )
-#define ADD_BYTE( b ) DBUS_ADD( DBUS_TYPE_BYTE, b )
-
-
-/* Handle  messages reception */
-#define METHOD_FUNC( method, function ) \
-    else if( dbus_message_is_method_call( p_from, MPRIS_DBUS_INTERFACE, method ) )\
-        return function( p_conn, p_from, p_this )
-
-#endif
-
-class CApplication;
-
-namespace DBUSSERVER
-{
-
-  /**********************************************************************/
-  /* DBUSServer Class                                                   */
-  /**********************************************************************/
-  class CDbusServer : public IRunnable
-  {
-  public:
-    static void RemoveInstance();
-    static CDbusServer* GetInstance();
-    virtual ~CDbusServer() {}
-
-    // IRunnable entry point for thread
-    virtual void  Run();
-
-    bool Running()
-    {
-      return m_bRunning;
-    }
-
-    // start / stop server
-    void StartServer(CApplication* );
-    void StopServer(bool bWait);
-
-    // get events
-    bool ExecuteNextAction();
-
-    friend DBusHandlerResult xbmc_dbus_message_handler_root(DBusConnection *, DBusMessage *, void *);
-    DBusHandlerResult got_message_root(DBusConnection *, DBusMessage *);
-
-    friend DBusHandlerResult xbmc_dbus_message_handler_player(DBusConnection *, DBusMessage *, void *);
-    DBusHandlerResult got_message_player(DBusConnection *, DBusMessage *);
-
-    friend DBusHandlerResult xbmc_dbus_message_handler_tracklist(DBusConnection *, DBusMessage *, void *);
-    DBusHandlerResult got_message_tracklist(DBusConnection *, DBusMessage *);
-
-  protected:
-    CDbusServer();
-    void ProcessEvents();
-    CThread*         m_pThread;
-    static CDbusServer* m_pInstance;
-    bool             m_bStop;
-    bool             m_bRunning;
-    CCriticalSection m_critSection;
-    CApplication     *p_application;
-
-  private:
-    DBusHandlerResult handle_introspect_root( DBusConnection *, DBusMessage * );
-    DBusHandlerResult handle_introspect_player( DBusConnection *, DBusMessage * );
-    DBusHandlerResult handle_introspect_tracklist( DBusConnection *, DBusMessage * );
-    DBusHandlerResult root_Identity( DBusConnection *, DBusMessage * );
-    DBusHandlerResult root_MprisVersion( DBusConnection *, DBusMessage * );
-    DBusHandlerResult player_VolumeSet( DBusConnection *, DBusMessage * );
-    DBusHandlerResult player_VolumeGet( DBusConnection *, DBusMessage * );
-    DBusHandlerResult player_GetStatus( DBusConnection *, DBusMessage * );
-    DBusHandlerResult player_Stop( DBusConnection *, DBusMessage * );
-    DBusHandlerResult player_Pause( DBusConnection *, DBusMessage * );
-
-    bool connect(DBusConnection **);
-    DBusConnection *p_conn;
-    bool _ok;
-
-  };
-
-}
-
-#endif // __DBUS_SERVER_H__
index aab575f..35360a6 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2012 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
 class CVariant;
 namespace ANNOUNCEMENT
 {
-  enum EAnnouncementFlag
+  enum AnnouncementFlag
   {
     Player = 0x1,
     GUI = 0x2,
     System = 0x4,
     VideoLibrary = 0x8,
     AudioLibrary = 0x10,
-    Other = 0x20
+    Application = 0x20,
+    Other = 0x40
   };
 
-  #define ANNOUNCE_ALL (Player | GUI | System | VideoLibrary | AudioLibrary | Other)
+  #define ANNOUNCE_ALL (Player | GUI | System | VideoLibrary | AudioLibrary | Application | Other)
+
+  /*!
+    \brief Returns a string representation for the 
+    given AnnouncementFlag
+    \param notification Specific AnnouncementFlag
+    \return String representation of the given AnnouncementFlag
+    */
+  inline const char *AnnouncementFlagToString(const AnnouncementFlag &notification)
+  {
+    switch (notification)
+    {
+    case Player:
+      return "Player";
+    case GUI:
+      return "GUI";
+    case System:
+      return "System";
+    case VideoLibrary:
+      return "VideoLibrary";
+    case AudioLibrary:
+      return "AudioLibrary";
+    case Application:
+      return "Application";
+    case Other:
+      return "Other";
+    default:
+      return "Unknown";
+    }
+  }
 
   class IAnnouncer
   {
   public:
     IAnnouncer() { };
     virtual ~IAnnouncer() { };
-    virtual void Announce(EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data) = 0;
+    virtual void Announce(AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data) = 0;
   };
 }
index b26f401..c7ca65a 100644 (file)
@@ -3,16 +3,6 @@ ARCH=@ARCH@
 SRCS = AnnouncementManager.cpp \
        Builtins.cpp \
 
-ifeq ($(findstring linux,$(ARCH)), linux)
-SRCS+=  DbusServer.cpp \
-
-endif
-
-ifeq ($(findstring arm,$(ARCH)), arm)
-SRCS+=  DbusServer.cpp \
-
-endif
-
 LIB=interfaces.a
 
 include @abs_top_srcdir@/Makefile.include
index a2bc84b..4a7a5c6 100644 (file)
@@ -67,13 +67,14 @@ int CXbmcConfiguration::BookmarkSize( int eid, webs_t wp, CStdString& response,
   if (pShares)
   {
     char buffer[10];
+    sprintf(buffer,"%i",pShares->size());
 
-    if (eid!=-1) 
-      ejSetResult( eid, itoa(pShares->size(), buffer, 10));
+    if (eid!=-1)
+      ejSetResult( eid, buffer);
     else
     {
       CStdString tmp;
-      tmp.Format("%s", itoa(pShares->size(), buffer, 10));
+      tmp.Format("%i", pShares->size());
       response="" + tmp;
     }
 
index 49b214a..28a84a6 100644 (file)
@@ -187,9 +187,9 @@ bool CXbmcHttp::decodeBase64ToFile( const CStdString &inString, const CStdString
   try
   {
     if (append)
-      outfile = fopen_utf8(_P(outfilename).c_str(), "ab" );
+      outfile = fopen_utf8(CSpecialProtocol::TranslatePath(outfilename).c_str(), "ab" );
     else
-      outfile = fopen_utf8(_P(outfilename).c_str(), "wb" );
+      outfile = fopen_utf8(CSpecialProtocol::TranslatePath(outfilename).c_str(), "wb" );
     while( ptr < inString.length() )
     {
       for( len = 0, i = 0; i < 4 && ptr < inString.length(); i++ ) 
@@ -2085,7 +2085,7 @@ int CXbmcHttp::xbmcSetKey(int numParas, CStdString paras[])
       }
     }
     CKey tempKey(buttonCode, leftTrigger, rightTrigger, fLeftThumbX, fLeftThumbY, fRightThumbX, fRightThumbY) ;
-    tempKey.SetFromHttpApi(true);
+    tempKey.SetFromService(true);
     key = tempKey;
     lastKey = key;
     return SetResponse(openTag+"OK");
index 9228bb4..2f0f8e6 100644 (file)
@@ -28,56 +28,54 @@ using namespace INFO;
 
 #define DEFAULT_VALUE -1
 
-void CSkinVariable::LoadFromXML(const TiXmlElement *root)
+const CSkinVariableString* CSkinVariable::CreateFromXML(const TiXmlElement& node, int context)
 {
-  const TiXmlElement* node = root->FirstChildElement("variable");
-  while (node)
+  const char* name = node.Attribute("name");
+  if (name)
   {
-    if (node->Attribute("name") && node->FirstChild())
+    CSkinVariableString* tmp = new CSkinVariableString;
+    tmp->m_name = name;
+    tmp->m_context = context;
+    const TiXmlElement* valuenode = node.FirstChildElement("value");
+    while (valuenode)
     {
-      const char* type = node->Attribute("type");
-
-      // parameter type will be used in future for numeric and bool variables
-      if (!type || strnicmp(type, "text", 4) == 0)
+      if (valuenode->FirstChild())
       {
-        CSkinVariableString tmp;
-        tmp.m_name = node->Attribute("name");
-        const TiXmlElement* valuenode = node->FirstChildElement("value");
-        while (valuenode)
-        {
-          if (valuenode->FirstChild())
-          {
-            CSkinVariableString::ConditionLabelPair pair;
-            if (valuenode->Attribute("condition"))
-              pair.m_condition = g_infoManager.Register(valuenode->Attribute("condition"));
-            else
-              pair.m_condition = DEFAULT_VALUE;
+        CSkinVariableString::ConditionLabelPair pair;
+        if (valuenode->Attribute("condition"))
+          pair.m_condition = g_infoManager.Register(valuenode->Attribute("condition"), context);
+        else
+          pair.m_condition = DEFAULT_VALUE;
 
-            pair.m_label = CGUIInfoLabel(valuenode->FirstChild()->Value());
-            tmp.m_conditionLabelPairs.push_back(pair);
-            if (pair.m_condition == DEFAULT_VALUE)
-              break; // once we reach default value (without condition) break iterating
-          }
-          valuenode = valuenode->NextSiblingElement("value");
-        }
-        if (tmp.m_conditionLabelPairs.size() > 0)
-          g_infoManager.RegisterSkinVariableString(tmp);
+        pair.m_label = CGUIInfoLabel(valuenode->FirstChild()->Value());
+        tmp->m_conditionLabelPairs.push_back(pair);
+        if (pair.m_condition == DEFAULT_VALUE)
+          break; // once we reach default value (without condition) break iterating
       }
+      valuenode = valuenode->NextSiblingElement("value");
     }
-    node = node->NextSiblingElement("variable");
+    if (tmp->m_conditionLabelPairs.size() > 0)
+      return tmp;
+    delete tmp;
   }
+  return NULL;
 }
 
 CSkinVariableString::CSkinVariableString()
 {
 }
 
+int CSkinVariableString::GetContext() const
+{
+  return m_context;
+}
+
 const CStdString& CSkinVariableString::GetName() const
 {
   return m_name;
 }
 
-CStdString CSkinVariableString::GetValue(int contextWindow, bool preferImage /* = false*/, const CGUIListItem *item /* = NULL */)
+CStdString CSkinVariableString::GetValue(bool preferImage /* = false*/, const CGUIListItem *item /* = NULL */)
 {
   for (VECCONDITIONLABELPAIR::const_iterator it = m_conditionLabelPairs.begin() ; it != m_conditionLabelPairs.end(); it++)
   {
@@ -86,7 +84,7 @@ CStdString CSkinVariableString::GetValue(int contextWindow, bool preferImage /*
       if (item)
         return it->m_label.GetItemLabel(item, preferImage);
       else
-        return it->m_label.GetLabel(contextWindow, preferImage);
+        return it->m_label.GetLabel(m_context, preferImage);
     }
   }
   return "";
index b880121..907aab7 100644 (file)
@@ -26,21 +26,25 @@ class TiXmlElement;
 
 namespace INFO
 {
+class CSkinVariableString;
+
 class CSkinVariable
 {
 public:
-  static void LoadFromXML(const TiXmlElement *root);
+  static const CSkinVariableString* CreateFromXML(const TiXmlElement& node, int context);
 };
 
 class CSkinVariableString
 {
 public:
   const CStdString& GetName() const;
-  CStdString GetValue(int contextWindow, bool preferImage = false, const CGUIListItem *item = NULL );
+  int GetContext() const;
+  CStdString GetValue(bool preferImage = false, const CGUIListItem *item = NULL );
 private:
   CSkinVariableString();
 
   CStdString m_name;
+  int m_context;
 
   struct ConditionLabelPair
   {
index 68107a8..8b17ef8 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include "ApplicationOperations.h"
+#include "InputOperations.h"
 #include "Application.h"
 #include "ApplicationMessenger.h"
 #include "FileItem.h"
 
 using namespace JSONRPC;
 
-JSON_STATUS CApplicationOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CApplicationOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CVariant properties = CVariant(CVariant::VariantTypeObject);
   for (unsigned int index = 0; index < parameterObject["properties"].size(); index++)
   {
     CStdString propertyName = parameterObject["properties"][index].asString();
     CVariant property;
-    JSON_STATUS ret;
+    JSONRPC_STATUS ret;
     if ((ret = GetPropertyValue(propertyName, property)) != OK)
       return ret;
 
@@ -49,31 +50,64 @@ JSON_STATUS CApplicationOperations::GetProperties(const CStdString &method, ITra
   return OK;
 }
 
-JSON_STATUS CApplicationOperations::SetVolume(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CApplicationOperations::SetVolume(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  int oldVolume = g_application.GetVolume();
-  int volume = (int)parameterObject["value"].asInteger();
+  bool up = false;
+  if (parameterObject["volume"].isInteger())
+  {
+    int oldVolume = g_application.GetVolume();
+    int volume = (int)parameterObject["volume"].asInteger();
   
-  g_application.SetVolume(volume);
+    g_application.SetVolume(volume);
 
-  g_application.getApplicationMessenger().ShowVolumeBar(oldVolume < volume);
+    up = oldVolume < volume;
+  }
+  else if (parameterObject["volume"].isString())
+  {
+    JSONRPC_STATUS ret;
+    std::string direction = parameterObject["volume"].asString();
+    if (direction.compare("increment") == 0)
+    {
+      ret = CInputOperations::SendAction(ACTION_VOLUME_UP, false, true);
+      up = true;
+    }
+    else if (direction.compare("decrement") == 0)
+    {
+      ret = CInputOperations::SendAction(ACTION_VOLUME_DOWN, false, true);
+      up = false;
+    }
+    else
+      return InvalidParams;
+
+    if (ret != ACK && ret != OK)
+      return ret;
+  }
+  else
+    return InvalidParams;
+
+  g_application.getApplicationMessenger().ShowVolumeBar(up);
 
   return GetPropertyValue("volume", result);
 }
 
-JSON_STATUS CApplicationOperations::ToggleMute(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CApplicationOperations::SetMute(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  g_application.getApplicationMessenger().SendAction(CAction(ACTION_MUTE));
-  return GetPropertyValue("volume", result);
+  if ((parameterObject["mute"].isString() && parameterObject["mute"].asString().compare("toggle") == 0) ||
+      (parameterObject["mute"].isBoolean() && parameterObject["mute"].asBoolean() != g_application.IsMuted()))
+    g_application.getApplicationMessenger().SendAction(CAction(ACTION_MUTE));
+  else if (!parameterObject["mute"].isBoolean() && !parameterObject["mute"].isString())
+    return InvalidParams;
+
+  return GetPropertyValue("muted", result);
 }
 
-JSON_STATUS CApplicationOperations::Quit(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CApplicationOperations::Quit(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   g_application.getApplicationMessenger().Quit();
   return ACK;
 }
 
-JSON_STATUS CApplicationOperations::GetPropertyValue(const CStdString &property, CVariant &result)
+JSONRPC_STATUS CApplicationOperations::GetPropertyValue(const CStdString &property, CVariant &result)
 {
   if (property.Equals("volume"))
     result = g_application.GetVolume();
@@ -90,11 +124,11 @@ JSON_STATUS CApplicationOperations::GetPropertyValue(const CStdString &property,
     result["revision"] = GIT_REV;
 #endif
     CStdString tag(VERSION_TAG);
-    if (tag.Equals("PRE-"))
+    if (tag.ToLower().Equals("-pre"))
       result["tag"] = "alpha";
-    else if (tag.Equals("BETA-"))
+    else if (tag.ToLower().Left(5).Equals("-beta"))
       result["tag"] = "beta";
-    else if (tag.Left(2).Equals("RC"))
+    else if (tag.ToLower().Left(3).Equals("-rc"))
       result["tag"] = "releasecandidate";
     else if (tag.empty())
       result["tag"] = "stable";
index 033d82f..906e20b 100644 (file)
@@ -29,13 +29,13 @@ namespace JSONRPC
   class CApplicationOperations : CFileItemHandler
   {
   public:
-    static JSON_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS SetVolume(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS ToggleMute(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS SetVolume(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS SetMute(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS Quit(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Quit(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
   private:
-    static JSON_STATUS GetPropertyValue(const CStdString &property, CVariant &result);
+    static JSONRPC_STATUS GetPropertyValue(const CStdString &property, CVariant &result);
   };
 }
index 9fa535d..284b80d 100644 (file)
@@ -36,7 +36,7 @@ using namespace MUSIC_INFO;
 using namespace JSONRPC;
 using namespace XFILE;
 
-JSON_STATUS CAudioLibrary::GetArtists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetArtists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
@@ -55,14 +55,14 @@ JSON_STATUS CAudioLibrary::GetArtists(const CStdString &method, ITransportLayer
     albumArtistsOnly = parameterObject["albumartistsonly"].asBoolean();
 
   CFileItemList items;
-  if (musicdatabase.GetArtistsNav("", items, genreID, albumArtistsOnly))
+  if (musicdatabase.GetArtistsNav("musicdb://2/", items, genreID, albumArtistsOnly))
     HandleFileItemList("artistid", false, "artists", items, param, result);
 
   musicdatabase.Close();
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::GetArtistDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetArtistDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int artistID = (int)parameterObject["artistid"].asInteger();
 
@@ -88,7 +88,7 @@ JSON_STATUS CAudioLibrary::GetArtistDetails(const CStdString &method, ITransport
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::GetAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
@@ -98,14 +98,14 @@ JSON_STATUS CAudioLibrary::GetAlbums(const CStdString &method, ITransportLayer *
   int genreID   = (int)parameterObject["genreid"].asInteger();
 
   CFileItemList items;
-  if (musicdatabase.GetAlbumsNav("", items, genreID, artistID, -1, -1))
+  if (musicdatabase.GetAlbumsNav("musicdb://3/", items, genreID, artistID, -1, -1))
     HandleFileItemList("albumid", false, "albums", items, parameterObject, result);
 
   musicdatabase.Close();
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int albumID = (int)parameterObject["albumid"].asInteger();
 
@@ -131,7 +131,7 @@ JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportL
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::GetSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
@@ -142,14 +142,14 @@ JSON_STATUS CAudioLibrary::GetSongs(const CStdString &method, ITransportLayer *t
   int genreID  = (int)parameterObject["genreid"].asInteger();
 
   CFileItemList items;
-  if (musicdatabase.GetSongsNav("", items, genreID, artistID, albumID))
+  if (musicdatabase.GetSongsNav("musicdb://4/", items, genreID, artistID, albumID))
     HandleFileItemList("songid", true, "songs", items, parameterObject, result);
 
   musicdatabase.Close();
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::GetSongDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetSongDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int idSong = (int)parameterObject["songid"].asInteger();
 
@@ -170,18 +170,14 @@ JSON_STATUS CAudioLibrary::GetSongDetails(const CStdString &method, ITransportLa
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::GetRecentlyAddedAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetRecentlyAddedAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
     return InternalError;
 
-  int amount = (int)parameterObject["albums"].asInteger();
-  if (amount < 0)
-    amount = 0;
-
   VECALBUMS albums;
-  if (musicdatabase.GetRecentlyAddedAlbums(albums, (unsigned int)amount))
+  if (musicdatabase.GetRecentlyAddedAlbums(albums))
   {
     CFileItemList items;
 
@@ -202,13 +198,13 @@ JSON_STATUS CAudioLibrary::GetRecentlyAddedAlbums(const CStdString &method, ITra
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::GetRecentlyAddedSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetRecentlyAddedSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
     return InternalError;
 
-  int amount = (int)parameterObject["albums"].asInteger();
+  int amount = (int)parameterObject["albumlimit"].asInteger();
   if (amount < 0)
     amount = 0;
 
@@ -220,14 +216,14 @@ JSON_STATUS CAudioLibrary::GetRecentlyAddedSongs(const CStdString &method, ITran
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
     return InternalError;
 
   CFileItemList items;
-  if (musicdatabase.GetGenresNav("", items))
+  if (musicdatabase.GetGenresNav("musicdb://1/", items))
   {
     /* need to set strTitle in each item*/
     for (unsigned int i = 0; i < (unsigned int)items.Size(); i++)
@@ -240,34 +236,76 @@ JSON_STATUS CAudioLibrary::GetGenres(const CStdString &method, ITransportLayer *
   return OK;
 }
 
-JSON_STATUS CAudioLibrary::Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::GetRecentlyPlayedAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  g_application.getApplicationMessenger().ExecBuiltIn("updatelibrary(music)");
-  return ACK;
+  CMusicDatabase musicdatabase;
+  if (!musicdatabase.Open())
+    return InternalError;
+
+  VECALBUMS albums;
+  if (musicdatabase.GetRecentlyPlayedAlbums(albums))
+  {
+    CFileItemList items;
+
+    for (unsigned int index = 0; index < albums.size(); index++)
+    {
+      CStdString path;
+      path.Format("musicdb://8/%i/", albums[index].idAlbum);
+
+      CFileItemPtr item;
+      FillAlbumItem(albums[index], path, item);
+      items.Add(item);
+    }
+
+    HandleFileItemList("albumid", false, "albums", items, parameterObject, result);
+  }
+
+  musicdatabase.Close();
+  return OK;
+}
+
+JSONRPC_STATUS CAudioLibrary::GetRecentlyPlayedSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  CMusicDatabase musicdatabase;
+  if (!musicdatabase.Open())
+    return InternalError;
+
+  CFileItemList items;
+  if (musicdatabase.GetRecentlyPlayedAlbumSongs("musicdb://", items))
+    HandleFileItemList("songid", true, "songs", items, parameterObject, result);
+
+  musicdatabase.Close();
+  return OK;
 }
 
-JSON_STATUS CAudioLibrary::Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  CStdString path = parameterObject["path"].asString();
-  bool singleFile = parameterObject["singlefile"].asBoolean();
+  std::string directory = parameterObject["directory"].asString();
+  CStdString cmd;
+  if (directory.empty())
+    cmd = "updatelibrary(music)";
+  else
+    cmd.Format("updatelibrary(music, %s)", directory.c_str());
 
-  if (!singleFile && path.IsEmpty())
-    return InvalidParams;
+  g_application.getApplicationMessenger().ExecBuiltIn(cmd);
+  return ACK;
+}
 
+JSONRPC_STATUS CAudioLibrary::Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
   CStdString cmd;
-  if (singleFile)
-    cmd.Format("exportlibrary(music, true, %s, %s, %s)",
-      parameterObject["images"].asBoolean() ? "true" : "false",
-      parameterObject["overwrite"].asBoolean() ? "true" : "false",
-      parameterObject["actorthumbs"].asBoolean() ? "true" : "false");
+  if (parameterObject["options"].isMember("path"))
+    cmd.Format("exportlibrary(music, false, %s)", parameterObject["options"]["path"].asString());
   else
-    cmd.Format("exportlibrary(music, false, %s)", path);
+    cmd.Format("exportlibrary(music, true, %s, %s)",
+      parameterObject["options"]["images"].asBoolean() ? "true" : "false",
+      parameterObject["options"]["overwrite"].asBoolean() ? "true" : "false");
 
   g_application.getApplicationMessenger().ExecBuiltIn(cmd);
   return ACK;
 }
 
-JSON_STATUS CAudioLibrary::Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CAudioLibrary::Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   g_application.getApplicationMessenger().ExecBuiltIn("cleanlibrary(music)");
   return ACK;
@@ -277,13 +315,27 @@ bool CAudioLibrary::FillFileItem(const CStdString &strFilename, CFileItem &item)
 {
   CMusicDatabase musicdatabase;
   bool status = false;
-  if (!strFilename.empty() && !CDirectory::Exists(strFilename) && musicdatabase.Open())
+  if (!strFilename.empty() && musicdatabase.Open())
   {
-    CSong song;
-    if (musicdatabase.GetSongByFileName(strFilename, song))
+    if (CDirectory::Exists(strFilename))
+    {
+      CAlbum album;
+      int albumid = musicdatabase.GetAlbumIdByPath(strFilename);
+      if (musicdatabase.GetAlbumInfo(albumid, album, NULL))
+      {
+        item = CFileItem(strFilename, album);
+        item.SetMusicThumb();
+        status = true;
+      }
+    }
+    else
     {
-      item = CFileItem(song);
-      status = true;
+      CSong song;
+      if (musicdatabase.GetSongByFileName(strFilename, song))
+      {
+        item = CFileItem(song);
+        status = true;
+      }
     }
 
     musicdatabase.Close();
@@ -326,6 +378,22 @@ bool CAudioLibrary::FillFileItemList(const CVariant &parameterObject, CFileItemL
     }
 
     musicdatabase.Close();
+
+    if (success)
+    {
+      // If we retrieved the list of songs by "artistid"
+      // we sort by album (and implicitly by track number)
+      if (artistID != -1)
+        list.Sort(SORT_METHOD_ALBUM_IGNORE_THE, SORT_ORDER_ASC);
+      // If we retrieve the list of songs by "genreid"
+      // we sort by artist (and implicitly by album and track number)
+      else if (genreID != -1)
+        list.Sort(SORT_METHOD_ARTIST_IGNORE_THE, SORT_ORDER_ASC);
+      // otherwise we sort by track number
+      else
+        list.Sort(SORT_METHOD_TRACKNUM, SORT_ORDER_ASC);
+
+    }
   }
 
   return success;
index 17066b0..6d58918 100644 (file)
@@ -29,19 +29,22 @@ namespace JSONRPC
   class CAudioLibrary : public CFileItemHandler
   {
   public:
-    static JSON_STATUS GetArtists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetArtistDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetSongDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetRecentlyAddedAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetRecentlyAddedSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetArtists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetArtistDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetSongDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetRecentlyAddedAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetRecentlyAddedSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetRecentlyPlayedAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetRecentlyPlayedSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+
+    static JSONRPC_STATUS Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
     static bool FillFileItem(const CStdString &strFilename, CFileItem &item);
     static bool FillFileItemList(const CVariant &parameterObject, CFileItemList &list);
index 108f291..9a9afac 100644 (file)
@@ -34,6 +34,7 @@
 #include "video/VideoDatabase.h"
 #include "filesystem/Directory.h"
 #include "filesystem/File.h"
+#include "TextureCache.h"
 
 using namespace MUSIC_INFO;
 using namespace JSONRPC;
@@ -71,14 +72,36 @@ void CFileItemHandler::FillDetails(ISerializable* info, CFileItemPtr item, const
         continue;
       }
 
-      if (field == "fanart")
+      if (field == "fanart" && !item->HasPictureInfoTag())
       {
-        CStdString cachedFanArt = item->GetCachedFanart();
-        if (!cachedFanArt.IsEmpty())
+        CStdString fanart;
+        if (item->HasProperty("fanart_image"))
+          fanart = item->GetProperty("fanart_image").asString();
+        if (fanart.empty())
+          fanart = item->GetCachedFanart();
+        if (!fanart.empty())
+          result["fanart"] = fanart.c_str();
+
+        continue;
+      }
+
+      if (item->HasVideoInfoTag() && item->GetVideoContentType() == VIDEODB_CONTENT_TVSHOWS)
+      {
+        if (item->GetVideoInfoTag()->m_iSeason < 0 && field == "season")
         {
-          result["fanart"] = cachedFanArt.c_str();
+          result[field] = (int)item->GetProperty("totalseasons").asInteger();
+          continue;
         }
+        if (field == "watchedepisodes")
+        {
+          result[field] = (int)item->GetProperty("watchedepisodes").asInteger();
+          continue;
+        }
+      }
 
+      if (field == "lastmodified" && item->m_dateTime.IsValid())
+      {
+        result[field] = item->m_dateTime.GetAsLocalizedDateTime();
         continue;
       }
     }
@@ -116,80 +139,114 @@ void CFileItemHandler::HandleFileItem(const char *ID, bool allowFile, const char
   bool hasFileField = false;
   bool hasThumbnailField = false;
 
-  for (unsigned int i = 0; i < validFields.size(); i++)
+  if (item.get())
   {
-    CStdString field = validFields[i].asString();
+    for (unsigned int i = 0; i < validFields.size(); i++)
+    {
+      CStdString field = validFields[i].asString();
 
-    if (field == "file")
-      hasFileField = true;
-    if (field == "thumbnail")
-      hasThumbnailField = true;
-  }
+      if (field == "file")
+        hasFileField = true;
+      if (field == "thumbnail")
+        hasThumbnailField = true;
+    }
 
-  if (allowFile && hasFileField)
-  {
-    if (item->HasVideoInfoTag() && !item->GetVideoInfoTag()->GetPath().IsEmpty())
-        object["file"] = item->GetVideoInfoTag()->GetPath().c_str();
-    if (item->HasMusicInfoTag() && !item->GetMusicInfoTag()->GetURL().IsEmpty())
-      object["file"] = item->GetMusicInfoTag()->GetURL().c_str();
+    if (allowFile && hasFileField)
+    {
+      if (item->HasVideoInfoTag() && !item->GetVideoInfoTag()->GetPath().IsEmpty())
+          object["file"] = item->GetVideoInfoTag()->GetPath().c_str();
+      if (item->HasMusicInfoTag() && !item->GetMusicInfoTag()->GetURL().IsEmpty())
+        object["file"] = item->GetMusicInfoTag()->GetURL().c_str();
 
-    if (!object.isMember("file"))
-      object["file"] = item->GetPath().c_str();
-  }
+      if (!object.isMember("file"))
+        object["file"] = item->GetPath().c_str();
+    }
 
-  if (ID)
-  {
-    if (stricmp(ID, "genreid") == 0)
+    if (ID)
     {
-      CStdString genre = item->GetPath();
-      genre.TrimRight('/');
-      object[ID] = atoi(genre.c_str());
+      if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetDatabaseId() > 0)
+        object[ID] = (int)item->GetMusicInfoTag()->GetDatabaseId();
+      else if (item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_iDbId > 0)
+        object[ID] = item->GetVideoInfoTag()->m_iDbId;
+
+      if (stricmp(ID, "id") == 0)
+      {
+        if (item->HasMusicInfoTag())
+        {
+          if (item->m_bIsFolder && item->IsAlbum())
+            object["type"] = "album";
+          else
+            object["type"] = "song";
+        }
+        else if (item->HasVideoInfoTag())
+        {
+          switch (item->GetVideoContentType())
+          {
+            case VIDEODB_CONTENT_EPISODES:
+              object["type"] = "episode";
+              break;
+
+            case VIDEODB_CONTENT_MUSICVIDEOS:
+              object["type"] = "musicvideo";
+              break;
+
+            case VIDEODB_CONTENT_MOVIES:
+              object["type"] = "movie";
+              break;
+
+            case VIDEODB_CONTENT_TVSHOWS:
+              object["type"] = "tvshow";
+              break;
+
+            default:
+              break;
+          }
+        }
+        else if (item->HasPictureInfoTag())
+          object["type"] = "picture";
+
+        if (!object.isMember("type"))
+          object["type"] = "unknown";
+      }
     }
-    else if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetDatabaseId() > 0)
-      object[ID] = (int)item->GetMusicInfoTag()->GetDatabaseId();
-    else if (item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_iDbId > 0)
-      object[ID] = item->GetVideoInfoTag()->m_iDbId;
 
-    if (stricmp(ID, "id") == 0)
+    if (hasThumbnailField)
     {
-      if (item->HasMusicInfoTag())
-        object["type"] = "song";
+      if (item->HasThumbnail())
+        object["thumbnail"] = item->GetThumbnailImage().c_str();
       else if (item->HasVideoInfoTag())
       {
-        switch (item->GetVideoContentType())
-        {
-          case VIDEODB_CONTENT_EPISODES:
-            object["type"] = "episode";
-            break;
-
-          case VIDEODB_CONTENT_MUSICVIDEOS:
-            object["type"] = "musicvideo";
-            break;
+        CStdString strPath, strFileName;
+        URIUtils::Split(item->GetCachedVideoThumb(), strPath, strFileName);
+        CStdString cachedThumb = strPath + "auto-" + strFileName;
 
-          case VIDEODB_CONTENT_MOVIES:
-            object["type"] = "movie";
-            break;
-        }
+        if (CFile::Exists(cachedThumb))
+          object["thumbnail"] = cachedThumb;
       }
       else if (item->HasPictureInfoTag())
-        object["type"] = "picture";
+      {
+        CStdString thumb = CTextureCache::Get().CheckAndCacheImage(CTextureCache::GetWrappedThumbURL(item->GetPath()));
+        if (!thumb.empty())
+          object["thumbnail"] = thumb;
+      }
 
-      if (!object.isMember("type"))
-        object["type"] = "unknown";
+      if (!object.isMember("thumbnail"))
+        object["thumbnail"] = "";
     }
-  }
 
-  if (hasThumbnailField)
-    object["thumbnail"] = item->GetThumbnailImage().c_str();
+    FillDetails(item.get(), item, validFields, object);
 
-  if (item->HasVideoInfoTag())
-    FillDetails(item->GetVideoInfoTag(), item, validFields, object);
-  if (item->HasMusicInfoTag())
-    FillDetails(item->GetMusicInfoTag(), item, validFields, object);
-  if (item->HasPictureInfoTag())
-    FillDetails(item->GetPictureInfoTag(), item, validFields, object);
+    if (item->HasVideoInfoTag())
+      FillDetails(item->GetVideoInfoTag(), item, validFields, object);
+    if (item->HasMusicInfoTag())
+      FillDetails(item->GetMusicInfoTag(), item, validFields, object);
+    if (item->HasPictureInfoTag())
+      FillDetails(item->GetPictureInfoTag(), item, validFields, object);
 
-  object["label"] = item->GetLabel().c_str();
+    object["label"] = item->GetLabel().c_str();
+  }
+  else
+    object = CVariant(CVariant::VariantTypeNull);
 
   if (resultname)
   {
@@ -225,8 +282,8 @@ bool CFileItemHandler::FillFileItemList(const CVariant &parameterObject, CFileIt
       if (item->IsPicture())
       {
         CPictureInfoTag picture;
-        if (picture.Load(item->GetPath()))
-          *item->GetPictureInfoTag() = picture;
+        picture.Load(item->GetPath());
+        *item->GetPictureInfoTag() = picture;
       }
       if (item->GetLabel().IsEmpty())
         item->SetLabel(CUtil::GetTitleFromPath(file, false));
@@ -270,10 +327,14 @@ bool CFileItemHandler::ParseSortMethods(const CStdString &method, const bool &ig
     sortmethod = ignorethe ? SORT_METHOD_ALBUM_IGNORE_THE : SORT_METHOD_ALBUM;
   else if (method.Equals("genre"))
     sortmethod = SORT_METHOD_GENRE;
+  else if (method.Equals("country"))
+    sortmethod = SORT_METHOD_COUNTRY;
   else if (method.Equals("year"))
     sortmethod = SORT_METHOD_YEAR;
   else if (method.Equals("videorating"))
     sortmethod = SORT_METHOD_VIDEO_RATING;
+  else if (method.Equals("dateadded"))
+    sortmethod = SORT_METHOD_DATEADDED;
   else if (method.Equals("programcount"))
     sortmethod = SORT_METHOD_PROGRAM_COUNT;
   else if (method.Equals("playlist"))
@@ -300,10 +361,12 @@ bool CFileItemHandler::ParseSortMethods(const CStdString &method, const bool &ig
     sortmethod = SORT_METHOD_LASTPLAYED;
   else if (method.Equals("playcount"))
     sortmethod = SORT_METHOD_PLAYCOUNT;
+  else if (method.Equals("listeners"))
+    sortmethod = SORT_METHOD_LISTENERS;
   else if (method.Equals("unsorted"))
     sortmethod = SORT_METHOD_UNSORTED;
-  else if (method.Equals("max"))
-    sortmethod = SORT_METHOD_MAX;
+  else if (method.Equals("bitrate"))
+    sortmethod = SORT_METHOD_BITRATE;
   else
     return false;
 
index 2f0eb9e..53b2ab9 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2012 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
  *
  */
 
-#include "utils/StdString.h"
 #include "JSONRPC.h"
 #include "JSONUtils.h"
 #include "FileItem.h"
+#include "utils/StdString.h"
 
 namespace JSONRPC
 {
index 37e9155..cf0945d 100644 (file)
 using namespace XFILE;
 using namespace JSONRPC;
 
-JSON_STATUS CFileOperations::GetRootDirectory(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+static const unsigned int SourcesSize = 5;
+static CStdString SourceNames[] = { "programs", "files", "video", "music", "pictures" };
+
+JSONRPC_STATUS CFileOperations::GetRootDirectory(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CStdString media = parameterObject["media"].asString();
   media = media.ToLower();
@@ -44,7 +47,13 @@ JSON_STATUS CFileOperations::GetRootDirectory(const CStdString &method, ITranspo
   {
     CFileItemList items;
     for (unsigned int i = 0; i < (unsigned int)sources->size(); i++)
+    {
+      // Do not show sources which are locked
+      if (sources->at(i).m_iHasLock == 2)
+        continue;
+
       items.Add(CFileItemPtr(new CFileItem(sources->at(i))));
+    }
 
     for (unsigned int i = 0; i < (unsigned int)items.Size(); i++)
     {
@@ -55,7 +64,7 @@ JSON_STATUS CFileOperations::GetRootDirectory(const CStdString &method, ITranspo
       }
     }
 
-    CVariant param = parameterObject["properties"];
+    CVariant param(CVariant::VariantTypeObject);
     param["properties"] = CVariant(CVariant::VariantTypeArray);
     param["properties"].append("file");
 
@@ -65,15 +74,25 @@ JSON_STATUS CFileOperations::GetRootDirectory(const CStdString &method, ITranspo
   return OK;
 }
 
-JSON_STATUS CFileOperations::GetDirectory(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CFileOperations::GetDirectory(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CStdString media = parameterObject["media"].asString();
   media = media.ToLower();
 
-  CDirectory directory;
   CFileItemList items;
   CStdString strPath = parameterObject["directory"].asString();
 
+  // Check if this directory is part of a source and whether it's locked
+  VECSOURCES *sources;
+  bool isSource;
+  for (unsigned int index = 0; index < SourcesSize; index++)
+  {
+    sources = g_settings.GetSourcesFromType(SourceNames[index]);
+    int sourceIndex = CUtil::GetMatchingSource(strPath, *sources, isSource);
+    if (sourceIndex >= 0 && sourceIndex < (int)sources->size() && sources->at(sourceIndex).m_iHasLock == 2)
+      return InvalidParams;
+  }
+
   CStdStringArray regexps;
   CStdString extensions = "";
   if (media.Equals("video"))
@@ -92,7 +111,7 @@ JSON_STATUS CFileOperations::GetDirectory(const CStdString &method, ITransportLa
     extensions = g_settings.m_pictureExtensions;
   }
 
-  if (directory.GetDirectory(strPath, items, extensions))
+  if (CDirectory::GetDirectory(strPath, items, extensions))
   {
     CFileItemList filteredDirectories, filteredFiles;
     for (unsigned int i = 0; i < (unsigned int)items.Size(); i++)
@@ -106,16 +125,38 @@ JSON_STATUS CFileOperations::GetDirectory(const CStdString &method, ITransportLa
         items[i]->SetPath(url.GetWithoutUserDetails());
       }
 
-      if (items[i]->m_bIsFolder)
-        filteredDirectories.Add(items[i]);
-      else if ((media == "video" && items[i]->HasVideoInfoTag()) ||
-               (media == "music" && items[i]->HasMusicInfoTag()))
-        filteredFiles.Add(items[i]);
+      if ((media == "video" && items[i]->HasVideoInfoTag()) ||
+          (media == "music" && items[i]->HasMusicInfoTag()) ||
+          (media == "picture" && items[i]->HasPictureInfoTag()) ||
+           media == "files")
+      {
+        if (items[i]->m_bIsFolder)
+          filteredDirectories.Add(items[i]);
+        else 
+          filteredFiles.Add(items[i]);
+      }
       else
       {
         CFileItem fileItem;
-        if (FillFileItem(items[i]->GetPath(), fileItem, media))
-          filteredFiles.Add(CFileItemPtr(new CFileItem(fileItem)));
+        if (FillFileItem(items[i], fileItem, media))
+        {
+          fileItem.m_bIsFolder = items[i]->m_bIsFolder;
+          fileItem.m_dateTime = items[i]->m_dateTime;
+          fileItem.m_dwSize = items[i]->m_dwSize;
+          fileItem.SetMimeType(items[i]->GetMimeType());
+
+          if (items[i]->m_bIsFolder)
+            filteredDirectories.Add(CFileItemPtr(new CFileItem(fileItem)));
+          else
+            filteredFiles.Add(CFileItemPtr(new CFileItem(fileItem)));
+        }
+        else
+        {
+          if (items[i]->m_bIsFolder)
+            filteredDirectories.Add(items[i]);
+          else
+            filteredFiles.Add(items[i]);
+        }
       }
     }
 
@@ -139,7 +180,7 @@ JSON_STATUS CFileOperations::GetDirectory(const CStdString &method, ITransportLa
     if (!hasFileField)
       param["properties"].append("file");
 
-    HandleFileItemList(NULL, true, "files", filteredDirectories, param, result);
+    HandleFileItemList("id", true, "files", filteredDirectories, param, result);
     for (unsigned int index = 0; index < result["files"].size(); index++)
     {
       result["files"][index]["filetype"] = "directory";
@@ -162,29 +203,55 @@ JSON_STATUS CFileOperations::GetDirectory(const CStdString &method, ITransportLa
   return InvalidParams;
 }
 
-JSON_STATUS CFileOperations::Download(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CFileOperations::PrepareDownload(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  std::string protocol;
+  if (transport->PrepareDownload(parameterObject["path"].asString().c_str(), result["details"], protocol))
+  {
+    result["protocol"] = protocol;
+
+    if ((transport->GetCapabilities() & FileDownloadDirect) == FileDownloadDirect)
+      result["mode"] = "direct";
+    else
+      result["mode"] = "redirect";
+
+    return OK;
+  }
+  
+  return InvalidParams;
+}
+
+JSONRPC_STATUS CFileOperations::Download(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   return transport->Download(parameterObject["path"].asString().c_str(), result) ? OK : InvalidParams;
 }
 
-bool CFileOperations::FillFileItem(const CStdString &strFilename, CFileItem &item, CStdString media /* = "" */)
+bool CFileOperations::FillFileItem(const CFileItemPtr &originalItem, CFileItem &item, CStdString media /* = "" */)
 {
+  if (originalItem.get() == NULL)
+    return false;
+
   bool status = false;
-  if (!strFilename.empty() && !CDirectory::Exists(strFilename) && CFile::Exists(strFilename))
+  CStdString strFilename = originalItem->GetPath();
+  if (!strFilename.empty() && (CDirectory::Exists(strFilename) || CFile::Exists(strFilename)))
   {
     if (media.Equals("video"))
-      status |= CVideoLibrary::FillFileItem(strFilename, item);
+      status = CVideoLibrary::FillFileItem(strFilename, item);
     else if (media.Equals("music"))
-      status |= CAudioLibrary::FillFileItem(strFilename, item);
+      status = CAudioLibrary::FillFileItem(strFilename, item);
 
-    if (!status)
+    if (!status && originalItem->GetLabel().empty())
     {
-      item = CFileItem(strFilename, false);
-      if (item.GetLabel().IsEmpty())
-        item.SetLabel(CUtil::GetTitleFromPath(strFilename, false));
-    }
+      bool isDir = CDirectory::Exists(strFilename);
+      CStdString label = CUtil::GetTitleFromPath(strFilename, isDir);
+      if (!label.empty())
+      {
+        item = CFileItem(strFilename, isDir);
+        item.SetLabel(label);
 
-    status = true;
+        status = true;
+      }
+    }
   }
 
   return status;
@@ -204,23 +271,20 @@ bool CFileOperations::FillFileItemList(const CVariant &parameterObject, CFileIte
       CStdString extensions = "";
       CStdStringArray regexps;
 
-      if (media.Equals("video") || media.Equals("music") || media.Equals("pictures"))
+      if (media.Equals("video"))
       {
-        if (media.Equals("video"))
-        {
-          regexps = g_advancedSettings.m_videoExcludeFromListingRegExps;
-          extensions = g_settings.m_videoExtensions;
-        }
-        else if (media.Equals("music"))
-        {
-          regexps = g_advancedSettings.m_audioExcludeFromListingRegExps;
-          extensions = g_settings.m_musicExtensions;
-        }
-        else if (media.Equals("pictures"))
-        {
-          regexps = g_advancedSettings.m_pictureExcludeFromListingRegExps;
-          extensions = g_settings.m_pictureExtensions;
-        }
+        regexps = g_advancedSettings.m_videoExcludeFromListingRegExps;
+        extensions = g_settings.m_videoExtensions;
+      }
+      else if (media.Equals("music"))
+      {
+        regexps = g_advancedSettings.m_audioExcludeFromListingRegExps;
+        extensions = g_settings.m_musicExtensions;
+      }
+      else if (media.Equals("pictures"))
+      {
+        regexps = g_advancedSettings.m_pictureExcludeFromListingRegExps;
+        extensions = g_settings.m_pictureExtensions;
       }
 
       CDirectory directory;
@@ -241,8 +305,10 @@ bool CFileOperations::FillFileItemList(const CVariant &parameterObject, CFileIte
           else
           {
             CFileItem fileItem;
-            if (FillFileItem(items[i]->GetPath(), fileItem, media))
+            if (FillFileItem(items[i], fileItem, media))
               list.Add(CFileItemPtr(new CFileItem(fileItem)));
+            else if (media == "files")
+              list.Add(items[i]);
           }
         }
 
index f6d39a7..d7077c1 100644 (file)
@@ -29,11 +29,13 @@ namespace JSONRPC
   class CFileOperations : public CFileItemHandler
   {
   public:
-    static JSON_STATUS GetRootDirectory(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetDirectory(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Download(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetRootDirectory(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetDirectory(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    
+    static JSONRPC_STATUS PrepareDownload(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Download(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static bool FillFileItem(const CStdString &strFilename, CFileItem &item, CStdString media = "");
+    static bool FillFileItem(const CFileItemPtr &originalItem, CFileItem &item, CStdString media = "");
     static bool FillFileItemList(const CVariant &parameterObject, CFileItemList &list);
   };
 }
diff --git a/xbmc/interfaces/json-rpc/GUIOperations.cpp b/xbmc/interfaces/json-rpc/GUIOperations.cpp
new file mode 100644 (file)
index 0000000..0bf77b2
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "GUIOperations.h"
+#include "Application.h"
+#include "GUIInfoManager.h"
+#include "guilib/GUIWindowManager.h"
+#include "dialogs/GUIDialogKaiToast.h"
+#include "addons/AddonManager.h"
+#include "settings/GUISettings.h"
+#include "utils/Variant.h"
+
+using namespace std;
+using namespace JSONRPC;
+using namespace ADDON;
+
+JSONRPC_STATUS CGUIOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  CVariant properties = CVariant(CVariant::VariantTypeObject);
+  for (unsigned int index = 0; index < parameterObject["properties"].size(); index++)
+  {
+    CStdString propertyName = parameterObject["properties"][index].asString();
+    CVariant property;
+    JSONRPC_STATUS ret;
+    if ((ret = GetPropertyValue(propertyName, property)) != OK)
+      return ret;
+
+    properties[propertyName] = property;
+  }
+
+  result = properties;
+
+  return OK;
+}
+
+JSONRPC_STATUS CGUIOperations::ShowNotification(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  string image = parameterObject["image"].asString();
+  string title = parameterObject["title"].asString();
+  string message = parameterObject["message"].asString();
+  unsigned int displaytime = (unsigned int)parameterObject["displaytime"].asUnsignedInteger();
+
+  if (image.compare("info") == 0)
+    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, title, message, displaytime);
+  else if (image.compare("warning") == 0)
+    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Warning, title, message, displaytime);
+  else if (image.compare("error") == 0)
+    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, title, message, displaytime);
+  else
+    CGUIDialogKaiToast::QueueNotification(image, title, message, displaytime);
+
+  return ACK;
+}
+
+JSONRPC_STATUS CGUIOperations::SetFullscreen(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  if ((parameterObject["fullscreen"].isString() &&
+       parameterObject["fullscreen"].asString().compare("toggle") == 0) ||
+      (parameterObject["fullscreen"].isBoolean() &&
+       parameterObject["fullscreen"].asBoolean() != g_application.IsFullScreen()))
+    g_application.getApplicationMessenger().SendAction(CAction(ACTION_SHOW_GUI));
+  else if (!parameterObject["fullscreen"].isBoolean() && !parameterObject["fullscreen"].isString())
+    return InvalidParams;
+
+  return GetPropertyValue("fullscreen", result);
+}
+
+JSONRPC_STATUS CGUIOperations::GetPropertyValue(const CStdString &property, CVariant &result)
+{
+  if (property.Equals("currentwindow"))
+  {
+    result["label"] = g_infoManager.GetLabel(g_infoManager.TranslateString("System.CurrentWindow"));
+    result["id"] = g_windowManager.GetFocusedWindow();
+  }
+  else if (property.Equals("currentcontrol"))
+    result["label"] = g_infoManager.GetLabel(g_infoManager.TranslateString("System.CurrentControl"));
+  else if (property.Equals("skin"))
+  {
+    CStdString skinId = g_guiSettings.GetString("lookandfeel.skin");
+    AddonPtr addon;
+    CAddonMgr::Get().GetAddon(skinId, addon, ADDON_SKIN);
+
+    result["id"] = skinId;
+    if (addon.get())
+      result["name"] = addon->Name();
+  }
+  else if (property.Equals("fullscreen"))
+    result = g_application.IsFullScreen();
+  else
+    return InvalidParams;
+
+  return OK;
+}
diff --git a/xbmc/interfaces/json-rpc/GUIOperations.h b/xbmc/interfaces/json-rpc/GUIOperations.h
new file mode 100644 (file)
index 0000000..7b4c060
--- /dev/null
@@ -0,0 +1,38 @@
+#pragma once
+/*
+ *      Copyright (C) 2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "JSONRPC.h"
+#include "utils/StdString.h"
+
+namespace JSONRPC
+{
+  class CGUIOperations
+  {
+  public:
+    static JSONRPC_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+
+    static JSONRPC_STATUS ShowNotification(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS SetFullscreen(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+  private:
+    static JSONRPC_STATUS GetPropertyValue(const CStdString &property, CVariant &result);
+  };
+}
diff --git a/xbmc/interfaces/json-rpc/IJSONRPCAnnouncer.h b/xbmc/interfaces/json-rpc/IJSONRPCAnnouncer.h
new file mode 100644 (file)
index 0000000..cbf875c
--- /dev/null
@@ -0,0 +1,50 @@
+#pragma once
+/*
+ *      Copyright (C) 2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "interfaces/IAnnouncer.h"
+#include "utils/JSONVariantWriter.h"
+
+namespace JSONRPC
+{
+  class IJSONRPCAnnouncer : public ANNOUNCEMENT::IAnnouncer
+  {
+  public:
+    virtual ~IJSONRPCAnnouncer() { }
+
+  protected:
+    static std::string AnnouncementToJSONRPC(ANNOUNCEMENT::AnnouncementFlag flag, const char *sender, const char *method, const CVariant &data, bool compactOutput)
+    {
+      CVariant root;
+      root["jsonrpc"] = "2.0";
+
+      std::string namespaceMethod = ANNOUNCEMENT::AnnouncementFlagToString(flag);
+      namespaceMethod += ".";
+      namespaceMethod += method;
+      root["method"] = namespaceMethod;
+
+      root["params"]["data"] = data;
+      root["params"]["sender"] = sender;
+
+      return CJSONVariantWriter::Write(root, compactOutput);
+    }
+  };
+}
index 7fd3bf7..6970056 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2012 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
@@ -21,7 +21,6 @@
  */
 
 #include <string>
-#include "IClient.h"
 
 class CVariant;
 
@@ -31,15 +30,17 @@ namespace JSONRPC
   {
     Response = 0x1,
     Announcing = 0x2,
-    FileDownload = 0x4,
+    FileDownloadRedirect = 0x4,
+    FileDownloadDirect = 0x8
   };
 
-  #define TRANSPORT_LAYER_CAPABILITY_ALL (Response | Announcing | FileDownload)
+  #define TRANSPORT_LAYER_CAPABILITY_ALL (Response | Announcing | FileDownloadRedirect | FileDownloadDirect)
 
   class ITransportLayer
   {
   public:
     virtual ~ITransportLayer() { };
+    virtual bool PrepareDownload(const char *path, CVariant &details, std::string &protocol) = 0;
     virtual bool Download(const char *path, CVariant &result) = 0;
     virtual int GetCapabilities() = 0;
   };
index 142e30e..541c679 100644 (file)
 
 #include "InputOperations.h"
 #include "Application.h"
+#include "guilib/GUIAudioManager.h"
+#include "input/XBMC_vkeys.h"
+#include "threads/SingleLock.h"
 
 using namespace JSONRPC;
 
+CCriticalSection CInputOperations::m_critSection;
+uint32_t CInputOperations::m_key = KEY_INVALID;
+
+uint32_t CInputOperations::GetKey()
+{
+  CSingleLock lock(m_critSection);
+  uint32_t currentKey = m_key;
+  m_key = KEY_INVALID;
+  return currentKey;
+}
+
 //TODO the breakage of the screensaver should be refactored
 //to one central super duper place for getting rid of
 //1 million dupes
@@ -41,55 +55,76 @@ bool CInputOperations::handleScreenSaver()
   return screenSaverBroken;
 }
 
-JSON_STATUS CInputOperations::sendAction(int actionID)
+JSONRPC_STATUS CInputOperations::SendKey(uint32_t keyCode)
 {
-  if(!handleScreenSaver())
+  if (keyCode == KEY_INVALID)
+    return InternalError;
+
+  CSingleLock lock(m_critSection);
+  m_key = keyCode | KEY_VKEY;
+  return ACK;
+}
+
+JSONRPC_STATUS CInputOperations::SendAction(int actionID, bool wakeScreensaver /* = true */, bool waitResult /* = false */)
+{
+  if(!wakeScreensaver || !handleScreenSaver())
   {
-    g_application.getApplicationMessenger().SendAction(CAction(actionID), WINDOW_INVALID, false);
+    g_application.ResetSystemIdleTimer();
+    g_audioManager.PlayActionSound(actionID);
+    g_application.getApplicationMessenger().SendAction(CAction(actionID), WINDOW_INVALID, waitResult);
   }
   return ACK;
 }
 
-JSON_STATUS CInputOperations::activateWindow(int windowID)
+JSONRPC_STATUS CInputOperations::activateWindow(int windowID)
 {
   if(!handleScreenSaver())
-  {
     g_application.getApplicationMessenger().ActivateWindow(windowID, std::vector<CStdString>(), false);
-  }
+
   return ACK;
 }
 
-JSON_STATUS CInputOperations::Left(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CInputOperations::Left(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  return SendKey(XBMCVK_LEFT);
+}
+
+JSONRPC_STATUS CInputOperations::Right(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  return SendKey(XBMCVK_RIGHT);
+}
+
+JSONRPC_STATUS CInputOperations::Down(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  return sendAction(ACTION_MOVE_LEFT);
+  return SendKey(XBMCVK_DOWN);
 }
 
-JSON_STATUS CInputOperations::Right(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CInputOperations::Up(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  return sendAction(ACTION_MOVE_RIGHT);  
+  return SendKey(XBMCVK_UP);
 }
 
-JSON_STATUS CInputOperations::Down(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CInputOperations::Select(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  return sendAction(ACTION_MOVE_DOWN);  
+  return SendKey(XBMCVK_RETURN);
 }
 
-JSON_STATUS CInputOperations::Up(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CInputOperations::Back(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  return sendAction(ACTION_MOVE_UP);  
+  return SendKey(XBMCVK_BACK);
 }
 
-JSON_STATUS CInputOperations::Select(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CInputOperations::ContextMenu(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  return sendAction(ACTION_SELECT_ITEM);  
+  return SendAction(ACTION_CONTEXT_MENU);
 }
 
-JSON_STATUS CInputOperations::Back(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CInputOperations::Info(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  return sendAction(ACTION_NAV_BACK);  
+  return SendAction(ACTION_SHOW_INFO);
 }
 
-JSON_STATUS CInputOperations::Home(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CInputOperations::Home(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   return activateWindow(WINDOW_HOME);
 }
index 4352a79..2d82ed4 100644 (file)
  *
  */
 
-#include "utils/StdString.h"
 #include "JSONRPC.h"
+#include "threads/CriticalSection.h"
+#include "utils/StdString.h"
 
 namespace JSONRPC
 {
   class CInputOperations
   {
   public:
-    static JSON_STATUS Left(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Right(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Down(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Up(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static uint32_t GetKey();
 
+    static JSONRPC_STATUS Left(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Right(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Down(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Up(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS Select(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Select(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Back(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS ContextMenu(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Info(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Home(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS Back(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS SendKey(uint32_t keyCode);
+    static JSONRPC_STATUS SendAction(int actionID, bool wakeScreensaver = true, bool waitResult = false);
 
-    static JSON_STATUS Home(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    
   private:
-    static JSON_STATUS sendAction(int actionID);
-    static JSON_STATUS activateWindow(int windowID);
+    static JSONRPC_STATUS activateWindow(int windowID);
     static bool        handleScreenSaver();
+
+    static CCriticalSection m_critSection;
+    static uint32_t m_key;
   };
 }
index 71ae484..f437952 100644 (file)
  *
  */
 
+#include <string.h>
+
 #include "JSONRPC.h"
-#include "settings/AdvancedSettings.h"
+#include "ServiceDescription.h"
 #include "interfaces/AnnouncementManager.h"
-#include "interfaces/AnnouncementUtils.h"
+#include "settings/AdvancedSettings.h"
 #include "utils/log.h"
 #include "utils/Variant.h"
-#include <string.h>
-#include "ServiceDescription.h"
 
 using namespace ANNOUNCEMENT;
 using namespace JSONRPC;
@@ -55,50 +55,51 @@ void CJSONRPC::Initialize()
     CJSONServiceDescription::AddNotification(JSONRPC_SERVICE_NOTIFICATIONS[index]);
   
   m_initialized = true;
+  CLog::Log(LOGINFO, "JSONRPC: Sucessfully initialized");
 }
 
-JSON_STATUS CJSONRPC::Introspect(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
+JSONRPC_STATUS CJSONRPC::Introspect(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
 {
   return CJSONServiceDescription::Print(result, transport, client,
     parameterObject["getdescriptions"].asBoolean(), parameterObject["getmetadata"].asBoolean(), parameterObject["filterbytransport"].asBoolean(),
     parameterObject["filter"]["id"].asString(), parameterObject["filter"]["type"].asString(), parameterObject["filter"]["getreferences"].asBoolean());
 }
 
-JSON_STATUS CJSONRPC::Version(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
+JSONRPC_STATUS CJSONRPC::Version(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
 {
   result["version"] = CJSONServiceDescription::GetVersion();
 
   return OK;
 }
 
-JSON_STATUS CJSONRPC::Permission(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
+JSONRPC_STATUS CJSONRPC::Permission(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
 {
   int flags = client->GetPermissionFlags();
 
   for (int i = 1; i <= OPERATION_PERMISSION_ALL; i *= 2)
-    result[PermissionToString((OperationPermission)i)] = (flags & i) > 0;
+    result[PermissionToString((OperationPermission)i)] = (flags & i) == i;
 
   return OK;
 }
 
-JSON_STATUS CJSONRPC::Ping(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
+JSONRPC_STATUS CJSONRPC::Ping(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
 {
   CVariant temp = "pong";
   result.swap(temp);
   return OK;
 }
 
-JSON_STATUS CJSONRPC::GetConfiguration(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
+JSONRPC_STATUS CJSONRPC::GetConfiguration(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
 {
   int flags = client->GetAnnouncementFlags();
 
   for (int i = 1; i <= ANNOUNCE_ALL; i *= 2)
-    result["notifications"][CAnnouncementUtils::AnnouncementFlagToString((EAnnouncementFlag)i)] = (flags & i) > 0;
+    result["notifications"][AnnouncementFlagToString((AnnouncementFlag)i)] = (flags & i) == i;
 
   return OK;
 }
 
-JSON_STATUS CJSONRPC::SetConfiguration(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
+JSONRPC_STATUS CJSONRPC::SetConfiguration(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
 {
   int flags = 0;
   int oldFlags = client->GetAnnouncementFlags();
@@ -121,6 +122,9 @@ JSON_STATUS CJSONRPC::SetConfiguration(const CStdString &method, ITransportLayer
     if ((notifications["AudioLibrary"].isNull() && (oldFlags & AudioLibrary)) ||
         (notifications["AudioLibrary"].isBoolean() && notifications["AudioLibrary"].asBoolean()))
       flags |= AudioLibrary;
+    if ((notifications["Application"].isNull() && (oldFlags & Other)) ||
+        (notifications["Application"].isBoolean() && notifications["Application"].asBoolean()))
+      flags |= Application;
     if ((notifications["Other"].isNull() && (oldFlags & Other)) ||
         (notifications["Other"].isBoolean() && notifications["Other"].asBoolean()))
       flags |= Other;
@@ -132,14 +136,14 @@ JSON_STATUS CJSONRPC::SetConfiguration(const CStdString &method, ITransportLayer
   return GetConfiguration(method, transport, client, parameterObject, result);
 }
 
-JSON_STATUS CJSONRPC::NotifyAll(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
+JSONRPC_STATUS CJSONRPC::NotifyAll(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result)
 {
   if (parameterObject["data"].isNull())
     CAnnouncementManager::Announce(Other, parameterObject["sender"].asString().c_str(),  
       parameterObject["message"].asString().c_str());
   else
   {
-    CVariant data(parameterObject["data"].asString());
+    CVariant data = parameterObject["data"];
     CAnnouncementManager::Announce(Other, parameterObject["sender"].asString().c_str(),  
       parameterObject["message"].asString().c_str(), data);
   }
@@ -152,6 +156,7 @@ CStdString CJSONRPC::MethodCall(const CStdString &inputString, ITransportLayer *
   CVariant inputroot, outputroot, result;
   bool hasResponse = false;
 
+  CLog::Log(LOGDEBUG, "JSONRPC: Incoming request: %s", inputString.c_str());
   inputroot = CJSONVariantParser::Parse((unsigned char *)inputString.c_str(), inputString.length());
   if (!inputroot.isNull())
   {
@@ -192,7 +197,7 @@ CStdString CJSONRPC::MethodCall(const CStdString &inputString, ITransportLayer *
 
 bool CJSONRPC::HandleMethodCall(const CVariant& request, CVariant& response, ITransportLayer *transport, IClient *client)
 {
-  JSON_STATUS errorCode = OK;
+  JSONRPC_STATUS errorCode = OK;
   CVariant result;
   bool isNotification = false;
 
@@ -206,7 +211,8 @@ bool CJSONRPC::HandleMethodCall(const CVariant& request, CVariant& response, ITr
     JSONRPC::MethodCall method;
     CVariant params;
 
-    if ((errorCode = CJSONServiceDescription::CheckCall(methodName, request["params"], client, isNotification, method, params)) == OK)
+    CLog::Log(LOGDEBUG, "JSONRPC: Calling %s", methodName.c_str());
+    if ((errorCode = CJSONServiceDescription::CheckCall(methodName, request["params"], transport, client, isNotification, method, params)) == OK)
       errorCode = method(methodName, transport, client, params, result);
     else
       result = params;
@@ -227,7 +233,7 @@ inline bool CJSONRPC::IsProperJSONRPC(const CVariant& inputroot)
   return inputroot.isObject() && inputroot.isMember("jsonrpc") && inputroot["jsonrpc"].isString() && inputroot["jsonrpc"] == CVariant("2.0") && inputroot.isMember("method") && inputroot["method"].isString() && (!inputroot.isMember("params") || inputroot["params"].isArray() || inputroot["params"].isObject());
 }
 
-inline void CJSONRPC::BuildResponse(const CVariant& request, JSON_STATUS code, const CVariant& result, CVariant& response)
+inline void CJSONRPC::BuildResponse(const CVariant& request, JSONRPC_STATUS code, const CVariant& result, CVariant& response)
 {
   response["jsonrpc"] = "2.0";
   response["id"] = request.isObject() && request.isMember("id") ? request["id"] : CVariant();
index 847567f..bd8ef8f 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2012 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
  *
  */
 
-#include "utils/StdString.h"
+#include <iostream>
 #include <map>
 #include <stdio.h>
 #include <string>
-#include <iostream>
-#include "ITransportLayer.h"
-#include "interfaces/IAnnouncer.h"
-#include "JSONUtils.h"
+
+#include "JSONRPCUtils.h"
 #include "JSONServiceDescription.h"
+#include "interfaces/IAnnouncer.h"
+#include "utils/StdString.h"
 
 namespace JSONRPC
 {
@@ -37,46 +37,46 @@ namespace JSONRPC
    \brief JSON RPC handler
 
    Sets up and manages all needed information to process
-   JSON RPC requests and answering with the appropriate
-   JSON RPC response (actual response or error message).
+   JSON-RPC requests and answering with the appropriate
+   JSON-RPC response (actual response or error message).
    */
-  class CJSONRPC : public CJSONUtils
+  class CJSONRPC
   {
   public:
     /*!
-     \brief Initializes the JSON RPC handler
+     \brief Initializes the JSON-RPC handler
      */
     static void Initialize();
 
     /*
-     \brief Handles an incoming JSON RPC request
-     \param inputString received JSON RPC request
+     \brief Handles an incoming JSON-RPC request
+     \param inputString received JSON-RPC request
      \param transport Transport protocol on which the request arrived
      \param client Client which sent the request
-     \return JSON RPC response to be sent back to the client
+     \return JSON-RPC response to be sent back to the client
 
      Parses the received input string for the called method and provided
-     parameters. If the request does not conform to the JSON RPC 2.0
+     parameters. If the request does not conform to the JSON-RPC 2.0
      specification an error is returned. Otherwise the parameters provided
      in the request are checked for validity and completeness. If the request
      is valid and the requested method exists it is called and executed.
      */
     static CStdString MethodCall(const CStdString &inputString, ITransportLayer *transport, IClient *client);
 
-    static JSON_STATUS Introspect(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
-    static JSON_STATUS Version(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
-    static JSON_STATUS Permission(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
-    static JSON_STATUS Ping(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
-    static JSON_STATUS GetConfiguration(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
-    static JSON_STATUS SetConfiguration(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
-    static JSON_STATUS NotifyAll(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
+    static JSONRPC_STATUS Introspect(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
+    static JSONRPC_STATUS Version(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
+    static JSONRPC_STATUS Permission(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
+    static JSONRPC_STATUS Ping(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetConfiguration(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
+    static JSONRPC_STATUS SetConfiguration(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
+    static JSONRPC_STATUS NotifyAll(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
   
   private:
     static void setup();
     static bool HandleMethodCall(const CVariant& request, CVariant& response, ITransportLayer *transport, IClient *client);
     static inline bool IsProperJSONRPC(const CVariant& inputroot);
 
-    inline static void BuildResponse(const CVariant& request, JSON_STATUS code, const CVariant& result, CVariant& response);
+    inline static void BuildResponse(const CVariant& request, JSONRPC_STATUS code, const CVariant& result, CVariant& response);
 
     static bool m_initialized;
   };
diff --git a/xbmc/interfaces/json-rpc/JSONRPCUtils.h b/xbmc/interfaces/json-rpc/JSONRPCUtils.h
new file mode 100644 (file)
index 0000000..97350b9
--- /dev/null
@@ -0,0 +1,149 @@
+#pragma once
+/*
+ *      Copyright (C) 2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "IClient.h"
+#include "ITransportLayer.h"
+#include "interfaces/IAnnouncer.h"
+#include "utils/StdString.h"
+#include "utils/Variant.h"
+
+namespace JSONRPC
+{
+  /*!
+   \ingroup jsonrpc
+   \brief Possible statuc codes of a response
+   to a JSON-RPC request
+   */
+  enum JSONRPC_STATUS
+  {
+    OK = 0,
+    ACK = -1,
+    InvalidRequest = -32600,
+    MethodNotFound = -32601,
+    InvalidParams = -32602,
+    InternalError = -32603,
+    ParseError = -32700,
+    //-32099..-32000 Reserved for implementation-defined server-errors.
+    BadPermission = -32099,
+    FailedToExecute = -32100
+  };
+
+  /*!
+   \brief Function pointer for JSON-RPC methods
+   */
+  typedef JSONRPC_STATUS (*MethodCall) (const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
+
+  /*!
+   \ingroup jsonrpc
+   \brief Permission categories for json rpc methods
+   
+   A JSON-RPC method will only be called if the caller 
+   has the correct permissions to exectue the method.
+   The method call needs to be perfectly threadsafe.
+  */
+  enum OperationPermission
+  {
+    ReadData        =   0x1,
+    ControlPlayback =   0x2,
+    ControlNotify   =   0x4,
+    ControlPower    =   0x8,
+    UpdateData      =  0x10,
+    RemoveData      =  0x20,
+    Navigate        =  0x40,
+    WriteFile       =  0x80,
+    ControlSystem   = 0x100,
+    ControlGUI      = 0x200
+  };
+
+  const int OPERATION_PERMISSION_ALL = (ReadData | ControlPlayback | ControlNotify | ControlPower |
+                                        UpdateData | RemoveData | Navigate | WriteFile |
+                                        ControlSystem | ControlGUI);
+
+  const int OPERATION_PERMISSION_NOTIFICATION = (ControlPlayback | ControlNotify | ControlPower | UpdateData |
+                                                 RemoveData | Navigate | WriteFile | ControlSystem |
+                                                 ControlGUI);
+
+  /*!
+    \brief Returns a string representation for the 
+    given OperationPermission
+    \param permission Specific OperationPermission
+    \return String representation of the given OperationPermission
+    */
+  inline const char *PermissionToString(const OperationPermission &permission)
+  {
+    switch (permission)
+    {
+    case ReadData:
+      return "ReadData";
+    case ControlPlayback:
+      return "ControlPlayback";
+    case ControlNotify:
+      return "ControlNotify";
+    case ControlPower:
+      return "ControlPower";
+    case UpdateData:
+      return "UpdateData";
+    case RemoveData:
+      return "RemoveData";
+    case Navigate:
+      return "Navigate";
+    case WriteFile:
+      return "WriteFile";
+    case ControlSystem:
+      return "ControlSystem";
+    case ControlGUI:
+      return "ControlGUI";
+    default:
+      return "Unknown";
+    }
+  }
+
+  /*!
+    \brief Returns a OperationPermission value for the given
+    string representation
+    \param permission String representation of the OperationPermission
+    \return OperationPermission value of the given string representation
+    */
+  inline OperationPermission StringToPermission(std::string permission)
+  {
+    if (permission.compare("ControlPlayback") == 0)
+      return ControlPlayback;
+    if (permission.compare("ControlNotify") == 0)
+      return ControlNotify;
+    if (permission.compare("ControlPower") == 0)
+      return ControlPower;
+    if (permission.compare("UpdateData") == 0)
+      return UpdateData;
+    if (permission.compare("RemoveData") == 0)
+      return RemoveData;
+    if (permission.compare("Navigate") == 0)
+      return Navigate;
+    if (permission.compare("WriteFile") == 0)
+      return WriteFile;
+    if (permission.compare("ControlSystem") == 0)
+      return ControlSystem;
+    if (permission.compare("ControlGUI") == 0)
+      return ControlGUI;
+
+    return ReadData;
+  }
+}
index f396439..be82704 100644 (file)
@@ -30,6 +30,7 @@
 #include "FileOperations.h"
 #include "AudioLibrary.h"
 #include "VideoLibrary.h"
+#include "GUIOperations.h"
 #include "SystemOperations.h"
 #include "InputOperations.h"
 #include "XBMCOperations.h"
@@ -87,6 +88,7 @@ JsonRpcMethodMap CJSONServiceDescription::m_methodMaps[] = {
 // Player
   { "Player.GetActivePlayers",                      CPlayerOperations::GetActivePlayers },
   { "Player.GetProperties",                         CPlayerOperations::GetProperties },
+  { "Player.GetItem",                               CPlayerOperations::GetItem },
 
   { "Player.PlayPause",                             CPlayerOperations::PlayPause },
   { "Player.Stop",                                  CPlayerOperations::Stop },
@@ -126,8 +128,9 @@ JsonRpcMethodMap CJSONServiceDescription::m_methodMaps[] = {
 
 // Files
   { "Files.GetSources",                             CFileOperations::GetRootDirectory },
-  { "Files.Download",                               CFileOperations::Download },
   { "Files.GetDirectory",                           CFileOperations::GetDirectory },
+  { "Files.PrepareDownload",                        CFileOperations::PrepareDownload },
+  { "Files.Download",                               CFileOperations::Download },
 
 // Music Library
   { "AudioLibrary.GetArtists",                      CAudioLibrary::GetArtists },
@@ -138,6 +141,8 @@ JsonRpcMethodMap CJSONServiceDescription::m_methodMaps[] = {
   { "AudioLibrary.GetSongDetails",                  CAudioLibrary::GetSongDetails },
   { "AudioLibrary.GetRecentlyAddedAlbums",          CAudioLibrary::GetRecentlyAddedAlbums },
   { "AudioLibrary.GetRecentlyAddedSongs",           CAudioLibrary::GetRecentlyAddedSongs },
+  { "AudioLibrary.GetRecentlyPlayedAlbums",         CAudioLibrary::GetRecentlyPlayedAlbums },
+  { "AudioLibrary.GetRecentlyPlayedSongs",          CAudioLibrary::GetRecentlyPlayedSongs },
   { "AudioLibrary.GetGenres",                       CAudioLibrary::GetGenres },
   { "AudioLibrary.Scan",                            CAudioLibrary::Scan },
   { "AudioLibrary.Export",                          CAudioLibrary::Export },
@@ -163,8 +168,14 @@ JsonRpcMethodMap CJSONServiceDescription::m_methodMaps[] = {
   { "VideoLibrary.Export",                          CVideoLibrary::Export },
   { "VideoLibrary.Clean",                           CVideoLibrary::Clean },
 
+// GUI operations
+  { "GUI.GetProperties",                            CGUIOperations::GetProperties },
+  { "GUI.ShowNotification",                         CGUIOperations::ShowNotification },
+  { "GUI.SetFullscreen",                            CGUIOperations::SetFullscreen },
+
 // System operations
   { "System.GetProperties",                         CSystemOperations::GetProperties },
+  { "System.EjectOpticalDrive",                     CSystemOperations::EjectOpticalDrive },
   { "System.Shutdown",                              CSystemOperations::Shutdown },
   { "System.Suspend",                               CSystemOperations::Suspend },
   { "System.Hibernate",                             CSystemOperations::Hibernate },
@@ -177,12 +188,14 @@ JsonRpcMethodMap CJSONServiceDescription::m_methodMaps[] = {
   { "Input.Up",                                     CInputOperations::Up },
   { "Input.Select",                                 CInputOperations::Select },
   { "Input.Back",                                   CInputOperations::Back },
+  { "Input.ContextMenu",                            CInputOperations::ContextMenu },
+  { "Input.Info",                                   CInputOperations::Info },
   { "Input.Home",                                   CInputOperations::Home },
 
 // Application operations
   { "Application.GetProperties",                    CApplicationOperations::GetProperties },
   { "Application.SetVolume",                        CApplicationOperations::SetVolume },
-  { "Application.ToggleMute",                       CApplicationOperations::ToggleMute },
+  { "Application.SetMute",                          CApplicationOperations::SetMute },
   { "Application.Quit",                             CApplicationOperations::Quit },
 
 // XBMC operations
@@ -370,7 +383,7 @@ int CJSONServiceDescription::GetVersion()
   return JSONRPC_SERVICE_VERSION;
 }
 
-JSON_STATUS CJSONServiceDescription::Print(CVariant &result, ITransportLayer *transport, IClient *client,
+JSONRPC_STATUS CJSONServiceDescription::Print(CVariant &result, ITransportLayer *transport, IClient *client,
   bool printDescriptions /* = true */, bool printMetadata /* = false */, bool filterByTransport /* = true */,
   std::string filterByName /* = "" */, std::string filterByType /* = "" */, bool printReferences /* = true */)
 {
@@ -535,49 +548,52 @@ JSON_STATUS CJSONServiceDescription::Print(CVariant &result, ITransportLayer *tr
   return OK;
 }
 
-JSON_STATUS CJSONServiceDescription::CheckCall(const char* const method, const CVariant &requestParameters, IClient *client, bool notification, MethodCall &methodCall, CVariant &outputParameters)
+JSONRPC_STATUS CJSONServiceDescription::CheckCall(const char* const method, const CVariant &requestParameters, ITransportLayer *transport, IClient *client, bool notification, MethodCall &methodCall, CVariant &outputParameters)
 {
   CJsonRpcMethodMap::JsonRpcMethodIterator iter = m_actionMap.find(method);
   if (iter != m_actionMap.end())
   {
-    if (client != NULL && (client->GetPermissionFlags() & iter->second.permission) == iter->second.permission && (!notification || (iter->second.permission & OPERATION_PERMISSION_NOTIFICATION) == iter->second.permission))
+    if (transport != NULL && (transport->GetCapabilities() & iter->second.transportneed) == iter->second.transportneed)
     {
-      methodCall = iter->second.method;
+      if (client != NULL && (client->GetPermissionFlags() & iter->second.permission) == iter->second.permission && (!notification || (iter->second.permission & OPERATION_PERMISSION_NOTIFICATION) == iter->second.permission))
+      {
+        methodCall = iter->second.method;
 
-      // Count the number of actually handled (present)
-      // parameters
-      unsigned int handled = 0;
-      CVariant errorData = CVariant(CVariant::VariantTypeObject);
-      errorData["method"] = iter->second.name;
+        // Count the number of actually handled (present)
+        // parameters
+        unsigned int handled = 0;
+        CVariant errorData = CVariant(CVariant::VariantTypeObject);
+        errorData["method"] = iter->second.name;
 
-      // Loop through all the parameters to check
-      for (unsigned int i = 0; i < iter->second.parameters.size(); i++)
-      {
-        // Evaluate the current parameter
-        JSON_STATUS status = checkParameter(requestParameters, iter->second.parameters.at(i), i, outputParameters, handled, errorData);
-        if (status != OK)
+        // Loop through all the parameters to check
+        for (unsigned int i = 0; i < iter->second.parameters.size(); i++)
         {
-          // Return the error data object in the outputParameters reference
+          // Evaluate the current parameter
+          JSONRPC_STATUS status = checkParameter(requestParameters, iter->second.parameters.at(i), i, outputParameters, handled, errorData);
+          if (status != OK)
+          {
+            // Return the error data object in the outputParameters reference
+            outputParameters = errorData;
+            return status;
+          }
+        }
+
+        // Check if there were unnecessary parameters
+        if (handled < requestParameters.size())
+        {
+          errorData["message"] = "Too many parameters";
           outputParameters = errorData;
-          return status;
+          return InvalidParams;
         }
-      }
 
-      // Check if there were unnecessary parameters
-      if (handled < requestParameters.size())
-      {
-        errorData["message"] = "Too many parameters";
-        outputParameters = errorData;
-        return InvalidParams;
+        return OK;
       }
-
-      return OK;
+      else
+        return BadPermission;
     }
-    else
-      return BadPermission;
   }
-  else
-    return MethodNotFound;
+
+  return MethodNotFound;
 }
 
 void CJSONServiceDescription::printType(const JSONSchemaTypeDefinition &type, bool isParameter, bool isGlobal, bool printDefault, bool printDescriptions, CVariant &output)
@@ -735,7 +751,7 @@ void CJSONServiceDescription::printType(const JSONSchemaTypeDefinition &type, bo
   }
 }
 
-JSON_STATUS CJSONServiceDescription::checkParameter(const CVariant &requestParameters, const JSONSchemaTypeDefinition &type, unsigned int position, CVariant &outputParameters, unsigned int &handled, CVariant &errorData)
+JSONRPC_STATUS CJSONServiceDescription::checkParameter(const CVariant &requestParameters, const JSONSchemaTypeDefinition &type, unsigned int position, CVariant &outputParameters, unsigned int &handled, CVariant &errorData)
 {
   // Let's check if the parameter has been provided
   if (ParameterExists(requestParameters, type.name, position))
@@ -744,7 +760,7 @@ JSON_STATUS CJSONServiceDescription::checkParameter(const CVariant &requestParam
     CVariant parameterValue = GetParameter(requestParameters, type.name, position);
 
     // Evaluate the type of the parameter
-    JSON_STATUS status = checkType(parameterValue, type, outputParameters[type.name], errorData["stack"]);
+    JSONRPC_STATUS status = checkType(parameterValue, type, outputParameters[type.name], errorData["stack"]);
     if (status != OK)
       return status;
 
@@ -767,7 +783,7 @@ JSON_STATUS CJSONServiceDescription::checkParameter(const CVariant &requestParam
   return OK;
 }
 
-JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSONSchemaTypeDefinition &type, CVariant &outputValue, CVariant &errorData)
+JSONRPC_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSONSchemaTypeDefinition &type, CVariant &outputValue, CVariant &errorData)
 {
   if (!type.name.empty())
     errorData["name"] = type.name;
@@ -777,14 +793,14 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
   // Let's check the type of the provided parameter
   if (!IsType(value, type.type))
   {
-    CLog::Log(LOGWARNING, "JSONRPC: Type mismatch in type %s", type.name.c_str());
+    CLog::Log(LOGDEBUG, "JSONRPC: Type mismatch in type %s", type.name.c_str());
     errorMessage.Format("Invalid type %s received", ValueTypeToString(value.type()));
     errorData["message"] = errorMessage.c_str();
     return InvalidParams;
   }
   else if (value.isNull() && !HasType(type.type, NullValue))
   {
-    CLog::Log(LOGWARNING, "JSONRPC: Value is NULL in type %s", type.name.c_str());
+    CLog::Log(LOGDEBUG, "JSONRPC: Value is NULL in type %s", type.name.c_str());
     errorData["message"] = "Received value is null";
     return InvalidParams;
   }
@@ -807,7 +823,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
 
     if (!ok)
     {
-      CLog::Log(LOGWARNING, "JSONRPC: Value in type %s does not match any of the union type definitions", type.name.c_str());
+      CLog::Log(LOGDEBUG, "JSONRPC: Value in type %s does not match any of the union type definitions", type.name.c_str());
       errorData["message"] = "Received value does not match any of the union type definitions";
       return InvalidParams;
     }
@@ -820,11 +836,11 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
   {
     for (unsigned int extendsIndex = 0; extendsIndex < type.extends.size(); extendsIndex++)
     {
-      JSON_STATUS status = checkType(value, type.extends.at(extendsIndex), outputValue, errorData);
+      JSONRPC_STATUS status = checkType(value, type.extends.at(extendsIndex), outputValue, errorData);
 
       if (status != OK)
       {
-        CLog::Log(LOGWARNING, "JSONRPC: Value does not match extended type %s of type %s", type.extends.at(extendsIndex).ID.c_str(), type.name.c_str());
+        CLog::Log(LOGDEBUG, "JSONRPC: Value does not match extended type %s of type %s", type.extends.at(extendsIndex).ID.c_str(), type.name.c_str());
         errorMessage.Format("value does not match extended type %s", type.extends.at(extendsIndex).ID.c_str(), type.name.c_str());
         errorData["message"] = errorMessage.c_str();
         return status;
@@ -841,7 +857,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
     // Check the number of items against minItems and maxItems
     if ((type.minItems > 0 && value.size() < type.minItems) || (type.maxItems > 0 && value.size() > type.maxItems))
     {
-      CLog::Log(LOGWARNING, "JSONRPC: Number of array elements does not match minItems and/or maxItems in type %s", type.name.c_str());
+      CLog::Log(LOGDEBUG, "JSONRPC: Number of array elements does not match minItems and/or maxItems in type %s", type.name.c_str());
       if (type.minItems > 0 && type.maxItems > 0)
         errorMessage.Format("Between %d and %d array items expected but %d received", type.minItems, type.maxItems, value.size());
       else if (type.minItems > 0)
@@ -864,11 +880,11 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
       for (unsigned int arrayIndex = 0; arrayIndex < value.size(); arrayIndex++)
       {
         CVariant temp;
-        JSON_STATUS status = checkType(value[arrayIndex], itemType, temp, errorData["property"]);
+        JSONRPC_STATUS status = checkType(value[arrayIndex], itemType, temp, errorData["property"]);
         outputValue.push_back(temp);
         if (status != OK)
         {
-          CLog::Log(LOGWARNING, "JSONRPC: Array element at index %u does not match in type %s", arrayIndex, type.name.c_str());
+          CLog::Log(LOGDEBUG, "JSONRPC: Array element at index %u does not match in type %s", arrayIndex, type.name.c_str());
           errorMessage.Format("array element at index %u does not match", arrayIndex);
           errorData["message"] = errorMessage.c_str();
           return status;
@@ -888,7 +904,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
       // allowed there is no need to check every element
       if (value.size() < type.items.size() || (value.size() != type.items.size() && type.additionalItems.size() == 0))
       {
-        CLog::Log(LOGWARNING, "JSONRPC: One of the array elements does not match in type %s", type.name.c_str());
+        CLog::Log(LOGDEBUG, "JSONRPC: One of the array elements does not match in type %s", type.name.c_str());
         errorMessage.Format("%d array elements expected but %d received", type.items.size(), value.size());
         errorData["message"] = errorMessage.c_str();
         return InvalidParams;
@@ -900,10 +916,10 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
       unsigned int arrayIndex;
       for (arrayIndex = 0; arrayIndex < min(type.items.size(), (size_t)value.size()); arrayIndex++)
       {
-        JSON_STATUS status = checkType(value[arrayIndex], type.items.at(arrayIndex), outputValue[arrayIndex], errorData["property"]);
+        JSONRPC_STATUS status = checkType(value[arrayIndex], type.items.at(arrayIndex), outputValue[arrayIndex], errorData["property"]);
         if (status != OK)
         {
-          CLog::Log(LOGWARNING, "JSONRPC: Array element at index %u does not match with items schema in type %s", arrayIndex, type.name.c_str());
+          CLog::Log(LOGDEBUG, "JSONRPC: Array element at index %u does not match with items schema in type %s", arrayIndex, type.name.c_str());
           return status;
         }
       }
@@ -928,7 +944,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
 
           if (!ok)
           {
-            CLog::Log(LOGWARNING, "JSONRPC: Array contains non-conforming additional items in type %s", type.name.c_str());
+            CLog::Log(LOGDEBUG, "JSONRPC: Array contains non-conforming additional items in type %s", type.name.c_str());
             errorMessage.Format("Array element at index %u does not match the \"additionalItems\" schema", arrayIndex);
             errorData["message"] = errorMessage.c_str();
             return InvalidParams;
@@ -947,7 +963,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
           // If two elements are the same they are not unique
           if (outputValue[checkingIndex] == outputValue[checkedIndex])
           {
-            CLog::Log(LOGWARNING, "JSONRPC: Not unique array element at index %u and %u in type %s", checkingIndex, checkedIndex, type.name.c_str());
+            CLog::Log(LOGDEBUG, "JSONRPC: Not unique array element at index %u and %u in type %s", checkingIndex, checkedIndex, type.name.c_str());
             errorMessage.Format("Array element at index %u is not unique (same as array element at index %u)", checkingIndex, checkedIndex);
             errorData["message"] = errorMessage.c_str();
             return InvalidParams;
@@ -970,10 +986,10 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
     {
       if (value.isMember(propertiesIterator->second.name))
       {
-        JSON_STATUS status = checkType(value[propertiesIterator->second.name], propertiesIterator->second, outputValue[propertiesIterator->second.name], errorData["property"]);
+        JSONRPC_STATUS status = checkType(value[propertiesIterator->second.name], propertiesIterator->second, outputValue[propertiesIterator->second.name], errorData["property"]);
         if (status != OK)
         {
-          CLog::Log(LOGWARNING, "JSONRPC: Invalid property \"%s\" in type %s", propertiesIterator->second.name.c_str(), type.name.c_str());
+          CLog::Log(LOGDEBUG, "JSONRPC: Invalid property \"%s\" in type %s", propertiesIterator->second.name.c_str(), type.name.c_str());
           return status;
         }
         handled++;
@@ -982,7 +998,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
         outputValue[propertiesIterator->second.name] = propertiesIterator->second.defaultValue;
       else
       {
-        CLog::Log(LOGWARNING, "JSONRPC: Missing property \"%s\" in type %s", propertiesIterator->second.name.c_str(), type.name.c_str());
+        CLog::Log(LOGDEBUG, "JSONRPC: Missing property \"%s\" in type %s", propertiesIterator->second.name.c_str(), type.name.c_str());
         errorData["property"]["name"] = propertiesIterator->second.name.c_str();
         errorData["property"]["type"] = SchemaValueTypeToString(propertiesIterator->second.type);
         errorData["message"] = "Missing property";
@@ -1013,10 +1029,10 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
             continue;
           }
 
-          JSON_STATUS status = checkType(value[iter->first], *(type.additionalProperties), outputValue[iter->first], errorData["property"]);
+          JSONRPC_STATUS status = checkType(value[iter->first], *(type.additionalProperties), outputValue[iter->first], errorData["property"]);
           if (status != OK)
           {
-            CLog::Log(LOGWARNING, "JSONRPC: Invalid additional property \"%s\" in type %s", iter->first.c_str(), type.name.c_str());
+            CLog::Log(LOGDEBUG, "JSONRPC: Invalid additional property \"%s\" in type %s", iter->first.c_str(), type.name.c_str());
             return status;
           }
         }
@@ -1052,7 +1068,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
 
     if (!valid)
     {
-      CLog::Log(LOGWARNING, "JSONRPC: Value does not match any of the enum values in type %s", type.name.c_str());
+      CLog::Log(LOGDEBUG, "JSONRPC: Value does not match any of the enum values in type %s", type.name.c_str());
       errorData["message"] = "Received value does not match any of the defined enum values";
       return InvalidParams;
     }
@@ -1072,7 +1088,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
     // Check maximum
         (type.exclusiveMaximum && numberValue >= type.maximum) || (!type.exclusiveMaximum && numberValue > type.maximum))        
     {
-      CLog::Log(LOGWARNING, "JSONRPC: Value does not lay between minimum and maximum in type %s", type.name.c_str());
+      CLog::Log(LOGDEBUG, "JSONRPC: Value does not lay between minimum and maximum in type %s", type.name.c_str());
       if (value.isDouble())
         errorMessage.Format("Value between %f (%s) and %f (%s) expected but %f received", 
           type.minimum, type.exclusiveMinimum ? "exclusive" : "inclusive", type.maximum, type.exclusiveMaximum ? "exclusive" : "inclusive", numberValue);
@@ -1085,7 +1101,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
     // Check divisibleBy
     if ((HasType(type.type, IntegerValue) && type.divisibleBy > 0 && ((int)numberValue % type.divisibleBy) != 0))
     {
-      CLog::Log(LOGWARNING, "JSONRPC: Value does not meet divisibleBy requirements in type %s", type.name.c_str());
+      CLog::Log(LOGDEBUG, "JSONRPC: Value does not meet divisibleBy requirements in type %s", type.name.c_str());
       errorMessage.Format("Value should be divisible by %d but %d received", type.divisibleBy, (int)numberValue);
       errorData["message"] = errorMessage.c_str();
       return InvalidParams;
@@ -1098,7 +1114,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
     int size = value.asString().size();
     if (size < type.minLength)
     {
-      CLog::Log(LOGWARNING, "JSONRPC: Value does not meet minLength requirements in type %s", type.name.c_str());
+      CLog::Log(LOGDEBUG, "JSONRPC: Value does not meet minLength requirements in type %s", type.name.c_str());
       errorMessage.Format("Value should have a minimum length of %d but has a length of %d", type.minLength, size);
       errorData["message"] = errorMessage.c_str();
       return InvalidParams;
@@ -1106,7 +1122,7 @@ JSON_STATUS CJSONServiceDescription::checkType(const CVariant &value, const JSON
 
     if (type.maxLength >= 0 && size > type.maxLength)
     {
-      CLog::Log(LOGWARNING, "JSONRPC: Value does not meet maxLength requirements in type %s", type.name.c_str());
+      CLog::Log(LOGDEBUG, "JSONRPC: Value does not meet maxLength requirements in type %s", type.name.c_str());
       errorMessage.Format("Value should have a maximum length of %d but has a length of %d", type.maxLength, size);
       errorData["message"] = errorMessage.c_str();
       return InvalidParams;
@@ -1160,7 +1176,7 @@ bool CJSONServiceDescription::parseMethod(const CVariant &value, JsonRpcMethod &
          (parameter.isMember("$ref") && !parameter["$ref"].isString()) ||
          (parameter.isMember("extends") && !parameter["extends"].isString() && !parameter["extends"].isArray()))
       {
-        CLog::Log(LOGWARNING, "JSONRPC: Method %s has a badly defined parameter", method.name.c_str());
+        CLog::Log(LOGDEBUG, "JSONRPC: Method %s has a badly defined parameter", method.name.c_str());
         return false;
       }
 
@@ -1202,7 +1218,7 @@ bool CJSONServiceDescription::parseTypeDefinition(const CVariant &value, JSONSch
     std::map<std::string, JSONSchemaTypeDefinition>::const_iterator iter = m_types.find(refType);
     if (refType.length() <= 0 || iter == m_types.end())
     {
-      CLog::Log(LOGWARNING, "JSONRPC: JSON schema type %s references an unknown type %s", type.name.c_str(), refType.c_str());
+      CLog::Log(LOGDEBUG, "JSONRPC: JSON schema type %s references an unknown type %s", type.name.c_str(), refType.c_str());
       return false;
     }
     
@@ -1231,7 +1247,7 @@ bool CJSONServiceDescription::parseTypeDefinition(const CVariant &value, JSONSch
     if (value.isMember("default") && IsType(value["default"], type.type))
     {
       bool ok = false;
-      if (type.enums.size() >= 0)
+      if (type.enums.size() <= 0)
         ok = true;
       // If the type has an enum definition we must make
       // sure that the default value is a valid enum value
@@ -1359,11 +1375,11 @@ bool CJSONServiceDescription::parseTypeDefinition(const CVariant &value, JSONSch
           type.hasAdditionalProperties = false;
           delete type.additionalProperties;
           type.additionalProperties = NULL;
-          CLog::Log(LOGWARNING, "JSONRPC: Invalid additionalProperties schema definition in type %s", type.name.c_str());
+          CLog::Log(LOGDEBUG, "JSONRPC: Invalid additionalProperties schema definition in type %s", type.name.c_str());
         }
       }
       else
-        CLog::Log(LOGWARNING, "JSONRPC: Invalid additionalProperties definition in type %s", type.name.c_str());
+        CLog::Log(LOGDEBUG, "JSONRPC: Invalid additionalProperties definition in type %s", type.name.c_str());
     }
   }
 
@@ -1403,7 +1419,7 @@ bool CJSONServiceDescription::parseTypeDefinition(const CVariant &value, JSONSch
       // If it is not a (array of) schema and not a bool (default value is false)
       // it has an invalid value
       else if (!value["additionalItems"].isBoolean())
-        CLog::Log(LOGWARNING, "Invalid \"additionalItems\" value for type %s", type.name.c_str());
+        CLog::Log(LOGDEBUG, "Invalid \"additionalItems\" value for type %s", type.name.c_str());
     }
 
     // If the "items" field is a single object
@@ -1494,7 +1510,7 @@ bool CJSONServiceDescription::parseTypeDefinition(const CVariant &value, JSONSch
     bool ok = false;
     if (value.isMember("default") && IsType(value["default"], type.type))
     {
-      if (type.enums.size() >= 0)
+      if (type.enums.size() <= 0)
         ok = true;
       // If the type has an enum definition we must make
       // sure that the default value is a valid enum value
@@ -1518,7 +1534,7 @@ bool CJSONServiceDescription::parseTypeDefinition(const CVariant &value, JSONSch
       // If the type of the default value definition does not
       // match the type of the parameter we have to log this
       if (value.isMember("default") && !IsType(value["default"], type.type))
-        CLog::Log(LOGWARNING, "JSONRPC: Parameter %s has an invalid default value", type.name.c_str());
+        CLog::Log(LOGDEBUG, "JSONRPC: Parameter %s has an invalid default value", type.name.c_str());
       
       // If the type contains an "enum" we need to get the
       // default value from the first enum value
@@ -1649,6 +1665,10 @@ void CJSONServiceDescription::getReferencedTypes(const JSONSchemaTypeDefinition
   // If the current type extends others type we need to check those types
   for (unsigned int index = 0; index < type.extends.size(); index++)
     getReferencedTypes(type.extends.at(index), referencedTypes);
+
+  // If the current type is a union type we need to check those types
+  for (unsigned int index = 0; index < type.unionTypes.size(); index++)
+    getReferencedTypes(type.unionTypes.at(index), referencedTypes);
 }
 
 CJSONServiceDescription::CJsonRpcMethodMap::CJsonRpcMethodMap()
index 27b51d2..7fbc666 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2012 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
@@ -23,6 +23,7 @@
 #include <string>
 #include <vector>
 #include <limits>
+
 #include "JSONUtils.h"
 
 namespace JSONRPC
@@ -334,7 +335,7 @@ namespace JSONRPC
      \param printMetadata Whether to print XBMC specific data or not
      \param filterByTransport Whether to filter by transport or not
      */
-    static JSON_STATUS Print(CVariant &result, ITransportLayer *transport, IClient *client, bool printDescriptions = true, bool printMetadata = false, bool filterByTransport = true, std::string filterByName = "", std::string filterByType = "", bool printReferences = true);
+    static JSONRPC_STATUS Print(CVariant &result, ITransportLayer *transport, IClient *client, bool printDescriptions = true, bool printMetadata = false, bool filterByTransport = true, std::string filterByName = "", std::string filterByType = "", bool printReferences = true);
 
     /*!
      \brief Checks the given parameters from the request against the
@@ -352,14 +353,14 @@ namespace JSONRPC
      actual C/C++ implementation of the method to the "methodCall" parameter and checks the
      given parameters from the request against the json schema description for the given method.
      */
-    static JSON_STATUS CheckCall(const char* const method, const CVariant &requestParameters, IClient *client, bool notification, MethodCall &methodCall, CVariant &outputParameters);
+    static JSONRPC_STATUS CheckCall(const char* const method, const CVariant &requestParameters, ITransportLayer *transport, IClient *client, bool notification, MethodCall &methodCall, CVariant &outputParameters);
 
   private:
     static bool prepareDescription(std::string &description, CVariant &descriptionObject, std::string &name);
     static bool addMethod(std::string &jsonMethod, MethodCall method);
     static void printType(const JSONSchemaTypeDefinition &type, bool isParameter, bool isGlobal, bool printDefault, bool printDescriptions, CVariant &output);
-    static JSON_STATUS checkParameter(const CVariant &requestParameters, const JSONSchemaTypeDefinition &type, unsigned int position, CVariant &outputParameters, unsigned int &handled, CVariant &errorData);
-    static JSON_STATUS checkType(const CVariant &value, const JSONSchemaTypeDefinition &type, CVariant &outputValue, CVariant &errorData);
+    static JSONRPC_STATUS checkParameter(const CVariant &requestParameters, const JSONSchemaTypeDefinition &type, unsigned int position, CVariant &outputParameters, unsigned int &handled, CVariant &errorData);
+    static JSONRPC_STATUS checkType(const CVariant &value, const JSONSchemaTypeDefinition &type, CVariant &outputValue, CVariant &errorData);
     static void parseHeader(const CVariant &descriptionObject);
     static bool parseMethod(const CVariant &value, JsonRpcMethod &method);
     static bool parseParameter(CVariant &value, JSONSchemaTypeDefinition &parameter);
index 1d392c6..4b8d955 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2012 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
 
 #include <string.h>
 #include <stdlib.h>
-#include "utils/StdString.h"
+
+#include "JSONRPCUtils.h"
 #include "interfaces/IAnnouncer.h"
-#include "interfaces/AnnouncementUtils.h"
-#include "ITransportLayer.h"
-#include "utils/Variant.h"
 #include "utils/JSONVariantWriter.h"
 #include "utils/JSONVariantParser.h"
 
-
 namespace JSONRPC
 {
   /*!
-   \ingroup jsonrpc
-   \brief Possible statuc codes of a response
-   to a JSON RPC request
-   */
-  enum JSON_STATUS
-  {
-    OK = 0,
-    ACK = -1,
-    InvalidRequest = -32600,
-    MethodNotFound = -32601,
-    InvalidParams = -32602,
-    InternalError = -32603,
-    ParseError = -32700,
-    //-32099..-32000 Reserved for implementation-defined server-errors.
-    BadPermission = -32099,
-    FailedToExecute = -32100
-  };
-
-  /*!
-   \brief Function pointer for json rpc methods
-   */
-  typedef JSON_STATUS (*MethodCall) (const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
-
-  /*!
-   \ingroup jsonrpc
-   \brief Permission categories for json rpc methods
-   
-   A json rpc method will only be called if the caller 
-   has the correct permissions to exectue the method.
-   The method call needs to be perfectly threadsafe.
-  */
-  enum OperationPermission
-  {
-    ReadData        =   0x1,
-    ControlPlayback =   0x2,
-    ControlNotify   =   0x4,
-    ControlPower    =   0x8,
-    UpdateData      =  0x10,
-    RemoveData      =  0x20,
-    Navigate        =  0x40,
-    WriteFile       =  0x80
-  };
-
-  static const int OPERATION_PERMISSION_ALL = (ReadData | ControlPlayback | ControlNotify | ControlPower | UpdateData | RemoveData | Navigate | WriteFile);
-
-  static const int OPERATION_PERMISSION_NOTIFICATION = (ControlPlayback | ControlNotify | ControlPower | UpdateData | RemoveData | Navigate | WriteFile);
-
-  /*!
    \brief Possible value types of a parameter or return type
    */
   enum JSONSchemaType
@@ -194,63 +143,6 @@ namespace JSONRPC
     }
 
     /*!
-     \brief Returns a string representation for the 
-     given OperationPermission
-     \param permission Specific OperationPermission
-     \return String representation of the given OperationPermission
-     */
-    static inline const char *PermissionToString(const OperationPermission &permission)
-    {
-      switch (permission)
-      {
-      case ReadData:
-        return "ReadData";
-      case ControlPlayback:
-        return "ControlPlayback";
-      case ControlNotify:
-        return "ControlNotify";
-      case ControlPower:
-        return "ControlPower";
-      case UpdateData:
-        return "UpdateData";
-      case RemoveData:
-        return "RemoveData";
-      case Navigate:
-        return "Navigate";
-      case WriteFile:
-        return "WriteFile";
-      default:
-        return "Unknown";
-      }
-    }
-
-    /*!
-     \brief Returns a OperationPermission value for the given
-     string representation
-     \param permission String representation of the OperationPermission
-     \return OperationPermission value of the given string representation
-     */
-    static inline OperationPermission StringToPermission(std::string permission)
-    {
-      if (permission.compare("ControlPlayback") == 0)
-        return ControlPlayback;
-      if (permission.compare("ControlNotify") == 0)
-        return ControlNotify;
-      if (permission.compare("ControlPower") == 0)
-        return ControlPower;
-      if (permission.compare("UpdateData") == 0)
-        return UpdateData;
-      if (permission.compare("RemoveData") == 0)
-        return RemoveData;
-      if (permission.compare("Navigate") == 0)
-        return Navigate;
-      if (permission.compare("WriteFile") == 0)
-        return WriteFile;
-
-      return ReadData;
-    }
-
-    /*!
      \brief Returns a TransportLayerCapability value of the
      given string representation
      \param transport String representation of the TransportLayerCapability
@@ -260,8 +152,10 @@ namespace JSONRPC
     {
       if (transport.compare("Announcing") == 0)
         return Announcing;
-      if (transport.compare("FileDownload") == 0)
-        return FileDownload;
+      if (transport.compare("FileDownloadDirect") == 0)
+        return FileDownloadDirect;
+      if (transport.compare("FileDownloadRedirect") == 0)
+        return FileDownloadRedirect;
 
       return Response;
     }
@@ -475,25 +369,10 @@ namespace JSONRPC
           value = CVariant(CVariant::VariantTypeObject);
           break;
         default:
-          value = CVariant(CVariant::VariantTypeConstNull);
+          value = CVariant(CVariant::VariantTypeNull);
       }
     }
 
     static inline bool HasType(JSONSchemaType typeObject, JSONSchemaType type) { return (typeObject & type) == type; }
-
-    static std::string AnnouncementToJSON(ANNOUNCEMENT::EAnnouncementFlag flag, const char *sender, const char *method, const CVariant &data, bool compactOutput)
-    {
-      CVariant root;
-      root["jsonrpc"] = "2.0";
-
-      CStdString namespaceMethod;
-      namespaceMethod.Format("%s.%s", ANNOUNCEMENT::CAnnouncementUtils::AnnouncementFlagToString(flag), method);
-      root["method"]  = namespaceMethod.c_str();
-
-      root["params"]["data"] = data;
-      root["params"]["sender"] = sender;
-
-      return CJSONVariantWriter::Write(root, compactOutput);
-    }
   };
 }
index 648ec24..5c722a4 100644 (file)
@@ -2,6 +2,7 @@ SRCS=ApplicationOperations.cpp \
      AudioLibrary.cpp \
      FileItemHandler.cpp \
      FileOperations.cpp \
+                GUIOperations.cpp \
      JSONRPC.cpp \
      JSONServiceDescription.cpp \
      PlayerOperations.cpp \
index 7da7891..e02d1f0 100644 (file)
 #include "Application.h"
 #include "Util.h"
 #include "PlayListPlayer.h"
+#include "playlists/PlayList.h"
 #include "guilib/GUIWindowManager.h"
 #include "GUIUserMessages.h"
 #include "pictures/GUIWindowSlideShow.h"
 #include "interfaces/Builtins.h"
-#include "PlayListPlayer.h"
 #include "PartyModeManager.h"
 #include "ApplicationMessenger.h"
 #include "FileItem.h"
+#include "VideoLibrary.h"
+#include "video/VideoDatabase.h"
+#include "AudioLibrary.h"
+#include "GUIInfoManager.h"
 
 using namespace JSONRPC;
 using namespace PLAYLIST;
 
-JSON_STATUS CPlayerOperations::GetActivePlayers(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::GetActivePlayers(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int activePlayers = GetActivePlayers();
   result = CVariant(CVariant::VariantTypeArray);
@@ -65,7 +69,7 @@ JSON_STATUS CPlayerOperations::GetActivePlayers(const CStdString &method, ITrans
   return OK;
 }
 
-JSON_STATUS CPlayerOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   PlayerType player = GetPlayer(parameterObject["playerid"]);
 
@@ -74,7 +78,7 @@ JSON_STATUS CPlayerOperations::GetProperties(const CStdString &method, ITranspor
   {
     CStdString propertyName = parameterObject["properties"][index].asString();
     CVariant property;
-    JSON_STATUS ret;
+    JSONRPC_STATUS ret;
     if ((ret = GetPropertyValue(player, propertyName, property)) != OK)
       return ret;
 
@@ -86,20 +90,128 @@ JSON_STATUS CPlayerOperations::GetProperties(const CStdString &method, ITranspor
   return OK;
 }
 
-JSON_STATUS CPlayerOperations::PlayPause(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::GetItem(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  PlayerType player = GetPlayer(parameterObject["playerid"]);
+  CFileItemPtr fileItem;
+
+  switch (player)
+  {
+    case Video:
+    case Audio:
+    {
+      if (g_application.CurrentFileItem().GetLabel().empty())
+      {
+        CFileItem tmpItem = g_application.CurrentFileItem();
+        if (player == Video)
+        {
+          if (!CVideoLibrary::FillFileItem(g_application.CurrentFile(), tmpItem))
+          {
+            tmpItem = CFileItem(*g_infoManager.GetCurrentMovieTag());
+            tmpItem.SetPath(g_application.CurrentFileItem().GetPath());
+          }
+        }
+        else
+        {
+          if (!CAudioLibrary::FillFileItem(g_application.CurrentFile(), tmpItem))
+          {
+            tmpItem = CFileItem(*g_infoManager.GetCurrentSongTag());
+            tmpItem.SetPath(g_application.CurrentFileItem().GetPath());
+          }
+        }
+
+        fileItem = CFileItemPtr(new CFileItem(tmpItem));
+      }
+      else
+        fileItem = CFileItemPtr(new CFileItem(g_application.CurrentFileItem()));
+
+      if (player == Video)
+      {
+        bool additionalInfo = false;
+        for (CVariant::const_iterator_array itr = parameterObject["properties"].begin_array(); itr != parameterObject["properties"].end_array(); itr++)
+        {
+          CStdString fieldValue = itr->asString();
+          if (fieldValue == "cast" || fieldValue == "set" || fieldValue == "setid" || fieldValue == "showlink" || fieldValue == "resume")
+            additionalInfo = true;
+        }
+
+        if (additionalInfo)
+        {
+          CVideoDatabase videodatabase;
+          if (videodatabase.Open())
+          {
+            switch (fileItem->GetVideoContentType())
+            {
+              case VIDEODB_CONTENT_MOVIES:
+                videodatabase.GetMovieInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId);
+                break;
+
+              case VIDEODB_CONTENT_MUSICVIDEOS:
+                videodatabase.GetMusicVideoInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId);
+                break;
+
+              case VIDEODB_CONTENT_EPISODES:
+                videodatabase.GetEpisodeInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId);
+                break;
+
+              case VIDEODB_CONTENT_TVSHOWS:
+              case VIDEODB_CONTENT_MOVIE_SETS:
+              default:
+                break;
+            }
+
+            videodatabase.Close();
+          }
+        }
+      }
+      break;
+    }
+
+    case Picture:
+    {
+      CGUIWindowSlideShow *slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW);
+      if (!slideshow)
+        return FailedToExecute;
+
+      CFileItemList slides;
+      slideshow->GetSlideShowContents(slides);
+      fileItem = slides[slideshow->CurrentSlide() - 1];
+      break;
+    }
+
+    case None:
+    default:
+      return FailedToExecute;
+  }
+
+  HandleFileItem("id", true, "item", fileItem, parameterObject, parameterObject["properties"], result, false);
+  return OK;
+}
+
+JSONRPC_STATUS CPlayerOperations::PlayPause(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CGUIWindowSlideShow *slideshow = NULL;
   switch (GetPlayer(parameterObject["playerid"]))
   {
     case Video:
     case Audio:
-      CBuiltins::Execute("playercontrol(play)");
+      if (parameterObject["play"].isString())
+        CBuiltins::Execute("playercontrol(play)");
+      else
+      {
+        if (parameterObject["play"].asBoolean() == g_application.IsPaused())
+          g_application.getApplicationMessenger().MediaPause();
+      }
       result["speed"] = g_application.IsPaused() ? 0 : g_application.GetPlaySpeed();
       return OK;
 
     case Picture:
-      SendSlideshowAction(ACTION_PAUSE);
       slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW);
+      if (slideshow && slideshow->IsPlaying() &&
+         (parameterObject["play"].isString() ||
+         (parameterObject["play"].isBoolean() && parameterObject["play"].asBoolean() == slideshow->IsPaused())))
+        SendSlideshowAction(ACTION_PAUSE);
+
       if (slideshow && slideshow->IsPlaying() && !slideshow->IsPaused())
         result["speed"] = slideshow->GetDirection();
       else
@@ -112,7 +224,7 @@ JSON_STATUS CPlayerOperations::PlayPause(const CStdString &method, ITransportLay
   }
 }
 
-JSON_STATUS CPlayerOperations::Stop(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::Stop(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -131,7 +243,7 @@ JSON_STATUS CPlayerOperations::Stop(const CStdString &method, ITransportLayer *t
   }
 }
 
-JSON_STATUS CPlayerOperations::SetSpeed(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::SetSpeed(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int speed;
   switch (GetPlayer(parameterObject["playerid"]))
@@ -172,7 +284,7 @@ JSON_STATUS CPlayerOperations::SetSpeed(const CStdString &method, ITransportLaye
   }
 }
 
-JSON_STATUS CPlayerOperations::Seek(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::Seek(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   PlayerType player = GetPlayer(parameterObject["playerid"]);
   switch (player)
@@ -180,8 +292,7 @@ JSON_STATUS CPlayerOperations::Seek(const CStdString &method, ITransportLayer *t
     case Video:
     case Audio:
       if (parameterObject["value"].isObject())
-        g_application.SeekTime(((parameterObject["value"]["hours"].asInteger() * 60) + parameterObject["value"]["minutes"].asInteger()) * 60 + 
-          parameterObject["value"]["seconds"].asInteger() + ((double)parameterObject["value"]["milliseconds"].asInteger() / 1000.0));
+        g_application.SeekTime(ParseTimeInSeconds(parameterObject["value"]));
       else if (IsType(parameterObject["value"], NumberValue))
         g_application.SeekPercentage(parameterObject["value"].asFloat());
       else if (parameterObject["value"].isString())
@@ -213,7 +324,7 @@ JSON_STATUS CPlayerOperations::Seek(const CStdString &method, ITransportLayer *t
   }
 }
 
-JSON_STATUS CPlayerOperations::MoveLeft(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::MoveLeft(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -229,7 +340,7 @@ JSON_STATUS CPlayerOperations::MoveLeft(const CStdString &method, ITransportLaye
   }
 }
 
-JSON_STATUS CPlayerOperations::MoveRight(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::MoveRight(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -245,7 +356,7 @@ JSON_STATUS CPlayerOperations::MoveRight(const CStdString &method, ITransportLay
   }
 }
 
-JSON_STATUS CPlayerOperations::MoveDown(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::MoveDown(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -261,7 +372,7 @@ JSON_STATUS CPlayerOperations::MoveDown(const CStdString &method, ITransportLaye
   }
 }
 
-JSON_STATUS CPlayerOperations::MoveUp(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::MoveUp(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -277,7 +388,7 @@ JSON_STATUS CPlayerOperations::MoveUp(const CStdString &method, ITransportLayer
   }
 }
 
-JSON_STATUS CPlayerOperations::ZoomOut(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::ZoomOut(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -293,7 +404,7 @@ JSON_STATUS CPlayerOperations::ZoomOut(const CStdString &method, ITransportLayer
   }
 }
 
-JSON_STATUS CPlayerOperations::ZoomIn(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::ZoomIn(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -309,7 +420,7 @@ JSON_STATUS CPlayerOperations::ZoomIn(const CStdString &method, ITransportLayer
   }
 }
 
-JSON_STATUS CPlayerOperations::Zoom(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::Zoom(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -325,7 +436,7 @@ JSON_STATUS CPlayerOperations::Zoom(const CStdString &method, ITransportLayer *t
   }
 }
 
-JSON_STATUS CPlayerOperations::Rotate(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::Rotate(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -341,20 +452,31 @@ JSON_STATUS CPlayerOperations::Rotate(const CStdString &method, ITransportLayer
   }
 }
 
-JSON_STATUS CPlayerOperations::Open(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::Open(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
+  CVariant optionShuffled = parameterObject["options"]["shuffled"];
+  CVariant optionRepeat = parameterObject["options"]["repeat"];
+  CVariant optionResume = parameterObject["options"]["resume"];
+
   if (parameterObject["item"].isObject() && parameterObject["item"].isMember("playlistid"))
   {
     int playlistid = (int)parameterObject["item"]["playlistid"].asInteger();
+
+    if (playlistid < PLAYLIST_PICTURE)
+    {
+      // Apply the "shuffled" option if available
+      if (optionShuffled.isBoolean())
+        g_playlistPlayer.SetShuffle(playlistid, optionShuffled.asBoolean(), false);
+      // Apply the "repeat" option if available
+      if (!optionRepeat.isNull())
+        g_playlistPlayer.SetRepeat(playlistid, (REPEAT_STATE)ParseRepeatState(optionRepeat), false);
+    }
+
     switch (playlistid)
     {
       case PLAYLIST_MUSIC:
       case PLAYLIST_VIDEO:
-        if (g_playlistPlayer.GetCurrentPlaylist() != playlistid)
-          g_playlistPlayer.SetCurrentPlaylist(playlistid);
-
-        g_application.getApplicationMessenger().PlayListPlayerPlay((int)parameterObject["item"]["position"].asInteger());
-
+        g_application.getApplicationMessenger().MediaPlay(playlistid, (int)parameterObject["item"]["position"].asInteger());
         OnPlaylistChanged();
         break;
 
@@ -371,7 +493,8 @@ JSON_STATUS CPlayerOperations::Open(const CStdString &method, ITransportLayer *t
 
     exec += parameterObject["item"]["path"].asString();
 
-    if (parameterObject["item"]["random"].asBoolean())
+    if ((optionShuffled.isBoolean() && optionShuffled.asBoolean()) ||
+       (!optionShuffled.isBoolean() && parameterObject["item"]["random"].asBoolean()))
       exec += ", random";
     else
       exec += ", notrandom";
@@ -393,7 +516,7 @@ JSON_STATUS CPlayerOperations::Open(const CStdString &method, ITransportLayer *t
       bool slideshow = true;
       for (int index = 0; index < list.Size(); index++)
       {
-        if (!list[index]->HasPictureInfoTag())
+        if (!list[index]->IsPicture())
         {
           slideshow = false;
           break;
@@ -411,10 +534,32 @@ JSON_STATUS CPlayerOperations::Open(const CStdString &method, ITransportLayer *t
         for (int index = 0; index < list.Size(); index++)
           slideshow->Add(list[index].get());
 
+        if (optionShuffled.isBoolean() && optionShuffled.asBoolean())
+          slideshow->Shuffle();
+
         return StartSlideshow();
       }
       else
+      {
+        // Handle "shuffled" option
+        if (optionShuffled.isBoolean())
+          list.SetProperty("shuffled", optionShuffled);
+        // Handle "repeat" option
+        if (!optionRepeat.isNull())
+          list.SetProperty("repeat", ParseRepeatState(optionRepeat));
+        // Handle "resume" option
+        if (list.Size() == 1)
+        {
+          if (optionResume.isBoolean() && optionResume.asBoolean())
+            list[0]->m_lStartOffset = STARTOFFSET_RESUME;
+          else if (optionResume.isDouble())
+            list[0]->SetProperty("StartPercent", optionResume);
+          else if (optionResume.isObject())
+            list[0]->m_lStartOffset = (int)(ParseTimeInSeconds(optionResume) * 75.0);
+        }
+
         g_application.getApplicationMessenger().MediaPlay(list);
+      }
 
       return ACK;
     }
@@ -425,7 +570,7 @@ JSON_STATUS CPlayerOperations::Open(const CStdString &method, ITransportLayer *t
   return InvalidParams;
 }
 
-JSON_STATUS CPlayerOperations::GoPrevious(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::GoPrevious(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -444,7 +589,7 @@ JSON_STATUS CPlayerOperations::GoPrevious(const CStdString &method, ITransportLa
   }
 }
 
-JSON_STATUS CPlayerOperations::GoNext(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::GoNext(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -463,7 +608,7 @@ JSON_STATUS CPlayerOperations::GoNext(const CStdString &method, ITransportLayer
   }
 }
 
-JSON_STATUS CPlayerOperations::GoTo(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::GoTo(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int position = (int)parameterObject["position"].asInteger();
   switch (GetPlayer(parameterObject["playerid"]))
@@ -483,7 +628,7 @@ JSON_STATUS CPlayerOperations::GoTo(const CStdString &method, ITransportLayer *t
   return ACK;
 }
 
-JSON_STATUS CPlayerOperations::Shuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::Shuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CGUIWindowSlideShow *slideshow = NULL;
   switch (GetPlayer(parameterObject["playerid"]))
@@ -508,7 +653,7 @@ JSON_STATUS CPlayerOperations::Shuffle(const CStdString &method, ITransportLayer
   return ACK;
 }
 
-JSON_STATUS CPlayerOperations::UnShuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::UnShuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -525,21 +670,13 @@ JSON_STATUS CPlayerOperations::UnShuffle(const CStdString &method, ITransportLay
   return ACK;
 }
 
-JSON_STATUS CPlayerOperations::Repeat(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::Repeat(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  REPEAT_STATE state = REPEAT_NONE;
-  std::string strState = parameterObject["state"].asString();
-  
   switch (GetPlayer(parameterObject["playerid"]))
   {
     case Video:
     case Audio:
-      if (strState.compare("one") == 0)
-        state = REPEAT_ONE;
-      else if (strState.compare("all") == 0)
-        state = REPEAT_ALL;
-
-      g_application.getApplicationMessenger().PlayListPlayerRepeat(GetPlaylist(GetPlayer(parameterObject["playerid"])), state);
+      g_application.getApplicationMessenger().PlayListPlayerRepeat(GetPlaylist(GetPlayer(parameterObject["playerid"])), (REPEAT_STATE)ParseRepeatState(parameterObject["state"]));
       OnPlaylistChanged();
       break;
 
@@ -551,7 +688,7 @@ JSON_STATUS CPlayerOperations::Repeat(const CStdString &method, ITransportLayer
   return ACK;
 }
 
-JSON_STATUS CPlayerOperations::SetAudioStream(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::SetAudioStream(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -598,7 +735,7 @@ JSON_STATUS CPlayerOperations::SetAudioStream(const CStdString &method, ITranspo
   return ACK;
 }
 
-JSON_STATUS CPlayerOperations::SetSubtitle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::SetSubtitle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   switch (GetPlayer(parameterObject["playerid"]))
   {
@@ -641,6 +778,10 @@ JSON_STATUS CPlayerOperations::SetSubtitle(const CStdString &method, ITransportL
           return InvalidParams;
 
         g_application.m_pPlayer->SetSubtitle(index);
+
+        // Check if we need to enable subtitles to be displayed
+        if (parameterObject["enable"].asBoolean() && !g_application.m_pPlayer->GetSubtitleVisible())
+          g_application.m_pPlayer->SetSubtitleVisible(true);
       }
       else
         return FailedToExecute;
@@ -724,10 +865,10 @@ int CPlayerOperations::GetPlaylist(PlayerType player)
   }
 }
 
-JSON_STATUS CPlayerOperations::StartSlideshow()
+JSONRPC_STATUS CPlayerOperations::StartSlideshow()
 {
   CGUIWindowSlideShow *slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW);
-  if (!slideshow && slideshow->NumSlides() <= 0)
+  if (!slideshow || slideshow->NumSlides() <= 0)
     return FailedToExecute;
 
   if (g_application.IsPlayingVideo())
@@ -757,7 +898,7 @@ void CPlayerOperations::OnPlaylistChanged()
   g_windowManager.SendThreadMessage(msg);
 }
 
-JSON_STATUS CPlayerOperations::GetPropertyValue(PlayerType player, const CStdString &property, CVariant &result)
+JSONRPC_STATUS CPlayerOperations::GetPropertyValue(PlayerType player, const CStdString &property, CVariant &result)
 {
   if (player == None)
     return FailedToExecute;
@@ -1212,3 +1353,34 @@ JSON_STATUS CPlayerOperations::GetPropertyValue(PlayerType player, const CStdStr
 
   return OK;
 }
+
+int CPlayerOperations::ParseRepeatState(const CVariant &repeat)
+{
+  REPEAT_STATE state = REPEAT_NONE;
+  std::string strState = repeat.asString();
+
+  if (strState.compare("one") == 0)
+    state = REPEAT_ONE;
+  else if (strState.compare("all") == 0)
+    state = REPEAT_ALL;
+
+  return state;
+}
+
+double CPlayerOperations::ParseTimeInSeconds(const CVariant &time)
+{
+  double seconds = 0.0;
+  if (time.isObject())
+  {
+    if (time.isMember("hours"))
+      seconds += time["hours"].asInteger() * 60 * 60;
+    if (time.isMember("minutes"))
+      seconds += time["minutes"].asInteger() * 60;
+    if (time.isMember("seconds"))
+      seconds += time["seconds"].asInteger();
+    if (time.isMember("milliseconds"))
+      seconds += time["milliseconds"].asDouble() / 1000.0;
+  }
+
+  return seconds;
+}
index 23628c0..ebe45e2 100644 (file)
@@ -39,41 +39,45 @@ namespace JSONRPC
   class CPlayerOperations : CFileItemHandler
   {
   public:
-    static JSON_STATUS GetActivePlayers(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetActivePlayers(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetItem(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS PlayPause(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Stop(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS SetSpeed(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Seek(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS PlayPause(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Stop(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS SetSpeed(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Seek(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS MoveLeft(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS MoveRight(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS MoveDown(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS MoveUp(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS MoveLeft(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS MoveRight(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS MoveDown(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS MoveUp(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS ZoomOut(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS ZoomIn(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Zoom(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Rotate(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS ZoomOut(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS ZoomIn(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Zoom(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Rotate(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
     
-    static JSON_STATUS Open(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GoPrevious(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GoNext(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GoTo(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Shuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS UnShuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Repeat(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Open(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GoPrevious(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GoNext(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GoTo(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Shuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS UnShuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Repeat(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
     
-    static JSON_STATUS SetAudioStream(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS SetSubtitle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS SetAudioStream(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS SetSubtitle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
   private:
     static int GetActivePlayers();
     static PlayerType GetPlayer(const CVariant &player);
     static int GetPlaylist(PlayerType player);
-    static JSON_STATUS StartSlideshow();
+    static JSONRPC_STATUS StartSlideshow();
     static void SendSlideshowAction(int actionID);
     static void OnPlaylistChanged();
-    static JSON_STATUS GetPropertyValue(PlayerType player, const CStdString &property, CVariant &result);
+    static JSONRPC_STATUS GetPropertyValue(PlayerType player, const CStdString &property, CVariant &result);
+
+    static int ParseRepeatState(const CVariant &repeat);
+    static double ParseTimeInSeconds(const CVariant &time);
   };
 }
index 79831b5..9d07201 100644 (file)
@@ -33,7 +33,7 @@ using namespace JSONRPC;
 using namespace PLAYLIST;
 using namespace std;
 
-JSON_STATUS CPlaylistOperations::GetPlaylists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::GetPlaylists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   result = CVariant(CVariant::VariantTypeArray);
   CVariant playlist = CVariant(CVariant::VariantTypeObject);
@@ -53,14 +53,14 @@ JSON_STATUS CPlaylistOperations::GetPlaylists(const CStdString &method, ITranspo
   return OK;
 }
 
-JSON_STATUS CPlaylistOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int playlist = GetPlaylist(parameterObject["playlistid"]);
   for (unsigned int index = 0; index < parameterObject["properties"].size(); index++)
   {
     CStdString propertyName = parameterObject["properties"][index].asString();
     CVariant property;
-    JSON_STATUS ret;
+    JSONRPC_STATUS ret;
     if ((ret = GetPropertyValue(playlist, propertyName, property)) != OK)
       return ret;
 
@@ -70,7 +70,7 @@ JSON_STATUS CPlaylistOperations::GetProperties(const CStdString &method, ITransp
   return OK;
 }
 
-JSON_STATUS CPlaylistOperations::GetItems(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::GetItems(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CFileItemList list;
   int playlist = GetPlaylist(parameterObject["playlistid"]);
@@ -95,7 +95,7 @@ JSON_STATUS CPlaylistOperations::GetItems(const CStdString &method, ITransportLa
   return OK;
 }
 
-JSON_STATUS CPlaylistOperations::Add(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::Add(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int playlist = GetPlaylist(parameterObject["playlistid"]);
   CFileItemList list;
@@ -145,7 +145,7 @@ JSON_STATUS CPlaylistOperations::Add(const CStdString &method, ITransportLayer *
   return ACK;
 }
 
-JSON_STATUS CPlaylistOperations::Insert(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::Insert(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int playlist = GetPlaylist(parameterObject["playlistid"]);
   if (playlist == PLAYLIST_PICTURE)
@@ -169,7 +169,7 @@ JSON_STATUS CPlaylistOperations::Insert(const CStdString &method, ITransportLaye
   return ACK;
 }
 
-JSON_STATUS CPlaylistOperations::Remove(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::Remove(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int playlist = GetPlaylist(parameterObject["playlistid"]);
   if (playlist == PLAYLIST_PICTURE)
@@ -185,7 +185,7 @@ JSON_STATUS CPlaylistOperations::Remove(const CStdString &method, ITransportLaye
   return ACK;
 }
 
-JSON_STATUS CPlaylistOperations::Clear(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::Clear(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int playlist = GetPlaylist(parameterObject["playlistid"]);
   CGUIWindowSlideShow *slideshow = NULL;
@@ -209,7 +209,7 @@ JSON_STATUS CPlaylistOperations::Clear(const CStdString &method, ITransportLayer
   return ACK;
 }
 
-JSON_STATUS CPlaylistOperations::Swap(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::Swap(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int playlist = GetPlaylist(parameterObject["playlistid"]);
   if (playlist == PLAYLIST_PICTURE)
@@ -236,7 +236,7 @@ void CPlaylistOperations::NotifyAll()
   g_windowManager.SendThreadMessage(msg);
 }
 
-JSON_STATUS CPlaylistOperations::GetPropertyValue(int playlist, const CStdString &property, CVariant &result)
+JSONRPC_STATUS CPlaylistOperations::GetPropertyValue(int playlist, const CStdString &property, CVariant &result)
 {
   if (property.Equals("type"))
   {
index a86ed90..f89ef39 100644 (file)
@@ -29,18 +29,18 @@ namespace JSONRPC
   class CPlaylistOperations : public CFileItemHandler
   {
   public:
-    static JSON_STATUS GetPlaylists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetPlaylists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS GetItems(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Add(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Remove(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result); 
-    static JSON_STATUS Insert(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Clear(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Swap(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetItems(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Add(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Remove(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result); 
+    static JSONRPC_STATUS Insert(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Clear(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Swap(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
   private:
     static int GetPlaylist(const CVariant &playlist);
     static inline void NotifyAll();
-    static JSON_STATUS GetPropertyValue(int playlist, const CStdString &property, CVariant &result);
+    static JSONRPC_STATUS GetPropertyValue(int playlist, const CStdString &property, CVariant &result);
   };
 }
index 45ca76a..0d4ebd0 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2012 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
@@ -23,8 +23,8 @@
 namespace JSONRPC
 {
   const char* const JSONRPC_SERVICE_ID          = "http://www.xbmc.org/jsonrpc/ServiceDescription.json";
-  const int         JSONRPC_SERVICE_VERSION     = 3;
-  const char* const JSONRPC_SERVICE_DESCRIPTION = "JSON RPC API of XBMC";
+  const int         JSONRPC_SERVICE_VERSION     = 5;
+  const char* const JSONRPC_SERVICE_DESCRIPTION = "JSON-RPC API of XBMC";
 
   const char* const JSONRPC_SERVICE_TYPES[] = {  
     "\"Optional.Boolean\": {"
@@ -49,6 +49,16 @@ namespace JSONRPC
       "},"
       "\"additionalProperties\": false"
     "}",
+    "\"Global.IncrementDecrement\": {"
+      "\"type\": \"string\","
+      "\"enum\": [ \"increment\", \"decrement\" ]"
+    "}",
+    "\"Global.Toggle\": {"
+      "\"type\": ["
+        "{ \"type\": \"boolean\", \"required\": true },"
+        "{ \"type\": \"string\", \"enum\": [ \"toggle\" ], \"required\": true }"
+      "]"
+    "}",
     "\"Configuration.Notifications\": {"
       "\"type\": \"object\","
       "\"properties\": {"
@@ -126,6 +136,16 @@ namespace JSONRPC
       "\"minimum\": 0.0,"
       "\"maximum\": 100.0"
     "}",
+    "\"Player.Position.Time\": {"
+      "\"type\": \"object\","
+      "\"additionalProperties\": false,"
+      "\"properties\": {"
+        "\"hours\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 23, \"default\": 0 },"
+        "\"minutes\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 59, \"default\": 0 },"
+        "\"seconds\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 59, \"default\": 0 },"
+        "\"milliseconds\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 999, \"default\": 0 }"
+      "}"
+    "}",
     "\"Player.Speed\": {"
       "\"type\": \"object\","
       "\"required\": true,"
@@ -190,7 +210,7 @@ namespace JSONRPC
         "\"canshuffle\": { \"type\": \"boolean\" },"
         "\"canrepeat\": { \"type\": \"boolean\" },"
         "\"currentaudiostream\": { \"$ref\": \"Player.Audio.Stream.Extended\" },"
-        "\"audiostreams\": { \"type\": \"array\", \"items\": { \"$ref\": \"Player.Audio.Stream.Extended\" } },"
+        "\"audiostreams\": { \"type\": \"array\", \"items\": { \"$ref\": \"Player.Audio.Stream\" } },"
         "\"subtitleenabled\": { \"type\": \"boolean\" },"
         "\"currentsubtitle\": { \"$ref\": \"Player.Subtitle\" },"
         "\"subtitles\": { \"type\": \"array\", \"items\": { \"$ref\": \"Player.Subtitle\" } }"
@@ -420,13 +440,14 @@ namespace JSONRPC
                   "\"studio\", \"mpaa\", \"cast\", \"playcount\", \"episode\","
                   "\"imdbnumber\", \"premiered\", \"votes\", \"lastplayed\","
                   "\"fanart\", \"thumbnail\", \"file\", \"originaltitle\","
-                  "\"sorttitle\", \"episodeguide\" ]"
+                  "\"sorttitle\", \"episodeguide\", \"season\", \"watchedepisodes\" ]"
       "}"
     "}",
     "\"Video.Fields.Season\": {"
       "\"extends\": \"Item.Fields.Base\","
       "\"items\": { \"type\": \"string\","
-        "\"enum\": [ \"season\", \"showtitle\", \"playcount\", \"episode\", \"fanart\", \"thumbnail\", \"tvshowid\" ]"
+        "\"enum\": [ \"season\", \"showtitle\", \"playcount\", \"episode\", \"fanart\", \"thumbnail\", \"tvshowid\","
+                  "\"watchedepisodes\" ]"
       "}"
     "}",
     "\"Video.Fields.Episode\": {"
@@ -588,10 +609,12 @@ namespace JSONRPC
         "\"mpaa\": { \"type\": \"string\" },"
         "\"cast\": { \"$ref\": \"Video.Cast\" },"
         "\"episode\": { \"type\": \"integer\" },"
+        "\"watchedepisodes\": { \"type\": \"integer\" },"
         "\"imdbnumber\": { \"type\": \"string\" },"
         "\"premiered\": { \"type\": \"string\" },"
         "\"votes\": { \"type\": \"string\" },"
-        "\"episodeguide\": { \"type\": \"string\" }"
+        "\"episodeguide\": { \"type\": \"string\" },"
+        "\"season\": { \"type\": \"integer\" }"
       "}"
     "}",
     "\"Video.Details.Season\": {"
@@ -600,6 +623,7 @@ namespace JSONRPC
         "\"season\": { \"type\": \"integer\", \"required\": true },"
         "\"showtitle\": { \"type\": \"string\" },"
         "\"episode\": { \"type\": \"integer\" },"
+        "\"watchedepisodes\": { \"type\": \"integer\" },"
         "\"tvshowid\": { \"$ref\": \"Library.Id\" }"
       "}"
     "}",
@@ -645,7 +669,7 @@ namespace JSONRPC
       "\"type\": \"object\","
       "\"properties\": {"
         "\"start\": { \"type\": \"integer\", \"minimum\": 0, \"default\": 0 },"
-        "\"end\": { \"type\": \"integer\", \"minimum\": 0, \"default\": -1 }"
+        "\"end\": { \"type\": \"integer\", \"minimum\": 0, \"default\": -1, \"description\": \"The number of items in the list being returned\" }"
       "},"
       "\"additionalProperties\": false"
     "}",
@@ -654,9 +678,9 @@ namespace JSONRPC
       "\"properties\": {"
         "\"method\": { \"type\": \"string\", \"default\": \"none\","
           "\"enum\": [ \"none\", \"label\", \"date\", \"size\", \"file\", \"drivetype\", \"track\", \"duration\", \"title\", \"artist\","
-                    "\"album\", \"genre\", \"year\", \"videorating\", \"programcount\", \"playlist\", \"episode\", \"videotitle\","
-                    "\"sorttitle\", \"productioncode\", \"songrating\", \"mpaarating\", \"videoruntime\", \"studio\", \"fullpath\","
-                    "\"lastplayed\", \"unsorted\", \"max\" ]"
+                    "\"album\", \"genre\", \"country\", \"year\", \"videorating\", \"dateadded\", \"programcount\", \"playlist\","
+                    "\"episode\", \"videotitle\", \"sorttitle\", \"productioncode\", \"songrating\", \"mpaarating\", \"videoruntime\","
+                    "\"studio\", \"fullpath\", \"lastplayed\", \"playcount\", \"listeners\", \"bitrate\", \"unsorted\" ]"
         "},"
         "\"order\": { \"type\": \"string\", \"default\": \"ascending\", \"enum\": [ \"ascending\", \"descending\" ] },"
         "\"ignorearticle\": { \"type\": \"boolean\", \"default\": false }"
@@ -682,49 +706,72 @@ namespace JSONRPC
                   "\"mpaa\", \"cast\", \"country\", \"imdbnumber\", \"premiered\", \"productioncode\","
                   "\"runtime\", \"set\", \"showlink\", \"streamdetails\", \"top250\", \"votes\","
                   "\"firstaired\", \"season\", \"episode\", \"showtitle\", \"thumbnail\", \"file\","
-                  "\"resume\", \"artistid\", \"albumid\", \"tvshowid\", \"setid\" ]"
+                  "\"resume\", \"artistid\", \"albumid\", \"tvshowid\", \"setid\", \"watchedepisodes\" ]"
       "}"
     "}",
-    "\"List.Items.All\": {"
-      "\"type\": \"array\","
-      "\"items\": { "
-        "\"extends\": [ \"Video.Details.File\", \"Audio.Details.Media\" ],"
-        "\"properties\": {"
-          "\"id\": { \"$ref\": \"Library.Id\" },"
-          "\"type\": { \"type\": \"string\", \"enum\": [ \"unknown\", \"movie\", \"episode\", \"musicvideo\", \"song\", \"picture\" ] },"
-          "\"albumartist\": { \"type\": \"string\" },"
-          "\"album\": { \"type\": \"string\" },"
-          "\"track\": { \"type\": \"integer\" },"
-          "\"duration\": { \"type\": \"integer\" },"
-          "\"comment\": { \"type\": \"string\" },"
-          "\"lyrics\": { \"type\": \"string\" },"
-          "\"musicbrainztrackid\": { \"type\": \"string\" },"
-          "\"musicbrainzartistid\": { \"type\": \"string\" },"
-          "\"trailer\": { \"type\": \"string\" },"
-          "\"tagline\": { \"type\": \"string\" },"
-          "\"plotoutline\": { \"type\": \"string\" },"
-          "\"originaltitle\": { \"type\": \"string\" },"
-          "\"writer\": { \"type\": \"string\" },"
-          "\"studio\": { \"type\": \"string\" },"
-          "\"mpaa\": { \"type\": \"string\" },"
-          "\"cast\": { \"$ref\": \"Video.Cast\" },"
-          "\"country\": { \"type\": \"string\" },"
-          "\"imdbnumber\": { \"type\": \"string\" },"
-          "\"premiered\": { \"type\": \"string\" },"
-          "\"productioncode\": { \"type\": \"string\" },"
-          "\"set\": { \"$ref\": \"Array.String\" },"
-          "\"showlink\": { \"type\": \"string\" },"
-          "\"top250\": { \"type\": \"integer\" },"
-          "\"votes\": { \"type\": \"string\" },"
-          "\"firstaired\": { \"type\": \"string\" },"
-          "\"season\": { \"type\": \"integer\" },"
-          "\"episode\": { \"type\": \"integer\" },"
-          "\"showtitle\": { \"type\": \"string\" },"
-          "\"artistid\": { \"$ref\": \"Library.Id\" },"
-          "\"albumid\": { \"$ref\": \"Library.Id\" },"
-          "\"setid\": { \"$ref\": \"Array.Integer\" },"
-          "\"tvshowid\": { \"$ref\": \"Library.Id\" }"
-        "}"
+    "\"List.Item.All\": {"
+      "\"extends\": [ \"Video.Details.File\", \"Audio.Details.Media\" ],"
+      "\"properties\": {"
+        "\"id\": { \"$ref\": \"Library.Id\" },"
+        "\"type\": { \"type\": \"string\", \"enum\": [ \"unknown\", \"movie\", \"episode\", \"musicvideo\", \"song\", \"picture\" ] },"
+        "\"albumartist\": { \"type\": \"string\" },"
+        "\"album\": { \"type\": \"string\" },"
+        "\"track\": { \"type\": \"integer\" },"
+        "\"duration\": { \"type\": \"integer\" },"
+        "\"comment\": { \"type\": \"string\" },"
+        "\"lyrics\": { \"type\": \"string\" },"
+        "\"musicbrainztrackid\": { \"type\": \"string\" },"
+        "\"musicbrainzartistid\": { \"type\": \"string\" },"
+        "\"trailer\": { \"type\": \"string\" },"
+        "\"tagline\": { \"type\": \"string\" },"
+        "\"plotoutline\": { \"type\": \"string\" },"
+        "\"originaltitle\": { \"type\": \"string\" },"
+        "\"writer\": { \"type\": \"string\" },"
+        "\"studio\": { \"type\": \"string\" },"
+        "\"mpaa\": { \"type\": \"string\" },"
+        "\"cast\": { \"$ref\": \"Video.Cast\" },"
+        "\"country\": { \"type\": \"string\" },"
+        "\"imdbnumber\": { \"type\": \"string\" },"
+        "\"premiered\": { \"type\": \"string\" },"
+        "\"productioncode\": { \"type\": \"string\" },"
+        "\"set\": { \"$ref\": \"Array.String\" },"
+        "\"showlink\": { \"type\": \"string\" },"
+        "\"top250\": { \"type\": \"integer\" },"
+        "\"votes\": { \"type\": \"string\" },"
+        "\"firstaired\": { \"type\": \"string\" },"
+        "\"season\": { \"type\": \"integer\" },"
+        "\"episode\": { \"type\": \"integer\" },"
+        "\"showtitle\": { \"type\": \"string\" },"
+        "\"artistid\": { \"$ref\": \"Library.Id\" },"
+        "\"albumid\": { \"$ref\": \"Library.Id\" },"
+        "\"setid\": { \"$ref\": \"Array.Integer\" },"
+        "\"tvshowid\": { \"$ref\": \"Library.Id\" },"
+        "\"watchedepisodes\": { \"type\": \"integer\" }"
+      "}"
+    "}",
+    "\"List.Fields.Files\": {"
+      "\"extends\": \"Item.Fields.Base\","
+      "\"items\": { \"type\": \"string\","
+        "\"enum\": [ \"title\", \"artist\", \"albumartist\", \"genre\", \"year\", \"rating\","
+                  "\"album\", \"track\", \"duration\", \"comment\", \"lyrics\", \"musicbrainztrackid\","
+                  "\"musicbrainzartistid\", \"musicbrainzalbumid\", \"musicbrainzalbumartistid\","
+                  "\"playcount\", \"fanart\", \"director\", \"trailer\", \"tagline\", \"plot\","
+                  "\"plotoutline\", \"originaltitle\", \"lastplayed\", \"writer\", \"studio\","
+                  "\"mpaa\", \"cast\", \"country\", \"imdbnumber\", \"premiered\", \"productioncode\","
+                  "\"runtime\", \"set\", \"showlink\", \"streamdetails\", \"top250\", \"votes\","
+                  "\"firstaired\", \"season\", \"episode\", \"showtitle\", \"thumbnail\", \"file\","
+                  "\"resume\", \"artistid\", \"albumid\", \"tvshowid\", \"setid\", \"size\","
+                  "\"lastmodified\", \"mimetype\", \"watchedepisodes\" ]"
+      "}"
+    "}",
+    "\"List.Item.File\": {"
+      "\"extends\": \"List.Item.All\","
+      "\"properties\": {"
+        "\"file\": { \"type\": \"string\", \"required\": true },"
+        "\"filetype\": { \"type\": \"string\", \"enum\": [ \"file\", \"directory\" ], \"required\": true },"
+        "\"size\": { \"type\": \"integer\", \"description\": \"Size of the file in kB (1000 Byte)\" },"
+        "\"lastmodified\": { \"type\": \"string\" },"
+        "\"mimetype\": { \"type\": \"string\" }"
       "}"
     "}",
     "\"List.Items.Sources\": {"
@@ -736,14 +783,31 @@ namespace JSONRPC
         "}"
       "}"
     "}",
-    "\"List.Items.Files\": {"
-      "\"extends\": \"List.Items.All\","
-      "\"items\": { "
-        "\"type\": \"object\","
-        "\"properties\": {"
-          "\"file\": { \"type\": \"string\", \"required\": true },"
-          "\"filetype\": { \"type\": \"string\", \"enum\": [ \"file\", \"directory\" ], \"required\": true }"
-        "}"
+    "\"GUI.Property.Name\": {"
+      "\"type\": \"string\","
+      "\"enum\": [ \"currentwindow\", \"currentcontrol\", \"skin\", \"fullscreen\" ]"
+    "}",
+    "\"GUI.Property.Value\": {"
+      "\"type\": \"object\","
+      "\"properties\": {"
+        "\"currentwindow\": { \"type\": \"object\","
+          "\"properties\": {"
+            "\"id\": { \"type\": \"integer\", \"required\": true },"
+            "\"label\": { \"type\": \"string\", \"required\": true }"
+          "}"
+        "},"
+        "\"currentcontrol\": { \"type\": \"object\","
+          "\"properties\": {"
+            "\"label\": { \"type\": \"string\", \"required\": true }"
+          "}"
+        "},"
+        "\"skin\": { \"type\": \"object\","
+          "\"properties\": {"
+            "\"id\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
+            "\"name\": { \"type\": \"string\" }"
+          "}"
+        "},"
+        "\"fullscreen\": { \"type\": \"boolean\" }"
       "}"
     "}",
     "\"System.Property.Name\": {"
@@ -766,7 +830,7 @@ namespace JSONRPC
     "\"Application.Property.Value\": {"
       "\"type\": \"object\","
       "\"properties\": {"
-        "\"volume\": { \"type\": \"integer\" },"
+        "\"volume\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100 },"
         "\"muted\": { \"type\": \"boolean\" },"
         "\"name\": { \"type\": \"string\", \"minLength\": 1 },"
         "\"version\": { \"type\": \"object\","
@@ -825,7 +889,9 @@ namespace JSONRPC
           "\"UpdateData\": { \"type\": \"boolean\", \"required\": true },"
           "\"RemoveData\": { \"type\": \"boolean\", \"required\": true },"
           "\"Navigate\": { \"type\": \"boolean\", \"required\": true },"
-          "\"WriteFile\": { \"type\": \"boolean\", \"required\": true }"
+          "\"WriteFile\": { \"type\": \"boolean\", \"required\": true },"
+          "\"ControlSystem\": { \"type\": \"boolean\", \"required\": true },"
+          "\"ControlGUI\": { \"type\": \"boolean\", \"required\": true }"
         "}"
       "}"
     "}",
@@ -858,6 +924,7 @@ namespace JSONRPC
             "\"System\": { \"$ref\": \"Optional.Boolean\" },"
             "\"AudioLibrary\": { \"$ref\": \"Optional.Boolean\" },"
             "\"VideoLibrary\": { \"$ref\": \"Optional.Boolean\" },"
+            "\"Application\": { \"$ref\": \"Optional.Boolean\" },"
             "\"Other\": { \"$ref\": \"Optional.Boolean\" }"
           "}"
         "}"
@@ -882,7 +949,7 @@ namespace JSONRPC
       "\"transport\": \"Response\","
       "\"permission\": \"ControlPlayback\","
       "\"params\": ["
-        "{ \"name\": \"item\", "
+        "{ \"name\": \"item\","
           "\"type\": ["
             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
               "\"properties\": {"
@@ -894,11 +961,24 @@ namespace JSONRPC
             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
               "\"properties\": {"
                 "\"path\": { \"type\": \"string\", \"required\": true },"
-                "\"random\": { \"type\": \"boolean\", \"default\": true },"
+                "\"random\": { \"type\": \"boolean\", \"default\": true, \"description\": \"Deprecated, use the shuffled property of the options parameter instead\" },"
                 "\"recursive\": { \"type\": \"boolean\", \"default\": true }"
               "}"
             "}"
           "]"
+        "},"
+        "{ \"name\": \"options\", \"type\": \"object\", \"additionalProperties\": false,"
+          "\"properties\": {"
+            "\"shuffled\": { \"$ref\": \"Optional.Boolean\" },"
+            "\"repeat\": { \"type\": [ \"null\", \"Player.Repeat\" ], \"default\": null },"
+            "\"resume\": { \"type\": ["
+                "{ \"type\": \"boolean\", \"required\": true, \"description\": \"Whether to resume from the resume point or not\" },"
+                "{ \"$ref\": \"Player.Position.Percentage\", \"required\": true, \"description\": \"Percentage value to start from\" },"
+                "{ \"$ref\": \"Player.Position.Time\", \"required\": true, \"description\": \"Time to start from\" }"
+              "],"
+              "\"default\": false"
+            "}"
+          "}"
         "}"
       "],"
       "\"returns\": \"string\""
@@ -912,7 +992,7 @@ namespace JSONRPC
       "\"returns\": {"
         "\"type\": \"array\","
         "\"uniqueItems\": true,"
-        "\"items\": { "
+        "\"items\": {"
           "\"type\": \"object\","
           "\"properties\": {"
             "\"playerid\": { \"$ref\": \"Player.Id\", \"required\": true },"
@@ -932,13 +1012,29 @@ namespace JSONRPC
       "],"
       "\"returns\":  { \"$ref\": \"Player.Property.Value\", \"required\": true }"
     "}",
+    "\"Player.GetItem\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Retrieves the currently played item\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
+        "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
+        "{ \"name\": \"properties\", \"$ref\": \"List.Fields.All\" }"
+      "],"
+      "\"returns\": { \"type\": \"object\","
+        "\"properties\": {"
+          "\"item\": { \"$ref\": \"List.Item.All\", \"required\": true }"
+        "}"
+      "}"
+    "}",
     "\"Player.PlayPause\": {"
       "\"type\": \"method\","
       "\"description\": \"Pauses or unpause playback and returns the new state\","
       "\"transport\": \"Response\","
       "\"permission\": \"ControlPlayback\","
       "\"params\": ["
-        "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
+        "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
+        "{ \"name\": \"play\", \"$ref\": \"Global.Toggle\", \"default\": \"toggle\" }"
       "],"
       "\"returns\": { \"$ref\": \"Player.Speed\" }"
     "}",
@@ -959,7 +1055,12 @@ namespace JSONRPC
       "\"permission\": \"ControlPlayback\","
       "\"params\": ["
         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
-        "{ \"name\": \"speed\", \"type\": [ \"integer\", \"string\" ], \"enum\": [ -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32, \"increment\", \"decrement\" ], \"required\": true }"
+        "{ \"name\": \"speed\", \"type\": ["
+            "{ \"type\": \"integer\", \"required\": true, \"enum\": [ -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32 ] },"
+            "{ \"$ref\": \"Global.IncrementDecrement\", \"required\": true }"
+          "],"
+          "\"required\": true"
+        "}"
       "],"
       "\"returns\": { \"$ref\": \"Player.Speed\" }"
     "}",
@@ -972,14 +1073,7 @@ namespace JSONRPC
         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
         "{ \"name\": \"value\", \"required\": true, \"type\": ["
             "{ \"$ref\": \"Player.Position.Percentage\", \"required\": true, \"description\": \"Percentage value to seek to\" },"
-            "{ \"type\": \"object\", \"additionalProperties\": false, \"required\": true, \"description\": \"Time to seek to\","
-              "\"properties\": {"
-                "\"hours\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 23 },"
-                "\"minutes\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 59 },"
-                "\"seconds\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 59 },"
-                "\"milliseconds\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 999 }"
-              "}"
-            "},"
+            "{ \"$ref\": \"Player.Position.Time\", \"required\": true, \"description\": \"Time to seek to\" },"
             "{ \"type\": \"string\", \"enum\": [ \"smallforward\", \"smallbackward\", \"bigforward\", \"bigbackward\" ], \"required\": true, \"description\": \"Seek by predefined jumps\" }"
           "]"
         "}"
@@ -1162,7 +1256,8 @@ namespace JSONRPC
             "{ \"type\": \"string\", \"enum\": [ \"previous\", \"next\", \"off\", \"on\" ] },"
             "{ \"type\": \"integer\", \"minimum\": 0, \"description\": \"Index of the subtitle to display\" }"
           "]"
-        "}"
+        "},"
+        "{ \"name\": \"enable\", \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to enable subtitles to be displayed after setting the new subtitle\" }"
       "],"
       "\"returns\": \"string\""
     "}",
@@ -1175,7 +1270,7 @@ namespace JSONRPC
       "\"returns\": {"
         "\"type\": \"array\","
         "\"uniqueItems\": true,"
-        "\"items\": { "
+        "\"items\": {"
           "\"type\": \"object\","
           "\"properties\": {"
             "\"playlistid\": { \"$ref\": \"Playlist.Id\", \"required\": true },"
@@ -1209,7 +1304,7 @@ namespace JSONRPC
       "\"returns\": { \"type\": \"object\","
         "\"properties\": {"
           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
-          "\"items\": { \"$ref\": \"List.Items.All\", \"required\": true }"
+          "\"items\": { \"type\": \"array\", \"items\": { \"$ref\": \"List.Item.All\" }, \"required\": true }"
         "}"
       "}"
     "}",
@@ -1287,9 +1382,10 @@ namespace JSONRPC
         "}"
       "}"
     "}",
-    "\"Files.Download\": {"
+    "\"Files.PrepareDownload\": {"
       "\"type\": \"method\","
-      "\"transport\": [ \"Response\", \"FileDownload\" ],"
+      "\"description\": \"Provides a way to download a given file (e.g. providing an URL to the real file location)\","
+      "\"transport\": [ \"Response\", \"FileDownloadRedirect\" ],"
       "\"permission\": \"ReadData\","
       "\"params\": ["
         "{ \"name\": \"path\", \"type\": \"string\", \"required\": true }"
@@ -1297,25 +1393,38 @@ namespace JSONRPC
       "\"returns\": {"
         "\"type\": \"object\","
         "\"properties\": {"
-          "\"path\": { \"type\": \"string\", \"required\": true }"
+          "\"protocol\": { \"type\": \"string\", \"enum\": [ \"http\" ], \"required\": true },"
+          "\"details\": { \"type\": \"any\", \"required\": true, \"description\": \"Transport specific details on how/from where to download the given file\" },"
+          "\"mode\": { \"type\": \"string\", \"enum\": [ \"redirect\", \"direct\" ], \"required\": true, \"description\": \"Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol\" }"
         "}"
       "}"
     "}",
+    "\"Files.Download\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Downloads the given file\","
+      "\"transport\": [ \"Response\", \"FileDownloadDirect\" ],"
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
+        "{ \"name\": \"path\", \"type\": \"string\", \"required\": true }"
+      "],"
+      "\"returns\": { \"type\": \"any\", \"required\": true }"
+    "}",
     "\"Files.GetDirectory\": {"
       "\"type\": \"method\","
+      "\"description\": \"Get the directories and files in the given directory\","
       "\"transport\": \"Response\","
       "\"permission\": \"ReadData\","
       "\"params\": ["
         "{ \"name\": \"directory\", \"type\": \"string\", \"required\": true },"
         "{ \"name\": \"media\", \"$ref\": \"Files.Media\", \"default\": \"files\" },"
-        "{ \"name\": \"properties\", \"$ref\": \"List.Fields.All\" },"
+        "{ \"name\": \"properties\", \"$ref\": \"List.Fields.Files\" },"
         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
       "],"
       "\"returns\": {"
         "\"type\": \"object\","
         "\"properties\": {"
           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
-          "\"files\": { \"$ref\": \"List.Items.Files\", \"required\": true }"
+          "\"files\": { \"type\": \"array\", \"items\": { \"$ref\": \"List.Item.File\" }, \"required\": true }"
         "}"
       "}"
     "}",
@@ -1437,7 +1546,6 @@ namespace JSONRPC
       "\"transport\": \"Response\","
       "\"permission\": \"ReadData\","
       "\"params\": ["
-        "{ \"name\": \"albums\", \"$ref\": \"List.Amount\" },"
         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" },"
         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
@@ -1458,7 +1566,47 @@ namespace JSONRPC
       "\"transport\": \"Response\","
       "\"permission\": \"ReadData\","
       "\"params\": ["
-        "{ \"name\": \"albums\", \"$ref\": \"List.Amount\", \"description\": \"The amount of recently added albums from which to return the songs\" },"
+        "{ \"name\": \"albumlimit\", \"$ref\": \"List.Amount\", \"description\": \"The amount of recently added albums from which to return the songs\" },"
+        "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" },"
+        "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
+        "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
+      "],"
+      "\"returns\": {"
+        "\"type\": \"object\","
+        "\"properties\": {"
+          "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
+          "\"songs\": { \"type\": \"array\","
+            "\"items\": { \"$ref\": \"Audio.Details.Song\" }"
+          "}"
+        "}"
+      "}"
+    "}",
+      "\"AudioLibrary.GetRecentlyPlayedAlbums\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Retrieve recently played albums\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
+        "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" },"
+        "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
+        "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
+      "],"
+      "\"returns\": {"
+        "\"type\": \"object\","
+        "\"properties\": {"
+          "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
+          "\"albums\": { \"type\": \"array\","
+            "\"items\": { \"$ref\": \"Audio.Details.Album\" }"
+          "}"
+        "}"
+      "}"
+    "}",
+    "\"AudioLibrary.GetRecentlyPlayedSongs\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Retrieve recently played songs\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" },"
         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
@@ -1498,7 +1646,9 @@ namespace JSONRPC
       "\"description\": \"Scans the audio sources for new library items\","
       "\"transport\": \"Response\","
       "\"permission\": \"UpdateData\","
-      "\"params\": [],"
+      "\"params\": ["
+        "{ \"name\": \"directory\", \"type\": \"string\", \"default\": \"\" }"
+      "],"
       "\"returns\": \"string\""
     "}",
     "\"AudioLibrary.Export\": {"
@@ -1507,10 +1657,20 @@ namespace JSONRPC
       "\"transport\": \"Response\","
       "\"permission\": \"WriteFile\","
       "\"params\": ["
-        "{ \"name\": \"singlefile\", \"type\": \"boolean\", \"default\": true, \"description\": \"Whether to export the data into one or multiple files\" },"
-        "{ \"name\": \"images\", \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export thumbnails and fanart images\" },"
-        "{ \"name\": \"overwrite\", \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to overwrite existing exported files\" },"
-        "{ \"name\": \"path\", \"type\": \"string\", \"default\": \"\", \"description\": \"Path to the directory to where the data should be exported\" }"
+        "{ \"name\": \"options\", \"type\": ["
+            "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
+              "\"properties\": {"
+                "\"path\": { \"type\": \"string\", \"required\": true, \"minLength\": 1, \"description\": \"Path to the directory to where the data should be exported\" }"
+              "}"
+            "},"
+            "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
+              "\"properties\": {"
+                "\"overwrite\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to overwrite existing exported files\" },"
+                "\"images\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export thumbnails and fanart images\" }"
+              "}"
+            "}"
+          "]"
+        "}"
       "],"
       "\"returns\": \"string\""
     "}",
@@ -1807,7 +1967,9 @@ namespace JSONRPC
       "\"description\": \"Scans the video sources for new library items\","
       "\"transport\": \"Response\","
       "\"permission\": \"UpdateData\","
-      "\"params\": [],"
+      "\"params\": ["
+        "{ \"name\": \"directory\", \"type\": \"string\", \"default\": \"\" }"
+      "],"
       "\"returns\": \"string\""
     "}",
     "\"VideoLibrary.Export\": {"
@@ -1816,11 +1978,21 @@ namespace JSONRPC
       "\"transport\": \"Response\","
       "\"permission\": \"WriteFile\","
       "\"params\": ["
-        "{ \"name\": \"singlefile\", \"type\": \"boolean\", \"default\": true, \"description\": \"Whether to export the data into one or multiple files\" },"
-        "{ \"name\": \"images\", \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export thumbnails and fanart images\" },"
-        "{ \"name\": \"actorthumbs\", \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export actor thumbnails\" },"
-        "{ \"name\": \"overwrite\", \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to overwrite existing exported files\" },"
-        "{ \"name\": \"path\", \"type\": \"string\", \"default\": \"\", \"description\": \"Path to the directory to where the data should be exported\" }"
+        "{ \"name\": \"options\", \"type\": ["
+            "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
+              "\"properties\": {"
+                "\"path\": { \"type\": \"string\", \"required\": true, \"minLength\": 1, \"description\": \"Path to the directory to where the data should be exported\" }"
+              "}"
+            "},"
+            "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
+              "\"properties\": {"
+                "\"overwrite\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to overwrite existing exported files\" },"
+                "\"images\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export thumbnails and fanart images\" },"
+                "\"actorthumbs\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export actor thumbnails\" }"
+              "}"
+            "}"
+          "]"
+        "}"
       "],"
       "\"returns\": \"string\""
     "}",
@@ -1832,6 +2004,43 @@ namespace JSONRPC
       "\"params\": [ ],"
       "\"returns\": \"string\""
     "}",
+    "\"GUI.ShowNotification\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Shows a GUI notification\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ControlGUI\","
+      "\"params\": ["
+        "{ \"name\": \"title\", \"type\": \"string\", \"required\": true },"
+        "{ \"name\": \"message\", \"type\": \"string\", \"required\": true },"
+        "{ \"name\": \"image\", \"type\": ["
+            "{ \"type\": \"string\", \"required\": true, \"enum\": [ \"info\", \"warning\", \"error\" ] },"
+            "{ \"type\": \"string\", \"required\": true }"
+          "], \"default\": \"\""
+        "},"
+        "{ \"name\": \"displaytime\", \"type\": \"integer\", \"minimum\": 1500, \"default\": 5000, \"description\": \"The time in milliseconds the notification will be visible\" }"
+      "],"
+      "\"returns\":  { \"$ref\": \"System.Property.Value\", \"required\": true }"
+    "}",
+    "\"GUI.GetProperties\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Retrieves the values of the given properties\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
+        "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"GUI.Property.Name\" } }"
+      "],"
+      "\"returns\":  { \"$ref\": \"GUI.Property.Value\", \"required\": true }"
+    "}",
+    "\"GUI.SetFullscreen\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Toggle fullscreen/GUI\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ControlGUI\","
+      "\"params\": ["
+        "{ \"name\": \"fullscreen\", \"required\": true, \"$ref\": \"Global.Toggle\" }"
+      "],"
+      "\"returns\": { \"type\": \"boolean\", \"description\": \"Fullscreen state\" }"
+    "}",
     "\"System.GetProperties\": {"
       "\"type\": \"method\","
       "\"description\": \"Retrieves the values of the given properties\","
@@ -1842,6 +2051,14 @@ namespace JSONRPC
       "],"
       "\"returns\":  { \"$ref\": \"System.Property.Value\", \"required\": true }"
     "}",
+    "\"System.EjectOpticalDrive\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Ejects or closes the optical disc drive (if available)\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ControlSystem\","
+      "\"params\": [ ],"
+      "\"returns\":  \"string\""
+    "}",
     "\"System.Shutdown\": {"
       "\"type\": \"method\","
       "\"description\": \"Shuts the system running XBMC down\","
@@ -1922,6 +2139,22 @@ namespace JSONRPC
       "\"params\": [],"
       "\"returns\": \"string\""
     "}",
+    "\"Input.ContextMenu\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Shows the context menu\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"Navigate\","
+      "\"params\": [],"
+      "\"returns\": \"string\""
+    "}",
+    "\"Input.Info\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Shows the information dialog\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"Navigate\","
+      "\"params\": [],"
+      "\"returns\": \"string\""
+    "}",
     "\"Input.Home\": {"
       "\"type\": \"method\","
       "\"description\": \"Goes to home window in GUI\","
@@ -1946,17 +2179,24 @@ namespace JSONRPC
       "\"transport\": \"Response\","
       "\"permission\": \"ControlPlayback\","
       "\"params\": ["
-        "{ \"name\": \"value\", \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100, \"required\": true }"
+        "{ \"name\": \"volume\", \"type\": ["
+            "{ \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100, \"required\": true },"
+            "{ \"$ref\": \"Global.IncrementDecrement\", \"required\": true }"
+          "],"
+          "\"required\": true"
+        "}"
       "],"
       "\"returns\": \"integer\""
     "}",
-    "\"Application.ToggleMute\": {"
+    "\"Application.SetMute\": {"
       "\"type\": \"method\","
       "\"description\": \"Toggle mute/unmute\","
       "\"transport\": \"Response\","
       "\"permission\": \"ControlPlayback\","
-      "\"params\": [],"
-      "\"returns\": { \"type\": \"integer\", \"description\": \"New volume\" }"
+      "\"params\": ["
+        "{ \"name\": \"mute\", \"required\": true, \"$ref\": \"Global.Toggle\" }"
+      "],"
+      "\"returns\": { \"type\": \"boolean\", \"description\": \"Mute state\" }"
     "}",
     "\"Application.Quit\": {"
       "\"type\": \"method\","
@@ -2150,6 +2390,20 @@ namespace JSONRPC
         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
       "],"
       "\"returns\": null"
+    "}",
+    "\"Application.OnVolumeChanged\": {"
+      "\"type\": \"notification\","
+      "\"description\": \"The volume of the application has changed.\","
+      "\"params\": ["
+        "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
+        "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
+          "\"properties\": {"
+            "\"volume\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100, \"required\": true },"
+            "\"muted\": { \"type\": \"boolean\", \"required\": true }"
+          "}"
+        "}"
+      "],"
+      "\"returns\": null"
     "}"
   };
 }
index ba41410..58df809 100644 (file)
 
 #include "SystemOperations.h"
 #include "Application.h"
+#include "interfaces/Builtins.h"
+#include "utils/Variant.h"
 #include "powermanagement/PowerManager.h"
 
 using namespace JSONRPC;
 
-JSON_STATUS CSystemOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CSystemOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CVariant properties = CVariant(CVariant::VariantTypeObject);
   for (unsigned int index = 0; index < parameterObject["properties"].size(); index++)
   {
     CStdString propertyName = parameterObject["properties"][index].asString();
     CVariant property;
-    JSON_STATUS ret;
+    JSONRPC_STATUS ret;
     if ((ret = GetPropertyValue(client->GetPermissionFlags(), propertyName, property)) != OK)
       return ret;
 
@@ -44,7 +46,12 @@ JSON_STATUS CSystemOperations::GetProperties(const CStdString &method, ITranspor
   return OK;
 }
 
-JSON_STATUS CSystemOperations::Shutdown(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CSystemOperations::EjectOpticalDrive(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  return CBuiltins::Execute("EjectTray") == 0 ? ACK : FailedToExecute;
+}
+
+JSONRPC_STATUS CSystemOperations::Shutdown(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   if (g_powerManager.CanPowerdown())
   {
@@ -55,7 +62,7 @@ JSON_STATUS CSystemOperations::Shutdown(const CStdString &method, ITransportLaye
     return FailedToExecute;
 }
 
-JSON_STATUS CSystemOperations::Suspend(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CSystemOperations::Suspend(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   if (g_powerManager.CanSuspend())
   {
@@ -66,7 +73,7 @@ JSON_STATUS CSystemOperations::Suspend(const CStdString &method, ITransportLayer
     return FailedToExecute;
 }
 
-JSON_STATUS CSystemOperations::Hibernate(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CSystemOperations::Hibernate(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   if (g_powerManager.CanHibernate())
   {
@@ -77,7 +84,7 @@ JSON_STATUS CSystemOperations::Hibernate(const CStdString &method, ITransportLay
     return FailedToExecute;
 }
 
-JSON_STATUS CSystemOperations::Reboot(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CSystemOperations::Reboot(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   if (g_powerManager.CanReboot())
   {
@@ -88,7 +95,7 @@ JSON_STATUS CSystemOperations::Reboot(const CStdString &method, ITransportLayer
     return FailedToExecute;
 }
 
-JSON_STATUS CSystemOperations::GetPropertyValue(int permissions, const CStdString &property, CVariant &result)
+JSONRPC_STATUS CSystemOperations::GetPropertyValue(int permissions, const CStdString &property, CVariant &result)
 {
   if (property.Equals("canshutdown"))
     result = g_powerManager.CanPowerdown() && (permissions & ControlPower);
index f8d00c4..50fa2ce 100644 (file)
@@ -28,13 +28,15 @@ namespace JSONRPC
   class CSystemOperations
   {
   public:
-    static JSON_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS Shutdown(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Suspend(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Hibernate(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Reboot(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS EjectOpticalDrive(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+
+    static JSONRPC_STATUS Shutdown(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Suspend(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Hibernate(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Reboot(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
   private:
-    static JSON_STATUS GetPropertyValue(int permissions, const CStdString &property, CVariant &result);
+    static JSONRPC_STATUS GetPropertyValue(int permissions, const CStdString &property, CVariant &result);
   };
 }
index 8053cf3..c9d5485 100644 (file)
  */
 
 #include "VideoLibrary.h"
-#include "JSONUtils.h"
-#include "video/VideoDatabase.h"
+#include "Application.h"
 #include "Util.h"
 #include "utils/URIUtils.h"
-#include "Application.h"
+#include "video/VideoDatabase.h"
 
 using namespace JSONRPC;
 
-JSON_STATUS CVideoLibrary::GetMovies(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetMovies(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
   CFileItemList items;
-  JSON_STATUS ret = OK;
-  if (videodatabase.GetMoviesByWhere("videodb://", "", "", items))
-    ret = GetAdditionalMovieDetails(parameterObject, items, result);
+  JSONRPC_STATUS ret = OK;
+  if (videodatabase.GetMoviesByWhere("videodb://1/", "", "", items))
+    ret = GetAdditionalMovieDetails(parameterObject, items, result, videodatabase);
 
   videodatabase.Close();
   return ret;
 }
 
-JSON_STATUS CVideoLibrary::GetMovieDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetMovieDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int id = (int)parameterObject["movieid"].asInteger();
 
@@ -65,7 +64,7 @@ JSON_STATUS CVideoLibrary::GetMovieDetails(const CStdString &method, ITransportL
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetMovieSets(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetMovieSets(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
@@ -79,7 +78,7 @@ JSON_STATUS CVideoLibrary::GetMovieSets(const CStdString &method, ITransportLaye
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetMovieSetDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetMovieSetDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int id = (int)parameterObject["setid"].asInteger();
 
@@ -100,24 +99,22 @@ JSON_STATUS CVideoLibrary::GetMovieSetDetails(const CStdString &method, ITranspo
 
   // Get movies from the set
   CFileItemList items;
-  JSON_STATUS ret = OK;
+  JSONRPC_STATUS ret = OK;
   if (videodatabase.GetMoviesNav("", items, -1, -1, -1, -1, -1, -1, id))
-  {
-    ret = GetAdditionalMovieDetails(parameterObject["movies"], items, result["setdetails"]["items"]);
-  }
+    ret = GetAdditionalMovieDetails(parameterObject["movies"], items, result["setdetails"]["items"], videodatabase);
 
   videodatabase.Close();
   return ret;
 }
 
-JSON_STATUS CVideoLibrary::GetTVShows(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetTVShows(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
   CFileItemList items;
-  if (videodatabase.GetTvShowsNav("videodb://", items))
+  if (videodatabase.GetTvShowsNav("videodb://2/", items))
   {
     bool additionalInfo = false;
     for (CVariant::const_iterator_array itr = parameterObject["properties"].begin_array(); itr != parameterObject["properties"].end_array(); itr++)
@@ -139,7 +136,7 @@ JSON_STATUS CVideoLibrary::GetTVShows(const CStdString &method, ITransportLayer
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetTVShowDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetTVShowDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int id = (int)parameterObject["tvshowid"].asInteger();
 
@@ -161,7 +158,7 @@ JSON_STATUS CVideoLibrary::GetTVShowDetails(const CStdString &method, ITransport
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetSeasons(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetSeasons(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int tvshowID = (int)parameterObject["tvshowid"].asInteger();
 
@@ -169,15 +166,17 @@ JSON_STATUS CVideoLibrary::GetSeasons(const CStdString &method, ITransportLayer
   if (!videodatabase.Open())
     return InternalError;
 
+  CStdString strPath;
+  strPath.Format("videodb://2/2/%i/", tvshowID);
   CFileItemList items;
-  if (videodatabase.GetSeasonsNav("videodb://", items, -1, -1, -1, -1, tvshowID))
+  if (videodatabase.GetSeasonsNav(strPath, items, -1, -1, -1, -1, tvshowID))
     HandleFileItemList(NULL, false, "seasons", items, parameterObject, result);
 
   videodatabase.Close();
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int tvshowID = (int)parameterObject["tvshowid"].asInteger();
   int season   = (int)parameterObject["season"].asInteger();
@@ -186,15 +185,17 @@ JSON_STATUS CVideoLibrary::GetEpisodes(const CStdString &method, ITransportLayer
   if (!videodatabase.Open())
     return InternalError;
 
+  CStdString strPath;
+  strPath.Format("videodb://2/2/%i/%i/", tvshowID, season);
   CFileItemList items;
-  if (videodatabase.GetEpisodesNav("videodb://2/2/-1/-1/", items, -1, -1, -1, -1, tvshowID, season))
-    GetAdditionalEpisodeDetails(parameterObject, items, result);
+  if (videodatabase.GetEpisodesNav(strPath, items, -1, -1, -1, -1, tvshowID, season))
+    GetAdditionalEpisodeDetails(parameterObject, items, result, videodatabase);
 
   videodatabase.Close();
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetEpisodeDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetEpisodeDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int id = (int)parameterObject["episodeid"].asInteger();
 
@@ -223,7 +224,7 @@ JSON_STATUS CVideoLibrary::GetEpisodeDetails(const CStdString &method, ITranspor
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetMusicVideos(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetMusicVideos(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int artistID = (int)parameterObject["artistid"].asInteger();
   int albumID  = (int)parameterObject["albumid"].asInteger();
@@ -233,14 +234,14 @@ JSON_STATUS CVideoLibrary::GetMusicVideos(const CStdString &method, ITransportLa
     return InternalError;
 
   CFileItemList items;
-  if (videodatabase.GetMusicVideosNav("videodb://", items, -1, -1, artistID, -1, -1, albumID))
-    GetAdditionalMusicVideoDetails(parameterObject, items, result);
+  if (videodatabase.GetMusicVideosNav("videodb://3/", items, -1, -1, artistID, -1, -1, albumID))
+    GetAdditionalMusicVideoDetails(parameterObject, items, result, videodatabase);
 
   videodatabase.Close();
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetMusicVideoDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetMusicVideoDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   int id = (int)parameterObject["musicvideoid"].asInteger();
 
@@ -262,68 +263,79 @@ JSON_STATUS CVideoLibrary::GetMusicVideoDetails(const CStdString &method, ITrans
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetRecentlyAddedMovies(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetRecentlyAddedMovies(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
   CFileItemList items;
-  if (videodatabase.GetRecentlyAddedMoviesNav("videodb://", items))
-    GetAdditionalMovieDetails(parameterObject, items, result);
+  if (videodatabase.GetRecentlyAddedMoviesNav("videodb://4/", items))
+    GetAdditionalMovieDetails(parameterObject, items, result, videodatabase);
 
   videodatabase.Close();
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetRecentlyAddedEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetRecentlyAddedEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
   CFileItemList items;
-  if (videodatabase.GetRecentlyAddedEpisodesNav("videodb://", items))
-    GetAdditionalEpisodeDetails(parameterObject, items, result);
+  if (videodatabase.GetRecentlyAddedEpisodesNav("videodb://5/", items))
+    GetAdditionalEpisodeDetails(parameterObject, items, result, videodatabase);
 
   videodatabase.Close();
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetRecentlyAddedMusicVideos(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetRecentlyAddedMusicVideos(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
   CFileItemList items;
-  if (videodatabase.GetRecentlyAddedMusicVideosNav("videodb://", items))
-    GetAdditionalMusicVideoDetails(parameterObject, items, result);
+  if (videodatabase.GetRecentlyAddedMusicVideosNav("videodb://6/", items))
+    GetAdditionalMusicVideoDetails(parameterObject, items, result, videodatabase);
 
   videodatabase.Close();
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   CStdString media = parameterObject["type"].asString();
   media = media.ToLower();
   int idContent = -1;
 
+  CStdString strPath = "videodb://";
   /* select which video content to get genres from*/
   if (media.Equals("movie"))
+  {
     idContent = VIDEODB_CONTENT_MOVIES;
+    strPath += "1";
+  }
   else if (media.Equals("tvshow"))
+  {
     idContent = VIDEODB_CONTENT_TVSHOWS;
+    strPath += "2";
+  }
   else if (media.Equals("musicvideo"))
+  {
     idContent = VIDEODB_CONTENT_MUSICVIDEOS;
+    strPath += "3";
+  }
+  strPath += "/1/";
  
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
   CFileItemList items;
-  if (videodatabase.GetGenresNav("", items, idContent))
+  if (videodatabase.GetGenresNav(strPath, items, idContent))
   {
     /* need to set strTitle in each item*/
     for (unsigned int i = 0; i < (unsigned int)items.Size(); i++)
@@ -336,34 +348,35 @@ JSON_STATUS CVideoLibrary::GetGenres(const CStdString &method, ITransportLayer *
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  g_application.getApplicationMessenger().ExecBuiltIn("updatelibrary(video)");
+  std::string directory = parameterObject["directory"].asString();
+  CStdString cmd;
+  if (directory.empty())
+    cmd = "updatelibrary(video)";
+  else
+    cmd.Format("updatelibrary(video, %s)", directory.c_str());
+
+  g_application.getApplicationMessenger().ExecBuiltIn(cmd);
   return ACK;
 }
 
-JSON_STATUS CVideoLibrary::Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
-  CStdString path = parameterObject["path"].asString();
-  bool singleFile = parameterObject["singlefile"].asBoolean();
-
-  if (!singleFile && path.IsEmpty())
-    return InvalidParams;
-
   CStdString cmd;
-  if (singleFile)
-    cmd.Format("exportlibrary(video, true, %s, %s, %s)",
-      parameterObject["images"].asBoolean() ? "true" : "false",
-      parameterObject["overwrite"].asBoolean() ? "true" : "false",
-      parameterObject["actorthumbs"].asBoolean() ? "true" : "false");
+  if (parameterObject["options"].isMember("path"))
+    cmd.Format("exportlibrary(video, false, %s)", parameterObject["options"]["path"].asString());
   else
-    cmd.Format("exportlibrary(video, false, %s)", path);
+    cmd.Format("exportlibrary(video, true, %s, %s, %s)",
+      parameterObject["options"]["images"].asBoolean() ? "true" : "false",
+      parameterObject["options"]["overwrite"].asBoolean() ? "true" : "false",
+      parameterObject["options"]["actorthumbs"].asBoolean() ? "true" : "false");
 
   g_application.getApplicationMessenger().ExecBuiltIn(cmd);
   return ACK;
 }
 
-JSON_STATUS CVideoLibrary::Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   g_application.getApplicationMessenger().ExecBuiltIn("cleanlibrary(video)");
   return ACK;
@@ -443,9 +456,8 @@ bool CVideoLibrary::FillFileItemList(const CVariant &parameterObject, CFileItemL
   return false;
 }
 
-JSON_STATUS CVideoLibrary::GetAdditionalMovieDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetAdditionalMovieDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase)
 {
-  CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
@@ -467,9 +479,8 @@ JSON_STATUS CVideoLibrary::GetAdditionalMovieDetails(const CVariant &parameterOb
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetAdditionalEpisodeDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetAdditionalEpisodeDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase)
 {
-  CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
@@ -491,9 +502,8 @@ JSON_STATUS CVideoLibrary::GetAdditionalEpisodeDetails(const CVariant &parameter
   return OK;
 }
 
-JSON_STATUS CVideoLibrary::GetAdditionalMusicVideoDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result)
+JSONRPC_STATUS CVideoLibrary::GetAdditionalMusicVideoDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase)
 {
-  CVideoDatabase videodatabase;
   if (!videodatabase.Open())
     return InternalError;
 
index 12ad2e9..e1cc0e6 100644 (file)
 #include "JSONRPC.h"
 #include "FileItemHandler.h"
 
+class CVideoDatabase;
+
 namespace JSONRPC
 {
   class CVideoLibrary : public CFileItemHandler
   {
   public:
-    static JSON_STATUS GetMovies(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetMovieDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetMovieSets(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetMovieSetDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetMovies(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetMovieDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetMovieSets(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetMovieSetDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS GetTVShows(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetTVShowDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetSeasons(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetEpisodeDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetTVShows(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetTVShowDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetSeasons(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetEpisodeDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS GetMusicVideos(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetMusicVideoDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetMusicVideos(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetMusicVideoDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS GetRecentlyAddedMovies(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetRecentlyAddedEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetRecentlyAddedMusicVideos(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetRecentlyAddedMovies(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetRecentlyAddedEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetRecentlyAddedMusicVideos(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
     
-    static JSON_STATUS GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
-    static JSON_STATUS Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
 
     static bool FillFileItem(const CStdString &strFilename, CFileItem &item);
     static bool FillFileItemList(const CVariant &parameterObject, CFileItemList &list);
 
   private:
-    static JSON_STATUS GetAdditionalMovieDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result);
-    static JSON_STATUS GetAdditionalEpisodeDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result);
-    static JSON_STATUS GetAdditionalMusicVideoDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result);
+    static JSONRPC_STATUS GetAdditionalMovieDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase);
+    static JSONRPC_STATUS GetAdditionalEpisodeDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase);
+    static JSONRPC_STATUS GetAdditionalMusicVideoDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase);
   };
 }
index c84b004..beac445 100644 (file)
 #include "Application.h"
 #include "ApplicationMessenger.h"
 #include "Util.h"
+#include "utils/Variant.h"
 #include "powermanagement/PowerManager.h"
 
 using namespace JSONRPC;
 
-JSON_STATUS CXBMCOperations::GetInfoLabels(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CXBMCOperations::GetInfoLabels(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   std::vector<CStdString> info;
 
@@ -53,7 +54,7 @@ JSON_STATUS CXBMCOperations::GetInfoLabels(const CStdString &method, ITransportL
   return OK;
 }
 
-JSON_STATUS CXBMCOperations::GetInfoBooleans(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+JSONRPC_STATUS CXBMCOperations::GetInfoBooleans(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
 {
   std::vector<CStdString> info;
 
index d76b560..3bbf1c9 100644 (file)
@@ -28,7 +28,7 @@ namespace JSONRPC
   class CXBMCOperations
   {
   public:
-    static JSON_STATUS GetInfoLabels(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
-    static JSON_STATUS GetInfoBooleans(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetInfoLabels(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetInfoBooleans(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
   };
 }
index e7e1c5c..4d42417 100644 (file)
@@ -42,7 +42,9 @@
         "UpdateData": { "type": "boolean", "required": true },
         "RemoveData": { "type": "boolean", "required": true },
         "Navigate": { "type": "boolean", "required": true },
-        "WriteFile": { "type": "boolean", "required": true }
+        "WriteFile": { "type": "boolean", "required": true },
+        "ControlSystem": { "type": "boolean", "required": true },
+        "ControlGUI": { "type": "boolean", "required": true }
       }
     }
   },
@@ -75,6 +77,7 @@
           "System": { "$ref": "Optional.Boolean" },
           "AudioLibrary": { "$ref": "Optional.Boolean" },
           "VideoLibrary": { "$ref": "Optional.Boolean" },
+          "Application": { "$ref": "Optional.Boolean" },
           "Other": { "$ref": "Optional.Boolean" }
         }
       }
     "transport": "Response",
     "permission": "ControlPlayback",
     "params": [
-      { "name": "item", 
+      { "name": "item",
         "type": [
           { "type": "object", "required": true, "additionalProperties": false,
             "properties": {
           { "type": "object", "required": true, "additionalProperties": false,
             "properties": {
               "path": { "type": "string", "required": true },
-              "random": { "type": "boolean", "default": true },
+              "random": { "type": "boolean", "default": true, "description": "Deprecated, use the shuffled property of the options parameter instead" },
               "recursive": { "type": "boolean", "default": true }
             }
           }
         ]
+      },
+      { "name": "options", "type": "object", "additionalProperties": false,
+        "properties": {
+          "shuffled": { "$ref": "Optional.Boolean" },
+          "repeat": { "type": [ "null", "Player.Repeat" ], "default": null },
+          "resume": { "type": [
+              { "type": "boolean", "required": true, "description": "Whether to resume from the resume point or not" },
+              { "$ref": "Player.Position.Percentage", "required": true, "description": "Percentage value to start from" },
+              { "$ref": "Player.Position.Time", "required": true, "description": "Time to start from" }
+            ],
+            "default": false
+          }
+        }
       }
     ],
     "returns": "string"
     "returns": {
       "type": "array",
       "uniqueItems": true,
-      "items": { 
+      "items": {
         "type": "object",
         "properties": {
           "playerid": { "$ref": "Player.Id", "required": true },
     ],
     "returns":  { "$ref": "Player.Property.Value", "required": true }
   },
+  "Player.GetItem": {
+    "type": "method",
+    "description": "Retrieves the currently played item",
+    "transport": "Response",
+    "permission": "ReadData",
+    "params": [
+      { "name": "playerid", "$ref": "Player.Id", "required": true },
+      { "name": "properties", "$ref": "List.Fields.All" }
+    ],
+    "returns": { "type": "object",
+      "properties": {
+        "item": { "$ref": "List.Item.All", "required": true }
+      }
+    }
+  },
   "Player.PlayPause": {
     "type": "method",
     "description": "Pauses or unpause playback and returns the new state",
     "transport": "Response",
     "permission": "ControlPlayback",
     "params": [
-      { "name": "playerid", "$ref": "Player.Id", "required": true }
+      { "name": "playerid", "$ref": "Player.Id", "required": true },
+      { "name": "play", "$ref": "Global.Toggle", "default": "toggle" }
     ],
     "returns": { "$ref": "Player.Speed" }
   },
     "permission": "ControlPlayback",
     "params": [
       { "name": "playerid", "$ref": "Player.Id", "required": true },
-      { "name": "speed", "type": [ "integer", "string" ], "enum": [ -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32, "increment", "decrement" ], "required": true }
+      { "name": "speed", "type": [
+          { "type": "integer", "required": true, "enum": [ -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32 ] },
+          { "$ref": "Global.IncrementDecrement", "required": true }
+        ],
+        "required": true
+      }
     ],
     "returns": { "$ref": "Player.Speed" }
   },
       { "name": "playerid", "$ref": "Player.Id", "required": true },
       { "name": "value", "required": true, "type": [
           { "$ref": "Player.Position.Percentage", "required": true, "description": "Percentage value to seek to" },
-          { "type": "object", "additionalProperties": false, "required": true, "description": "Time to seek to",
-            "properties": {
-              "hours": { "type": "integer", "minimum": 0, "maximum": 23 },
-              "minutes": { "type": "integer", "minimum": 0, "maximum": 59 },
-              "seconds": { "type": "integer", "minimum": 0, "maximum": 59 },
-              "milliseconds": { "type": "integer", "minimum": 0, "maximum": 999 }
-            }
-          },
+          { "$ref": "Player.Position.Time", "required": true, "description": "Time to seek to" },
           { "type": "string", "enum": [ "smallforward", "smallbackward", "bigforward", "bigbackward" ], "required": true, "description": "Seek by predefined jumps" }
         ]
       }
           { "type": "string", "enum": [ "previous", "next", "off", "on" ] },
           { "type": "integer", "minimum": 0, "description": "Index of the subtitle to display" }
         ]
-      }
+      },
+      { "name": "enable", "type": "boolean", "default": false, "description": "Whether to enable subtitles to be displayed after setting the new subtitle" }
     ],
     "returns": "string"
   },
     "returns": {
       "type": "array",
       "uniqueItems": true,
-      "items": { 
+      "items": {
         "type": "object",
         "properties": {
           "playlistid": { "$ref": "Playlist.Id", "required": true },
     "returns": { "type": "object",
       "properties": {
         "limits": { "$ref": "List.LimitsReturned", "required": true },
-        "items": { "$ref": "List.Items.All", "required": true }
+        "items": { "type": "array", "items": { "$ref": "List.Item.All" }, "required": true }
       }
     }
   },
       }
     }
   },
-  "Files.Download": {
+  "Files.PrepareDownload": {
     "type": "method",
-    "transport": [ "Response", "FileDownload" ],
+    "description": "Provides a way to download a given file (e.g. providing an URL to the real file location)",
+    "transport": [ "Response", "FileDownloadRedirect" ],
     "permission": "ReadData",
     "params": [
       { "name": "path", "type": "string", "required": true }
     "returns": {
       "type": "object",
       "properties": {
-        "path": { "type": "string", "required": true }
+        "protocol": { "type": "string", "enum": [ "http" ], "required": true },
+        "details": { "type": "any", "required": true, "description": "Transport specific details on how/from where to download the given file" },
+        "mode": { "type": "string", "enum": [ "redirect", "direct" ], "required": true, "description": "Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol" }
       }
     }
   },
+  "Files.Download": {
+    "type": "method",
+    "description": "Downloads the given file",
+    "transport": [ "Response", "FileDownloadDirect" ],
+    "permission": "ReadData",
+    "params": [
+      { "name": "path", "type": "string", "required": true }
+    ],
+    "returns": { "type": "any", "required": true }
+  },
   "Files.GetDirectory": {
     "type": "method",
+    "description": "Get the directories and files in the given directory",
     "transport": "Response",
     "permission": "ReadData",
     "params": [
       { "name": "directory", "type": "string", "required": true },
       { "name": "media", "$ref": "Files.Media", "default": "files" },
-      { "name": "properties", "$ref": "List.Fields.All" },
+      { "name": "properties", "$ref": "List.Fields.Files" },
       { "name": "sort", "$ref": "List.Sort" }
     ],
     "returns": {
       "type": "object",
       "properties": {
         "limits": { "$ref": "List.LimitsReturned", "required": true },
-        "files": { "$ref": "List.Items.Files", "required": true }
+        "files": { "type": "array", "items": { "$ref": "List.Item.File" }, "required": true }
       }
     }
   },
     "transport": "Response",
     "permission": "ReadData",
     "params": [
-      { "name": "albums", "$ref": "List.Amount" },
       { "name": "properties", "$ref": "Audio.Fields.Album" },
       { "name": "limits", "$ref": "List.Limits" },
       { "name": "sort", "$ref": "List.Sort" }
     "transport": "Response",
     "permission": "ReadData",
     "params": [
-      { "name": "albums", "$ref": "List.Amount", "description": "The amount of recently added albums from which to return the songs" },
+      { "name": "albumlimit", "$ref": "List.Amount", "description": "The amount of recently added albums from which to return the songs" },
+      { "name": "properties", "$ref": "Audio.Fields.Song" },
+      { "name": "limits", "$ref": "List.Limits" },
+      { "name": "sort", "$ref": "List.Sort" }
+    ],
+    "returns": {
+      "type": "object",
+      "properties": {
+        "limits": { "$ref": "List.LimitsReturned", "required": true },
+        "songs": { "type": "array",
+          "items": { "$ref": "Audio.Details.Song" }
+        }
+      }
+    }
+  },
+    "AudioLibrary.GetRecentlyPlayedAlbums": {
+    "type": "method",
+    "description": "Retrieve recently played albums",
+    "transport": "Response",
+    "permission": "ReadData",
+    "params": [
+      { "name": "properties", "$ref": "Audio.Fields.Album" },
+      { "name": "limits", "$ref": "List.Limits" },
+      { "name": "sort", "$ref": "List.Sort" }
+    ],
+    "returns": {
+      "type": "object",
+      "properties": {
+        "limits": { "$ref": "List.LimitsReturned", "required": true },
+        "albums": { "type": "array",
+          "items": { "$ref": "Audio.Details.Album" }
+        }
+      }
+    }
+  },
+  "AudioLibrary.GetRecentlyPlayedSongs": {
+    "type": "method",
+    "description": "Retrieve recently played songs",
+    "transport": "Response",
+    "permission": "ReadData",
+    "params": [
       { "name": "properties", "$ref": "Audio.Fields.Song" },
       { "name": "limits", "$ref": "List.Limits" },
       { "name": "sort", "$ref": "List.Sort" }
     "description": "Scans the audio sources for new library items",
     "transport": "Response",
     "permission": "UpdateData",
-    "params": [],
+    "params": [
+      { "name": "directory", "type": "string", "default": "" }
+    ],
     "returns": "string"
   },
   "AudioLibrary.Export": {
     "transport": "Response",
     "permission": "WriteFile",
     "params": [
-      { "name": "singlefile", "type": "boolean", "default": true, "description": "Whether to export the data into one or multiple files" },
-      { "name": "images", "type": "boolean", "default": false, "description": "Whether to export thumbnails and fanart images" },
-      { "name": "overwrite", "type": "boolean", "default": false, "description": "Whether to overwrite existing exported files" },
-      { "name": "path", "type": "string", "default": "", "description": "Path to the directory to where the data should be exported" }
+      { "name": "options", "type": [
+          { "type": "object", "required": true, "additionalProperties": false,
+            "properties": {
+              "path": { "type": "string", "required": true, "minLength": 1, "description": "Path to the directory to where the data should be exported" }
+            }
+          },
+          { "type": "object", "required": true, "additionalProperties": false,
+            "properties": {
+              "overwrite": { "type": "boolean", "default": false, "description": "Whether to overwrite existing exported files" },
+              "images": { "type": "boolean", "default": false, "description": "Whether to export thumbnails and fanart images" }
+            }
+          }
+        ]
+      }
     ],
     "returns": "string"
   },
     "description": "Scans the video sources for new library items",
     "transport": "Response",
     "permission": "UpdateData",
-    "params": [],
+    "params": [
+      { "name": "directory", "type": "string", "default": "" }
+    ],
     "returns": "string"
   },
   "VideoLibrary.Export": {
     "transport": "Response",
     "permission": "WriteFile",
     "params": [
-      { "name": "singlefile", "type": "boolean", "default": true, "description": "Whether to export the data into one or multiple files" },
-      { "name": "images", "type": "boolean", "default": false, "description": "Whether to export thumbnails and fanart images" },
-      { "name": "actorthumbs", "type": "boolean", "default": false, "description": "Whether to export actor thumbnails" },
-      { "name": "overwrite", "type": "boolean", "default": false, "description": "Whether to overwrite existing exported files" },
-      { "name": "path", "type": "string", "default": "", "description": "Path to the directory to where the data should be exported" }
+      { "name": "options", "type": [
+          { "type": "object", "required": true, "additionalProperties": false,
+            "properties": {
+              "path": { "type": "string", "required": true, "minLength": 1, "description": "Path to the directory to where the data should be exported" }
+            }
+          },
+          { "type": "object", "required": true, "additionalProperties": false,
+            "properties": {
+              "overwrite": { "type": "boolean", "default": false, "description": "Whether to overwrite existing exported files" },
+              "images": { "type": "boolean", "default": false, "description": "Whether to export thumbnails and fanart images" },
+              "actorthumbs": { "type": "boolean", "default": false, "description": "Whether to export actor thumbnails" }
+            }
+          }
+        ]
+      }
     ],
     "returns": "string"
   },
     "params": [ ],
     "returns": "string"
   },
+  "GUI.ShowNotification": {
+    "type": "method",
+    "description": "Shows a GUI notification",
+    "transport": "Response",
+    "permission": "ControlGUI",
+    "params": [
+      { "name": "title", "type": "string", "required": true },
+      { "name": "message", "type": "string", "required": true },
+      { "name": "image", "type": [
+          { "type": "string", "required": true, "enum": [ "info", "warning", "error" ] },
+          { "type": "string", "required": true }
+        ], "default": ""
+      },
+      { "name": "displaytime", "type": "integer", "minimum": 1500, "default": 5000, "description": "The time in milliseconds the notification will be visible" }
+    ],
+    "returns":  { "$ref": "System.Property.Value", "required": true }
+  },
+  "GUI.GetProperties": {
+    "type": "method",
+    "description": "Retrieves the values of the given properties",
+    "transport": "Response",
+    "permission": "ReadData",
+    "params": [
+      { "name": "properties", "type": "array", "uniqueItems": true, "required": true, "items": { "$ref": "GUI.Property.Name" } }
+    ],
+    "returns":  { "$ref": "GUI.Property.Value", "required": true }
+  },
+  "GUI.SetFullscreen": {
+    "type": "method",
+    "description": "Toggle fullscreen/GUI",
+    "transport": "Response",
+    "permission": "ControlGUI",
+    "params": [
+      { "name": "fullscreen", "required": true, "$ref": "Global.Toggle" }
+    ],
+    "returns": { "type": "boolean", "description": "Fullscreen state" }
+  },
   "System.GetProperties": {
     "type": "method",
     "description": "Retrieves the values of the given properties",
     ],
     "returns":  { "$ref": "System.Property.Value", "required": true }
   },
+  "System.EjectOpticalDrive": {
+    "type": "method",
+    "description": "Ejects or closes the optical disc drive (if available)",
+    "transport": "Response",
+    "permission": "ControlSystem",
+    "params": [ ],
+    "returns":  "string"
+  },
   "System.Shutdown": {
     "type": "method",
     "description": "Shuts the system running XBMC down",
     "params": [],
     "returns": "string"
   },
+  "Input.ContextMenu": {
+    "type": "method",
+    "description": "Shows the context menu",
+    "transport": "Response",
+    "permission": "Navigate",
+    "params": [],
+    "returns": "string"
+  },
+  "Input.Info": {
+    "type": "method",
+    "description": "Shows the information dialog",
+    "transport": "Response",
+    "permission": "Navigate",
+    "params": [],
+    "returns": "string"
+  },
   "Input.Home": {
     "type": "method",
     "description": "Goes to home window in GUI",
     "transport": "Response",
     "permission": "ControlPlayback",
     "params": [
-      { "name": "value", "type": "integer", "minimum": 0, "maximum": 100, "required": true }
+      { "name": "volume", "type": [
+          { "type": "integer", "minimum": 0, "maximum": 100, "required": true },
+          { "$ref": "Global.IncrementDecrement", "required": true }
+        ],
+        "required": true
+      }
     ],
     "returns": "integer"
   },
-  "Application.ToggleMute": {
+  "Application.SetMute": {
     "type": "method",
     "description": "Toggle mute/unmute",
     "transport": "Response",
     "permission": "ControlPlayback",
-    "params": [],
-    "returns": { "type": "integer", "description": "New volume" }
+    "params": [
+      { "name": "mute", "required": true, "$ref": "Global.Toggle" }
+    ],
+    "returns": { "type": "boolean", "description": "Mute state" }
   },
   "Application.Quit": {
     "type": "method",
       "description": "List of key-value pairs of the retrieved info booleans"
     }
   }
-}
\ No newline at end of file
+}
index 27bc0c0..d39760b 100644 (file)
       { "name": "data", "type": "null", "required": true }
     ],
     "returns": null
+  },
+  "Application.OnVolumeChanged": {
+    "type": "notification",
+    "description": "The volume of the application has changed.",
+    "params": [
+      { "name": "sender", "type": "string", "required": true },
+      { "name": "data", "type": "object", "required": true,
+        "properties": {
+          "volume": { "type": "integer", "minimum": 0, "maximum": 100, "required": true },
+          "muted": { "type": "boolean", "required": true }
+        }
+      }
+    ],
+    "returns": null
   }
 }
\ No newline at end of file
index 734038f..7578660 100644 (file)
     },
     "additionalProperties": false
   },
+  "Global.IncrementDecrement": {
+    "type": "string",
+    "enum": [ "increment", "decrement" ]
+  },
+  "Global.Toggle": {
+    "type": [
+      { "type": "boolean", "required": true },
+      { "type": "string", "enum": [ "toggle" ], "required": true }
+    ]
+  },
   "Configuration.Notifications": {
     "type": "object",
     "properties": {
     "minimum": 0.0,
     "maximum": 100.0
   },
+  "Player.Position.Time": {
+    "type": "object",
+    "additionalProperties": false,
+    "properties": {
+      "hours": { "type": "integer", "minimum": 0, "maximum": 23, "default": 0 },
+      "minutes": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
+      "seconds": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
+      "milliseconds": { "type": "integer", "minimum": 0, "maximum": 999, "default": 0 }
+    }
+  },
   "Player.Speed": {
     "type": "object",
     "required": true,
       "canshuffle": { "type": "boolean" },
       "canrepeat": { "type": "boolean" },
       "currentaudiostream": { "$ref": "Player.Audio.Stream.Extended" },
-      "audiostreams": { "type": "array", "items": { "$ref": "Player.Audio.Stream.Extended" } },
+      "audiostreams": { "type": "array", "items": { "$ref": "Player.Audio.Stream" } },
       "subtitleenabled": { "type": "boolean" },
       "currentsubtitle": { "$ref": "Player.Subtitle" },
       "subtitles": { "type": "array", "items": { "$ref": "Player.Subtitle" } }
                 "studio", "mpaa", "cast", "playcount", "episode",
                 "imdbnumber", "premiered", "votes", "lastplayed",
                 "fanart", "thumbnail", "file", "originaltitle",
-                "sorttitle", "episodeguide" ]
+                "sorttitle", "episodeguide", "season", "watchedepisodes" ]
     }
   },
   "Video.Fields.Season": {
     "extends": "Item.Fields.Base",
     "items": { "type": "string",
-      "enum": [ "season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid" ]
+      "enum": [ "season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid",
+                "watchedepisodes" ]
     }
   },
   "Video.Fields.Episode": {
       "mpaa": { "type": "string" },
       "cast": { "$ref": "Video.Cast" },
       "episode": { "type": "integer" },
+      "watchedepisodes": { "type": "integer" },
       "imdbnumber": { "type": "string" },
       "premiered": { "type": "string" },
       "votes": { "type": "string" },
-      "episodeguide": { "type": "string" }
+      "episodeguide": { "type": "string" },
+      "season": { "type": "integer" }
     }
   },
   "Video.Details.Season": {
       "season": { "type": "integer", "required": true },
       "showtitle": { "type": "string" },
       "episode": { "type": "integer" },
+      "watchedepisodes": { "type": "integer" },
       "tvshowid": { "$ref": "Library.Id" }
     }
   },
     "type": "object",
     "properties": {
       "start": { "type": "integer", "minimum": 0, "default": 0 },
-      "end": { "type": "integer", "minimum": 0, "default": -1 }
+      "end": { "type": "integer", "minimum": 0, "default": -1, "description": "The number of items in the list being returned" }
     },
     "additionalProperties": false
   },
     "properties": {
       "method": { "type": "string", "default": "none",
         "enum": [ "none", "label", "date", "size", "file", "drivetype", "track", "duration", "title", "artist",
-                  "album", "genre", "year", "videorating", "programcount", "playlist", "episode", "videotitle",
-                  "sorttitle", "productioncode", "songrating", "mpaarating", "videoruntime", "studio", "fullpath",
-                  "lastplayed", "unsorted", "max" ]
+                  "album", "genre", "country", "year", "videorating", "dateadded", "programcount", "playlist",
+                  "episode", "videotitle", "sorttitle", "productioncode", "songrating", "mpaarating", "videoruntime",
+                  "studio", "fullpath", "lastplayed", "playcount", "listeners", "bitrate", "unsorted" ]
       },
       "order": { "type": "string", "default": "ascending", "enum": [ "ascending", "descending" ] },
       "ignorearticle": { "type": "boolean", "default": false }
                 "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
                 "runtime", "set", "showlink", "streamdetails", "top250", "votes",
                 "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
-                "resume", "artistid", "albumid", "tvshowid", "setid" ]
+                "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes" ]
     }
   },
-  "List.Items.All": {
-    "type": "array",
-    "items": { 
-      "extends": [ "Video.Details.File", "Audio.Details.Media" ],
-      "properties": {
-        "id": { "$ref": "Library.Id" },
-        "type": { "type": "string", "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture" ] },
-        "albumartist": { "type": "string" },
-        "album": { "type": "string" },
-        "track": { "type": "integer" },
-        "duration": { "type": "integer" },
-        "comment": { "type": "string" },
-        "lyrics": { "type": "string" },
-        "musicbrainztrackid": { "type": "string" },
-        "musicbrainzartistid": { "type": "string" },
-        "trailer": { "type": "string" },
-        "tagline": { "type": "string" },
-        "plotoutline": { "type": "string" },
-        "originaltitle": { "type": "string" },
-        "writer": { "type": "string" },
-        "studio": { "type": "string" },
-        "mpaa": { "type": "string" },
-        "cast": { "$ref": "Video.Cast" },
-        "country": { "type": "string" },
-        "imdbnumber": { "type": "string" },
-        "premiered": { "type": "string" },
-        "productioncode": { "type": "string" },
-        "set": { "$ref": "Array.String" },
-        "showlink": { "type": "string" },
-        "top250": { "type": "integer" },
-        "votes": { "type": "string" },
-        "firstaired": { "type": "string" },
-        "season": { "type": "integer" },
-        "episode": { "type": "integer" },
-        "showtitle": { "type": "string" },
-        "artistid": { "$ref": "Library.Id" },
-        "albumid": { "$ref": "Library.Id" },
-        "setid": { "$ref": "Array.Integer" },
-        "tvshowid": { "$ref": "Library.Id" }
-      }
+  "List.Item.All": {
+    "extends": [ "Video.Details.File", "Audio.Details.Media" ],
+    "properties": {
+      "id": { "$ref": "Library.Id" },
+      "type": { "type": "string", "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture" ] },
+      "albumartist": { "type": "string" },
+      "album": { "type": "string" },
+      "track": { "type": "integer" },
+      "duration": { "type": "integer" },
+      "comment": { "type": "string" },
+      "lyrics": { "type": "string" },
+      "musicbrainztrackid": { "type": "string" },
+      "musicbrainzartistid": { "type": "string" },
+      "trailer": { "type": "string" },
+      "tagline": { "type": "string" },
+      "plotoutline": { "type": "string" },
+      "originaltitle": { "type": "string" },
+      "writer": { "type": "string" },
+      "studio": { "type": "string" },
+      "mpaa": { "type": "string" },
+      "cast": { "$ref": "Video.Cast" },
+      "country": { "type": "string" },
+      "imdbnumber": { "type": "string" },
+      "premiered": { "type": "string" },
+      "productioncode": { "type": "string" },
+      "set": { "$ref": "Array.String" },
+      "showlink": { "type": "string" },
+      "top250": { "type": "integer" },
+      "votes": { "type": "string" },
+      "firstaired": { "type": "string" },
+      "season": { "type": "integer" },
+      "episode": { "type": "integer" },
+      "showtitle": { "type": "string" },
+      "artistid": { "$ref": "Library.Id" },
+      "albumid": { "$ref": "Library.Id" },
+      "setid": { "$ref": "Array.Integer" },
+      "tvshowid": { "$ref": "Library.Id" },
+      "watchedepisodes": { "type": "integer" }
+    }
+  },
+  "List.Fields.Files": {
+    "extends": "Item.Fields.Base",
+    "items": { "type": "string",
+      "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
+                "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
+                "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
+                "playcount", "fanart", "director", "trailer", "tagline", "plot",
+                "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
+                "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
+                "runtime", "set", "showlink", "streamdetails", "top250", "votes",
+                "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
+                "resume", "artistid", "albumid", "tvshowid", "setid", "size",
+                "lastmodified", "mimetype", "watchedepisodes" ]
+    }
+  },
+  "List.Item.File": {
+    "extends": "List.Item.All",
+    "properties": {
+      "file": { "type": "string", "required": true },
+      "filetype": { "type": "string", "enum": [ "file", "directory" ], "required": true },
+      "size": { "type": "integer", "description": "Size of the file in kB (1000 Byte)" },
+      "lastmodified": { "type": "string" },
+      "mimetype": { "type": "string" }
     }
   },
   "List.Items.Sources": {
       }
     }
   },
-  "List.Items.Files": {
-    "extends": "List.Items.All",
-    "items": { 
-      "type": "object",
-      "properties": {
-        "file": { "type": "string", "required": true },
-        "filetype": { "type": "string", "enum": [ "file", "directory" ], "required": true }
-      }
+  "GUI.Property.Name": {
+    "type": "string",
+    "enum": [ "currentwindow", "currentcontrol", "skin", "fullscreen" ]
+  },
+  "GUI.Property.Value": {
+    "type": "object",
+    "properties": {
+      "currentwindow": { "type": "object",
+        "properties": {
+          "id": { "type": "integer", "required": true },
+          "label": { "type": "string", "required": true }
+        }
+      },
+      "currentcontrol": { "type": "object",
+        "properties": {
+          "label": { "type": "string", "required": true }
+        }
+      },
+      "skin": { "type": "object",
+        "properties": {
+          "id": { "type": "string", "required": true, "minLength": 1 },
+          "name": { "type": "string" }
+        }
+      },
+      "fullscreen": { "type": "boolean" }
     }
   },
   "System.Property.Name": {
   "Application.Property.Value": {
     "type": "object",
     "properties": {
-      "volume": { "type": "integer" },
+      "volume": { "type": "integer", "minimum": 0, "maximum": 100 },
       "muted": { "type": "boolean" },
       "name": { "type": "string", "minLength": 1 },
       "version": { "type": "object",
index 955b058..78b6ad5 100644 (file)
@@ -92,7 +92,7 @@ void XBPyThread::setSource(const CStdString &src)
 {
 #ifdef TARGET_WINDOWS
   CStdString strsrc = src;
-  g_charsetConverter.utf8ToStringCharset(strsrc);
+  g_charsetConverter.utf8ToSystem(strsrc);
   m_source  = new char[strsrc.GetLength()+1];
   strcpy(m_source, strsrc);
 #else
@@ -154,7 +154,7 @@ void XBPyThread::Process()
   // get path from script file name and add python path's
   // this is used for python so it will search modules from script path first
   CStdString scriptDir;
-  URIUtils::GetDirectory(_P(m_source), scriptDir);
+  URIUtils::GetDirectory(CSpecialProtocol::TranslatePath(m_source), scriptDir);
   URIUtils::RemoveSlashAtEnd(scriptDir);
   CStdString path = scriptDir;
 
@@ -162,7 +162,15 @@ void XBPyThread::Process()
   ADDON::VECADDONS addons;
   ADDON::CAddonMgr::Get().GetAddons(ADDON::ADDON_SCRIPT_MODULE, addons);
   for (unsigned int i = 0; i < addons.size(); ++i)
-    path += PY_PATH_SEP + _P(addons[i]->LibPath());
+#ifdef TARGET_WINDOWS
+  {
+    CStdString strTmp(CSpecialProtocol::TranslatePath(addons[i]->LibPath()));
+    g_charsetConverter.utf8ToSystem(strTmp);
+    path += PY_PATH_SEP + strTmp;
+  }
+#else
+    path += PY_PATH_SEP + CSpecialProtocol::TranslatePath(addons[i]->LibPath());
+#endif
 
   // and add on whatever our default path is
   path += PY_PATH_SEP;
@@ -226,12 +234,12 @@ void XBPyThread::Process()
       // We need to have python open the file because on Windows the DLL that python
       //  is linked against may not be the DLL that xbmc is linked against so
       //  passing a FILE* to python from an fopen has the potential to crash.
-      PyObject* file = PyFile_FromString((char *) _P(m_source).c_str(), (char*)"r");
+      PyObject* file = PyFile_FromString((char *) CSpecialProtocol::TranslatePath(m_source).c_str(), (char*)"r");
       FILE *fp = PyFile_AsFile(file);
 
       if (fp)
       {
-        PyObject *f = PyString_FromString(_P(m_source).c_str());
+        PyObject *f = PyString_FromString(CSpecialProtocol::TranslatePath(m_source).c_str());
         PyDict_SetItemString(moduleDict, "__file__", f);
         if (addon.get() != NULL)
         {
@@ -245,7 +253,7 @@ void XBPyThread::Process()
           CLog::Log(LOGDEBUG,"Instantiating addon using automatically obtained id of \"%s\" dependent on version %s of the xbmc.python api",addon->ID().c_str(),version.c_str());
         }
         Py_DECREF(f);
-        PyRun_FileExFlags(fp, _P(m_source).c_str(), m_Py_file_input, moduleDict, moduleDict,1,NULL);
+        PyRun_FileExFlags(fp, CSpecialProtocol::TranslatePath(m_source).c_str(), m_Py_file_input, moduleDict, moduleDict,1,NULL);
       }
       else
         CLog::Log(LOGERROR, "%s not found!", m_source);
@@ -309,6 +317,7 @@ void XBPyThread::Process()
         CLog::Log(LOGINFO, "<unknown exception type>");
       }
 
+      PYXBMC::PyXBMCGUILock();
       CGUIDialogKaiToast *pDlgToast = (CGUIDialogKaiToast*)g_windowManager.GetWindow(WINDOW_DIALOG_KAI_TOAST);
       if (pDlgToast)
       {
@@ -326,6 +335,7 @@ void XBPyThread::Process()
         desc.Format(g_localizeStrings.Get(2100), script);
         pDlgToast->QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(257), desc);
       }
+      PYXBMC::PyXBMCGUIUnlock();
     }
 
     Py_XDECREF(exc_type);
@@ -365,6 +375,13 @@ void XBPyThread::Process()
   PyThreadState_Swap(NULL);
   PyEval_ReleaseLock();
 
+  //set stopped event - this allows ::stop to run and kill remaining threads
+  //this event has to be fired without holding m_pExecuter->m_critSection
+  //before
+  //Also the GIL (PyEval_AcquireLock) must not be held
+  //if not obeyed there is still no deadlock because ::stop waits with timeout (smart one!)
+  stoppedEvent.Set();
+
   { CSingleLock lock(m_pExecuter->m_critSection);
     m_threadState = NULL;
   }
@@ -418,6 +435,17 @@ void XBPyThread::stop()
     if(!m || PyObject_SetAttrString(m, (char*)"abortRequested", PyBool_FromLong(1)))
       CLog::Log(LOGERROR, "XBPyThread::stop - failed to set abortRequested");
 
+    PyThreadState_Swap(old);
+    PyEval_ReleaseLock();
+
+    if(!stoppedEvent.WaitMSec(5000))//let the script 5 secs for shut stuff down
+    {
+      CLog::Log(LOGERROR, "XBPyThread::stop - script didn't stop in proper time - lets kill it");
+    }
+    
+    //everything which didn't exit by now gets killed
+    PyEval_AcquireLock();
+    old = PyThreadState_Swap((PyThreadState*)m_threadState);    
     for(PyThreadState* state = ((PyThreadState*)m_threadState)->interp->tstate_head; state; state = state->next)
     {
       Py_XDECREF(state->async_exc);
index 2b83b52..55a6fbd 100644 (file)
@@ -23,6 +23,7 @@
 #define XBPYTHREAD_H_
 
 #include "threads/Thread.h"
+#include "threads/Event.h"
 #include "addons/IAddon.h"
 
 class XBPython;
@@ -42,6 +43,7 @@ public:
 
 protected:
   XBPython *m_pExecuter;
+  CEvent stoppedEvent;
   void *m_threadState;
 
   char m_type;
index 9f43894..8efcd7f 100644 (file)
@@ -344,10 +344,10 @@ void XBPython::Initialize()
       {
         // using external python, it's build looking for xxx/lib/python2.6
         // so point it to frameworks which is where python2.6 is located
-        setenv("PYTHONHOME", _P("special://frameworks").c_str(), 1);
-        setenv("PYTHONPATH", _P("special://frameworks").c_str(), 1);
-        CLog::Log(LOGDEBUG, "PYTHONHOME -> %s", _P("special://frameworks").c_str());
-        CLog::Log(LOGDEBUG, "PYTHONPATH -> %s", _P("special://frameworks").c_str());
+        setenv("PYTHONHOME", CSpecialProtocol::TranslatePath("special://frameworks").c_str(), 1);
+        setenv("PYTHONPATH", CSpecialProtocol::TranslatePath("special://frameworks").c_str(), 1);
+        CLog::Log(LOGDEBUG, "PYTHONHOME -> %s", CSpecialProtocol::TranslatePath("special://frameworks").c_str());
+        CLog::Log(LOGDEBUG, "PYTHONPATH -> %s", CSpecialProtocol::TranslatePath("special://frameworks").c_str());
       }
       setenv("PYTHONCASEOK", "1", 1); //This line should really be removed
 #elif defined(_WIN32)
@@ -356,11 +356,11 @@ void XBPython::Initialize()
       // buf is corrupted after putenv and might need a strdup but it seems to
       // work this way
       CStdString buf;
-      buf = "PYTHONPATH=" + _P("special://xbmc/system/python/DLLs") + ";" + _P("special://xbmc/system/python/Lib");
+      buf = "PYTHONPATH=" + CSpecialProtocol::TranslatePath("special://xbmc/system/python/DLLs") + ";" + CSpecialProtocol::TranslatePath("special://xbmc/system/python/Lib");
       pgwin32_putenv(buf.c_str());
       buf = "PYTHONOPTIMIZE=1";
       pgwin32_putenv(buf.c_str());
-      buf = "PYTHONHOME=" + _P("special://xbmc/system/python");
+      buf = "PYTHONHOME=" + CSpecialProtocol::TranslatePath("special://xbmc/system/python");
       pgwin32_putenv(buf.c_str());
       buf = "OS=win32";
       pgwin32_putenv(buf.c_str());
@@ -465,7 +465,7 @@ void XBPython::Process()
     m_bLogin = false;
 
     // autoexec.py - profile
-    CStdString strAutoExecPy = _P("special://profile/autoexec.py");
+    CStdString strAutoExecPy = CSpecialProtocol::TranslatePath("special://profile/autoexec.py");
 
     if ( XFILE::CFile::Exists(strAutoExecPy) )
       evalFile(strAutoExecPy,ADDON::AddonPtr());
@@ -521,7 +521,6 @@ int XBPython::evalFile(const CStdString &src, ADDON::AddonPtr addon)
 int XBPython::evalFile(const CStdString &src, const std::vector<CStdString> &argv, ADDON::AddonPtr addon)
 {
   CSingleExit ex(g_graphicsContext);
-  CSingleLock lock(m_critSection);
   // return if file doesn't exist
   if (!XFILE::CFile::Exists(src))
   {
@@ -533,6 +532,7 @@ int XBPython::evalFile(const CStdString &src, const std::vector<CStdString> &arg
   if (g_settings.GetCurrentProfile().programsLocked() && !g_passwordManager.IsMasterLockUnlocked(true))
     return -1;
 
+  CSingleLock lock(m_critSection);
   Initialize();
 
   if (!m_bInitialized) return -1;
index 453ecad..4ec7e23 100644 (file)
@@ -61,6 +61,7 @@ CGUIPythonWindow::CGUIPythonWindow(int id)
   pCallbackWindow = NULL;
   m_threadState = NULL;
   m_loadOnDemand = false;
+  m_destroyAfterDeinit = false;
 }
 
 CGUIPythonWindow::~CGUIPythonWindow(void)
@@ -162,6 +163,18 @@ bool CGUIPythonWindow::OnMessage(CGUIMessage& message)
   return CGUIWindow::OnMessage(message);
 }
 
+void CGUIPythonWindow::OnDeinitWindow(int nextWindowID /*= 0*/)
+{
+  CGUIWindow::OnDeinitWindow(nextWindowID);
+  if (m_destroyAfterDeinit)
+    g_windowManager.Delete(GetID());
+}
+
+void CGUIPythonWindow::SetDestroyAfterDeinit(bool destroy /*= true*/)
+{
+  m_destroyAfterDeinit = destroy;
+}
+
 void CGUIPythonWindow::SetCallbackWindow(void *state, void *object)
 {
   pCallbackWindow = object;
index f093d32..c776187 100644 (file)
@@ -53,8 +53,11 @@ public:
   void             SetCallbackWindow(void* state, void *object);
   void             WaitForActionEvent(unsigned int timeout);
   void             PulseActionEvent();
+  void             SetDestroyAfterDeinit(bool destroy = true);
 protected:
+  virtual void     OnDeinitWindow(int nextWindowID = 0);
   void* pCallbackWindow;
   void* m_threadState;
   CEvent           m_actionEvent;
+  bool             m_destroyAfterDeinit;
 };
index e25bebd..1be83ab 100644 (file)
@@ -74,5 +74,5 @@ void CGUIPythonWindowDialog::Show_Internal(bool show /* = true */)
 void CGUIPythonWindowDialog::OnDeinitWindow(int nextWindowID)
 {
   g_windowManager.RemoveDialog(GetID());
-  CGUIWindow::OnDeinitWindow(nextWindowID);
+  CGUIPythonWindow::OnDeinitWindow(nextWindowID);
 }
index 6287dfc..2db79f1 100644 (file)
@@ -51,6 +51,7 @@ CGUIPythonWindowXML::CGUIPythonWindowXML(int id, CStdString strXML, CStdString s
   m_threadState = NULL;
   m_loadOnDemand = false;
   m_scriptPath = strFallBackPath;
+  m_destroyAfterDeinit = false;
 }
 
 CGUIPythonWindowXML::~CGUIPythonWindowXML(void)
@@ -207,6 +208,18 @@ bool CGUIPythonWindowXML::OnMessage(CGUIMessage& message)
   return CGUIMediaWindow::OnMessage(message);
 }
 
+void CGUIPythonWindowXML::OnDeinitWindow(int nextWindowID /*= 0*/)
+{
+  CGUIMediaWindow::OnDeinitWindow(nextWindowID);
+  if (m_destroyAfterDeinit)
+    g_windowManager.Delete(GetID());
+}
+
+void CGUIPythonWindowXML::SetDestroyAfterDeinit(bool destroy /*= true*/)
+{
+  m_destroyAfterDeinit = destroy;
+}
+
 void CGUIPythonWindowXML::AddItem(CFileItemPtr fileItem, int itemPosition)
 {
   if (itemPosition == INT_MAX || itemPosition > m_vecItems->Size())
index 35d067a..27bc3a2 100644 (file)
@@ -52,8 +52,10 @@ public:
   void              SetCallbackWindow(void* state, void* object);
   virtual bool      OnClick(int iItem);
   void              SetProperty(const CStdString &strProperty, const CStdString &strValue);
+  void              SetDestroyAfterDeinit(bool destroy = true);
 
 protected:
+  virtual void     OnDeinitWindow(int nextWindowID = 0);
   virtual void     GetContextButtons(int itemNumber, CContextButtons &buttons);
   virtual bool     LoadXML(const CStdString &strPath, const CStdString &strPathLower);
   unsigned int     LoadScriptStrings();
@@ -66,5 +68,6 @@ protected:
   bool             m_bRunning;
   CStdString       m_scriptPath;
   CStdString       m_mediaDir;
+  bool             m_destroyAfterDeinit;
 };
 
index 8bdad24..f50c4f6 100644 (file)
@@ -64,5 +64,5 @@ void CGUIPythonWindowXMLDialog::Show_Internal(bool show /* = true */)
 void CGUIPythonWindowXMLDialog::OnDeinitWindow(int nextWindowID)
 {
   g_windowManager.RemoveDialog(GetID());
-  CGUIWindow::OnDeinitWindow(nextWindowID);
+  CGUIPythonWindowXML::OnDeinitWindow(nextWindowID);
 }
index ab8d7e4..8db03ff 100644 (file)
@@ -24,6 +24,8 @@
 #include "pythreadstate.h"
 #include "addons/AddonManager.h"
 #include "addons/GUIDialogAddonSettings.h"
+#include "guilib/GUIWindowManager.h"
+#include "GUIUserMessages.h"
 #include "utils/log.h"
 
 namespace PYXBMC
@@ -141,11 +143,13 @@ namespace PYXBMC
       }
     }
 
+    CAddonMgr::Get().AddToUpdateableAddons(self->pAddon);
     return (PyObject*)self;
   }
 
   void Addon_Dealloc(Addon* self)
   {
+    CAddonMgr::Get().RemoveFromUpdateableAddons(self->pAddon);  
     self->ob_type->tp_free((PyObject*)self);
   }
 
@@ -245,8 +249,27 @@ namespace PYXBMC
 
     AddonPtr addon(self->pAddon);
     CPyThreadState pyState;
-    addon->UpdateSetting(id, value);
-    addon->SaveSettings();
+    bool save=true;
+    if (g_windowManager.IsWindowActive(WINDOW_DIALOG_ADDON_SETTINGS))
+    {
+      CGUIDialogAddonSettings* dialog = (CGUIDialogAddonSettings*)g_windowManager.GetWindow(WINDOW_DIALOG_ADDON_SETTINGS);
+      if (dialog->GetCurrentID() == addon->ID())
+      {
+        CGUIMessage message(GUI_MSG_SETTING_UPDATED,0,0);
+        std::vector<CStdString> params;
+        params.push_back(id);
+        params.push_back(value);
+        message.SetStringParams(params);
+        g_windowManager.SendThreadMessage(message,WINDOW_DIALOG_ADDON_SETTINGS);
+        save=false;
+      }
+    }
+    if (save)
+    {
+      addon->UpdateSetting(id, value);
+      addon->SaveSettings();
+    }
+
     pyState.Restore();
 
     Py_INCREF(Py_None);
index 74c49f2..ff03f3f 100644 (file)
  *
  */
 
+// Get rid of 'dereferencing type-punned pointer will break strict-aliasing rules'
+// warnings caused by Py_RETURN_TRUE/FALSE.
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif
+
 #include "action.h"
 #include "guilib/Key.h"
 #include "pyutil.h"
index dc1936c..fb2aed8 100644 (file)
@@ -94,9 +94,6 @@ namespace PYXBMC
     PyObject* unicodeLine[4];
     for (int i = 0; i < 4; i++) unicodeLine[i] = NULL;
 
-    CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(window);
-    if (PyXBMCWindowIsNull(pDialog)) return NULL;
-
     // get lines, last 2 lines are optional.
     string utf8Line[4];
     if (!PyArg_ParseTuple(args, (char*)"OO|OO", &unicodeLine[0], &unicodeLine[1], &unicodeLine[2], &unicodeLine[3]))  return NULL;
@@ -106,15 +103,24 @@ namespace PYXBMC
       if (unicodeLine[i] && !PyXBMCGetUnicodeString(utf8Line[i], unicodeLine[i], i+1))
         return NULL;
     }
+    PyXBMCGUILock();
+    CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(window);
+    if (PyXBMCWindowIsNull(pDialog)) return NULL;
+
     pDialog->SetHeading(utf8Line[0]);
     pDialog->SetLine(0, utf8Line[1]);
     pDialog->SetLine(1, utf8Line[2]);
     pDialog->SetLine(2, utf8Line[3]);
 
+    PyXBMCGUIUnlock();
+
     //send message and wait for user input
     PyXBMCWaitForThreadMessage(TMSG_DIALOG_DOMODAL, window, ACTIVE_WINDOW);
+    PyXBMCGUILock();
+    bool result = pDialog->IsConfirmed();
+    PyXBMCGUIUnlock();
 
-    return Py_BuildValue((char*)"b", pDialog->IsConfirmed());
+    return Py_BuildValue((char*)"b", result);
   }
 
   PyDoc_STRVAR(browse__doc__,
@@ -344,8 +350,6 @@ namespace PYXBMC
     const int window = WINDOW_DIALOG_YES_NO;
     PyObject* unicodeLine[6];
     for (int i = 0; i < 6; i++) unicodeLine[i] = NULL;
-    CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(window);
-    if (PyXBMCWindowIsNull(pDialog)) return NULL;
 
     // get lines, last 4 lines are optional.
     string utf8Line[6];
@@ -356,6 +360,9 @@ namespace PYXBMC
       if (unicodeLine[i] && !PyXBMCGetUnicodeString(utf8Line[i], unicodeLine[i], i+1))
         return NULL;
     }
+    PyXBMCGUILock();
+    CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(window);
+    if (PyXBMCWindowIsNull(pDialog)) return NULL;
     pDialog->SetHeading(utf8Line[0]);
     pDialog->SetLine(0, utf8Line[1]);
     pDialog->SetLine(1, utf8Line[2]);
@@ -364,11 +371,15 @@ namespace PYXBMC
       pDialog->SetChoice(0,utf8Line[4]);
     if (utf8Line[5] != "")
       pDialog->SetChoice(1,utf8Line[5]);
+    PyXBMCGUIUnlock();
 
     //send message and wait for user input
     PyXBMCWaitForThreadMessage(TMSG_DIALOG_DOMODAL, window, ACTIVE_WINDOW);
+    PyXBMCGUILock();
+    bool result = pDialog->IsConfirmed();
+    PyXBMCGUIUnlock();
 
-    return Py_BuildValue((char*)"b", pDialog->IsConfirmed());
+    return Py_BuildValue((char*)"b", result);
   }
 
   PyDoc_STRVAR(select__doc__,
@@ -394,6 +405,7 @@ namespace PYXBMC
     if (!PyArg_ParseTuple(args, (char*)"OO|i", &heading, &list, &autoClose))  return NULL;
     if (!PyList_Check(list)) return NULL;
 
+    PyXBMCGUILock();
     CGUIDialogSelect* pDialog= (CGUIDialogSelect*)g_windowManager.GetWindow(window);
     if (PyXBMCWindowIsNull(pDialog)) return NULL;
 
@@ -413,10 +425,15 @@ namespace PYXBMC
     if (autoClose > 0)
       pDialog->SetAutoClose(autoClose);
 
+    PyXBMCGUIUnlock();
+
     //send message and wait for user input
     PyXBMCWaitForThreadMessage(TMSG_DIALOG_DOMODAL, window, ACTIVE_WINDOW);
 
-    return Py_BuildValue((char*)"i", pDialog->GetSelectedLabel());
+    PyXBMCGUILock();
+    int result = pDialog->GetSelectedLabel();
+    PyXBMCGUIUnlock();
+    return Py_BuildValue((char*)"i", result);
   }
 
 /*****************************************************************
@@ -452,16 +469,28 @@ namespace PYXBMC
         return NULL;
     }
 
-    CGUIDialogProgress* pDialog= (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS);
-    if (PyXBMCWindowIsNull(pDialog)) return NULL;
-    ((DialogProgress*)self)->dlg = pDialog;
+    CGUIDialogProgress* pDialog;
+    {
+      CPyThreadState releaseGil;
+      CSingleLock glock(g_graphicsContext);
 
-    pDialog->SetHeading(utf8Line[0]);
+      pDialog= (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS);
+      if (!pDialog)
+      {
+        glock.Leave();
+        releaseGil.Restore();
+        PyErr_SetString(PyExc_SystemError, "Error: Window is NULL, this is not possible :-)");
+        return NULL;
+      }
+      ((DialogProgress*)self)->dlg = pDialog;
+
+      pDialog->SetHeading(utf8Line[0]);
 
-    for (int i = 1; i < 4; i++)
-      pDialog->SetLine(i - 1,utf8Line[i]);
+      for (int i = 1; i < 4; i++)
+        pDialog->SetLine(i - 1,utf8Line[i]);
 
-    pDialog->StartModal();
+      pDialog->StartModal();
+    }
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -494,6 +523,7 @@ namespace PYXBMC
         return NULL;
     }
 
+    PyXBMCGUILock();
     CGUIDialogProgress* pDialog= ((DialogProgress*)self)->dlg;
     if (PyXBMCWindowIsNull(pDialog)) return NULL;
 
@@ -511,6 +541,7 @@ namespace PYXBMC
       if (unicodeLine[i])
         pDialog->SetLine(i,utf8Line[i]);
     }
+    PyXBMCGUIUnlock();
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -528,7 +559,9 @@ namespace PYXBMC
     CGUIDialogProgress* pDialog= ((DialogProgress*)self)->dlg;
     if (PyXBMCWindowIsNull(pDialog)) return NULL;
 
+    PyXBMCGUILock();
     canceled = pDialog->IsCanceled();
+    PyXBMCGUIUnlock();
 
     return Py_BuildValue((char*)"b", canceled);
   }
@@ -545,7 +578,10 @@ namespace PYXBMC
     CGUIDialogProgress* pDialog= ((DialogProgress*)self)->dlg;
     if (PyXBMCWindowIsNull(pDialog)) return NULL;
 
-    pDialog->Close();
+    {
+      CPyThreadState state;
+      pDialog->Close();
+    }
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -554,9 +590,12 @@ namespace PYXBMC
   static void Dialog_ProgressDealloc(PyObject *self)
   {
     CGUIDialogProgress* pDialog= ((DialogProgress*)self)->dlg;
-    if(pDialog)
+    if (pDialog)
+    {
+      CPyThreadState state;
       pDialog->Close();
-
+    }
+    
     self->ob_type->tp_free((PyObject*)self);
   }
 
index 93d0a9e..e6d04c8 100644 (file)
@@ -41,10 +41,15 @@ namespace PYXBMC
     PyObject_HEAD_XBMC_WINDOW
   } WindowDialog;
 
-  typedef struct {
+  struct DialogProgress {
     PyObject_HEAD
     CGUIDialogProgress* dlg;
-  } DialogProgress;
+
+    DialogProgress()
+    {
+      dlg = 0;
+    }
+  };
 
   extern PyTypeObject WindowDialog_Type;
   extern PyTypeObject DialogProgress_Type;
index b496485..5597f6b 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include "keyboard.h"
+#include "pythreadstate.h"
 #include "pyutil.h"
 #include "guilib/GUIWindowManager.h"
 #include "dialogs/GUIDialogKeyboard.h"
@@ -56,6 +57,9 @@ namespace PYXBMC
     self->strDefault = utf8Line;
     self->strHeading = utf8Heading;
     self->bHidden = (0 != bHidden);
+    PyXBMCGUILock();
+    self->dlg = (CGUIDialogKeyboard*)g_windowManager.GetWindow(WINDOW_DIALOG_KEYBOARD);
+    PyXBMCGUIUnlock();
 
     return (PyObject*)self;
   }
@@ -78,7 +82,7 @@ namespace PYXBMC
 
   PyObject* Keyboard_DoModal(Keyboard *self, PyObject *args)
   {
-    CGUIDialogKeyboard *pKeyboard = (CGUIDialogKeyboard*)g_windowManager.GetWindow(WINDOW_DIALOG_KEYBOARD);
+    CGUIDialogKeyboard *pKeyboard = ((Keyboard*)self)->dlg;
     if(!pKeyboard)
     {
       PyErr_SetString(PyExc_SystemError, "Unable to load virtual keyboard");
@@ -88,6 +92,7 @@ namespace PYXBMC
 
     if (!PyArg_ParseTuple(args, (char*)"|i", &autoClose)) return NULL;
 
+    PyXBMCGUILock();
     pKeyboard->Initialize();
     pKeyboard->SetHeading(self->strHeading);
     CStdString strDefault(self->strDefault);
@@ -97,6 +102,7 @@ namespace PYXBMC
       pKeyboard->SetAutoClose(autoClose);
 
     // do modal of dialog
+    PyXBMCGUIUnlock();
     PyXBMCWaitForThreadMessage(TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_KEYBOARD, g_windowManager.GetActiveWindow());
 
     Py_INCREF(Py_None);
@@ -121,7 +127,7 @@ namespace PYXBMC
     if (line && !PyXBMCGetUnicodeString(utf8Line, line, 1)) return NULL;
     self->strDefault = utf8Line;
 
-    CGUIDialogKeyboard *pKeyboard = (CGUIDialogKeyboard*)g_windowManager.GetWindow(WINDOW_DIALOG_KEYBOARD);
+    CGUIDialogKeyboard *pKeyboard = ((Keyboard*)self)->dlg;
     if(!pKeyboard)
     {
       PyErr_SetString(PyExc_SystemError, "Unable to load keyboard");
@@ -129,7 +135,9 @@ namespace PYXBMC
     }
 
     CStdString strDefault(self->strDefault);
+    PyXBMCGUILock();
     pKeyboard->SetText(strDefault);
+    PyXBMCGUIUnlock();
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -149,14 +157,16 @@ namespace PYXBMC
     if (!PyArg_ParseTuple(args, (char*)"|b", &bHidden)) return NULL;
     self->bHidden = (0 != bHidden);
 
-    CGUIDialogKeyboard *pKeyboard = (CGUIDialogKeyboard*)g_windowManager.GetWindow(WINDOW_DIALOG_KEYBOARD);
+    CGUIDialogKeyboard *pKeyboard = ((Keyboard*)self)->dlg;
     if(!pKeyboard)
     {
       PyErr_SetString(PyExc_SystemError, "Unable to load keyboard");
       return NULL;
     }
 
+    PyXBMCGUILock();
     pKeyboard->SetHiddenInput(self->bHidden);
+    PyXBMCGUIUnlock();
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -180,14 +190,16 @@ namespace PYXBMC
     if (line && !PyXBMCGetUnicodeString(utf8Line, line, 1)) return NULL;
     self->strHeading = utf8Line;
 
-    CGUIDialogKeyboard *pKeyboard = (CGUIDialogKeyboard*)g_windowManager.GetWindow(WINDOW_DIALOG_KEYBOARD);
+    CGUIDialogKeyboard *pKeyboard = ((Keyboard*)self)->dlg;
     if(!pKeyboard)
     {
       PyErr_SetString(PyExc_SystemError, "Unable to load keyboard");
       return NULL;
     }
 
+    PyXBMCGUILock();
     pKeyboard->SetHeading(self->strHeading);
+    PyXBMCGUIUnlock();
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -205,14 +217,17 @@ namespace PYXBMC
 
   PyObject* Keyboard_GetText(Keyboard *self, PyObject *args)
   {
-    CGUIDialogKeyboard *pKeyboard = (CGUIDialogKeyboard*)g_windowManager.GetWindow(WINDOW_DIALOG_KEYBOARD);
+    CGUIDialogKeyboard *pKeyboard = ((Keyboard*)self)->dlg;
     if(!pKeyboard)
     {
       PyErr_SetString(PyExc_SystemError, "Unable to load keyboard");
       return NULL;
     }
 
-    return Py_BuildValue((char*)"s", pKeyboard->GetText().c_str());
+    PyXBMCGUILock();
+    CStdString result = pKeyboard->GetText();
+    PyXBMCGUIUnlock();
+    return Py_BuildValue((char*)"s", result.c_str());
   }
 
   // isConfirmed() Method
@@ -224,14 +239,17 @@ namespace PYXBMC
 
   PyObject* Keyboard_IsConfirmed(Keyboard *self, PyObject *args)
   {
-    CGUIDialogKeyboard *pKeyboard = (CGUIDialogKeyboard*)g_windowManager.GetWindow(WINDOW_DIALOG_KEYBOARD);
+    CGUIDialogKeyboard *pKeyboard = ((Keyboard*)self)->dlg;
     if(!pKeyboard)
     {
       PyErr_SetString(PyExc_SystemError, "Unable to load keyboard");
       return NULL;
     }
 
-    return Py_BuildValue((char*)"b", pKeyboard->IsConfirmed());
+    PyXBMCGUILock();
+    bool result = pKeyboard->IsConfirmed();
+    PyXBMCGUIUnlock();
+    return Py_BuildValue((char*)"b", result);
   }
 
   PyMethodDef Keyboard_methods[] = {
index 7d0e409..d164be5 100644 (file)
@@ -24,6 +24,8 @@
 #include <string>
 #pragma once
 
+class CGUIDialogKeyboard;
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -35,6 +37,7 @@ namespace PYXBMC
     std::string strDefault;
     std::string strHeading;
     bool bHidden;
+    CGUIDialogKeyboard* dlg;
   } Keyboard;
 
   extern PyTypeObject Keyboard_Type;
index f116674..95f669c 100644 (file)
@@ -610,6 +610,122 @@ namespace PYXBMC
     return Py_None;
   }
 
+  PyDoc_STRVAR(addStreamInfo__doc__,
+    "addStreamInfo(type, values) -- Add a stream with details.\n"
+    "\n"
+    "type              : string - type of stream(video/audio/subtitle).\n"
+    "values            : dictionary - pairs of { label: value }.\n"
+    "\n"
+    "Video Values:\n"
+    "    codec         : string (h264)\n"
+    "    aspect        : float (1.78)\n"
+    "    width         : integer (1280)\n"
+    "    height        : integer (720)\n"
+    "    duration      : integer (seconds)\n"
+    "\n"
+    "Audio Values:\n"
+    "    codec         : string (dts)\n"
+    "    language      : string (en)\n"
+    "    channels      : integer (2)\n"
+    "\n"
+    "Subtitle Values:\n"
+    "    language      : string (en)\n"
+    "\n"
+    "example:\n"
+    "  - self.list.getSelectedItem().addStreamInfo('video', { 'Codec': 'h264', 'Width' : 1280 })\n");
+
+  PyObject* ListItem_AddStreamInfo(ListItem *self, PyObject *args, PyObject *kwds)
+  {
+    static const char *keywords[] = { "type", "values", NULL };
+    char *cType = NULL;
+    PyObject *pValues = NULL;
+    if (!PyArg_ParseTupleAndKeywords(
+      args,
+      kwds,
+      (char*)"sO",
+      (char**)keywords,
+      &cType,
+      &pValues))
+    {
+      return NULL;
+    }
+    if (!PyObject_TypeCheck(pValues, &PyDict_Type))
+    {
+      PyErr_SetString(PyExc_TypeError, "values object should be of type Dict");
+      return NULL;
+    }
+    if (PyDict_Size(pValues) == 0)
+    {
+      PyErr_SetString(PyExc_ValueError, "Empty values dictionary");
+      return NULL;
+    }
+
+    PyObject *key, *value;
+    Py_ssize_t pos = 0;
+
+    PyXBMCGUILock();
+
+    CStdString tmp;
+    if (strcmpi(cType, "video") == 0)
+    {
+      CStreamDetailVideo* video = new CStreamDetailVideo;
+      while (PyDict_Next(pValues, &pos, &key, &value))
+      {
+        if (strcmpi(PyString_AsString(key), "codec") == 0)
+        {
+          if (!PyXBMCGetUnicodeString(video->m_strCodec, value, 1)) 
+            continue;
+        }
+        else if (strcmpi(PyString_AsString(key), "aspect") == 0)
+          video->m_fAspect = PyFloat_AsDouble(value);
+        else if (strcmpi(PyString_AsString(key), "width") == 0)
+          video->m_iWidth = PyInt_AsLong(value);
+        else if (strcmpi(PyString_AsString(key), "height") == 0)
+          video->m_iHeight = PyInt_AsLong(value);
+        else if (strcmpi(PyString_AsString(key), "duration") == 0)
+          video->m_iDuration = PyInt_AsLong(value);
+      }
+      self->item->GetVideoInfoTag()->m_streamDetails.AddStream(video);
+    }
+    else if (strcmpi(cType, "audio") == 0)
+    {
+      CStreamDetailAudio* audio = new CStreamDetailAudio;
+      while (PyDict_Next(pValues, &pos, &key, &value))
+      {
+        if (strcmpi(PyString_AsString(key), "codec") == 0)
+        {
+          if (!PyXBMCGetUnicodeString(audio->m_strCodec, value, 1)) 
+            continue;
+        }
+        else if (strcmpi(PyString_AsString(key), "language") == 0)
+        {
+          if (!PyXBMCGetUnicodeString(audio->m_strLanguage, value, 1)) 
+            continue;
+        }
+        else if (strcmpi(PyString_AsString(key), "channels") == 0)
+          audio ->m_iChannels = PyInt_AsLong(value);
+      }
+      self->item->GetVideoInfoTag()->m_streamDetails.AddStream(audio);
+    }
+    else if (strcmpi(cType, "subtitle") == 0)
+    {
+      CStreamDetailSubtitle* subtitle = new CStreamDetailSubtitle;
+      while (PyDict_Next(pValues, &pos, &key, &value))
+      {
+        if (strcmpi(PyString_AsString(key), "language") == 0)
+        {
+          if (!PyXBMCGetUnicodeString(subtitle->m_strLanguage, value, 1)) 
+            continue;
+        }
+      }
+      self->item->GetVideoInfoTag()->m_streamDetails.AddStream(subtitle);
+    }
+    PyXBMCGUIUnlock();
+
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+
   PyDoc_STRVAR(setProperty__doc__,
     "setProperty(key, value) -- Sets a listitem property, similar to an infolabel.\n"
     "\n"
@@ -858,6 +974,7 @@ namespace PYXBMC
     {(char*)"setProperty", (PyCFunction)ListItem_SetProperty, METH_VARARGS|METH_KEYWORDS, setProperty__doc__},
     {(char*)"getProperty", (PyCFunction)ListItem_GetProperty, METH_VARARGS|METH_KEYWORDS, getProperty__doc__},
     {(char*)"addContextMenuItems", (PyCFunction)ListItem_AddContextMenuItems, METH_VARARGS|METH_KEYWORDS, addContextMenuItems__doc__},
+    {(char*)"addStreamInfo", (PyCFunction)ListItem_AddStreamInfo, METH_VARARGS|METH_KEYWORDS, addStreamInfo__doc__},
     {(char*)"setPath" , (PyCFunction)ListItem_SetPath, METH_VARARGS|METH_KEYWORDS, setPath__doc__},
     {NULL, NULL, 0, NULL}
   };
index 357e7fc..e71d00a 100644 (file)
@@ -551,8 +551,8 @@ namespace PYXBMC
     if (!PyArg_ParseTuple(args, (char*)"b", &bVisible)) return NULL;
     if (g_application.m_pPlayer)
     {
-      g_settings.m_currentVideoSettings.m_SubtitleOn = bVisible;
-      g_application.m_pPlayer->SetSubtitleVisible(bVisible);
+      g_settings.m_currentVideoSettings.m_SubtitleOn = (bVisible != 0);
+      g_application.m_pPlayer->SetSubtitleVisible(bVisible != 0);
 
       Py_INCREF(Py_None);
       return Py_None;
index c7d4efd..6990c68 100644 (file)
@@ -27,6 +27,7 @@
 class CPythonTransport : public JSONRPC::ITransportLayer
 {
 public:
+  virtual bool PrepareDownload(const char *path, CVariant &details, std::string &protocol) { return false; }
   virtual bool Download(const char *path, CVariant &result) { return false; }
   virtual int GetCapabilities() { return JSONRPC::Response; }
 
index c095fab..27f0732 100644 (file)
  *
  */
 
+#include "pyrendercapture.h"
+
+#ifdef HAS_PYRENDERCAPTURE
+
 #include "pyutil.h"
 #include "pythreadstate.h"
-#include "pyrendercapture.h"
 #include "cores/VideoRenderers/RenderManager.h"
 
 #ifdef __cplusplus
@@ -224,3 +227,5 @@ namespace PYXBMC
 }
 #endif
 
+#endif //HAS_PYRENDERCAPTURE
+
index 75c7869..24498c3 100644 (file)
 #pragma once
 
 #include <Python.h>
-
 #include "cores/VideoRenderers/RenderCapture.h"
 
+//PyByteArray_FromStringAndSize is only available in python 2.6 and up
+#if PY_VERSION_HEX >= 0x02060000 
+
+#define HAS_PYRENDERCAPTURE
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -43,3 +47,6 @@ namespace PYXBMC
 #ifdef __cplusplus
 }
 #endif
+
+#endif //PY_VERSION_HEX >= 0x02060000
+
index adaae69..9788686 100644 (file)
@@ -382,7 +382,20 @@ namespace PYXBMC
     }
 
     if (self->bIsPythonWindow)
-      g_windowManager.Delete(self->pWindow->GetID());
+    {
+      if (self->pWindow && g_windowManager.IsWindowVisible(self->iWindowId))
+      {
+        // if window isn't closed - mark it to delete itself after deiniting
+        // and trigger window closing
+        if (self->bUsingXML)
+          ((CGUIPythonWindowXML*)self->pWindow)->SetDestroyAfterDeinit();
+        else
+          ((CGUIPythonWindow*)self->pWindow)->SetDestroyAfterDeinit();
+        Window_Close(self, NULL);
+      }
+      else
+        g_windowManager.Delete(self->iWindowId);
+    }
 
     lock.Leave();
     self->vecControls.clear();
@@ -560,28 +573,68 @@ namespace PYXBMC
 
   PyObject* Window_AddControl(Window *self, PyObject *args)
   {
-    Control* pControl;
+    PyObject* object;
 
-    if (!PyArg_ParseTuple(args, (char*)"O", &pControl)) return NULL;
-    // type checking, object should be of type Control
-    if(!Control_Check(pControl))
+    if (!PyArg_ParseTuple(args, (char*)"O", &object)) return NULL;
+
+    if (!Window_AddSingleControl(self, object, true))
+      return NULL;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+
+  PyDoc_STRVAR(addControls__doc__,
+    "addControls(self, List) -- Add a list of Controls to this window.\n"
+    "\n"
+    "Throws: TypeError, if supplied argument is not of List type, or a control is not of Control type\n"
+    "        ReferenceError, if control is already used in another window\n"
+    "        RuntimeError, should not happen :-)\n");
+
+  PyObject* Window_AddControls(Window *self, PyObject *args)
+  {
+    PyObject* object;
+
+    if (!PyArg_ParseTuple(args, (char*)"O", &object)) return NULL;
+
+    if (!PyList_Check(object))
     {
       PyErr_SetString(PyExc_TypeError, "Object should be of type Control");
       return NULL;
     }
+    for (int i = 0; i < PyList_Size(object); i++)
+    {
+      if (!Window_AddSingleControl(self, PyList_GetItem(object,i), i+1 == PyList_Size(object)))
+        return NULL;
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+
+  bool Window_AddSingleControl(Window *self, PyObject *control, bool wait)
+  {
+    // type checking, object should be of type Control
+    if(!Control_Check(control))
+    {
+      PyErr_SetString(PyExc_TypeError, "Object should be of type Control");
+      return false;
+    }
+    Control *pControl = (Control *)control;
 
     if(pControl->iControlId != 0)
     {
       PyErr_SetString(PyExc_ReferenceError, "Control is already used");
-      return NULL;
+      return false;
     }
 
-    // lock xbmc GUI before accessing data from it
-    GilSafeSingleLock lock(g_graphicsContext);
     pControl->iParentId = self->iWindowId;
-    // assign control id, if id is already in use, try next id
-    do pControl->iControlId = ++self->iCurrentControlId;
-    while (self->pWindow->GetControl(pControl->iControlId));
+
+    { // assign control id, if id is already in use, try next id
+      GilSafeSingleLock lock(g_graphicsContext);
+      do pControl->iControlId = ++self->iCurrentControlId;
+      while (self->pWindow->GetControl(pControl->iControlId));
+    }
 
     // Control Label
     if (ControlLabel_Check(pControl))
@@ -633,7 +686,7 @@ namespace PYXBMC
     else
     {
       PyErr_SetString(PyExc_RuntimeError, "Object is a Control, but can't be added to a window");
-      return NULL;
+      return false;
     }
 
     Py_INCREF(pControl);
@@ -645,15 +698,63 @@ namespace PYXBMC
     pControl->iControlRight = pControl->iControlId;
 
     pControl->pGUIControl->SetNavigation(pControl->iControlUp,
-      pControl->iControlDown, pControl->iControlLeft, pControl->iControlRight);
+                                         pControl->iControlDown, pControl->iControlLeft, pControl->iControlRight);
 
-    // add control to list and allocate recources for the control
     self->vecControls.push_back(pControl);
-    pControl->pGUIControl->AllocResources();
-    self->pWindow->AddControl(pControl->pGUIControl);
+    {
+      CPyThreadState state;
+      CGUIMessage msg(GUI_MSG_ADD_CONTROL, 0, 0);
+      msg.SetPointer(pControl->pGUIControl);
+      g_application.getApplicationMessenger().SendGUIMessage(msg, self->iWindowId, wait);
+    }
+    return true;
+  }
 
-    Py_INCREF(Py_None);
-    return Py_None;
+  bool Window_RemoveSingleControl(Window *self, PyObject *object, bool wait)
+  {
+    // type checking, object should be of type Control
+    if(!Control_Check(object))
+    {
+      PyErr_SetString(PyExc_TypeError, "Object should be of type Control");
+      return false;
+    }
+    Control *pControl = (Control *)object;
+
+    {
+      CPyThreadState state;
+      CSingleLock lock(g_graphicsContext);
+      if(!self->pWindow->GetControl(pControl->iControlId))
+      {
+        lock.Leave();
+        state.Restore();
+        PyErr_SetString(PyExc_RuntimeError, "Control does not exist in window");
+        return false;
+      }
+    }
+
+    // delete control from vecControls in window object
+    for (vector<Control*>::iterator it = self->vecControls.begin(); it != self->vecControls.end(); ++it)
+    {
+      if ((*it)->iControlId == pControl->iControlId)
+      {
+        self->vecControls.erase(it);
+        break;
+      }
+    }
+
+    {
+      CPyThreadState state;
+      CGUIMessage msg(GUI_MSG_REMOVE_CONTROL, 0, 0);
+      msg.SetPointer(pControl->pGUIControl);
+      g_application.getApplicationMessenger().SendGUIMessage(msg, self->iWindowId, wait);
+    }
+
+    // initialize control to zero
+    pControl->pGUIControl = NULL;
+    pControl->iControlId = 0;
+    pControl->iParentId = 0;
+    Py_DECREF(pControl);
+    return true;
   }
 
   PyDoc_STRVAR(getControl__doc__,
@@ -770,42 +871,39 @@ namespace PYXBMC
 
   PyObject* Window_RemoveControl(Window *self, PyObject *args)
   {
-    Control* pControl;
-    if (!PyArg_ParseTuple(args, (char*)"O", &pControl)) return NULL;
-    // type checking, object should be of type Control
-    if(!Control_Check(pControl))
-    {
-      PyErr_SetString(PyExc_TypeError, "Object should be of type Control");
+    PyObject* object;
+    if (!PyArg_ParseTuple(args, (char*)"O", &object)) return NULL;
+
+    if (!Window_RemoveSingleControl(self, object, true))
       return NULL;
-    }
-    GilSafeSingleLock lock(g_graphicsContext);
-    if(!self->pWindow->GetControl(pControl->iControlId))
+
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+  PyDoc_STRVAR(removeControls__doc__,
+    "removeControls(self, List) -- Removes a list of controls from this window.\n"
+    "\n"
+    "Throws: TypeError, if supplied argument is not a Control type\n"
+    "        RuntimeError, if control is not added to this window\n"
+    "\n"
+    "This will not delete the controls. They are only removed from the window.");
+
+  PyObject* Window_RemoveControls(Window *self, PyObject *args)
+  {
+    PyObject* object;
+    if (!PyArg_ParseTuple(args, (char*)"O", &object)) return NULL;
+
+    if (!PyList_Check(object))
     {
-      PyErr_SetString(PyExc_RuntimeError, "Control does not exist in window");
+      PyErr_SetString(PyExc_TypeError, "Object should be of type List");
       return NULL;
     }
-
-    // delete control from vecControls in window object
-    vector<Control*>::iterator it = self->vecControls.begin();
-    while (it != self->vecControls.end())
+    for (int i = 0; i < PyList_Size(object); i++)
     {
-      Control* control = *it;
-      if (control->iControlId == pControl->iControlId)
-      {
-        it = self->vecControls.erase(it);
-      } else ++it;
+      if (!Window_RemoveSingleControl(self, PyList_GetItem(object,i), i+1 == PyList_Size(object)))
+        return NULL;
     }
 
-    self->pWindow->RemoveControl(pControl->pGUIControl);
-    pControl->pGUIControl->FreeResources();
-    delete pControl->pGUIControl;
-
-    // initialize control to zero
-    pControl->pGUIControl = NULL;
-    pControl->iControlId = 0;
-    pControl->iParentId = 0;
-    Py_DECREF(pControl);
-
     Py_INCREF(Py_None);
     return Py_None;
   }
@@ -917,10 +1015,13 @@ namespace PYXBMC
     if (!PyXBMCGetUnicodeString(uText, value, 1))
       return NULL;
 
-    GilSafeSingleLock lock(g_graphicsContext);
     CStdString lowerKey = key;
-
-    self->pWindow->SetProperty(lowerKey.ToLower(), uText);
+    {
+      CPyThreadState gil;
+      CSingleLock lock(g_graphicsContext);
+      
+      self->pWindow->SetProperty(lowerKey.ToLower(), uText);
+    }
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -1024,8 +1125,10 @@ namespace PYXBMC
     {(char*)"show", (PyCFunction)Window_Show, METH_VARARGS, show__doc__},
     {(char*)"close", (PyCFunction)Window_Close, METH_VARARGS, close__doc__},
     {(char*)"addControl", (PyCFunction)Window_AddControl, METH_VARARGS, addControl__doc__},
+    {(char*)"addControls", (PyCFunction)Window_AddControls, METH_VARARGS, addControls__doc__},
     {(char*)"getControl", (PyCFunction)Window_GetControl, METH_VARARGS, getControl__doc__},
     {(char*)"removeControl", (PyCFunction)Window_RemoveControl, METH_VARARGS, removeControl__doc__},
+    {(char*)"removeControls", (PyCFunction)Window_RemoveControls, METH_VARARGS, removeControls__doc__},
     {(char*)"setFocus", (PyCFunction)Window_SetFocus, METH_VARARGS, setFocus__doc__},
     {(char*)"setFocusId", (PyCFunction)Window_SetFocusId, METH_VARARGS, setFocusId__doc__},
     {(char*)"getFocus", (PyCFunction)Window_GetFocus, METH_VARARGS, getFocus__doc__},
index c382998..7c7e344 100644 (file)
@@ -70,7 +70,10 @@ namespace PYXBMC
   void initWindow_Type();
 
   bool Window_CreateNewWindow(Window* pWindow, bool bAsDialog);
+  bool Window_AddSingleControl(Window* self, PyObject *object, bool wait = true);
+  bool Window_RemoveSingleControl(Window* self, PyObject *object, bool wait = true);
   void Window_Dealloc(Window* self);
+  PyObject* Window_Close(Window *self, PyObject *args);
 }
 
 #ifdef __cplusplus
index 72b8939..ced6bc9 100644 (file)
@@ -195,6 +195,7 @@ namespace PYXBMC
     "executebuiltin(function) -- Execute a built in XBMC function.\n"
     "\n"
     "function       : string - builtin function to execute.\n"
+    "wait           : [opt] bool - True=Wait for end of execution, False=don't wait (Default)\n"
     "\n"
     "List of functions - http://wiki.xbmc.org/?title=List_of_Built_In_Functions \n"
     "\n"
@@ -206,9 +207,10 @@ namespace PYXBMC
   PyObject* XBMC_ExecuteBuiltIn(PyObject *self, PyObject *args)
   {
     char *cLine = NULL;
-    if (!PyArg_ParseTuple(args, (char*)"s", &cLine)) return NULL;
+    bool bWait = false;
+    if (!PyArg_ParseTuple(args, (char*)"s|b", &cLine, &bWait)) return NULL;
 
-    g_application.getApplicationMessenger().ExecBuiltIn(cLine);
+    g_application.getApplicationMessenger().ExecBuiltIn(cLine, bWait);
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -230,6 +232,9 @@ namespace PYXBMC
   {
     char *cLine = NULL;
     if (!PyArg_ParseTuple(args, (char*)"s", &cLine)) return NULL;
+
+    CPyThreadState pyLock;
+
     if (!m_pXbmcHttp)
       m_pXbmcHttp = new CXbmcHttp();
     CStdString method = cLine;
@@ -249,12 +254,17 @@ namespace PYXBMC
         execute = cmd.Left(open);
       }
       else //open bracket but no close
+      {
+        pyLock.Restore();
         return PyString_FromString("");
+      }
     }
     else //no parameters
       execute = cmd;
 
     CURL::Decode(parameter);
+
+    pyLock.Restore();
     return PyString_FromString(CHttpApi::MethodCall(execute, parameter).c_str());
   }
 #endif
@@ -424,9 +434,10 @@ namespace PYXBMC
 
   PyObject* XBMC_GetFreeMem(PyObject *self, PyObject *args)
   {
-    MEMORYSTATUS stat;
-    GlobalMemoryStatus(&stat);
-    return PyInt_FromLong( stat.dwAvailPhys  / ( 1024 * 1024 ) );
+    MEMORYSTATUSEX stat;
+    stat.dwLength = sizeof(MEMORYSTATUSEX);
+    GlobalMemoryStatusEx(&stat);
+    return PyInt_FromLong( (long)(stat.ullAvailPhys  / ( 1024 * 1024 )) );
   }
 
   // getCpuTemp() method
@@ -467,6 +478,8 @@ namespace PYXBMC
     "getInfoLabel(infotag) -- Returns an InfoLabel as a string.\n"
     "\n"
     "infotag        : string - infoTag for value you want returned.\n"
+    "                 Also multiple InfoLabels are possible e.x.:\n"
+    "                 label = xbmc.getInfoLabel('$INFO[Weather.Conditions] - thats the weather')\n"
     "\n"
     "List of InfoTags - http://wiki.xbmc.org/?title=InfoLabels \n"
     "\n"
@@ -484,7 +497,17 @@ namespace PYXBMC
       CPyThreadState gilRelease;
 
       int ret = g_infoManager.TranslateString(cLine);
-      cret = g_infoManager.GetLabel(ret);
+      //doesn't seem to be a single InfoTag?
+      //try full blown GuiInfoLabel then
+      if (ret == 0)
+      {
+        CGUIInfoLabel label(cLine);
+        cret = label.GetLabel(0);
+      }
+      else
+      {
+        cret = g_infoManager.GetLabel(ret);
+      }
     }
     return Py_BuildValue((char*)"s", cret.c_str());
   }
@@ -586,11 +609,15 @@ namespace PYXBMC
     char *cLine = NULL;
     if (!PyArg_ParseTuple(args, (char*)"s", &cLine)) return NULL;
 
-    PyXBMCGUILock();
-    int id = g_windowManager.GetTopMostModalDialogID();
-    if (id == WINDOW_INVALID) id = g_windowManager.GetActiveWindow();
-    bool ret = g_infoManager.EvaluateBool(cLine,id);
-    PyXBMCGUIUnlock();
+    bool ret;
+    {
+      CPyThreadState gilRelease;
+      CSingleLock gc(g_graphicsContext);
+
+      int id = g_windowManager.GetTopMostModalDialogID();
+      if (id == WINDOW_INVALID) id = g_windowManager.GetActiveWindow();
+      ret = g_infoManager.EvaluateBool(cLine,id);
+    }
 
     return Py_BuildValue((char*)"b", ret);
   }
@@ -695,9 +722,6 @@ namespace PYXBMC
     if (!PyXBMCGetUnicodeString(strText, pObjectText, 1)) return NULL;
 
     CStdString strPath;
-    if (URIUtils::IsDOSPath(strText))
-      strText = CSpecialProtocol::ReplaceOldPath(strText, 0);
-
     strPath = CSpecialProtocol::TranslatePath(strText);
 
     return Py_BuildValue((char*)"s", strPath.c_str());
@@ -1000,20 +1024,27 @@ namespace PYXBMC
   InitXBMCTypes(bool bInitTypes)
   {
     initKeyboard_Type();
-    initRenderCapture_Type();
     initPlayer_Type();
     initPlayList_Type();
     initPlayListItem_Type();
     initInfoTagMusic_Type();
     initInfoTagVideo_Type();
 
+#ifdef HAS_PYRENDERCAPTURE
+    initRenderCapture_Type();
+#endif
+
     if (PyType_Ready(&Keyboard_Type) < 0 ||
-        PyType_Ready(&RenderCapture_Type) < 0 ||
         PyType_Ready(&Player_Type) < 0 ||
         PyType_Ready(&PlayList_Type) < 0 ||
         PyType_Ready(&PlayListItem_Type) < 0 ||
         PyType_Ready(&InfoTagMusic_Type) < 0 ||
         PyType_Ready(&InfoTagVideo_Type) < 0) return;
+
+#ifdef HAS_PYRENDERCAPTURE
+    if (PyType_Ready(&RenderCapture_Type) < 0)
+      return;
+#endif
   }
 
   PyMODINIT_FUNC
@@ -1030,13 +1061,16 @@ namespace PYXBMC
     PyObject* pXbmcModule;
 
     Py_INCREF(&Keyboard_Type);
-    Py_INCREF(&RenderCapture_Type);
     Py_INCREF(&Player_Type);
     Py_INCREF(&PlayList_Type);
     Py_INCREF(&PlayListItem_Type);
     Py_INCREF(&InfoTagMusic_Type);
     Py_INCREF(&InfoTagVideo_Type);
 
+#ifdef HAS_PYRENDERCAPTURE
+    Py_INCREF(&RenderCapture_Type);
+#endif
+
     pXbmcModule = Py_InitModule((char*)"xbmc", xbmcMethods);
     if (pXbmcModule == NULL) return;
 
@@ -1083,7 +1117,9 @@ namespace PYXBMC
     PyModule_AddIntConstant(pXbmcModule, (char*)"LOGNONE", LOGNONE);
     PyModule_AddObject(pXbmcModule, (char*)"abortRequested", PyBool_FromLong(0));
 
+#ifdef HAS_PYRENDERCAPTURE
     PyModule_AddObject(pXbmcModule, (char*)"RenderCapture", (PyObject*)&RenderCapture_Type);
+#endif
 
     // render capture user states
     PyModule_AddIntConstant(pXbmcModule, (char*)"CAPTURE_STATE_WORKING", (int)CAPTURESTATE_WORKING);
index 372befb..ec47408 100644 (file)
 #include <ctype.h>
 #include <errno.h>
 
-
-/*
- ** The following two functions together make up an itoa()
- ** implementation. Function i2a() is a 'private' function
- ** called by the public itoa() function.
- **
- ** itoa() takes three arguments:
- ** 1) the integer to be converted,
- ** 2) a pointer to a character conversion buffer,
- ** 3) the radix for the conversion
- ** which can range between 2 and 36 inclusive
- ** range errors on the radix default it to base10
- */
-
-static char *i2a(unsigned i, char *a, unsigned r)
-{
-  if (i/r > 0) a = i2a(i/r,a,r);
-  *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
-  return a+1;
-}
-
-char *itoa(int i, char *a, int r)
-{
-  if ((r < 2) || (r > 36)) r = 10;
-  if (i<0) {
-    *a = '-';
-    *i2a(-(unsigned)i,a+1,r) = 0;
-  } else *i2a(i,a,r) = 0;
-  return a;
-}
-
 void OutputDebugString(LPCTSTR lpOuputString)
 {
 }
 
-void strlwr( char* string )
-{
-  while ( *string )
-  {
-    *string = (char)tolower( *string );
-    string++;
-  }
-}
-
-void strupr( char* string )
-{
-  while ( *string )
-  {
-    *string = (char)toupper( *string );
-    string++;
-  }
-}
-
 LONGLONG Int32x32To64(LONG Multiplier, LONG Multiplicand)
 {
   LONGLONG result = Multiplier;
@@ -87,35 +38,6 @@ LONGLONG Int32x32To64(LONG Multiplier, LONG Multiplicand)
   return result;
 }
 
-int WideCharToMultiByte(
-  UINT CodePage,
-  DWORD dwFlags,
-  LPCWSTR lpWideCharStr,
-  int cchWideChar,
-  LPSTR lpMultiByteStr,
-  int cbMultiByte,
-  LPCSTR lpDefaultChar,
-  LPBOOL lpUsedDefaultChar
-) {
-
-  // TODO: need to implement WideCharToMultiByte
-  return 0;
-}
-
-int MultiByteToWideChar(
-  UINT CodePage,
-  DWORD dwFlags,
-  LPCSTR lpMultiByteStr,
-  int cbMultiByte,
-  LPWSTR lpWideCharStr,
-  int cchWideChar
-) {
-
-  // TODO: need to implement MultiByteToWideChar
-  return 0;
-
-}
-
 DWORD GetLastError()
 {
   return errno;
index 3d1cacf..c1ff56e 100644 (file)
  */
 #include "PlatformDefs.h" // UINT DWORD LPCSTR LPSTR LPBOOL ...
 
-int WideCharToMultiByte(
-  UINT CodePage,
-  DWORD dwFlags,
-  LPCWSTR lpWideCharStr,
-  int cchWideChar,
-  LPSTR lpMultiByteStr,
-  int cbMultiByte,
-  LPCSTR lpDefaultChar,
-  LPBOOL lpUsedDefaultChar
-);
-
-int MultiByteToWideChar(
-  UINT CodePage,
-  DWORD dwFlags,
-  LPCSTR lpMultiByteStr,
-  int cbMultiByte,
-  LPWSTR lpWideCharStr,
-  int cchWideChar
-);
-
-
 DWORD GetLastError();
 VOID  SetLastError(DWORD dwErrCode);
 
index d660a4e..78f0edc 100644 (file)
@@ -511,19 +511,9 @@ void CHALManager::AddDevice(const char *udi)
         if(m_Joysticks.size() < 2 || m_bMultipleJoysticksSupport)
         {
           // Restart SDL joystick subsystem
-          SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
-          if (SDL_WasInit(SDL_INIT_JOYSTICK) !=  0)
-          {
-            CLog::Log(LOGERROR, "HAL: Stop joystick subsystem failed");
-            break;
-          }
-          if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0)
-          {
-            CLog::Log(LOGERROR, "HAL: Restart joystick subsystem failed : %s",SDL_GetError());
+          if (!g_Joystick.Reinitialize())
             break;
-          }
 
-          g_Joystick.Initialize();
           if (m_Notifications)
             CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(13024), dev.FriendlyName.c_str(), TOAST_DISPLAY_TIME, false);
         }
@@ -576,20 +566,11 @@ bool CHALManager::RemoveDevice(const char *udi)
       if(m_Joysticks.size() < 3 || m_bMultipleJoysticksSupport)
       {
         // Restart SDL joystick subsystem
-        SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
-        if (SDL_WasInit(SDL_INIT_JOYSTICK) !=  0)
-        {
-          CLog::Log(LOGERROR, "HAL: Stop joystick subsystem failed");
+        if (!g_Joystick.Reinitialize())
           return false;
-        }
-        if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0)
-        {
-          CLog::Log(LOGERROR, "HAL: Restart joystick subsystem failed : %s",SDL_GetError());
-          return false;
-        }
 
-        g_Joystick.Initialize();
-        CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Warning, g_localizeStrings.Get(13025), m_Joysticks[i].FriendlyName.c_str(), TOAST_DISPLAY_TIME, false);
+        if (m_Notifications)
+          CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Warning, g_localizeStrings.Get(13025), m_Joysticks[i].FriendlyName.c_str(), TOAST_DISPLAY_TIME, false);
       }
       m_Joysticks.erase(m_Joysticks.begin() + i);
       return true;
index 8910bbc..d04830c 100644 (file)
@@ -423,18 +423,18 @@ typedef struct _SECURITY_ATTRIBUTES {
 #define _stat stat
 
 // Memory
-typedef struct _MEMORYSTATUS
+typedef struct _MEMORYSTATUSEX
 {
   DWORD dwLength;
   DWORD dwMemoryLoad;
 
-  uint64_t dwTotalPhys;
-  uint64_t dwAvailPhys;
-  uint64_t dwTotalPageFile;
-  uint64_t dwAvailPageFile;
-  uint64_t dwTotalVirtual;
-  uint64_t dwAvailVirtual;
-} MEMORYSTATUS, *LPMEMORYSTATUS;
+  uint64_t ullTotalPhys;
+  uint64_t ullAvailPhys;
+  uint64_t ullTotalPageFile;
+  uint64_t ullAvailPageFile;
+  uint64_t ullTotalVirtual;
+  uint64_t ullAvailVirtual;
+} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
 
 // Common HRESULT values
 #ifndef NOERROR
@@ -588,12 +588,6 @@ typedef struct _D3DMATRIX {
 #define FILE_SHARE_WRITE                 0x00000002
 #define FILE_SHARE_DELETE                0x00000004
 
-
-// String
-char *itoa(int i, char *a, int r);
-void strlwr(char* string);
-void strupr(char* string);
-
 // Audio stuff
 typedef struct tWAVEFORMATEX
 {
index aa3986c..beae9e8 100644 (file)
@@ -101,14 +101,26 @@ std::vector<CStdString> CPosixMountProvider::GetDiskUsage()
 #elif defined(__FreeBSD__)
   FILE* pipe = popen("df -h -t ufs,cd9660,hfs,udf,zfs", "r");
 #else
-  FILE* pipe = popen("df -hx tmpfs", "r");
+  FILE* pipe = popen("df -h", "r");
 #endif
+  
+  static const char* excludes[] = {"rootfs","devtmpfs","tmpfs","none","/dev/loop", "udev", NULL};
 
   if (pipe)
   {
     while (fgets(line, sizeof(line) - 1, pipe))
     {
-      result.push_back(line);
+      bool ok=true;
+      for (int i=0;excludes[i];++i)
+      {
+        if (strstr(line,excludes[i]))
+        {
+          ok=false;
+          break;
+        }
+      }
+      if (ok)
+        result.push_back(line);
     }
     pclose(pipe);
   }
index a14766b..2f69500 100644 (file)
@@ -251,7 +251,7 @@ HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess,
   {
     // Failed to open file. maybe due to case sensitivity.
     // Try opening the same name in lower case.
-    CStdString igFileName = PTH_IC(lpFileName);
+    CStdString igFileName = CSpecialProtocol::TranslatePathConvertCase(lpFileName);
     fd = open(igFileName.c_str(), flags, mode);
     if (fd != -1)
     {
@@ -275,7 +275,7 @@ if (errno == 20)
   HANDLE result = new CXHandle(CXHandle::HND_FILE);
   result->fd = fd;
 
-#ifdef HAS_DVD_DRIVE
+#if defined(TARGET_LINUX) && defined(HAS_DVD_DRIVE) 
   // special case for opening the cdrom device
   if (strcmp(lpFileName, MEDIA_DETECT::CLibcdio::GetInstance()->GetDeviceFileName())==0)
     result->m_bCDROM = true;
@@ -576,7 +576,7 @@ BOOL GetDiskFreeSpaceEx(
 
 {
   struct statfs64 fsInfo;
-  if (statfs64(_P(lpDirectoryName), &fsInfo) != 0)
+  if (statfs64(CSpecialProtocol::TranslatePath(lpDirectoryName), &fsInfo) != 0)
     return false;
 
   if (lpFreeBytesAvailable)
index 58d2a3d..01f59ad 100644 (file)
@@ -40,6 +40,8 @@ XLCDproc::XLCDproc()
   m_iActualpos   = 0;
   m_iBackLight   = 32;
   m_iLCDContrast = 50;
+  m_iColumns     = 0;
+  m_iRows        = 0;
   m_bStop        = true;
   m_sockfd       = -1;
   m_lastInitAttempt = 0;
@@ -291,6 +293,16 @@ void XLCDproc::Resume()
   }
 }
 
+int XLCDproc::GetColumns()
+{
+  return m_iColumns;
+}
+
+int XLCDproc::GetRows()
+{
+  return m_iRows;
+}
+
 void XLCDproc::SetLine(int iLine, const CStdString& strLine)
 {
   if (m_bStop || m_sockfd == -1)
index f54b448..96285ef 100644 (file)
@@ -40,6 +40,8 @@ public:
   virtual void Resume();
   virtual void SetBackLight(int iLight);
   virtual void SetContrast(int iContrast);
+  virtual int  GetColumns();
+  virtual int  GetRows(); 
 
 protected:
   virtual void Process();
@@ -48,10 +50,6 @@ protected:
   void         CloseSocket();
   unsigned int m_iColumns;        // display columns for each line
   unsigned int m_iRows;           // total number of rows
-  unsigned int m_iRow1adr;
-  unsigned int m_iRow2adr;
-  unsigned int m_iRow3adr;
-  unsigned int m_iRow4adr;
   unsigned int m_iActualpos;      // actual cursor possition
   int          m_iBackLight;
   int          m_iLCDContrast;
index 454ff85..19c4b5a 100644 (file)
@@ -47,13 +47,12 @@ using namespace XbmcThreads;
 static FILE* procMeminfoFP = NULL;
 #endif
 
-void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)
+void GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer)
 {
   if (!lpBuffer)
     return;
 
-  memset(lpBuffer, 0, sizeof(MEMORYSTATUS));
-  lpBuffer->dwLength = sizeof(MEMORYSTATUS);
+  memset(lpBuffer, 0, sizeof(MEMORYSTATUSEX));
 
 #ifdef __APPLE__
   uint64_t physmem;
@@ -63,7 +62,7 @@ void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)
 
   // Total physical memory.
   if (sysctl(mib, miblen, &physmem, &len, NULL, 0) == 0 && len == sizeof (physmem))
-      lpBuffer->dwTotalPhys = physmem;
+      lpBuffer->ullTotalPhys = physmem;
 
   // Virtual memory.
   mib[0] = CTL_VM; mib[1] = VM_SWAPUSAGE;
@@ -71,8 +70,8 @@ void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)
   len = sizeof(struct xsw_usage);
   if (sysctl(mib, miblen, &swap, &len, NULL, 0) == 0)
   {
-      lpBuffer->dwAvailPageFile = swap.xsu_avail;
-      lpBuffer->dwTotalVirtual = lpBuffer->dwTotalPhys + swap.xsu_total;
+      lpBuffer->ullAvailPageFile = swap.xsu_avail;
+      lpBuffer->ullTotalVirtual = lpBuffer->ullTotalPhys + swap.xsu_total;
   }
 
   // In use.
@@ -89,8 +88,8 @@ void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)
       {
           uint64_t used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pageSize;
 
-          lpBuffer->dwAvailPhys = lpBuffer->dwTotalPhys - used;
-          lpBuffer->dwAvailVirtual  = lpBuffer->dwAvailPhys; // FIXME.
+          lpBuffer->ullAvailPhys = lpBuffer->ullTotalPhys - used;
+          lpBuffer->ullAvailVirtual  = lpBuffer->ullAvailPhys; // FIXME.
       }
   }
 #elif defined(__FreeBSD__)                                                                                                                                                                   
@@ -101,8 +100,8 @@ void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)
   /* physmem */                                                                                                                                                                              
   len = sizeof(physmem);                                                                                                                                                                     
   if (sysctlbyname("hw.physmem", &physmem, &len, NULL, 0) == 0) {                                                                                                                            
-    lpBuffer->dwTotalPhys = physmem;                                                                                                                                                         
-    lpBuffer->dwTotalVirtual = physmem;                                                                                                                                                      
+    lpBuffer->ullTotalPhys = physmem;                                                                                                                                                         
+    lpBuffer->ullTotalVirtual = physmem;                                                                                                                                                      
   }                                                                                                                                                                                          
   /* pagesize */                                                                                                                                                                             
   len = sizeof(pagesize);                                                                                                                                                                    
@@ -122,11 +121,11 @@ void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)
     mem_free *= pagesize;
 
   /* mem_avail = mem_inactive + mem_cache + mem_free */
-  lpBuffer->dwAvailPhys = mem_inactive + mem_cache + mem_free;
-  lpBuffer->dwAvailVirtual = mem_inactive + mem_cache + mem_free;
+  lpBuffer->ullAvailPhys = mem_inactive + mem_cache + mem_free;
+  lpBuffer->ullAvailVirtual = mem_inactive + mem_cache + mem_free;
 
   if (sysctlbyname("vm.stats.vm.v_swappgsout", &swap_free, &len, NULL, 0) == 0)
-    lpBuffer->dwAvailPageFile = swap_free * pagesize;
+    lpBuffer->ullAvailPageFile = swap_free * pagesize;
 #else
   struct sysinfo info;
   char name[32];
@@ -159,12 +158,11 @@ void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)
     rewind(procMeminfoFP);
     fflush(procMeminfoFP);
   }
-  lpBuffer->dwLength        = sizeof(MEMORYSTATUS);
-  lpBuffer->dwAvailPageFile = (info.freeswap * info.mem_unit);
-  lpBuffer->dwAvailPhys     = ((info.freeram + info.bufferram) * info.mem_unit);
-  lpBuffer->dwAvailVirtual  = ((info.freeram + info.bufferram) * info.mem_unit);
-  lpBuffer->dwTotalPhys     = (info.totalram * info.mem_unit);
-  lpBuffer->dwTotalVirtual  = (info.totalram * info.mem_unit);
+  lpBuffer->ullAvailPageFile = (info.freeswap * info.mem_unit);
+  lpBuffer->ullAvailPhys     = ((info.freeram + info.bufferram) * info.mem_unit);
+  lpBuffer->ullAvailVirtual  = ((info.freeram + info.bufferram) * info.mem_unit);
+  lpBuffer->ullTotalPhys     = (info.totalram * info.mem_unit);
+  lpBuffer->ullTotalVirtual  = (info.totalram * info.mem_unit);
 #endif
 }
 
index c8effa2..f3ad36f 100644 (file)
@@ -36,7 +36,7 @@
 #define WAIT_ABANDONED         ((STATUS_ABANDONED_WAIT_0 ) + 0 )
 #define WAIT_ABANDONED_0       ((STATUS_ABANDONED_WAIT_0 ) + 0 )
 
-void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer);
+void GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer);
 
 #endif
 
index 41b659e..fe8fafb 100644 (file)
@@ -89,7 +89,7 @@ public:
   void *Get()
   {
     if (pthread_getspecific(m_key) == NULL)
-pthread_setspecific(m_key, malloc(8));
+      pthread_setspecific(m_key, calloc(8, 1));
 
     return pthread_getspecific(m_key);
   }
index 46b3ab9..4275d78 100644 (file)
 using namespace std;
 using namespace MUSIC_INFO;
 
-bool CAlbum::Load(const TiXmlElement *album, bool chained, bool prefix)
+bool CAlbum::Load(const TiXmlElement *album, bool append, bool prioritise)
 {
   if (!album) return false;
-  if (!chained)
+  if (!append)
     Reset();
 
   XMLUtils::GetString(album,"title",strAlbum);
 
-  XMLUtils::GetAdditiveString(album,"artist",g_advancedSettings.m_musicItemSeparator,strArtist);
-  XMLUtils::GetAdditiveString(album,"genre",g_advancedSettings.m_musicItemSeparator,strGenre);
-  XMLUtils::GetAdditiveString(album,"style",g_advancedSettings.m_musicItemSeparator,strStyles);
-  XMLUtils::GetAdditiveString(album,"mood",g_advancedSettings.m_musicItemSeparator,strMoods);
-  XMLUtils::GetAdditiveString(album,"theme",g_advancedSettings.m_musicItemSeparator,strThemes);
+  XMLUtils::GetAdditiveString(album, "artist", g_advancedSettings.m_musicItemSeparator, strArtist, prioritise);
+  XMLUtils::GetAdditiveString(album, "genre", g_advancedSettings.m_musicItemSeparator, strGenre, prioritise);
+  XMLUtils::GetAdditiveString(album, "style", g_advancedSettings.m_musicItemSeparator, strStyles, prioritise);
+  XMLUtils::GetAdditiveString(album, "mood", g_advancedSettings.m_musicItemSeparator, strMoods, prioritise);
+  XMLUtils::GetAdditiveString(album, "theme", g_advancedSettings.m_musicItemSeparator, strThemes, prioritise);
 
   XMLUtils::GetString(album,"review",strReview);
   XMLUtils::GetString(album,"releasedate",m_strDateOfRelease);
@@ -65,7 +65,7 @@ bool CAlbum::Load(const TiXmlElement *album, bool chained, bool prefix)
   while (thumb)
   {
     thumbURL.ParseElement(thumb);
-    if (prefix)
+    if (prioritise)
     {
       CStdString temp;
       temp << *thumb;
@@ -73,8 +73,8 @@ bool CAlbum::Load(const TiXmlElement *album, bool chained, bool prefix)
     }
     thumb = thumb->NextSiblingElement("thumb");
   }
-  // prefix thumbs from nfos
-  if (prefix && iThumbCount && iThumbCount != thumbURL.m_url.size())
+  // prioritise thumbs from nfos
+  if (prioritise && iThumbCount && iThumbCount != thumbURL.m_url.size())
   {
     rotate(thumbURL.m_url.begin(),
            thumbURL.m_url.begin()+iThumbCount, 
index ba237af..bc969f1 100644 (file)
@@ -62,7 +62,14 @@ public:
     songs.clear();
   }
 
-  bool Load(const TiXmlElement *movie, bool chained=false, bool prefix=false);
+  /*! \brief Load album information from an XML file.
+   See CVideoInfoTag::Load for a description of the types of elements we load.
+   \param element    the root XML element to parse.
+   \param append     whether information should be added to the existing tag, or whether it should be reset first.
+   \param prioritise if appending, whether additive tags should be prioritised (i.e. replace or prepend) over existing values. Defaults to false.
+   \sa CVideoInfoTag::Load
+   */
+  bool Load(const TiXmlElement *element, bool append = false, bool prioritise = false);
   bool Save(TiXmlNode *node, const CStdString &tag, const CStdString& strPath);
 
   long idAlbum;
index 5df330b..736542a 100644 (file)
 
 using namespace std;
 
-bool CArtist::Load(const TiXmlElement *artist, bool chained, bool prefix)
+bool CArtist::Load(const TiXmlElement *artist, bool append, bool prioritise)
 {
   if (!artist) return false;
-  if (!chained)
+  if (!append)
     Reset();
 
   XMLUtils::GetString(artist,"name",strArtist);
-  XMLUtils::GetAdditiveString(artist,"genre",g_advancedSettings.m_musicItemSeparator,strGenre);
-  XMLUtils::GetAdditiveString(artist,"style",g_advancedSettings.m_musicItemSeparator,strStyles);
-  XMLUtils::GetAdditiveString(artist,"mood",g_advancedSettings.m_musicItemSeparator,strMoods);
-  XMLUtils::GetAdditiveString(artist,"yearsactive",g_advancedSettings.m_musicItemSeparator,strYearsActive);
+  XMLUtils::GetAdditiveString(artist, "genre", g_advancedSettings.m_musicItemSeparator, strGenre, prioritise);
+  XMLUtils::GetAdditiveString(artist, "style", g_advancedSettings.m_musicItemSeparator, strStyles, prioritise);
+  XMLUtils::GetAdditiveString(artist, "mood", g_advancedSettings.m_musicItemSeparator, strMoods, prioritise);
+  XMLUtils::GetAdditiveString(artist, "yearsactive", g_advancedSettings.m_musicItemSeparator, strYearsActive, prioritise);
+  XMLUtils::GetAdditiveString(artist, "instruments", g_advancedSettings.m_musicItemSeparator, strInstruments, prioritise);
 
   XMLUtils::GetString(artist,"born",strBorn);
   XMLUtils::GetString(artist,"formed",strFormed);
-  XMLUtils::GetString(artist,"instruments",strInstruments);
   XMLUtils::GetString(artist,"biography",strBiography);
   XMLUtils::GetString(artist,"died",strDied);
   XMLUtils::GetString(artist,"disbanded",strDisbanded);
@@ -51,7 +51,7 @@ bool CArtist::Load(const TiXmlElement *artist, bool chained, bool prefix)
   while (thumb)
   {
     thumbURL.ParseElement(thumb);
-    if (prefix)
+    if (prioritise)
     {
       CStdString temp;
       temp << *thumb;
@@ -60,7 +60,7 @@ bool CArtist::Load(const TiXmlElement *artist, bool chained, bool prefix)
     thumb = thumb->NextSiblingElement("thumb");
   }
   // prefix thumbs from nfos
-  if (prefix && iThumbCount && iThumbCount != thumbURL.m_url.size())
+  if (prioritise && iThumbCount && iThumbCount != thumbURL.m_url.size())
   {
     rotate(thumbURL.m_url.begin(),
            thumbURL.m_url.begin()+iThumbCount, 
@@ -88,7 +88,7 @@ bool CArtist::Load(const TiXmlElement *artist, bool chained, bool prefix)
   if (fanart2)
   {
     // we prefix to handle mixed-mode nfo's with fanart set
-    if (prefix)
+    if (prioritise)
     {
       CStdString temp;
       temp << *fanart2;
@@ -121,9 +121,10 @@ bool CArtist::Save(TiXmlNode *node, const CStdString &tag, const CStdString& str
                             g_advancedSettings.m_musicItemSeparator, strMoods);
   XMLUtils::SetAdditiveString(artist, "yearsactive",
                             g_advancedSettings.m_musicItemSeparator, strYearsActive);
+  XMLUtils::SetAdditiveString(artist, "instruments",
+                            g_advancedSettings.m_musicItemSeparator, strInstruments);
   XMLUtils::SetString(artist,        "born", strBorn);
   XMLUtils::SetString(artist,      "formed", strFormed);
-  XMLUtils::SetString(artist, "instruments", strInstruments);
   XMLUtils::SetString(artist,   "biography", strBiography);
   XMLUtils::SetString(artist,        "died", strDied);
   XMLUtils::SetString(artist,   "disbanded", strDisbanded);
index 31c387e..10618cc 100644 (file)
@@ -56,7 +56,14 @@ public:
     idArtist = -1;
   }
 
-  bool Load(const TiXmlElement *movie, bool chained=false, bool prefix=false);
+  /*! \brief Load artist information from an XML file.
+   See CVideoInfoTag::Load for a description of the types of elements we load.
+   \param element    the root XML element to parse.
+   \param append     whether information should be added to the existing tag, or whether it should be reset first.
+   \param prioritise if appending, whether additive tags should be prioritised (i.e. replace or prepend) over existing values. Defaults to false.
+   \sa CVideoInfoTag::Load
+   */
+  bool Load(const TiXmlElement *element, bool append = false, bool prioritise = false);
   bool Save(TiXmlNode *node, const CStdString &tag, const CStdString& strPath);
 
   CStdString strArtist;
index 298d919..7cf8156 100644 (file)
@@ -2569,6 +2569,7 @@ bool CMusicDatabase::GetGenresNav(const CStdString& strBaseDir, CFileItemList& i
     {
       CFileItemPtr pItem(new CFileItem(m_pDS->fv("strGenre").get_asString()));
       pItem->GetMusicInfoTag()->SetGenre(m_pDS->fv("strGenre").get_asString());
+      pItem->GetMusicInfoTag()->SetDatabaseId(m_pDS->fv("idGenre").get_asInt());
       CStdString strDir;
       strDir.Format("%ld/", m_pDS->fv("idGenre").get_asInt());
       pItem->SetPath(strBaseDir + strDir);
@@ -3134,6 +3135,8 @@ bool CMusicDatabase::UpdateOldVersion(int version)
   if (NULL == m_pDS.get()) return false;
   if (NULL == m_pDS2.get()) return false;
 
+  BeginTransaction();
+
   try
   {
     if (version < 16)
@@ -3226,9 +3229,12 @@ bool CMusicDatabase::UpdateOldVersion(int version)
       m_pDS->exec("CREATE INDEX idxSong4 ON song(idArtist)");
       m_pDS->exec("CREATE INDEX idxSong5 ON song(idGenre)");
       m_pDS->exec("CREATE INDEX idxSong6 ON song(idPath)");
-
-      CreateViews();
     }
+
+    // always recreate the views after any table change
+    CreateViews();
+
+    CommitTransaction();
   }
   catch (...)
   {
index 3654725..f89d572 100644 (file)
@@ -214,7 +214,7 @@ protected:
   std::map<CStdString, CAlbumCache> m_albumCache;
 
   virtual bool CreateTables();
-  virtual int GetMinVersion() const { return 17; };
+  virtual int GetMinVersion() const { return 18; };
   const char *GetBaseDBName() const { return "MyMusic"; };
 
   int AddAlbum(const CStdString& strAlbum1, int idArtist, const CStdString &extraArtists, const CStdString &strArtist1, int idThumb, int idGenre, const CStdString &extraGenres, int year);
@@ -231,7 +231,7 @@ protected:
 private:
   /*! \brief (Re)Create the generic database views for songs and albums
    */
-  void CreateViews();
+  virtual void CreateViews();
 
   void SplitString(const CStdString &multiString, std::vector<CStdString> &vecStrings, CStdString &extraStrings);
   CSong GetSongFromDataset(bool bWithMusicDbPath=false);
index 59b83bf..e7106ad 100644 (file)
@@ -24,7 +24,6 @@
 #include "music/Song.h"
 #include "music/Artist.h"
 #include "addons/Scraper.h"
-#include "utils/ScraperParser.h"
 
 class TiXmlDocument;
 class CScraperUrl;
index 99db6b4..dbc604d 100644 (file)
@@ -132,8 +132,7 @@ void CGUIWindowKaraokeLyrics::newSong(CKaraokeLyrics * lyrics)
   CSingleLock lock (m_CritSection);
   m_Lyrics = lyrics;
 
-  if ( m_Lyrics )
-    m_Lyrics->InitGraphics();
+  m_Lyrics->InitGraphics();
 
   // Set up current background mode
   if ( m_Lyrics->HasVideo() )
index 4b499bc..0bf1092 100644 (file)
@@ -76,7 +76,7 @@ BYTE CKaraokeLyricsCDG::getPixel( int x, int y )
   if ( x >= (int) CDG_FULL_WIDTH || y >= (int) CDG_FULL_HEIGHT )
          return m_borderColor;
   
-  if ( x < 0 || y < 0 || offset > CDG_FULL_HEIGHT * CDG_FULL_WIDTH )
+  if ( x < 0 || y < 0 || offset >= CDG_FULL_HEIGHT * CDG_FULL_WIDTH )
   {
        CLog::Log( LOGERROR, "CDG renderer: requested pixel (%d,%d) is out of boundary", x, y );
        return 0;
index dc9bf59..5120109 100644 (file)
@@ -182,7 +182,8 @@ int CFlacTag::ReadFlacHeader(void)
   m_file->Read(buffer, 8);    // read 64 bits of data
   int iFreq = (buffer[0] << 12) | (buffer[1] << 4) | (buffer[2] >> 4);
   int64_t iNumSamples = ( (int64_t) (buffer[3] & 0x0F) << 32) | ( (int64_t) buffer[4] << 24) | (buffer[5] << 16) | (buffer[6] << 8) | buffer[7];
-  m_musicInfoTag.SetDuration((int)((iNumSamples) / iFreq));
+  if (iFreq != 0)
+    m_musicInfoTag.SetDuration((int)((iNumSamples) / iFreq));
   return iPos + 38;
 }
 
index 6a49bcd..4e353fb 100644 (file)
@@ -86,7 +86,10 @@ bool CID3Tag::Read(const CStdString& strFile)
 
   m_tag = m_dll.id3_file_tag(id3file);
   if (!m_tag)
+  {
+    m_dll.id3_file_close(id3file);
     return false;
+  }
 
   m_musicInfoTag.SetURL(strFile);
 
@@ -210,7 +213,10 @@ bool CID3Tag::Write(const CStdString& strFile)
 
   m_tag = m_dll.id3_file_tag(id3file);
   if (!m_tag)
+  {
+    m_dll.id3_file_close(id3file);
     return false;
+  }
 
   SetTitle(m_musicInfoTag.GetTitle());
   SetArtist(m_musicInfoTag.GetArtist());
index e1cd117..0a88b49 100644 (file)
@@ -116,7 +116,7 @@ bool CMusicInfoTagLoaderCDDA::Load(const CStdString& strFileName, CMusicInfoTag&
       trackinfo ti = pCdInfo->GetTrackInformation(iTrack);
 
       // Fill the fileitems music tag with CD-Text information, if available
-      CStdString strTitle = ti.cdtext.field[CDTEXT_TITLE];
+      CStdString strTitle = ti.cdtext[CDTEXT_TITLE];
       if (strTitle.size() > 0)
       {
         // Tracknumber
@@ -126,21 +126,23 @@ bool CMusicInfoTagLoaderCDDA::Load(const CStdString& strFileName, CMusicInfoTag&
         tag.SetTitle(strTitle);
 
         // Get info for track zero, as we may have and need CD-Text Album info
-        cdtext_t discCDText = pCdInfo->GetDiscCDTextInformation();
+        xbmc_cdtext_t discCDText = pCdInfo->GetDiscCDTextInformation();
 
         // Artist: Use track artist or disc artist
-        CStdString strArtist = ti.cdtext.field[CDTEXT_PERFORMER];
+        CStdString strArtist = ti.cdtext[CDTEXT_PERFORMER];
         if (strArtist.IsEmpty())
-          strArtist = discCDText.field[CDTEXT_PERFORMER];
+          strArtist = discCDText[CDTEXT_PERFORMER];
         tag.SetArtist(strArtist);
 
         // Album
         CStdString strAlbum;
-        strAlbum = discCDText.field[CDTEXT_TITLE];
+        strAlbum = discCDText[CDTEXT_TITLE];
         tag.SetAlbum(strAlbum);
 
-        // Genre
-        CStdString strGenre = ti.cdtext.field[CDTEXT_GENRE];
+        // Genre: use track or disc genre
+        CStdString strGenre = ti.cdtext[CDTEXT_GENRE];
+        if (strGenre.IsEmpty())
+          strGenre = discCDText[CDTEXT_GENRE];
         tag.SetGenre( strGenre );
 
         tag.SetLoaded(true);
index dc1e618..5cb6b24 100644 (file)
@@ -87,7 +87,6 @@ bool CMusicInfoTagLoaderMP3::Load(const CStdString& strFileName, CMusicInfoTag&
       m_replayGainInfo=id3tag.GetReplayGain();
     }
 
-#ifndef ARMEL_ // TODO this will probably be OK next time we sync to trunk
     // Check for an APEv2 tag
     CAPEv2Tag apeTag;
     if (PrioritiseAPETags() && apeTag.ReadTag(strFileName.c_str()))
@@ -136,7 +135,7 @@ bool CMusicInfoTagLoaderMP3::Load(const CStdString& strFileName, CMusicInfoTag&
       if (apeTag.GetRating() > '0')
         tag.SetRating(apeTag.GetRating());
     }
-#endif
+
     tag.SetDuration(ReadDuration(strFileName));
 
     return tag.Loaded();
@@ -152,7 +151,6 @@ bool CMusicInfoTagLoaderMP3::Load(const CStdString& strFileName, CMusicInfoTag&
 
 bool CMusicInfoTagLoaderMP3::ReadSeekAndReplayGainInfo(const CStdString &strFileName)
 {
-#ifndef ARMEL_ // TODO this will probably be OK next time we sync to trunk
   // First check for an APEv2 tag
   CAPEv2Tag apeTag;
   if (apeTag.ReadTag(strFileName.c_str()))
@@ -160,7 +158,7 @@ bool CMusicInfoTagLoaderMP3::ReadSeekAndReplayGainInfo(const CStdString &strFile
     if (apeTag.GetReplayGain().iHasGainInfo)
       m_replayGainInfo = apeTag.GetReplayGain();
   }
-#endif
+
   if (!m_replayGainInfo.iHasGainInfo)
   { // Nothing found query id3 tag
     CID3Tag id3tag;
index fd571e4..1515221 100644 (file)
@@ -52,7 +52,7 @@ bool CMusicInfoTagLoaderMod::Load(const CStdString& strFileName, CMusicInfoTag&
       tag.SetLoaded(false);
       return( false );
     }
-    ifstream inMDZ(_P(strMDZ.c_str()));
+    ifstream inMDZ(CSpecialProtocol::TranslatePath(strMDZ.c_str()));
     char temp[8192];
     char temp2[8192];
 
index ced5d2d..af46361 100644 (file)
@@ -131,7 +131,7 @@ bool CMusicInfoTagLoaderWMA::Load(const CStdString& strFileName, CMusicInfoTag&
     {
       iOffset += 64;
       pDataI = (unsigned int*)(pData.get() + iOffset);
-      float F1 = (float)pDataI[1];
+      uint64_t F1 = pDataI[1];
       F1 = F1 * 0x10000 * 0x10000 + pDataI[0];
       tag.SetDuration((long)((F1 / 10000) / 1000)); // from milliseconds to seconds
     }
index 91b0cfc..ee5d71e 100644 (file)
@@ -61,6 +61,7 @@
 #include "utils/TimeUtils.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
+#include "video/VideoInfoTag.h"
 #include "ThumbnailCache.h"
 
 using namespace std;
@@ -388,29 +389,31 @@ void CGUIWindowMusicBase::ShowArtistInfo(const CArtist& artist, const CStdString
 
   // check cache
   CArtist artistInfo;
-  artistInfo.strArtist = artist.strArtist;
-  if (m_musicdatabase.GetArtistInfo(artist.idArtist, artistInfo) && !bShowInfo)
-    return;
-
-  CGUIDialogMusicInfo *pDlgAlbumInfo = (CGUIDialogMusicInfo*)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_INFO);
-  if (pDlgAlbumInfo && !bRefresh)
+  if (!bRefresh && m_musicdatabase.GetArtistInfo(artist.idArtist, artistInfo))
   {
-    pDlgAlbumInfo->SetArtist(artistInfo, path);
-
-    if (bShowInfo)
-      pDlgAlbumInfo->DoModal();
-    else
-      pDlgAlbumInfo->RefreshThumb();  // downloads the thumb if we don't already have one
+    if (!bShowInfo)
+      return;
 
-    if (!pDlgAlbumInfo->NeedRefresh())
+    CGUIDialogMusicInfo *pDlgArtistInfo = (CGUIDialogMusicInfo*)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_INFO);
+    if (pDlgArtistInfo)
     {
-      if (pDlgAlbumInfo->HasUpdatedThumb())
-        Update(m_vecItems->GetPath());
+      pDlgArtistInfo->SetArtist(artistInfo, path);
 
-      return;
+      if (bShowInfo)
+        pDlgArtistInfo->DoModal();
+      else
+        pDlgArtistInfo->RefreshThumb();  // downloads the thumb if we don't already have one
+
+      if (!pDlgArtistInfo->NeedRefresh())
+      {
+        if (pDlgArtistInfo->HasUpdatedThumb())
+          Update(m_vecItems->GetPath());
+
+        return;
+      }
+      bRefresh = true;
+      m_musicdatabase.DeleteArtistInfo(artistInfo.idArtist);
     }
-    bRefresh = true;
-    m_musicdatabase.DeleteArtistInfo(artistInfo.idArtist);
   }
 
   // If we are scanning for music info in the background,
@@ -437,14 +440,14 @@ void CGUIWindowMusicBase::ShowArtistInfo(const CArtist& artist, const CStdString
         m_dlgProgress->Close();
 
       // ok, show album info
-      CGUIDialogMusicInfo *pDlgAlbumInfo = (CGUIDialogMusicInfo*)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_INFO);
-      if (pDlgAlbumInfo)
+      CGUIDialogMusicInfo *pDlgArtistInfo = (CGUIDialogMusicInfo*)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_INFO);
+      if (pDlgArtistInfo)
       {
-        pDlgAlbumInfo->SetArtist(info.GetArtist(), path);
+        pDlgArtistInfo->SetArtist(info.GetArtist(), path);
         if (bShowInfo)
-          pDlgAlbumInfo->DoModal();
+          pDlgArtistInfo->DoModal();
         else
-          pDlgAlbumInfo->RefreshThumb();  // downloads the thumb if we don't already have one
+          pDlgArtistInfo->RefreshThumb();  // downloads the thumb if we don't already have one
 
         CArtist artistInfo = info.GetArtist();
         artistInfo.idArtist = artist.idArtist;
@@ -454,7 +457,7 @@ void CGUIWindowMusicBase::ShowArtistInfo(const CArtist& artist, const CStdString
 */
         // just update for now
         Update(m_vecItems->GetPath());
-        if (pDlgAlbumInfo->NeedRefresh())
+        if (pDlgArtistInfo->NeedRefresh())
         {
           m_musicdatabase.DeleteArtistInfo(artistInfo.idArtist);
           ShowArtistInfo(artist, path, true, bShowInfo);
index b8f1a05..d87e326 100644 (file)
@@ -559,6 +559,9 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
         if (idArtist == -1)
           return false;
         CStdString path; path.Format("musicdb://2/%ld/", idArtist);
+        CArtist artist;
+        m_musicdatabase.GetArtistInfo(idArtist,artist,false);
+        *item = CFileItem(artist);
         item->SetPath(path);
         CGUIWindowMusicBase::OnContextButton(itemNumber,button);
         Update(m_vecItems->GetPath());
@@ -573,6 +576,9 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
         if (idAlbum == -1)
           return false;
         CStdString path; path.Format("musicdb://3/%ld/", idAlbum);
+        CAlbum album;
+        m_musicdatabase.GetAlbumInfo(idAlbum,album,NULL);
+        *item = CFileItem(path,album);
         item->SetPath(path);
         CGUIWindowMusicBase::OnContextButton(itemNumber,button);
         Update(m_vecItems->GetPath());
@@ -774,8 +780,8 @@ void CGUIWindowMusicNav::FrameMove()
   // update our searching
   if (m_searchTimer.IsRunning() && m_searchTimer.GetElapsedMilliseconds() > search_timeout)
   {
-    OnSearchUpdate();
     m_searchTimer.Stop();
+    OnSearchUpdate();
   }
   if (m_bDisplayEmptyDatabaseMessage)
     SET_CONTROL_LABEL(CONTROL_LABELEMPTY,g_localizeStrings.Get(745)+'\n'+g_localizeStrings.Get(746));
index 936ed42..71cfbf4 100644 (file)
@@ -170,6 +170,9 @@ void CGUIWindowMusicPlaylistEditor::OnPrepareFileItems(CFileItemList &items)
 {
   RetrieveMusicInfo();
 
+  // set fanart
+  SetupFanart(items);
+
   items.SetCachedMusicThumbs();
 }
 
@@ -200,7 +203,7 @@ void CGUIWindowMusicPlaylistEditor::PlayItem(int iItem)
 
 #ifdef HAS_DVD_DRIVE
   if (m_vecItems->Get(iItem)->IsDVD())
-    MEDIA_DETECT::CAutorun::PlayDisc(!MEDIA_DETECT::CAutorun::CanResumePlayDVD() || CGUIDialogYesNo::ShowAndGetInput(341, -1, -1, -1, 13404, 12021));
+    MEDIA_DETECT::CAutorun::PlayDiscAskResume(m_vecItems->Get(iItem)->GetPath());
   else
 #endif
     CGUIWindowMusicBase::PlayItem(iItem);
index 1dd7d45..e5e3b7e 100644 (file)
@@ -37,6 +37,7 @@
 #include "guilib/LocalizeStrings.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
+#include "Autorun.h"
 
 #define CONTROL_BTNVIEWASICONS     2
 #define CONTROL_BTNSORTBY          3
@@ -453,7 +454,7 @@ void CGUIWindowMusicSongs::PlayItem(int iItem)
 
 #ifdef HAS_DVD_DRIVE
   if (m_vecItems->Get(iItem)->IsDVD())
-    MEDIA_DETECT::CAutorun::PlayDisc(!MEDIA_DETECT::CAutorun::CanResumePlayDVD() || CGUIDialogYesNo::ShowAndGetInput(341, -1, -1, -1, 13404, 12021));
+    MEDIA_DETECT::CAutorun::PlayDiscAskResume(m_vecItems->Get(iItem)->GetPath());
   else
 #endif
     CGUIWindowMusicBase::PlayItem(iItem);
index 9d49efb..bde2676 100644 (file)
@@ -208,7 +208,6 @@ EVENT_RESULT CGUIWindowVisualisation::OnMouseEvent(const CPoint &point, const CM
 
 void CGUIWindowVisualisation::FrameMove()
 {
-  g_application.ResetScreenSaver(); //why here?
   // check for a tag change
   const CMusicInfoTag* tag = g_infoManager.GetCurrentSongTag();
   if (tag && *tag != m_tag)
index 8dea547..09d34cb 100644 (file)
@@ -25,6 +25,7 @@
 #include <arpa/inet.h>
 #include "DllLibPlist.h"
 #include "utils/log.h"
+#include "utils/URIUtils.h"
 #include "utils/StringUtils.h"
 #include "threads/SingleLock.h"
 #include "filesystem/File.h"
@@ -33,6 +34,7 @@
 #include "Application.h"
 #include "utils/md5.h"
 #include "utils/Variant.h"
+#include "guilib/GUIWindowManager.h"
 
 #ifdef TARGET_WINDOWS
 #define close closesocket
 
 #define RECEIVEBUFFER 1024
 
-#define AIRPLAY_STATUS_OK 200
-#define AIRPLAY_STATUS_NO_RESPONSE_NEEDED 1000
+#define AIRPLAY_STATUS_OK                  200
 #define AIRPLAY_STATUS_SWITCHING_PROTOCOLS 101
-#define AIRPLAY_STATUS_NEED_AUTH 401
-#define AIRPLAY_STATUS_NOT_IMPLEMENTED 501
+#define AIRPLAY_STATUS_NEED_AUTH           401
+#define AIRPLAY_STATUS_NOT_FOUND           404
+#define AIRPLAY_STATUS_METHOD_NOT_ALLOWED  405
+#define AIRPLAY_STATUS_NOT_IMPLEMENTED     501
+#define AIRPLAY_STATUS_NO_RESPONSE_NEEDED  1000
 
 CAirPlayServer *CAirPlayServer::ServerInstance = NULL;
+int CAirPlayServer::m_isPlaying = 0;
 
+#define EVENT_NONE     -1
 #define EVENT_PLAYING   0
 #define EVENT_PAUSED    1
 #define EVENT_LOADING   2
-const char *eventStrings[] = {"playing", "paused", "loading"};
+#define EVENT_STOPPED   3
+const char *eventStrings[] = {"playing", "paused", "loading", "stopped"};
 
 #define PLAYBACK_INFO  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"\
 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\r\n"\
@@ -92,6 +99,15 @@ const char *eventStrings[] = {"playing", "paused", "loading"};
 "</dict>\r\n"\
 "</plist>\r\n"
 
+#define PLAYBACK_INFO_NOT_READY  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"\
+"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\r\n"\
+"<plist version=\"1.0\">\r\n"\
+"<dict>\r\n"\
+"<key>readyToPlay</key>\r\n"\
+"<false/>\r\n"\
+"</dict>\r\n"\
+"</plist>\r\n"
+
 #define SERVER_INFO  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"\
 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\r\n"\
 "<plist version=\"1.0\">\r\n"\
@@ -105,7 +121,7 @@ const char *eventStrings[] = {"playing", "paused", "loading"};
 "<key>protovers</key>\r\n"\
 "<string>1.0</string>\r\n"\
 "<key>srcvers</key>\r\n"\
-"<string>101.10</string>\r\n"\
+"<string>"AIRPLAY_SERVER_VERSION_STR"</string>\r\n"\
 "</dict>\r\n"\
 "</plist>\r\n"
 
@@ -314,6 +330,7 @@ CAirPlayServer::CTCPClient::CTCPClient()
   m_pLibPlist = new DllLibPlist();
 
   m_bAuthenticated = false;
+  m_lastEvent = EVENT_NONE;
 }
 
 CAirPlayServer::CTCPClient::CTCPClient(const CTCPClient& client)
@@ -366,6 +383,12 @@ void CAirPlayServer::CTCPClient::PushBuffer(CAirPlayServer *host, const char *bu
       case AIRPLAY_STATUS_NEED_AUTH:
         statusMsg = "Unauthorized";
         break;
+      case AIRPLAY_STATUS_NOT_FOUND:
+        statusMsg = "Not Found";
+        break;
+      case AIRPLAY_STATUS_METHOD_NOT_ALLOWED:
+        statusMsg = "Method Not Allowed";
+        break;
     }
 
     // Prepare the response
@@ -452,17 +475,24 @@ void CAirPlayServer::CTCPClient::ComposeReverseEvent( CStdString& reverseHeader,
                                                       CStdString sessionId,
                                                       int state)
 {
+
+  if ( m_lastEvent != state )
+  { 
     switch(state)
     {
       case EVENT_PLAYING:
       case EVENT_LOADING:
       case EVENT_PAUSED:
+      case EVENT_STOPPED:      
         reverseBody.Format(EVENT_INFO, eventStrings[state]);
+        CLog::Log(LOGDEBUG, "AIRPLAY: sending event: %s", eventStrings[state]);
         break;
     }
     reverseHeader = "Content-Type: text/x-apple-plist+xml\r\n";
     reverseHeader.Format("%sContent-Length: %d",reverseHeader.c_str(),reverseBody.size());
     reverseHeader.Format("%sx-apple-session-id: %s\r\n",reverseHeader.c_str(),sessionId.c_str());
+    m_lastEvent = state;
+  }
 }
 
 void CAirPlayServer::CTCPClient::ComposeAuthRequestAnswer(CStdString& responseHeader, CStdString& responseBody)
@@ -627,6 +657,8 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
       const char* found = strstr(queryString.c_str(), "value=");
       int rate = found ? (int)(atof(found + strlen("value=")) + 0.5f) : 0;
 
+      CLog::Log(LOGDEBUG, "AIRPLAY: got request %s with rate %i", uri.c_str(), rate);
+
       if (needAuth && !checkAuthorization(authorization, method, uri))
       {
         status = AIRPLAY_STATUS_NEED_AUTH;
@@ -636,6 +668,7 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
         if (g_application.m_pPlayer && g_application.m_pPlayer->IsPlaying() && !g_application.m_pPlayer->IsPaused())
         {
           g_application.getApplicationMessenger().MediaPause();
+          ComposeReverseEvent(reverseHeader, reverseBody, sessionId, EVENT_PAUSED);
         }
       }
       else
@@ -643,9 +676,38 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
         if (g_application.m_pPlayer && g_application.m_pPlayer->IsPlaying() && g_application.m_pPlayer->IsPaused())
         {
           g_application.getApplicationMessenger().MediaPause();
+          ComposeReverseEvent(reverseHeader, reverseBody, sessionId, EVENT_PLAYING);
         }
       }
   }
+  
+  // The volume command is used to change playback volume.
+  // A value argument should be supplied which indicates how loud we should get.
+  // 0.000000 => silent
+  // 1.000000 => loud
+  else if (uri == "/volume")
+  {
+      const char* found = strstr(queryString.c_str(), "volume=");
+      double volume = found ? (double)(atof(found + strlen("volume="))) : 0;
+
+      CLog::Log(LOGDEBUG, "AIRPLAY: got request %s with volume %f", uri.c_str(), volume);
+
+      if (needAuth && !checkAuthorization(authorization, method, uri))
+      {
+        status = AIRPLAY_STATUS_NEED_AUTH;
+      }
+      else if (volume >= 0 && volume <= 1)
+      {
+        int oldVolume = g_application.GetVolume();
+        volume *= 100;
+        if(oldVolume != (int)volume)
+        {
+          g_application.SetVolume(volume);          
+          g_application.getApplicationMessenger().ShowVolumeBar(oldVolume < volume);
+        }
+      }
+  }
+
 
   // Contains a header like format in the request body which should contain a
   // Content-Location and optionally a Start-Position
@@ -653,6 +715,9 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
   {
     CStdString location;
     float position = 0.0;
+    m_lastEvent = EVENT_NONE;
+
+    CLog::Log(LOGDEBUG, "AIRPLAY: got request %s", uri.c_str());
 
     if (needAuth && !checkAuthorization(authorization, method, uri))
     {
@@ -660,7 +725,8 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
     }
     else if (contentType == "application/x-apple-binary-plist")
     {
-
+      CAirPlayServer::m_isPlaying++;    
+      
       if (m_pLibPlist->Load())
       {
         m_pLibPlist->EnableDelayedUnload(false);
@@ -677,7 +743,7 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
           {
             double tmpDouble = 0;
             m_pLibPlist->plist_get_real_val(tmpNode, &tmpDouble);
-            position = tmpDouble;
+            position = (float)tmpDouble;
           }
 
           tmpNode = m_pLibPlist->plist_dict_get_item(dict, "Content-Location");
@@ -686,7 +752,11 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
             char *tmpStr = NULL;
             m_pLibPlist->plist_get_string_val(tmpNode, &tmpStr);
             location=tmpStr;
+#ifdef TARGET_WINDOWS
+            m_pLibPlist->plist_free_string_val(tmpStr);
+#else
             free(tmpStr);
+#endif
           }
 
           if (dict)
@@ -703,6 +773,7 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
     }
     else
     {
+      CAirPlayServer::m_isPlaying++;        
       // Get URL to play
       int start = body.Find("Content-Location: ");
       if (start == -1)
@@ -717,19 +788,25 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
         start += strlen("Start-Position: ");
         int end = body.Find('\n', start);
         CStdString positionStr = body.Mid(start, end - start);
-        position = atof(positionStr.c_str());
+        position = (float)atof(positionStr.c_str());
       }
     }
 
     if (status != AIRPLAY_STATUS_NEED_AUTH)
     {
+      CStdString userAgent="AppleCoreMedia/1.0.0.8F455 (AppleTV; U; CPU OS 4_3 like Mac OS X; de_de)";
+      CURL::Encode(userAgent);
+      location += "|User-Agent=" + userAgent;
+
       CFileItem fileToPlay(location, false);
       fileToPlay.SetProperty("StartPercent", position*100.0f);
       g_application.getApplicationMessenger().MediaPlay(fileToPlay);
+      ComposeReverseEvent(reverseHeader, reverseBody, sessionId, EVENT_PLAYING);
     }
   }
 
   // Used to perform seeking (POST request) and to retrieve current player position (GET request).
+  // GET scrub seems to also set rate 1 - strange but true
   else if (uri == "/scrub")
   {
     if (needAuth && !checkAuthorization(authorization, method, uri))
@@ -738,19 +815,34 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
     }
     else if (method == "GET")
     {
+      CLog::Log(LOGDEBUG, "AIRPLAY: got GET request %s", uri.c_str());
+      
       if (g_application.m_pPlayer && g_application.m_pPlayer->GetTotalTime())
       {
         float position = ((float) g_application.m_pPlayer->GetTime()) / 1000;
         responseBody.Format("duration: %d\r\nposition: %f", g_application.m_pPlayer->GetTotalTime(), position);
+
+        //unpause media on GET scrub when paused
+        if (g_application.m_pPlayer->IsPlaying() && g_application.m_pPlayer->IsPaused())
+        {
+          g_application.getApplicationMessenger().MediaPause();
+          ComposeReverseEvent(reverseHeader, reverseBody, sessionId, EVENT_PLAYING);
+        }
+      }
+      else 
+      {
+        status = AIRPLAY_STATUS_METHOD_NOT_ALLOWED;
       }
     }
     else
     {
       const char* found = strstr(queryString.c_str(), "position=");
+      
       if (found && g_application.m_pPlayer)
       {
         __int64 position = (__int64) (atof(found + strlen("position=")) * 1000.0);
         g_application.m_pPlayer->SeekTime(position);
+        CLog::Log(LOGDEBUG, "AIRPLAY: got POST request %s with pos %"PRId64, uri.c_str(), position);
       }
     }
   }
@@ -758,19 +850,30 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
   // Sent when media playback should be stopped
   else if (uri == "/stop")
   {
+    CLog::Log(LOGDEBUG, "AIRPLAY: got request %s", uri.c_str());
     if (needAuth && !checkAuthorization(authorization, method, uri))
     {
       status = AIRPLAY_STATUS_NEED_AUTH;
     }
     else
     {
-      g_application.getApplicationMessenger().MediaStop();
+      if (IsPlaying()) //only stop player if we started him
+      {
+        g_application.getApplicationMessenger().MediaStop();
+        CAirPlayServer::m_isPlaying--;
+      }
+      else //if we are not playing and get the stop request - we just wanna stop picture streaming
+      {
+        g_windowManager.PreviousWindow();
+      }
+      ComposeReverseEvent(reverseHeader, reverseBody, sessionId, EVENT_STOPPED);
     }
   }
 
   // RAW JPEG data is contained in the request body
   else if (uri == "/photo")
   {
+    CLog::Log(LOGDEBUG, "AIRPLAY: got request %s", uri.c_str());
     if (needAuth && !checkAuthorization(authorization, method, uri))
     {
       status = AIRPLAY_STATUS_NEED_AUTH;
@@ -778,7 +881,17 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
     else if (m_httpParser->getContentLength() > 0)
     {
       XFILE::CFile tmpFile;
-      if (tmpFile.OpenForWrite("special://temp/airplay_photo.jpg", true))
+      CStdString tmpFileName = "special://temp/airplay_photo.jpg";
+
+      if( m_httpParser->getContentLength() > 3 &&
+          m_httpParser->getBody()[1] == 'P' &&
+          m_httpParser->getBody()[2] == 'N' &&
+          m_httpParser->getBody()[3] == 'G')
+      {
+        tmpFileName = "special://temp/airplay_photo.png";
+      }
+
+      if (tmpFile.OpenForWrite(tmpFileName, true))
       {
         int writtenBytes=0;
         writtenBytes = tmpFile.Write(m_httpParser->getBody(), m_httpParser->getContentLength());
@@ -786,7 +899,7 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
 
         if (writtenBytes > 0 && (unsigned int)writtenBytes == m_httpParser->getContentLength())
         {
-          g_application.getApplicationMessenger().PictureShow("special://temp/airplay_photo.jpg");
+          g_application.getApplicationMessenger().PictureShow(tmpFileName);
         }
         else
         {
@@ -803,6 +916,8 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
     float cacheDuration = 0.0f;
     bool playing = false;
 
+    CLog::Log(LOGDEBUG, "AIRPLAY: got request %s", uri.c_str());
+
     if (needAuth && !checkAuthorization(authorization, method, uri))
     {
       status = AIRPLAY_STATUS_NEED_AUTH;
@@ -833,10 +948,17 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
         ComposeReverseEvent(reverseHeader, reverseBody, sessionId, EVENT_PAUSED);
       }
     }
+    else
+    {
+      responseBody.Format(PLAYBACK_INFO_NOT_READY, duration, cacheDuration, position, (playing ? 1 : 0), duration);
+      responseHeader = "Content-Type: text/x-apple-plist+xml\r\n";     
+      ComposeReverseEvent(reverseHeader, reverseBody, sessionId, EVENT_STOPPED);
+    }
   }
 
   else if (uri == "/server-info")
   {
+    CLog::Log(LOGDEBUG, "AIRPLAY: got request %s", uri.c_str());
     responseBody.Format(SERVER_INFO, g_application.getNetwork().GetFirstConnectedInterface()->GetMacAddress());
     responseHeader = "Content-Type: text/x-apple-plist+xml\r\n";
   }
@@ -850,6 +972,16 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
   {
     // DRM, ignore for now.
   }
+  
+  else if (uri == "/setProperty")
+  {
+    status = AIRPLAY_STATUS_NOT_FOUND;
+  }
+
+  else if (uri == "/getProperty")
+  {
+    status = AIRPLAY_STATUS_NOT_FOUND;
+  }  
 
   else if (uri == "200") //response OK from the event reverse message
   {
index 72dcf05..1cb648c 100644 (file)
 
 class DllLibPlist;
 
+#define AIRPLAY_SERVER_VERSION_STR "101.28"
+
 class CAirPlayServer : public CThread
 {
 public:
   static bool StartServer(int port, bool nonlocal);
   static void StopServer(bool bWait);
   static bool SetCredentials(bool usePassword, const CStdString& password);
+  static bool IsPlaying(){ return m_isPlaying > 0;}
+  static int m_isPlaying;
 
 protected:
   void Process();
@@ -86,6 +90,7 @@ private:
     HttpParser* m_httpParser;
     DllLibPlist *m_pLibPlist;//the lib
     bool m_bAuthenticated;
+    int  m_lastEvent;
     CStdString m_authNonce;
   };
 
index 1b52d86..f092bb4 100644 (file)
 
 #include "AirTunesServer.h"
 
+#ifdef HAS_AIRPLAY
+#include "network/AirPlayServer.h"
+#endif
+
 #ifdef HAS_AIRTUNES
 
 #include "utils/log.h"
@@ -32,6 +36,7 @@
 #include "cores/paplayer/BXAcodec.h"
 #include "music/tags/MusicInfoTag.h"
 #include "FileItem.h"
+#include "GUIInfoManager.h"
 #include "utils/Variant.h"
 #include "settings/AdvancedSettings.h"
 
@@ -110,9 +115,6 @@ ao_device* CAirTunesServer::AudioOutputFunctions::ao_open_live(int driver_id, ao
   CFileItem item;
   item.SetPath(device->pipe->GetName());
   item.SetMimeType("audio/x-xbmc-pcm");
-  item.SetProperty("isradio", true);
-  item.SetProperty("no-skip", true);
-  item.SetProperty("no-pause", true);
 
   if (ao_get_option(option, "artist"))
     item.GetMusicInfoTag()->SetArtist(ao_get_option(option, "artist"));
@@ -138,8 +140,20 @@ int CAirTunesServer::AudioOutputFunctions::ao_close(ao_device *device)
   device_xbmc->pipe->Close();
   delete device_xbmc->pipe;
 
-  ThreadMessage tMsg = { TMSG_MEDIA_STOP };
-  g_application.getApplicationMessenger().SendMessage(tMsg, true);
+  //fix airplay video for ios5 devices
+  //on ios5 when airplaying video
+  //the client first opens an airtunes stream
+  //while the movie is loading
+  //in that case we don't want to stop the player here
+  //because this would stop the airplaying video
+#ifdef HAS_AIRPLAY
+  if (!CAirPlayServer::IsPlaying())
+#endif
+  {
+    ThreadMessage tMsg = { TMSG_MEDIA_STOP };
+    g_application.getApplicationMessenger().SendMessage(tMsg, true);
+    CLog::Log(LOGDEBUG, "AIRTUNES: AirPlay not running - stopping player");
+  }
 
   delete device_xbmc;
 
@@ -236,7 +250,7 @@ bool CAirTunesServer::StartServer(int port, bool nonlocal, bool usePassword, con
   if (success)
   {
     CStdString appName;
-    appName.Format("%s@XBMC", m_macAddress.c_str());
+    appName.Format("%s@%s", m_macAddress.c_str(), g_infoManager.GetLabel(SYSTEM_FRIENDLY_NAME).c_str());
 
     std::map<std::string, std::string> txt;
     txt["cn"] = "0,1";
@@ -318,18 +332,20 @@ bool CAirTunesServer::Initialize(const CStdString &password)
   int numArgs = 3;
   CStdString hwStr;
   CStdString pwStr;
+  CStdString portStr;
 
   Deinitialize();
 
   hwStr.Format("--mac=%s", m_macAddress.c_str());
   pwStr.Format("--password=%s",password.c_str());
+  portStr.Format("--server_port=%d",m_port);
 
   if (!password.empty())
   {
     numArgs++;
   }
 
-  char *argv[] = { "--apname=XBMC", "--server_port=5000", (char*) hwStr.c_str(), (char *)pwStr.c_str(), NULL };
+  char *argv[] = { "--apname=XBMC", (char*) portStr.c_str(), (char*) hwStr.c_str(), (char *)pwStr.c_str(), NULL };
 
   if (m_pLibShairport->Load())
   {
index 8a4fe8f..a67c5e0 100644 (file)
@@ -36,7 +36,10 @@ public:
   virtual void        plist_get_string_val  (plist_t node,            char **val                        )=0;
   virtual void        plist_get_real_val    (plist_t node,            double *val                       )=0;
   virtual plist_t     plist_dict_get_item   (plist_t node,            const char* key                   )=0;
-  virtual void        plist_free            (plist_t plist                                              )=0;  
+  virtual void        plist_free            (plist_t plist                                              )=0;
+#ifdef TARGET_WINDOWS
+  virtual void        plist_free_string_val (char *val                                                  )=0;
+#endif
 
 };
 
@@ -50,6 +53,9 @@ class DllLibPlist : public DllDynamic, DllLibPlistInterface
   DEFINE_METHOD2(void,          plist_get_real_val,   (plist_t p1,      double *p2))
   DEFINE_METHOD2(plist_t,       plist_dict_get_item,  (plist_t p1,      const char* p2))
   DEFINE_METHOD3(void,          plist_from_bin,       (const char *p1,  uint32_t p2, plist_t *p3))
+#ifdef TARGET_WINDOWS
+  DEFINE_METHOD1(void,          plist_free_string_val, (char *p1))
+#endif
 
 
   BEGIN_METHOD_RESOLVE()
@@ -60,6 +66,9 @@ class DllLibPlist : public DllDynamic, DllLibPlistInterface
     RESOLVE_METHOD_RENAME(plist_get_real_val,     plist_get_real_val)
     RESOLVE_METHOD_RENAME(plist_get_string_val,   plist_get_string_val)
     RESOLVE_METHOD_RENAME(plist_dict_get_item,    plist_dict_get_item)
+#ifdef TARGET_WINDOWS
+    RESOLVE_METHOD_RENAME(plist_free_string_val,  plist_free_string_val)
+#endif
 
   END_METHOD_RESOLVE()
 };
index 457bc9c..fe7088f 100644 (file)
@@ -35,6 +35,7 @@
 #include "utils/TimeUtils.h"
 #include "dialogs/GUIDialogKaiToast.h"
 #include "guilib/GraphicContext.h"
+#include "guilib/LocalizeStrings.h"
 
 using namespace EVENTCLIENT;
 using namespace EVENTPACKET;
@@ -335,13 +336,13 @@ bool CEventClient::OnPacketHELO(CEventPacket *packet)
   m_bGreeted = true;
   if (m_eLogoType == LT_NONE)
   {
-    CGUIDialogKaiToast::QueueNotification("Detected New Connection",
+    CGUIDialogKaiToast::QueueNotification(g_localizeStrings.Get(33200),
                                           m_deviceName.c_str());
   }
   else
   {
     CGUIDialogKaiToast::QueueNotification(iconfile.c_str(),
-                                          "Detected New Connection",
+                                          g_localizeStrings.Get(33200),
                                           m_deviceName.c_str());
   }
   return true;
index 2546b48..81ad974 100644 (file)
@@ -98,8 +98,8 @@ bool CEventPacket::Parse(int datasize, const void *data)
     }
     memcpy(m_pPayload, buf, (size_t)m_iPayloadSize);
   }
-
-  return  (m_bValid = true);
+  m_bValid = true;
+  return true;
 }
 
 #endif // HAS_EVENT_SERVER
index aef785c..2e25160 100644 (file)
@@ -29,6 +29,7 @@
 #include "Socket.h"
 #include "threads/CriticalSection.h"
 #include "Application.h"
+#include "GUIInfoManager.h"
 #include "interfaces/Builtins.h"
 #include "input/ButtonTranslator.h"
 #include "threads/SingleLock.h"
@@ -192,7 +193,7 @@ void CEventServer::Run()
   // publish service
   CZeroconf::GetInstance()->PublishService("servers.eventserver",
                                "_xbmc-events._udp",
-                               "XBMC Event Server",
+                               g_infoManager.GetLabel(SYSTEM_FRIENDLY_NAME),
                                m_iPort,
                                txt);
 
index c26d3a5..9e344f6 100644 (file)
@@ -294,9 +294,6 @@ void CNetwork::StartServices()
   if (!g_application.StartEventServer())
     CGUIDialogKaiToast::QueueNotification("DefaultIconWarning.png", g_localizeStrings.Get(33102), g_localizeStrings.Get(33100));
 #endif
-#ifdef HAS_DBUS_SERVER
-  g_application.StartDbusServer();
-#endif
 #ifdef HAS_JSONRPC
   if (!g_application.StartJSONRPCServer())
     CGUIDialogKaiToast::QueueNotification("DefaultIconWarning.png", g_localizeStrings.Get(33103), g_localizeStrings.Get(33100));
@@ -338,10 +335,10 @@ void CNetwork::StopServices(bool bWait)
 #ifdef HAS_EVENT_SERVER
   g_application.StopEventServer(bWait, false);
 #endif
-#ifdef HAS_DBUS_SERVER
-  g_application.StopDbusServer(bWait);
-#endif
 #ifdef HAS_JSONRPC
     g_application.StopJSONRPCServer(bWait);
 #endif
+#if defined(HAS_AIRPLAY) || defined(HAS_AIRTUNES)
+    g_application.StopAirplayServer(bWait);
+#endif
 }
index fdb0894..3094583 100644 (file)
@@ -1,3 +1,24 @@
+/*
+ *      Copyright (C) 2005-2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
 #include "TCPServer.h"
 #include <stdio.h>
 #include <stdlib.h>
@@ -11,6 +32,7 @@
 #include "utils/log.h"
 #include "utils/Variant.h"
 #include "threads/SingleLock.h"
+#include "websocket/WebSocketManager.h"
 
 static const char     bt_service_name[] = "XBMC JSON-RPC";
 static const char     bt_service_desc[] = "Interface for XBMC remote control over bluetooth";
@@ -91,9 +113,9 @@ void CTCPServer::Process()
 
     for (unsigned int i = 0; i < m_connections.size(); i++)
     {
-      FD_SET(m_connections[i].m_socket, &rfds);
-      if ((intptr_t)m_connections[i].m_socket > (intptr_t)max_fd)
-        max_fd = m_connections[i].m_socket;
+      FD_SET(m_connections[i]->m_socket, &rfds);
+      if ((intptr_t)m_connections[i]->m_socket > (intptr_t)max_fd)
+        max_fd = m_connections[i]->m_socket;
     }
 
     int res = select((intptr_t)max_fd+1, &rfds, NULL, NULL, &to);
@@ -107,7 +129,7 @@ void CTCPServer::Process()
     {
       for (int i = m_connections.size() - 1; i >= 0; i--)
       {
-        int socket = m_connections[i].m_socket;
+        int socket = m_connections[i]->m_socket;
         if (FD_ISSET(socket, &rfds))
         {
           char buffer[RECEIVEBUFFER] = {};
@@ -115,12 +137,33 @@ void CTCPServer::Process()
           nread = recv(socket, (char*)&buffer, RECEIVEBUFFER, 0);
           if (nread > 0)
           {
-            m_connections[i].PushBuffer(this, buffer, nread);
+            std::string response;
+            if (m_connections[i]->IsNew())
+            {
+              CWebSocket *websocket = CWebSocketManager::Handle(buffer, nread, response);
+
+              if (response.size() > 0)
+                m_connections[i]->Send(response.c_str(), response.size());
+
+              if (websocket != NULL)
+              {
+                // Replace the CTCPClient with a CWebSocketClient
+                CWebSocketClient *websocketClient = new CWebSocketClient(websocket, *(m_connections[i]));
+                delete m_connections[i];
+                m_connections.erase(m_connections.begin() + i);
+                m_connections.insert(m_connections.begin() + i, websocketClient);
+              }
+            }
+
+            if (response.size() <= 0)
+              m_connections[i]->PushBuffer(this, buffer, nread);
+
           }
           if (nread <= 0)
           {
             CLog::Log(LOGINFO, "JSONRPC Server: Disconnection detected");
-            m_connections[i].Disconnect();
+            m_connections[i]->Disconnect();
+            delete m_connections[i];
             m_connections.erase(m_connections.begin() + i);
           }
         }
@@ -131,10 +174,10 @@ void CTCPServer::Process()
         if (FD_ISSET(*it, &rfds))
         {
           CLog::Log(LOGDEBUG, "JSONRPC Server: New connection detected");
-          CTCPClient newconnection;
-          newconnection.m_socket = accept(*it, (sockaddr*)&newconnection.m_cliaddr, &newconnection.m_addrlen);
+          CTCPClient *newconnection = new CTCPClient();
+          newconnection->m_socket = accept(*it, (sockaddr*)&newconnection->m_cliaddr, &newconnection->m_addrlen);
 
-          if (newconnection.m_socket == INVALID_SOCKET)
+          if (newconnection->m_socket == INVALID_SOCKET)
             CLog::Log(LOGERROR, "JSONRPC Server: Accept of new connection failed");
           else
           {
@@ -149,6 +192,11 @@ void CTCPServer::Process()
   Deinitialize();
 }
 
+bool CTCPServer::PrepareDownload(const char *path, CVariant &details, std::string &protocol)
+{
+  return false;
+}
+
 bool CTCPServer::Download(const char *path, CVariant &result)
 {
   return false;
@@ -159,24 +207,19 @@ int CTCPServer::GetCapabilities()
   return Response | Announcing;
 }
 
-void CTCPServer::Announce(EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data)
+void CTCPServer::Announce(AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data)
 {
-  std::string str = AnnouncementToJSON(flag, sender, message, data, g_advancedSettings.m_jsonOutputCompact);
+  std::string str = IJSONRPCAnnouncer::AnnouncementToJSONRPC(flag, sender, message, data, g_advancedSettings.m_jsonOutputCompact);
 
   for (unsigned int i = 0; i < m_connections.size(); i++)
   {
     {
-      CSingleLock lock (m_connections[i].m_critSection);
-      if ((m_connections[i].GetAnnouncementFlags() & flag) == 0)
+      CSingleLock lock (m_connections[i]->m_critSection);
+      if ((m_connections[i]->GetAnnouncementFlags() & flag) == 0)
         continue;
     }
 
-    unsigned int sent = 0;
-    do
-    {
-      CSingleLock lock (m_connections[i].m_critSection);
-      sent += send(m_connections[i].m_socket, str.c_str(), str.size() - sent, sent);
-    } while (sent < str.size());
+    m_connections[i]->Send(str.c_str(), str.size());
   }
 }
 
@@ -421,7 +464,10 @@ bool CTCPServer::InitializeTCP()
 void CTCPServer::Deinitialize()
 {
   for (unsigned int i = 0; i < m_connections.size(); i++)
-    m_connections[i].Disconnect();
+  {
+    m_connections[i]->Disconnect();
+    delete m_connections[i];
+  }
 
   m_connections.clear();
 
@@ -441,6 +487,7 @@ void CTCPServer::Deinitialize()
 
 CTCPServer::CTCPClient::CTCPClient()
 {
+  m_new = true;
   m_announcementflags = ANNOUNCE_ALL;
   m_socket = INVALID_SOCKET;
   m_beginBrackets = 0;
@@ -478,8 +525,20 @@ bool CTCPServer::CTCPClient::SetAnnouncementFlags(int flags)
   return true;
 }
 
+void CTCPServer::CTCPClient::Send(const char *data, unsigned int size)
+{
+  unsigned int sent = 0;
+  do
+  {
+    CSingleLock lock (m_critSection);
+    sent += send(m_socket, data, size - sent, 0);
+  } while (sent < size);
+}
+
 void CTCPServer::CTCPClient::PushBuffer(CTCPServer *host, const char *buffer, int length)
 {
+  m_new = false;
+
   for (int i = 0; i < length; i++)
   {
     char c = buffer[i];
@@ -505,8 +564,7 @@ void CTCPServer::CTCPClient::PushBuffer(CTCPServer *host, const char *buffer, in
       if (m_beginBrackets > 0 && m_endBrackets > 0 && m_beginBrackets == m_endBrackets)
       {
         std::string line = CJSONRPC::MethodCall(m_buffer, host, this);
-        CSingleLock lock (m_critSection);
-        send(m_socket, line.c_str(), line.size(), 0);
+        Send(line.c_str(), line.size());
         m_beginChar = m_beginBrackets = m_endBrackets = 0;
         m_buffer.clear();
       }
@@ -527,6 +585,7 @@ void CTCPServer::CTCPClient::Disconnect()
 
 void CTCPServer::CTCPClient::Copy(const CTCPClient& client)
 {
+  m_new               = client.m_new;
   m_socket            = client.m_socket;
   m_cliaddr           = client.m_cliaddr;
   m_addrlen           = client.m_addrlen;
@@ -538,3 +597,88 @@ void CTCPServer::CTCPClient::Copy(const CTCPClient& client)
   m_buffer            = client.m_buffer;
 }
 
+CTCPServer::CWebSocketClient::CWebSocketClient(CWebSocket *websocket)
+{
+  m_websocket = websocket;
+}
+
+CTCPServer::CWebSocketClient::CWebSocketClient(const CWebSocketClient& client)
+{
+  Copy(client);
+
+  m_websocket = client.m_websocket; // TODO
+}
+
+CTCPServer::CWebSocketClient::CWebSocketClient(CWebSocket *websocket, const CTCPClient& client)
+{
+  Copy(client);
+
+  m_websocket = websocket;
+}
+
+CTCPServer::CWebSocketClient::~CWebSocketClient()
+{
+  delete m_websocket;
+}
+
+CTCPServer::CWebSocketClient& CTCPServer::CWebSocketClient::operator=(const CWebSocketClient& client)
+{
+  Copy(client);
+
+  m_websocket = client.m_websocket; // TODO
+
+  return *this;
+}
+
+void CTCPServer::CWebSocketClient::Send(const char *data, unsigned int size)
+{
+  const CWebSocketMessage *msg = m_websocket->Send(WebSocketTextFrame, data, size);
+  if (msg == NULL || !msg->IsComplete())
+    return;
+
+  std::vector<const CWebSocketFrame *> frames = msg->GetFrames();
+  for (unsigned int index = 0; index < frames.size(); index++)
+    CTCPClient::Send(frames.at(index)->GetFrameData(), (unsigned int)frames.at(index)->GetFrameLength());
+}
+
+void CTCPServer::CWebSocketClient::PushBuffer(CTCPServer *host, const char *buffer, int length)
+{
+  bool send;
+  const CWebSocketMessage *msg;
+  if ((msg = m_websocket->Handle(buffer, length, send)) != NULL && msg->IsComplete())
+  {
+    std::vector<const CWebSocketFrame *> frames = msg->GetFrames();
+    if (send)
+    {
+      for (unsigned int index = 0; index < frames.size(); index++)
+        Send(frames.at(index)->GetFrameData(), (unsigned int)frames.at(index)->GetFrameLength());
+    }
+    else
+    {
+      for (unsigned int index = 0; index < frames.size(); index++)
+        CTCPClient::PushBuffer(host, frames.at(index)->GetApplicationData(), (int)frames.at(index)->GetLength());
+    }
+
+    if (m_websocket->GetState() == WebSocketStateClosed)
+      Disconnect();
+
+    delete msg;
+  }
+}
+
+void CTCPServer::CWebSocketClient::Disconnect()
+{
+  if (m_socket > 0)
+  {
+    if (m_websocket->GetState() != WebSocketStateClosed && m_websocket->GetState() != WebSocketStateNotConnected)
+    {
+      const CWebSocketFrame *closeFrame = m_websocket->Close();
+      if (closeFrame)
+        Send(closeFrame->GetFrameData(), (unsigned int)closeFrame->GetFrameLength());
+    }
+
+    if (m_websocket->GetState() == WebSocketStateClosed)
+      CTCPClient::Disconnect();
+  }
+}
+
index 500b4bc..a893e9f 100644 (file)
@@ -1,24 +1,48 @@
 #pragma once
+/*
+ *      Copyright (C) 2005-2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
 #include <vector>
 #include <sys/socket.h>
-#include "interfaces/IAnnouncer.h"
+
+#include "interfaces/json-rpc/IClient.h"
+#include "interfaces/json-rpc/IJSONRPCAnnouncer.h"
 #include "interfaces/json-rpc/ITransportLayer.h"
-#include "threads/Thread.h"
 #include "threads/CriticalSection.h"
-#include "interfaces/json-rpc/JSONUtils.h"
+#include "threads/Thread.h"
+#include "websocket/WebSocket.h"
 
 namespace JSONRPC
 {
-  class CTCPServer : public ITransportLayer, public ANNOUNCEMENT::IAnnouncer, public CThread, protected CJSONUtils
+  class CTCPServer : public ITransportLayer, public JSONRPC::IJSONRPCAnnouncer, public CThread
   {
   public:
     static bool StartServer(int port, bool nonlocal);
     static void StopServer(bool bWait);
 
+    virtual bool PrepareDownload(const char *path, CVariant &details, std::string &protocol);
     virtual bool Download(const char *path, CVariant &result);
     virtual int GetCapabilities();
 
-    virtual void Announce(ANNOUNCEMENT::EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data);
+    virtual void Announce(ANNOUNCEMENT::AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data);
   protected:
     void Process();
   private:
@@ -36,26 +60,53 @@ namespace JSONRPC
       //when adding a member variable, make sure to copy it in CTCPClient::Copy
       CTCPClient(const CTCPClient& client);
       CTCPClient& operator=(const CTCPClient& client);
+      virtual ~CTCPClient() { };
+
       virtual int  GetPermissionFlags();
       virtual int  GetAnnouncementFlags();
       virtual bool SetAnnouncementFlags(int flags);
-      void PushBuffer(CTCPServer *host, const char *buffer, int length);
-      void Disconnect();
+
+      virtual void Send(const char *data, unsigned int size);
+      virtual void PushBuffer(CTCPServer *host, const char *buffer, int length);
+      virtual void Disconnect();
+
+      virtual bool IsNew() const { return m_new; }
 
       SOCKET           m_socket;
       sockaddr_storage m_cliaddr;
       socklen_t        m_addrlen;
       CCriticalSection m_critSection;
 
-    private:
+    protected:
       void Copy(const CTCPClient& client);
+    private:
+      bool m_new;
       int m_announcementflags;
       int m_beginBrackets, m_endBrackets;
       char m_beginChar, m_endChar;
       std::string m_buffer;
     };
 
-    std::vector<CTCPClient> m_connections;
+    class CWebSocketClient : public CTCPClient
+    {
+    public:
+      CWebSocketClient(CWebSocket *websocket);
+      CWebSocketClient(const CWebSocketClient& client);
+      CWebSocketClient(CWebSocket *websocket, const CTCPClient& client);
+      CWebSocketClient& operator=(const CWebSocketClient& client);
+      ~CWebSocketClient();
+
+      virtual void Send(const char *data, unsigned int size);
+      virtual void PushBuffer(CTCPServer *host, const char *buffer, int length);
+      virtual void Disconnect();
+
+      virtual bool IsNew() const { return m_websocket == NULL; }
+
+    private:
+      CWebSocket *m_websocket;
+    };
+
+    std::vector<CTCPClient*> m_connections;
     std::vector<SOCKET> m_servers;
     int m_port;
     bool m_nonlocal;
index 8eee7d7..b6db9b7 100644 (file)
@@ -221,7 +221,7 @@ class CUPnPServer : public PLT_MediaConnect
 {
 public:
     CUPnPServer(const char* friendly_name, const char* uuid = NULL, int port = 0) :
-        PLT_MediaConnect("", friendly_name, true, uuid, port) {
+        PLT_MediaConnect("", friendly_name, false, uuid, port) {
         // hack: override path to make sure it's empty
         // urls will contain full paths to local files
         m_Path = "";
@@ -929,14 +929,15 @@ CUPnPServer::Build(CFileItemPtr                  item,
         }
     }
 
-    // remap Root virtualpath://upnproot/ to id "0"
-    if (object->m_ObjectID == "virtualpath://upnproot/")
-        object->m_ObjectID = "0";
-
-    // remap Parent Root virtualpath://upnproot/ to id "0"
-    if (object->m_ParentID == "virtualpath://upnproot/")
-        object->m_ParentID = "0";
+    if (object) {
+        // remap Root virtualpath://upnproot/ to id "0"
+        if (object->m_ObjectID == "virtualpath://upnproot/")
+            object->m_ObjectID = "0";
 
+        // remap Parent Root virtualpath://upnproot/ to id "0"
+        if (object->m_ParentID == "virtualpath://upnproot/")
+            object->m_ParentID = "0";
+    }
     return object;
 
 failure:
index afd96be..d5fdee8 100644 (file)
@@ -29,6 +29,7 @@
 #include "utils/log.h"
 #include "utils/URIUtils.h"
 #include "utils/Variant.h"
+#include "utils/Base64.h"
 #include "threads/SingleLock.h"
 #include "XBDateTime.h"
 #include "addons/AddonManager.h"
@@ -72,7 +73,8 @@ int CWebServer::AskForAuthentication(struct MHD_Connection *connection)
   if (!response)
     return MHD_NO;
 
-  ret = MHD_add_response_header (response, "WWW-Authenticate", "Basic realm=XBMC");
+  ret = MHD_add_response_header(response, MHD_HTTP_HEADER_WWW_AUTHENTICATE, "Basic realm=XBMC");
+  ret |= MHD_add_response_header(response, MHD_HTTP_HEADER_CONNECTION, "close");
   if (!ret)
   {
     MHD_destroy_response (response);
@@ -143,7 +145,6 @@ int CWebServer::AnswerToConnection(void *cls, struct MHD_Connection *connection,
   if (strURL.Left(4).Equals("/vfs"))
   {
     strURL = strURL.Right(strURL.length() - 5);
-    CURL::Decode(strURL);
     return CreateFileDownloadResponse(connection, strURL, methodType);
   }
 
@@ -479,48 +480,16 @@ bool CWebServer::IsStarted()
   return m_running;
 }
 
-void CWebServer::StringToBase64(const char *input, CStdString &output)
-{
-  const char *lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-  unsigned long l;
-  size_t length = strlen (input);
-  output = "";
-
-  for (unsigned int i = 0; i < length; i += 3)
-  {
-    l = (((unsigned long) input[i]) << 16)
-      | (((i + 1) < length) ? (((unsigned long) input[i + 1]) << 8) : 0)
-      | (((i + 2) < length) ? ((unsigned long) input[i + 2]) : 0);
-
-
-    output.push_back(lookup[(l >> 18) & 0x3F]);
-    output.push_back(lookup[(l >> 12) & 0x3F]);
-
-    if (i + 1 < length)
-      output.push_back(lookup[(l >> 6) & 0x3F]);
-    if (i + 2 < length)
-      output.push_back(lookup[l & 0x3F]);
-  }
-
-  int left = 3 - (length % 3);
-
-  if (length % 3)
-  {
-    for (int i = 0; i < left; i++)
-      output.push_back('=');
-  }
-}
-
 void CWebServer::SetCredentials(const CStdString &username, const CStdString &password)
 {
   CSingleLock lock (m_critSection);
   CStdString str = username + ":" + password;
 
-  StringToBase64(str.c_str(), m_Credentials64Encoded);
+  Base64::Encode(str.c_str(), m_Credentials64Encoded);
   m_needcredentials = !password.IsEmpty();
 }
 
-bool CWebServer::Download(const char *path, CVariant &result)
+bool CWebServer::PrepareDownload(const char *path, CVariant &details, std::string &protocol)
 {
   bool exists = false;
   CFile *file = new CFile();
@@ -534,17 +503,25 @@ bool CWebServer::Download(const char *path, CVariant &result)
 
   if (exists)
   {
-    string str = "vfs/";
-    str += path;
-    result["path"] = str;
+    protocol = "http";
+    string url = "vfs/";
+    CStdString strPath = path;
+    CURL::Encode(strPath);
+    url += strPath;
+    details["path"] = url;
   }
 
   return exists;
 }
 
+bool CWebServer::Download(const char *path, CVariant &result)
+{
+  return false;
+}
+
 int CWebServer::GetCapabilities()
 {
-  return Response | FileDownload;
+  return Response | FileDownloadRedirect;
 }
 
 const char *CWebServer::CreateMimeTypeFromExtension(const char *ext)
index 98805b2..5550455 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 /*
- *      Copyright (C) 2005-2010 Team XBMC
+ *      Copyright (C) 2005-2012 Team XBMC
  *      http://www.xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
@@ -22,7 +22,6 @@
 
 #include "system.h"
 #ifdef HAS_WEB_SERVER
-#include "utils/StdString.h"
 #include <sys/types.h>
 #include <sys/select.h>
 #include <sys/socket.h>
 #else
 #include <microhttpd.h>
 #endif
+
+#include "interfaces/json-rpc/IClient.h"
 #include "interfaces/json-rpc/ITransportLayer.h"
 #include "threads/CriticalSection.h"
+#include "utils/StdString.h"
 
 class CWebServer : public JSONRPC::ITransportLayer
 {
@@ -47,6 +49,8 @@ public:
   bool Stop();
   bool IsStarted();
   void SetCredentials(const CStdString &username, const CStdString &password);
+
+  virtual bool PrepareDownload(const char *path, CVariant &details, std::string &protocol);
   virtual bool Download(const char *path, CVariant &result);
   virtual int GetCapabilities();
 private:
@@ -92,7 +96,6 @@ private:
   static int CreateAddonsListResponse(struct MHD_Connection *connection);
 
   static int FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value);
-  static void StringToBase64(const char *input, CStdString &output);
 
   static const char *CreateMimeTypeFromExtension(const char *ext);
 
index b49fd22..cecc785 100644 (file)
@@ -21,6 +21,7 @@
 #include "system.h" //HAS_ZEROCONF define
 #include "Zeroconf.h"
 #include "settings/Settings.h"
+#include "settings/GUISettings.h"
 
 #ifdef _LINUX
 #ifndef __APPLE__
@@ -36,6 +37,7 @@
 #include "threads/CriticalSection.h"
 #include "threads/SingleLock.h"
 #include "threads/Atomics.h"
+#include "utils/JobManager.h"
 
 #ifndef HAS_ZEROCONF
 //dummy implementation used if no zeroconf is present
@@ -75,7 +77,8 @@ bool CZeroconf::PublishService(const std::string& fcr_identifier,
   if(!ret.second) //identifier exists
     return false;
   if(m_started)
-    return doPublishService(fcr_identifier, fcr_type, fcr_name, f_port, txt);
+    CJobManager::GetInstance().AddJob(new CPublish(fcr_identifier, info), NULL);
+
   //not yet started, so its just queued
   return true;
 }
@@ -101,12 +104,18 @@ bool CZeroconf::HasService(const std::string& fcr_identifier) const
 void CZeroconf::Start()
 {
   CSingleLock lock(*mp_crit_sec);
+  if(!IsZCdaemonRunning())
+  {
+    g_guiSettings.SetBool("services.zeroconf", false);
+    if (g_guiSettings.GetBool("services.airplay"))
+      g_guiSettings.SetBool("services.airplay", false);
+    return;
+  }
   if(m_started)
     return;
   m_started = true;
-  for(tServiceMap::const_iterator it = m_service_map.begin(); it != m_service_map.end(); ++it){
-    doPublishService(it->first, it->second.type, it->second.name, it->second.port, it->second.txt);
-  }
+
+  CJobManager::GetInstance().AddJob(new CPublish(m_service_map), NULL);
 }
 
 void CZeroconf::Stop()
@@ -146,3 +155,20 @@ void CZeroconf::ReleaseInstance()
   smp_instance = 0;
 }
 
+CZeroconf::CPublish::CPublish(const std::string& fcr_identifier, const PublishInfo& pubinfo)
+{
+  m_servmap.insert(std::make_pair(fcr_identifier, pubinfo));
+}
+
+CZeroconf::CPublish::CPublish(const tServiceMap& servmap) 
+  : m_servmap(servmap)
+{
+}
+
+bool CZeroconf::CPublish::DoWork()
+{
+  for(tServiceMap::const_iterator it = m_servmap.begin(); it != m_servmap.end(); ++it)
+    CZeroconf::GetInstance()->doPublishService(it->first, it->second.type, it->second.name, it->second.port, it->second.txt);
+
+  return true;
+}
\ No newline at end of file
index 2a134bf..3a6122b 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <string>
 #include <map>
+#include "utils/Job.h"
 
 class CCriticalSection;
 /// this class provides support for zeroconf
@@ -91,6 +92,9 @@ protected:
   //removes all services (short hand for "for i in m_service_map doRemoveService(i)")
   virtual void doStop() = 0;
 
+  // return true if the zeroconf daemon is running
+  virtual bool IsZCdaemonRunning() { return  true; }
+
 protected:
   //singleton: we don't want to get instantiated nor copied or deleted from outside
   CZeroconf();
@@ -114,4 +118,16 @@ private:
   //protects singleton creation/destruction
   static long sm_singleton_guard;
   static CZeroconf* smp_instance;
+
+  class CPublish : public CJob
+  {
+  public:
+    CPublish(const std::string& fcr_identifier, const PublishInfo& pubinfo);
+    CPublish(const tServiceMap& servmap);
+
+    bool DoWork();
+
+  private:
+    tServiceMap m_servmap;
+  };
 };
index 238111d..443b6ea 100644 (file)
@@ -399,41 +399,21 @@ void Xcddb::addTitle(const char *buffer)
   }
 
   // track artist" / "track title
-  char artist[1024];
-  char title[1024];
-  unsigned int len = (unsigned int)strlen(value);
-  bool found = false;
-  unsigned int index;
-  for (index = 0;index < len;index++)
-  {
-    if ((index + 2) <= len && value[index] == ' ' && value[index + 1] == '/' && value[index + 2] == ' ')
-    {
-      // Jep found
-      found = true;
-      break;
-    }
-  }
-  if (found)
+  CStdString strValue = value;
+  CStdStringArray values;
+  StringUtils::SplitString(value, " / ", values);
+  if (values.size() > 1)
   {
-    strncpy(artist, value, index);
-    artist[index] = '\0';
-    strcpy(title, value + index + 3);
+    g_charsetConverter.unknownToUTF8(values[0]);
+    m_mapArtists[trk_nr] += values[0];
+    g_charsetConverter.unknownToUTF8(values[1]);
+    m_mapTitles[trk_nr] += values[1];
   }
   else
   {
-    artist[0] = '\0';
-    strcpy(title, value);
+    g_charsetConverter.unknownToUTF8(values[0]);
+    m_mapTitles[trk_nr] += values[0];
   }
-
-  CStdString strArtist=artist;
-  // You never know if you really get UTF-8 strings from cddb
-  g_charsetConverter.unknownToUTF8(artist, strArtist);
-  m_mapArtists[trk_nr] += strArtist;
-
-  CStdString strTitle=title;
-  // You never know if you really get UTF-8 strings from cddb
-  g_charsetConverter.unknownToUTF8(title, strTitle);
-  m_mapTitles[trk_nr] += strTitle;
 }
 
 //-------------------------------------------------------------------------------------------------------------------
index dff5116..cb08d1b 100644 (file)
@@ -108,14 +108,8 @@ void CScrobbler::AddSong(const MUSIC_INFO::CMusicInfoTag &tag, bool lastfmradio)
   CURL::Encode(m_CurrentTrack.strMusicBrainzID);
 
   m_bNotified = false;
-  if (lastfmradio)
-    m_bSubmitted = !g_guiSettings.GetBool("scrobbler.lastfmsubmitradio");
-  else
-  {
-    if ((m_CurrentTrack.length > SCROBBLER_MIN_DURATION) ||
-        !m_CurrentTrack.strMusicBrainzID.IsEmpty())
-      m_bSubmitted = false;
-  }
+  m_bSubmitted = !((lastfmradio && g_guiSettings.GetBool("scrobbler.lastfmsubmitradio")) ||
+      (!lastfmradio && g_guiSettings.GetBool("scrobbler.lastfmsubmit") && (m_CurrentTrack.length > SCROBBLER_MIN_DURATION || !m_CurrentTrack.strMusicBrainzID.IsEmpty())));
 }
 
 void CScrobbler::UpdateStatus()
index a419d59..927f87c 100644 (file)
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-#ifndef __APPLE__
-#include <linux/if.h>
-#include <linux/wireless.h>
-#include <linux/sockios.h>
+#if defined(TARGET_LINUX)
+  #include <linux/if.h>
+  #include <linux/wireless.h>
+  #include <linux/sockios.h>
 #endif
 #include <errno.h>
 #include <resolv.h>
-#if defined(__APPLE__)
-#include <sys/sockio.h>
-#include <net/if.h>
-#include <net/if_dl.h>
-#include <ifaddrs.h>
+#if defined(TARGET_DARWIN)
+  #include <sys/sockio.h>
+  #include <net/if.h>
+  #include <net/if_dl.h>
+  #include <ifaddrs.h>
 #else
-#include <net/if_arp.h>
+  #include <net/if_arp.h>
 #endif
 #include "PlatformDefs.h"
 #include "NetworkLinux.h"
@@ -64,7 +64,7 @@ CStdString& CNetworkInterfaceLinux::GetName(void)
 
 bool CNetworkInterfaceLinux::IsWireless()
 {
-#ifdef __APPLE__
+#if defined(TARGET_DARWIN)
   return false;
 #else
   struct iwreq wrq;
@@ -144,7 +144,7 @@ CStdString CNetworkInterfaceLinux::GetCurrentWirelessEssId(void)
 {
    CStdString result = "";
 
-#ifndef __APPLE__
+#if defined(TARGET_LINUX)
    char essid[IW_ESSID_MAX_SIZE + 1];
    memset(&essid, 0, sizeof(essid));
 
@@ -166,7 +166,24 @@ CStdString CNetworkInterfaceLinux::GetCurrentDefaultGateway(void)
 {
    CStdString result = "";
 
-#ifndef __APPLE__
+#if defined(TARGET_DARWIN)
+  FILE* pipe = popen("echo \"show State:/Network/Global/IPv4\" | scutil | grep Router", "r");
+  if (pipe)
+  {
+    CStdString tmpStr;
+    char buffer[256] = {'\0'};
+    if (fread(buffer, sizeof(char), sizeof(buffer), pipe) > 0 && !ferror(pipe))
+    {
+      tmpStr = buffer;
+      result = tmpStr.Mid(11);
+    }
+    else
+    {
+      CLog::Log(LOGWARNING, "Unable to determine gateway");
+    }
+    pclose(pipe);
+  }
+#else
    FILE* fp = fopen("/proc/net/route", "r");
    if (!fp)
    {
@@ -242,7 +259,7 @@ std::vector<CNetworkInterface*>& CNetworkLinux::GetInterfaceList(void)
    return m_interfaces;
 }
 
-#if defined(__APPLE__) && defined(__arm__)
+#if defined(TARGET_DARWIN_IOS)
 // on iOS, overwrite the GetFirstConnectedInterface and requery
 // the interface list if no connected device is found
 // this fixes a bug when no network is available after first start of xbmc after reboot
@@ -267,9 +284,9 @@ CNetworkInterface* CNetworkLinux::GetFirstConnectedInterface(void)
 CStdString CNetworkLinux::GetMacAddress(CStdString interfaceName)
 {
   CStdString result = "00:00:00:00:00:00";
-#ifdef __APPLE__
+#if defined(TARGET_DARWIN)
 
-#if ! defined(IFT_ETHER)
+#if !defined(IFT_ETHER)
 #define IFT_ETHER 0x6/* Ethernet CSMACD */
 #endif
   const struct sockaddr_dl* dlAddr = NULL;
@@ -333,7 +350,7 @@ void CNetworkLinux::queryInterfaceList()
   CStdString macAddr = "";
   m_interfaces.clear();
 
-#ifdef __APPLE__
+#if defined(TARGET_DARWIN)
 
    // Query the list of interfaces.
    struct ifaddrs *list;
@@ -394,7 +411,26 @@ void CNetworkLinux::queryInterfaceList()
 std::vector<CStdString> CNetworkLinux::GetNameServers(void)
 {
    std::vector<CStdString> result;
-#ifndef __APPLE__
+
+#if defined(TARGET_DARWIN)
+  //only finds the primary dns (0 :)
+  FILE* pipe = popen("echo \"show State:/Network/Global/DNS\" | scutil | grep \"0 :\" | tail -n1", "r");
+  if (pipe)
+  {
+    CStdString tmpStr;
+    char buffer[256] = {'\0'};
+    if (fread(buffer, sizeof(char), sizeof(buffer), pipe) > 0 && !ferror(pipe))
+    {
+      tmpStr = buffer;
+      result.push_back(tmpStr.Mid(8));
+    }
+    else
+    {
+      CLog::Log(LOGWARNING, "Unable to determine nameserver");
+    }
+    pclose(pipe);
+  } 
+#else
    res_init();
 
    for (int i = 0; i < _res.nscount; i ++)
@@ -430,7 +466,7 @@ std::vector<NetworkAccessPoint> CNetworkInterfaceLinux::GetAccessPoints(void)
    if (!IsWireless())
       return result;
 
-#ifndef __APPLE__
+#if defined(TARGET_LINUX)
    // Query the wireless extentsions version number. It will help us when we
    // parse the resulting events
    struct iwreq iwr;
@@ -616,7 +652,7 @@ void CNetworkInterfaceLinux::GetSettings(NetworkAssignment& assignment, CStdStri
    encryptionMode = ENC_NONE;
    assignment = NETWORK_DISABLED;
 
-#ifndef __APPLE__
+#if defined(TARGET_LINUX)
    FILE* fp = fopen("/etc/network/interfaces", "r");
    if (!fp)
    {
@@ -692,7 +728,7 @@ void CNetworkInterfaceLinux::GetSettings(NetworkAssignment& assignment, CStdStri
 
 void CNetworkInterfaceLinux::SetSettings(NetworkAssignment& assignment, CStdString& ipAddress, CStdString& networkMask, CStdString& defaultGateway, CStdString& essId, CStdString& key, EncMode& encryptionMode)
 {
-#ifndef __APPLE__
+#if defined(TARGET_LINUX)
    FILE* fr = fopen("/etc/network/interfaces", "r");
    if (!fr)
    {
index a84c335..332675f 100644 (file)
@@ -344,26 +344,6 @@ void CZeroconfAvahi::shutdownCallback(AvahiTimeout *fp_e, void *fp_data)
   }
 }
 
-std::string CZeroconfAvahi::assemblePublishedName(const std::string& fcr_prefix)
-{
-  std::stringstream ss;
-  ss << fcr_prefix << '@';
-
-  // get our hostname
-  char lp_hostname[256];
-  if (gethostname(lp_hostname, sizeof(lp_hostname)))
-  {
-    //TODO
-    CLog::Log(LOGERROR, "CZeroconfAvahi::assemblePublishedName: could not get hostname.. hm... waaaah! PANIC!");
-    ss << "DummyThatCantResolveItsName";
-  }
-  else
-  {
-    ss << lp_hostname;
-  }
-  return ss.str();
-}
-
 bool CZeroconfAvahi::createClient()
 {
     if (mp_client)
@@ -407,7 +387,7 @@ void CZeroconfAvahi::addService(tServiceMap::mapped_type fp_service_info, AvahiC
   if (avahi_entry_group_is_empty(fp_service_info->mp_group))
   {
     if ((ret = avahi_entry_group_add_service_strlst(fp_service_info->mp_group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, AvahiPublishFlags(0),
-                                             assemblePublishedName(fp_service_info->m_name).c_str(),
+                                             fp_service_info->m_name.c_str(),
                                              fp_service_info->m_type.c_str(), NULL, NULL, fp_service_info->m_port, fp_service_info->mp_txt) < 0))
     {
       if (ret == AVAHI_ERR_COLLISION)
index 082b550..3198cc2 100644 (file)
@@ -62,9 +62,6 @@ private:
   //shutdown callback; works around a problem in avahi < 0.6.24 see destructor for details
   static void shutdownCallback(AvahiTimeout *fp_e, void *);
 
-  ///helper to assemble the announced name
-  std::string assemblePublishedName(const std::string& fcr_prefix);
-
   ///creates the avahi client;
   ///@return true on success
   bool createClient();
index 0ef6eb5..ff24f16 100644 (file)
@@ -54,7 +54,7 @@ bool CZeroconfOSX::doPublishService(const std::string& fcr_identifier,
             fcr_type.c_str(), fcr_name.c_str(), f_port);
 
   CFStringRef name = CFStringCreateWithCString (NULL,
-                                                assemblePublishedName(fcr_name).c_str(),
+                                                fcr_name.c_str(),
                                                 kCFStringEncodingUTF8
                                                 );
   CFStringRef type = CFStringCreateWithCString (NULL,
@@ -171,24 +171,3 @@ void CZeroconfOSX::cancelRegistration(CFNetServiceRef theService)
   CFNetServiceCancel(theService);
   CFRelease(theService);
 }
-
-
-std::string CZeroconfOSX::assemblePublishedName(const std::string& fcr_given_name)
-{
-  std::stringstream ss;
-  ss << fcr_given_name << '@';
-
-  // get our hostname
-  char lp_hostname[256];
-  if (gethostname(lp_hostname, sizeof(lp_hostname)))
-  {
-    //TODO
-    CLog::Log(LOGERROR, "CZeroconfAvahi::assemblePublishedName: could not get hostname.. hm... waaaah! PANIC!");
-    ss << "DummyThatCantResolveItsName";
-  }
-  else
-  {
-    ss << lp_hostname;
-  }
-  return ss.str();
-}
\ No newline at end of file
index 8a3f529..cc393a3 100644 (file)
@@ -52,8 +52,6 @@ protected:
 private:
   static void registerCallback(CFNetServiceRef theService, CFStreamError* error, void* info);
   void cancelRegistration(CFNetServiceRef theService);
-  //returns the string that gets published (a.k.a. add the hostname)
-  std::string assemblePublishedName(const std::string& fcr_given_name);
 
   //CF runloop ref; we're using main-threads runloop
   CFRunLoopRef m_runloop;
diff --git a/xbmc/network/websocket/Makefile b/xbmc/network/websocket/Makefile
new file mode 100644 (file)
index 0000000..f3d9d41
--- /dev/null
@@ -0,0 +1,9 @@
+SRCS=WebSocket.cpp \
+     WebSocketManager.cpp \
+     WebSocketV8.cpp \
+     WebSocketV13.cpp \
+
+LIB=websocket.a
+
+include ../../../Makefile.include
+-include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS)))
diff --git a/xbmc/network/websocket/WebSocket.cpp b/xbmc/network/websocket/WebSocket.cpp
new file mode 100644 (file)
index 0000000..8b6a3a7
--- /dev/null
@@ -0,0 +1,432 @@
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <string>
+#include <sstream>
+
+#include "WebSocket.h"
+#include "utils/EndianSwap.h"
+#include "utils/log.h"
+#include "utils/HttpParser.h"
+#include "utils/Base64.h"
+#include "utils/StdString.h"
+#include "utils/StringUtils.h"
+#include "utils/HttpResponse.h"
+
+#define MASK_FIN      0x80
+#define MASK_RSV1     0x40
+#define MASK_RSV2     0x20
+#define MASK_RSV3     0x10
+#define MASK_RSV      (MASK_RSV1 | MASK_RSV2 | MASK_RSV3)
+#define MASK_OPCODE   0x0F
+#define MASK_MASK     0x80
+#define MASK_LENGTH   0x7F
+
+#define CONTROL_FRAME 0x08
+
+#define LENGTH_MIN    0x2
+
+using namespace std;
+
+CWebSocketFrame::CWebSocketFrame(const char* data, uint64_t length)
+{
+  reset();
+
+  if (data == NULL || length < LENGTH_MIN)
+    return;
+
+  m_free = false;
+  m_data = data;
+  m_lengthFrame = length;
+
+  // Get the FIN flag
+  m_final = ((m_data[0] & MASK_FIN) == MASK_FIN);
+  // Get the RSV1 - RSV3 flags
+  m_extension |= m_data[0] & MASK_RSV1;
+  m_extension |= (m_data[0] & MASK_RSV2) << 1;
+  m_extension |= (m_data[0] & MASK_RSV3) << 2;
+  // Get the opcode
+  m_opcode = (WebSocketFrameOpcode)(m_data[0] & MASK_OPCODE);
+  if (m_opcode >= WebSocketUnknownFrame)
+  {
+    CLog::Log(LOGINFO, "WebSocket: Frame with invalid opcode %2X received", m_opcode);
+    reset();
+    return;
+  }
+  if ((m_opcode & CONTROL_FRAME) == CONTROL_FRAME && !m_final)
+  {
+    CLog::Log(LOGINFO, "WebSocket: Fragmented control frame (opcode %2X) received", m_opcode);
+    reset();
+    return;
+  }
+
+  // Get the MASK flag
+  m_masked = ((m_data[1] & MASK_MASK) == MASK_MASK);
+
+  // Get the playload length
+  m_length = (uint64_t)(m_data[1] & MASK_LENGTH);
+  if ((m_length <= 125 && length  < m_length + LENGTH_MIN) ||
+      (m_length == 126 && length < LENGTH_MIN + 2) ||
+      (m_length == 127 && length < LENGTH_MIN + 8))
+  {
+    CLog::Log(LOGINFO, "WebSocket: Frame with invalid length received");
+    reset();
+    return;
+  }
+
+  if (IsControlFrame() && (m_length > 125 || !m_final))
+  {
+    CLog::Log(LOGWARNING, "WebSocket: Invalid control frame received");
+    reset();
+    return;
+  }
+
+  int offset = 0;
+  if (m_length == 126)
+  {
+    m_length = (uint64_t)Endian_SwapBE16(*(uint16_t *)(m_data + 2));
+    offset = 2;
+  }
+  else if (m_length == 127)
+  {
+    m_length = Endian_SwapBE64(*(uint64_t *)(m_data + 2));
+    offset = 8;
+  }
+
+  if (length < LENGTH_MIN + offset + m_length)
+  {
+    CLog::Log(LOGINFO, "WebSocket: Frame with invalid length received");
+    reset();
+    return;
+  }
+
+  // Get the mask
+  if (m_masked)
+  {
+    m_mask = *(uint32_t *)(m_data + LENGTH_MIN + offset);
+    offset += 4;
+  }
+
+  if (length != LENGTH_MIN + offset + m_length)
+  {
+    CLog::Log(LOGINFO, "WebSocket: Frame with invalid length received");
+    reset();
+    return;
+  }
+
+  // Get application data
+  if (m_length > 0)
+    m_applicationData = (char *)(m_data + LENGTH_MIN + offset);
+  else
+    m_applicationData = NULL;
+
+  // Unmask the application data if necessary
+  if (m_masked)
+  {
+    for (uint64_t index = 0; index < m_length; index++)
+      m_applicationData[index] = m_applicationData[index] ^ ((char *)(&m_mask))[index % 4];
+  }
+
+  m_valid = true;
+}
+
+CWebSocketFrame::CWebSocketFrame(WebSocketFrameOpcode opcode, const char* data /* = NULL */, uint32_t length /* = 0 */,
+                                 bool final /* = true */, bool masked /* = false */, int32_t mask /* = 0 */, int8_t extension /* = 0 */)
+{
+  reset();
+
+  if (opcode >= WebSocketUnknownFrame)
+    return;
+
+  m_free = true;
+  m_opcode = opcode;
+
+  if (length >= 0)
+    m_length = length;
+
+  m_masked = masked;
+  m_mask = mask;
+  m_final = final;
+  m_extension = extension;
+
+  string buffer;
+  char dataByte = 0;
+
+  // Set the FIN flag
+  if (m_final)
+    dataByte |= MASK_FIN;
+
+  // Set RSV1 - RSV3 flags
+  if (m_extension != 0)
+    dataByte |= (m_extension << 4) & MASK_RSV;
+
+  // Set opcode flag
+  dataByte |= opcode & MASK_OPCODE;
+
+  buffer.push_back(dataByte);
+  dataByte = 0;
+
+  // Set MASK flag
+  if (m_masked)
+    dataByte |= MASK_MASK;
+
+  // Set payload length
+  if (m_length < 126)
+  {
+    dataByte |= m_length & MASK_LENGTH;
+    buffer.push_back(dataByte);
+  }
+  else if (m_length <= 65535)
+  {
+    dataByte |= 126 & MASK_LENGTH;
+    buffer.push_back(dataByte);
+
+    uint16_t dataLength = Endian_SwapBE16((uint16_t)m_length);
+    buffer.append((const char*)&dataLength, 2);
+  }
+  else
+  {
+    dataByte |= 127 & MASK_LENGTH;
+    buffer.push_back(dataByte);
+    
+    uint64_t dataLength = Endian_SwapBE64(m_length);
+    buffer.append((const char*)&dataLength, 8);
+  }
+
+  uint64_t applicationDataOffset = 0;
+  if (data)
+  {
+    // Set masking key
+    if (m_masked)
+    {
+      buffer.append((char *)&m_mask, sizeof(m_mask));
+      applicationDataOffset = buffer.size();
+
+      for (uint64_t index = 0; index < m_length; index++)
+        buffer.push_back(data[index] ^ ((char *)(&m_mask))[index % 4]);
+    }
+    else
+    {
+      applicationDataOffset = buffer.size();
+      buffer.append(data, (unsigned int)length);
+    }
+  }
+
+  // Get the whole data
+  m_lengthFrame = buffer.size();
+  m_data = new char[(uint32_t)m_lengthFrame];
+  strncpy((char *)m_data, buffer.c_str(), (uint32_t)m_lengthFrame);
+
+  if (data)
+  {
+    m_applicationData = (char *)m_data;
+    m_applicationData += applicationDataOffset;
+  }
+
+  m_valid = true;
+}
+
+CWebSocketFrame::~CWebSocketFrame()
+{
+  if (!m_valid)
+    return;
+
+  if (m_free && m_data != NULL)
+  {
+    delete m_data;
+    m_data = NULL;
+  }
+}
+
+void CWebSocketFrame::reset()
+{
+  m_free = false;
+  m_data = NULL;
+  m_lengthFrame = 0;
+  m_length = 0;
+  m_valid = false;
+  m_final = false;
+  m_extension = 0;
+  m_opcode = WebSocketUnknownFrame;
+  m_masked = false;
+  m_mask = 0;
+  m_applicationData = NULL;
+}
+
+CWebSocketMessage::CWebSocketMessage()
+{
+  Clear();
+}
+
+CWebSocketMessage::~CWebSocketMessage()
+{
+  for (unsigned int index = 0; index < m_frames.size(); index++)
+    delete m_frames[index];
+
+  m_frames.clear();
+}
+
+bool CWebSocketMessage::AddFrame(const CWebSocketFrame *frame)
+{
+  if (!frame->IsValid() || m_complete)
+    return false;
+
+  if (frame->IsFinal())
+    m_complete = true;
+  else
+    m_fragmented = true;
+
+  m_frames.push_back(frame);
+
+  return true;
+}
+
+void CWebSocketMessage::Clear()
+{
+  m_fragmented = false;
+  m_complete = false;
+
+  m_frames.clear();
+}
+
+const CWebSocketMessage* CWebSocket::Handle(const char *buffer, size_t length, bool &send)
+{
+  send = false;
+
+  switch (m_state)
+  {
+    case WebSocketStateConnected:
+    {
+      CWebSocketFrame *frame = GetFrame(buffer, length);
+      if (!frame->IsValid())
+      {
+        CLog::Log(LOGINFO, "WebSocket: Invalid frame received");
+        delete frame;
+        return NULL;
+      }
+
+      if (frame->IsControlFrame())
+      {
+        if (!frame->IsFinal())
+        {
+          delete frame;
+          return NULL;
+        }
+
+        CWebSocketMessage *msg = NULL;
+        switch (frame->GetOpcode())
+        {
+          case WebSocketPing:
+            msg = GetMessage();
+            if (msg != NULL)
+              msg->AddFrame(Pong(frame->GetApplicationData()));
+            break;
+            
+          case WebSocketConnectionClose:
+            CLog::Log(LOGINFO, "WebSocket: connection closed by client");
+
+            msg = GetMessage();
+            if (msg != NULL)
+              msg->AddFrame(Close());
+
+            m_state = WebSocketStateClosed;
+            break;
+
+          case WebSocketContinuationFrame:
+          case WebSocketTextFrame:
+          case WebSocketBinaryFrame:
+          case WebSocketPong:
+          case WebSocketUnknownFrame:
+          default:
+            break;
+        }
+
+        delete frame;
+
+        if (msg != NULL)
+          send = true;
+
+        return msg;
+      }
+
+      if (m_message == NULL && (m_message = GetMessage()) == NULL)
+      {
+        CLog::Log(LOGINFO, "WebSocket: Could not allocate a new websocket message");
+        delete frame;
+        return NULL;
+      }
+
+      m_message->AddFrame(frame);
+      if (!m_message->IsComplete())
+        return NULL;
+
+      CWebSocketMessage *msg = m_message;
+      m_message = NULL;
+      return msg;
+    }
+
+    case WebSocketStateClosing:
+    {
+      CWebSocketFrame *frame = GetFrame(buffer, length);
+      if (!frame->IsValid() || frame->GetOpcode() == WebSocketConnectionClose)
+      {
+        CLog::Log(LOGINFO, "WebSocket: Invalid or unexpected frame received (only closing handshake expected)");
+        delete frame;
+        return NULL;
+      }
+
+      m_state = WebSocketStateClosed;
+      return NULL;
+    }
+
+    case WebSocketStateNotConnected:
+    case WebSocketStateClosed:
+    case WebSocketStateHandshaking:
+    default:
+      CLog::Log(LOGINFO, "WebSocket: No frame expected in the current state");
+      return NULL;
+  }
+
+  return NULL;
+}
+
+const CWebSocketMessage* CWebSocket::Send(WebSocketFrameOpcode opcode, const char* data /* = NULL */, uint32_t length /* = 0 */)
+{
+  CWebSocketFrame *frame = GetFrame(opcode, data, length);
+  if (frame == NULL || !frame->IsValid())
+  {
+    CLog::Log(LOGINFO, "WebSocket: Trying to send an invalid frame");
+    return NULL;
+  }
+
+  CWebSocketMessage *msg = GetMessage();
+  if (msg == NULL)
+  {
+    CLog::Log(LOGINFO, "WebSocket: Could not allocate a message");
+    return NULL;
+  }
+
+  msg->AddFrame(frame);
+  if (msg->IsComplete())
+    return msg;
+
+  return NULL;
+}
diff --git a/xbmc/network/websocket/WebSocket.h b/xbmc/network/websocket/WebSocket.h
new file mode 100644 (file)
index 0000000..69556ae
--- /dev/null
@@ -0,0 +1,141 @@
+#pragma once
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+#include <stdint.h>
+#include <vector>
+
+enum WebSocketFrameOpcode
+{
+  WebSocketContinuationFrame  = 0x00,
+  WebSocketTextFrame          = 0x01,
+  WebSocketBinaryFrame        = 0x02,
+  //0x3 - 0x7 are reserved for non-control frames
+  WebSocketConnectionClose    = 0x08,
+  WebSocketPing               = 0x09,
+  WebSocketPong               = 0x0A,
+  //0xB - 0xF are reserved for control frames
+  WebSocketUnknownFrame       = 0x10
+};
+
+enum WebSocketState
+{
+  WebSocketStateNotConnected    = 0,
+  WebSocketStateHandshaking     = 1,
+  WebSocketStateConnected       = 2,
+  WebSocketStateClosing         = 3,
+  WebSocketStateClosed          = 4
+};
+
+enum WebSocketCloseReason
+{
+  WebSocketCloseNormal          = 1000,
+  WebSocketCloseLeaving         = 1001,
+  WebSocketCloseProtocolError   = 1002,
+  WebSocketCloseInvalidData     = 1003,
+  WebSocketCloseFrameTooLarge   = 1004,
+  // Reserved status code       = 1005,
+  // Reserved status code       = 1006,
+  WebSocketCloseInvalidUtf8     = 1007
+};
+
+class CWebSocketFrame
+{
+public:
+  CWebSocketFrame(const char* data, uint64_t length);
+  CWebSocketFrame(WebSocketFrameOpcode opcode, const char* data = NULL, uint32_t length = 0, bool final = true, bool masked = false, int32_t mask = 0, int8_t extension = 0);
+  virtual ~CWebSocketFrame();
+
+  virtual bool IsValid() const { return m_valid; }
+  virtual uint64_t GetFrameLength() const { return m_lengthFrame; }
+  virtual bool IsFinal() const { return m_final; }
+  virtual int8_t GetExtension() const { return m_extension; }
+  virtual WebSocketFrameOpcode GetOpcode() const { return m_opcode; }
+  virtual bool IsControlFrame() const { return (m_valid && (m_opcode & 0x8) == 0x8); }
+  virtual bool IsMasekd() const { return m_masked; }
+  virtual uint64_t GetLength() const { return m_length; }
+  virtual int32_t GetMask() const { return m_mask; }
+  virtual const char* GetFrameData() const { return m_data; }
+  virtual const char* GetApplicationData() const { return m_applicationData; }
+
+protected:
+  bool m_free;
+  const char *m_data;
+  uint64_t m_lengthFrame;
+  uint64_t m_length;
+  bool m_valid;
+  bool m_final;
+  int8_t m_extension;
+  WebSocketFrameOpcode m_opcode;
+  bool m_masked;
+  int32_t m_mask;
+  char *m_applicationData;
+
+private:
+  void reset();
+};
+
+class CWebSocketMessage
+{
+public:
+  CWebSocketMessage();
+  virtual ~CWebSocketMessage();
+
+  virtual bool IsFragmented() const { return m_fragmented; }
+  virtual bool IsComplete() const { return m_complete; }
+
+  virtual bool AddFrame(const CWebSocketFrame* frame);
+  virtual const std::vector<const CWebSocketFrame *>& GetFrames() const { return m_frames; }
+
+  virtual void Clear();
+
+protected:
+  std::vector<const CWebSocketFrame *> m_frames;
+  bool m_fragmented;
+  bool m_complete;
+};
+
+class CWebSocket
+{
+public:
+  CWebSocket() { m_state = WebSocketStateNotConnected; m_message = NULL; }
+  virtual ~CWebSocket() { if (m_message) delete m_message; };
+
+  int GetVersion() { return m_version; }
+  WebSocketState GetState() { return m_state; }
+
+  virtual bool Handshake(const char* data, size_t length, std::string &response) = 0;
+  virtual const CWebSocketMessage* Handle(const char *buffer, size_t length, bool &send); // TODO
+  virtual const CWebSocketMessage* Send(WebSocketFrameOpcode opcode, const char* data = NULL, uint32_t length = 0);
+  virtual const CWebSocketFrame* Ping(const char* data = NULL) const = 0;
+  virtual const CWebSocketFrame* Pong(const char* data = NULL) const = 0;
+  virtual const CWebSocketFrame* Close(WebSocketCloseReason reason = WebSocketCloseNormal, const std::string &message = "") = 0;
+  virtual void Fail() = 0;
+
+protected:
+  int m_version;
+  WebSocketState m_state;
+  CWebSocketMessage *m_message;
+
+  virtual CWebSocketFrame* GetFrame(const char* data, uint64_t length) = 0;
+  virtual CWebSocketFrame* GetFrame(WebSocketFrameOpcode opcode, const char* data = NULL, uint32_t length = 0, bool final = true, bool masked = false, int32_t mask = 0, int8_t extension = 0) = 0;
+  virtual CWebSocketMessage* GetMessage() = 0;
+};
diff --git a/xbmc/network/websocket/WebSocketManager.cpp b/xbmc/network/websocket/WebSocketManager.cpp
new file mode 100644 (file)
index 0000000..1fd15ad
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <string>
+
+#include "WebSocketManager.h"
+#include "WebSocket.h"
+#include "WebSocketV8.h"
+#include "WebSocketV13.h"
+#include "utils/HttpParser.h"
+#include "utils/HttpResponse.h"
+#include "utils/log.h"
+
+#define WS_HTTP_METHOD          "GET"
+#define WS_HTTP_TAG             "HTTP/"
+#define WS_SUPPORTED_VERSIONS   "8, 13"
+
+#define WS_HEADER_VERSION       "Sec-WebSocket-Version"
+#define WS_HEADER_VERSION_LC    "sec-websocket-version"     // "Sec-WebSocket-Version"
+
+using namespace std;
+
+CWebSocket* CWebSocketManager::Handle(const char* data, unsigned int length, string &response)
+{
+  if (data == NULL || length <= 0)
+    return NULL;
+
+  HttpParser header;
+  HttpParser::status_t status = header.addBytes(data, length);
+  switch (status)
+  {
+    case HttpParser::Error:
+    case HttpParser::Incomplete:
+      response.clear();
+      return NULL;
+
+    case HttpParser::Done:
+    default:
+      break;
+  }
+
+  // There must be a "Sec-WebSocket-Version" header
+  const char* value = header.getValue(WS_HEADER_VERSION_LC);
+  if (value == NULL)
+  {
+    CLog::Log(LOGINFO, "WebSocket: missing Sec-WebSocket-Version");
+    CHttpResponse httpResponse(HTTP::Get, HTTP::BadRequest, HTTP::Version1_1);
+    char *responseBuffer;
+    int responseLength = httpResponse.Create(responseBuffer);
+    response = std::string(responseBuffer, responseLength);
+
+    return NULL;
+  }
+  
+  CWebSocket *websocket = NULL;
+  if (strncmp(value, "8", 1) == 0)
+    websocket = new CWebSocketV8();
+  else if (strncmp(value, "13", 2) == 0)
+    websocket = new CWebSocketV13();
+
+  if (websocket == NULL)
+  {
+    CLog::Log(LOGINFO, "WebSocket: Unsupported Sec-WebSocket-Version %s", value);
+    CHttpResponse httpResponse(HTTP::Get, HTTP::UpgradeRequired, HTTP::Version1_1);
+    httpResponse.AddHeader(WS_HEADER_VERSION, WS_SUPPORTED_VERSIONS);
+    char *responseBuffer;
+    int responseLength = httpResponse.Create(responseBuffer);
+    response = std::string(responseBuffer, responseLength);
+
+    return NULL;
+  }
+
+  if (websocket->Handshake(data, length, response))
+    return websocket;
+
+  return NULL;
+}
diff --git a/xbmc/network/websocket/WebSocketManager.h b/xbmc/network/websocket/WebSocketManager.h
new file mode 100644 (file)
index 0000000..4d20306
--- /dev/null
@@ -0,0 +1,29 @@
+#pragma once
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+class CWebSocket;
+
+class CWebSocketManager
+{
+public:
+  static CWebSocket* Handle(const char* data, unsigned int length, std::string &response);
+};
diff --git a/xbmc/network/websocket/WebSocketV13.cpp b/xbmc/network/websocket/WebSocketV13.cpp
new file mode 100644 (file)
index 0000000..83c8314
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <string>
+#include <sstream>
+
+#include "WebSocketV13.h"
+#include "WebSocket.h"
+#include "utils/Base64.h"
+#include "utils/CharsetConverter.h"
+#include "utils/HttpParser.h"
+#include "utils/HttpResponse.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+
+#define WS_HTTP_METHOD          "GET"
+#define WS_HTTP_TAG             "HTTP/"
+
+#define WS_HEADER_UPGRADE       "Upgrade"
+#define WS_HEADER_UPGRADE_LC    "upgrade"
+#define WS_HEADER_CONNECTION    "Connection"
+#define WS_HEADER_CONNECTION_LC "connection"
+
+#define WS_HEADER_KEY_LC        "sec-websocket-key"         // "Sec-WebSocket-Key"
+#define WS_HEADER_ACCEPT        "Sec-WebSocket-Accept"
+#define WS_HEADER_PROTOCOL      "Sec-WebSocket-Protocol"
+#define WS_HEADER_PROTOCOL_LC   "sec-websocket-protocol"    // "Sec-WebSocket-Protocol"
+
+#define WS_PROTOCOL_JSONRPC     "jsonrpc.xbmc.org"
+#define WS_HEADER_UPGRADE_VALUE "websocket"
+
+using namespace std;
+
+bool CWebSocketV13::Handshake(const char* data, size_t length, std::string &response)
+{
+  string strHeader(data, length);
+  const char *value;
+  HttpParser header;
+  if (header.addBytes(data, length) != HttpParser::Done)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: incomplete handshake received");
+    return false;
+  }
+
+  // The request must be GET
+  value = header.getMethod();
+  if (value == NULL || strnicmp(value, WS_HTTP_METHOD, strlen(WS_HTTP_METHOD)) != 0)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: invalid HTTP method received (GET expected)");
+    return false;
+  }
+
+  // The request must be HTTP/1.1 or higher
+  int pos;
+  if ((pos = strHeader.find(WS_HTTP_TAG)) == string::npos)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: invalid handshake received");
+    return false;
+  }
+
+  pos += strlen(WS_HTTP_TAG);
+  istringstream converter(strHeader.substr(pos, strHeader.find_first_of(" \r\n\t", pos) - pos));
+  float fVersion;
+  converter >> fVersion;
+
+  if (fVersion < 1.1f)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: invalid HTTP version %f (1.1 or higher expected)", fVersion);
+    return false;
+  }
+
+  string websocketKey, websocketProtocol;
+  // There must be a "Host" header
+  value = header.getValue("host");
+  if (value == NULL || strlen(value) == 0)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: \"Host\" header missing");
+    return true;
+  }
+
+  // There must be a "Upgrade" header with the value "websocket"
+  value = header.getValue(WS_HEADER_UPGRADE_LC);
+  if (value == NULL || strcmp(value, WS_HEADER_UPGRADE_VALUE) != 0)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: invalid \"%s\" received", WS_HEADER_UPGRADE);
+    return true;
+  }
+
+  // There must be a "Connection" header with the value "Upgrade"
+  value = header.getValue(WS_HEADER_CONNECTION_LC);
+  if (value == NULL || strcmp(value, WS_HEADER_UPGRADE) != 0)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: invalid \"%s\" received", WS_HEADER_CONNECTION_LC);
+    return true;
+  }
+
+  // There must be a base64 encoded 16 byte (=> 24 byte as base62) "Sec-WebSocket-Key" header
+  value = header.getValue(WS_HEADER_KEY_LC);
+  if (value == NULL || (websocketKey = value).size() != 24)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: invalid \"Sec-WebSocket-Key\" received");
+    return true;
+  }
+
+  // There might be a "Sec-WebSocket-Protocol" header
+  value = header.getValue(WS_HEADER_PROTOCOL_LC);
+  if (value && strlen(value) > 0)
+  {
+    CStdStringArray protocols;
+    StringUtils::SplitString(value, ",", protocols);
+    for (unsigned int index = 0; index < protocols.size(); index++)
+    {
+      if (protocols.at(index).Trim().Equals(WS_PROTOCOL_JSONRPC))
+      {
+        websocketProtocol = WS_PROTOCOL_JSONRPC;
+        break;
+      }
+    }
+  }
+
+  CHttpResponse httpResponse(HTTP::Get, HTTP::SwitchingProtocols, HTTP::Version1_1);
+  httpResponse.AddHeader(WS_HEADER_UPGRADE, WS_HEADER_UPGRADE_VALUE);
+  httpResponse.AddHeader(WS_HEADER_CONNECTION, WS_HEADER_UPGRADE);
+  std::string responseKey = calculateKey(websocketKey);
+  httpResponse.AddHeader(WS_HEADER_ACCEPT, responseKey);
+  if (!websocketProtocol.empty())
+    httpResponse.AddHeader(WS_HEADER_PROTOCOL, websocketProtocol);
+
+  char *responseBuffer;
+  int responseLength = httpResponse.Create(responseBuffer);
+  response = std::string(responseBuffer, responseLength);
+  
+  m_state = WebSocketStateConnected;
+
+  return true;
+}
+
+const CWebSocketFrame* CWebSocketV13::Close(WebSocketCloseReason reason /* = WebSocketCloseNormal */, const std::string &message /* = "" */)
+{
+  if (m_state == WebSocketStateNotConnected || m_state == WebSocketStateHandshaking || m_state == WebSocketStateClosed)
+  {
+    CLog::Log(LOGINFO, "WebSocket [RFC6455]: Cannot send a closing handshake if no connection has been established");
+    return NULL;
+  }
+
+  return close(reason, message);
+}
diff --git a/xbmc/network/websocket/WebSocketV13.h b/xbmc/network/websocket/WebSocketV13.h
new file mode 100644 (file)
index 0000000..254d648
--- /dev/null
@@ -0,0 +1,32 @@
+#pragma once
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "WebSocketV8.h"
+
+class CWebSocketV13 : public CWebSocketV8
+{
+public:
+  CWebSocketV13() { m_version = 13; }
+
+  virtual bool Handshake(const char* data, size_t length, std::string &response);
+  virtual const CWebSocketFrame* Close(WebSocketCloseReason reason = WebSocketCloseNormal, const std::string &message = "");
+};
diff --git a/xbmc/network/websocket/WebSocketV8.cpp b/xbmc/network/websocket/WebSocketV8.cpp
new file mode 100644 (file)
index 0000000..4bb9a48
--- /dev/null
@@ -0,0 +1,206 @@
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <string>
+#include <sstream>
+#include <boost/uuid/sha1.hpp>
+
+#include "WebSocketV8.h"
+#include "WebSocket.h"
+#include "utils/Base64.h"
+#include "utils/CharsetConverter.h"
+#include "utils/EndianSwap.h"
+#include "utils/HttpParser.h"
+#include "utils/HttpResponse.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+
+#define WS_HTTP_METHOD          "GET"
+#define WS_HTTP_TAG             "HTTP/"
+
+#define WS_HEADER_UPGRADE       "Upgrade"
+#define WS_HEADER_CONNECTION    "Connection"
+
+#define WS_HEADER_KEY_LC        "sec-websocket-key"         // "Sec-WebSocket-Key"
+#define WS_HEADER_ACCEPT        "Sec-WebSocket-Accept"
+#define WS_HEADER_PROTOCOL      "Sec-WebSocket-Protocol"
+#define WS_HEADER_PROTOCOL_LC   "sec-websocket-protocol"    // "Sec-WebSocket-Protocol"
+
+#define WS_PROTOCOL_JSONRPC     "jsonrpc.xbmc.org"
+#define WS_HEADER_UPGRADE_VALUE "websocket"
+#define WS_KEY_MAGICSTRING      "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
+
+using namespace std;
+
+bool CWebSocketV8::Handshake(const char* data, size_t length, std::string &response)
+{
+  string strHeader(data, length);
+  const char *value;
+  HttpParser header;
+  if (header.addBytes(data, length) != HttpParser::Done)
+  {
+    CLog::Log(LOGINFO, "WebSocket [hybi-10]: incomplete handshake received");
+    return false;
+  }
+
+  // The request must be GET
+  value = header.getMethod();
+  if (value == NULL || strnicmp(value, WS_HTTP_METHOD, strlen(WS_HTTP_METHOD)) != 0)
+  {
+    CLog::Log(LOGINFO, "WebSocket [hybi-10]: invalid HTTP method received (GET expected)");
+    return false;
+  }
+
+  // The request must be HTTP/1.1 or higher
+  int pos;
+  if ((pos = strHeader.find(WS_HTTP_TAG)) == string::npos)
+  {
+    CLog::Log(LOGINFO, "WebSocket [hybi-10]: invalid handshake received");
+    return false;
+  }
+
+  pos += strlen(WS_HTTP_TAG);
+  istringstream converter(strHeader.substr(pos, strHeader.find_first_of(" \r\n\t", pos) - pos));
+  float fVersion;
+  converter >> fVersion;
+
+  if (fVersion < 1.1f)
+  {
+    CLog::Log(LOGINFO, "WebSocket [hybi-10]: invalid HTTP version %f (1.1 or higher expected)", fVersion);
+    return false;
+  }
+
+  string websocketKey, websocketProtocol;
+  // There must be a "Host" header
+  value = header.getValue("host");
+  if (value == NULL || strlen(value) == 0)
+  {
+    CLog::Log(LOGINFO, "WebSocket [hybi-10]: \"Host\" header missing");
+    return true;
+  }
+
+  // There must be a base64 encoded 16 byte (=> 24 byte as base64) "Sec-WebSocket-Key" header
+  value = header.getValue(WS_HEADER_KEY_LC);
+  if (value == NULL || (websocketKey = value).size() != 24)
+  {
+    CLog::Log(LOGINFO, "WebSocket [hybi-10]: invalid \"Sec-WebSocket-Key\" received");
+    return true;
+  }
+
+  // There might be a "Sec-WebSocket-Protocol" header
+  value = header.getValue(WS_HEADER_PROTOCOL_LC);
+  if (value && strlen(value) > 0)
+  {
+    CStdStringArray protocols;
+    StringUtils::SplitString(value, ",", protocols);
+    for (unsigned int index = 0; index < protocols.size(); index++)
+    {
+      if (protocols.at(index).Trim().Equals(WS_PROTOCOL_JSONRPC))
+      {
+        websocketProtocol = WS_PROTOCOL_JSONRPC;
+        break;
+      }
+    }
+  }
+
+  CHttpResponse httpResponse(HTTP::Get, HTTP::SwitchingProtocols, HTTP::Version1_1);
+  httpResponse.AddHeader(WS_HEADER_UPGRADE, WS_HEADER_UPGRADE_VALUE);
+  httpResponse.AddHeader(WS_HEADER_CONNECTION, WS_HEADER_UPGRADE);
+  httpResponse.AddHeader(WS_HEADER_ACCEPT, calculateKey(websocketKey));
+  if (!websocketProtocol.empty())
+    httpResponse.AddHeader(WS_HEADER_PROTOCOL, websocketProtocol);
+
+  char *responseBuffer;
+  int responseLength = httpResponse.Create(responseBuffer);
+  response = std::string(responseBuffer, responseLength);
+  
+  m_state = WebSocketStateConnected;
+
+  return true;
+}
+
+const CWebSocketFrame* CWebSocketV8::Close(WebSocketCloseReason reason /* = WebSocketCloseNormal */, const std::string &message /* = "" */)
+{
+  if (m_state == WebSocketStateNotConnected || m_state == WebSocketStateHandshaking || m_state == WebSocketStateClosed)
+  {
+    CLog::Log(LOGINFO, "WebSocket [hybi-10]: Cannot send a closing handshake if no connection has been established");
+    return NULL;
+  }
+
+  return close(reason, message);
+}
+
+void CWebSocketV8::Fail()
+{
+  m_state = WebSocketStateClosed;
+}
+
+CWebSocketFrame* CWebSocketV8::GetFrame(const char* data, uint64_t length)
+{
+  return new CWebSocketFrame(data, length);
+}
+
+CWebSocketFrame* CWebSocketV8::GetFrame(WebSocketFrameOpcode opcode, const char* data /* = NULL */, uint32_t length /* = 0 */,
+                                        bool final /* = true */, bool masked /* = false */, int32_t mask /* = 0 */, int8_t extension /* = 0 */)
+{
+  return new CWebSocketFrame(opcode, data, length, final, masked, mask, extension);
+}
+
+CWebSocketMessage* CWebSocketV8::GetMessage()
+{
+  return new CWebSocketMessage();
+}
+
+const CWebSocketFrame* CWebSocketV8::close(WebSocketCloseReason reason /* = WebSocketCloseNormal */, const std::string &message /* = "" */)
+{
+  size_t length = 2 + message.size();
+
+  char* data = new char[length + 1];
+  memset(data, 0, sizeof(data));
+  unsigned short iReason = Endian_SwapBE16((uint16_t)reason);
+  data[0] = ((char *)&iReason)[0];
+  data[1] = ((char *)&iReason)[1];
+  message.copy(data + 2, message.size());
+
+  if (m_state == WebSocketStateConnected)
+    m_state = WebSocketStateClosing;
+  else
+    m_state = WebSocketStateClosed;
+
+  return new CWebSocketFrame(WebSocketConnectionClose, data, length);
+}
+
+std::string CWebSocketV8::calculateKey(const std::string &key)
+{
+  string acceptKey = key;
+  acceptKey.append(WS_KEY_MAGICSTRING);
+
+  boost::uuids::detail::sha1 hash;
+  hash.process_bytes(acceptKey.c_str(), acceptKey.size());
+
+  unsigned int digest[5];
+  hash.get_digest(digest);
+
+  for (unsigned int index = 0; index < 5; index++)
+    digest[index] = Endian_SwapBE32(digest[index]);
+
+  return Base64::Encode((const char*)digest, sizeof(digest));
+}
diff --git a/xbmc/network/websocket/WebSocketV8.h b/xbmc/network/websocket/WebSocketV8.h
new file mode 100644 (file)
index 0000000..11601a2
--- /dev/null
@@ -0,0 +1,43 @@
+#pragma once
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "WebSocket.h"
+
+class CWebSocketV8 : public CWebSocket
+{
+public:
+  CWebSocketV8() { m_version = 8; }
+
+  virtual bool Handshake(const char* data, size_t length, std::string &response);
+  virtual const CWebSocketFrame* Ping(const char* data = NULL) const { return new CWebSocketFrame(WebSocketPing, data); }
+  virtual const CWebSocketFrame* Pong(const char* data = NULL) const { return new CWebSocketFrame(WebSocketPong, data); }
+  virtual const CWebSocketFrame* Close(WebSocketCloseReason reason = WebSocketCloseNormal, const std::string &message = "");
+  virtual void Fail();
+
+protected:
+  virtual CWebSocketFrame* GetFrame(const char* data, uint64_t length);
+  virtual CWebSocketFrame* GetFrame(WebSocketFrameOpcode opcode, const char* data = NULL, uint32_t length = 0, bool final = true, bool masked = false, int32_t mask = 0, int8_t extension = 0);
+  virtual CWebSocketMessage* GetMessage();
+  virtual const CWebSocketFrame* close(WebSocketCloseReason reason = WebSocketCloseNormal, const std::string &message = "");
+
+  std::string calculateKey(const std::string &key);
+};
index 5d6c256..c973cae 100644 (file)
@@ -25,6 +25,8 @@
 #include <sstream>
 #include <threads/SingleLock.h>
 #include <utils/log.h>
+#include "dialogs/GUIDialogKaiToast.h"
+#include "guilib/LocalizeStrings.h"
 
 #pragma comment(lib, "dnssd.lib")
 
@@ -37,6 +39,20 @@ CZeroconfWIN::~CZeroconfWIN()
   doStop();
 }
 
+bool CZeroconfWIN::IsZCdaemonRunning()
+{
+  uint32_t version;
+  uint32_t size = sizeof(version);
+  DNSServiceErrorType err = DNSServiceGetProperty(kDNSServiceProperty_DaemonVersion, &version, &size);
+  if(err != kDNSServiceErr_NoError)
+  {
+    CLog::Log(LOGERROR, "ZeroconfWIN: Zeroconf can't be started probably because Apple's Bonjour Service isn't installed. You can get it by either installing Itunes or Apple's Bonjour Print Service for Windows (http://support.apple.com/kb/DL999)");
+    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(34300), g_localizeStrings.Get(34301), 10000, true);
+    return false;
+  }
+  CLog::Log(LOGDEBUG, "ZeroconfWIN:Bonjour version is %d.%d", version / 10000, version / 100 % 100);
+  return true;
+}
 
 //methods to implement for concrete implementations
 bool CZeroconfWIN::doPublishService(const std::string& fcr_identifier,
@@ -49,23 +65,20 @@ bool CZeroconfWIN::doPublishService(const std::string& fcr_identifier,
   TXTRecordRef txtRecord;
   TXTRecordCreate(&txtRecord, 0, NULL);
 
-  CLog::Log(LOGDEBUG, "CZeroconfWIN::doPublishService identifier: %s type: %s name:%s port:%i", fcr_identifier.c_str(), fcr_type.c_str(), fcr_name.c_str(), f_port);
+  CLog::Log(LOGDEBUG, "ZeroconfWIN: identifier: %s type: %s name:%s port:%i", fcr_identifier.c_str(), fcr_type.c_str(), fcr_name.c_str(), f_port);
 
   //add txt records
   if(!txt.empty())
   {
     for(std::map<std::string, std::string>::const_iterator it = txt.begin(); it != txt.end(); ++it)
     {
-      CLog::Log(LOGDEBUG, "CZeroconfWIN: key:%s, value:%s",it->first.c_str(),it->second.c_str());
+      CLog::Log(LOGDEBUG, "ZeroconfWIN: key:%s, value:%s",it->first.c_str(),it->second.c_str());
       uint8_t txtLen = (uint8_t)strlen(it->second.c_str());
       TXTRecordSetValue(&txtRecord, it->first.c_str(), txtLen, it->second.c_str());
     }
   }
 
-  DNSServiceErrorType err = DNSServiceRegister(&netService, 0, 0, assemblePublishedName(fcr_name).c_str(), fcr_type.c_str(), NULL, NULL, htons(f_port), TXTRecordGetLength(&txtRecord), TXTRecordGetBytesPtr(&txtRecord), registerCallback, NULL);
-
-  if(err != kDNSServiceErr_ServiceNotRunning)
-    DNSServiceProcessResult(netService);
+  DNSServiceErrorType err = DNSServiceRegister(&netService, 0, 0, fcr_name.c_str(), fcr_type.c_str(), NULL, NULL, htons(f_port), TXTRecordGetLength(&txtRecord), TXTRecordGetBytesPtr(&txtRecord), registerCallback, NULL);
   
   if (err != kDNSServiceErr_NoError)
   {
@@ -73,12 +86,15 @@ bool CZeroconfWIN::doPublishService(const std::string& fcr_identifier,
     if (netService)
       DNSServiceRefDeallocate(netService);
 
-    CLog::Log(LOGERROR, "CZeroconfWIN::doPublishService CFNetServiceRegister returned (error = %ld)\n", (int) err);
-    if(err == kDNSServiceErr_ServiceNotRunning)
-      CLog::Log(LOGERROR, "CZeroconfWIN: Apples Bonjour Service not installed?");
+    CLog::Log(LOGERROR, "ZeroconfWIN: DNSServiceRegister returned (error = %ld)", (int) err);
   } 
   else
   {
+    err = DNSServiceProcessResult(netService);
+
+    if (err != kDNSServiceErr_NoError)
+      CLog::Log(LOGERROR, "ZeroconfWIN: DNSServiceProcessResult returned (error = %ld)", (int) err);
+
     CSingleLock lock(m_data_guard);
     m_services.insert(make_pair(fcr_identifier, netService));
   }
@@ -105,6 +121,7 @@ bool CZeroconfWIN::doRemoveService(const std::string& fcr_ident)
 void CZeroconfWIN::doStop()
 {
   CSingleLock lock(m_data_guard);
+  CLog::Log(LOGDEBUG, "ZeroconfWIN: Shutdown services");
   for(tServiceMap::iterator it = m_services.begin(); it != m_services.end(); ++it)
     DNSServiceRefDeallocate(it->second);
   m_services.clear();
@@ -119,34 +136,13 @@ void DNSSD_API CZeroconfWIN::registerCallback(DNSServiceRef sdref, const DNSServ
   if (errorCode == kDNSServiceErr_NoError)
   {
     if (flags & kDNSServiceFlagsAdd)
-      CLog::Log(LOGDEBUG, "CZeroconfWIN: %s.%s%s now registered and active", name, regtype, domain);
+      CLog::Log(LOGDEBUG, "ZeroconfWIN: %s.%s%s now registered and active", name, regtype, domain);
     else
-      CLog::Log(LOGDEBUG, "CZeroconfWIN: %s.%s%s registration removed", name, regtype, domain);
+      CLog::Log(LOGDEBUG, "ZeroconfWIN: %s.%s%s registration removed", name, regtype, domain);
   }
   else if (errorCode == kDNSServiceErr_NameConflict)
-     CLog::Log(LOGDEBUG, "CZeroconfWIN: %s.%s%s Name in use, please choose another", name, regtype, domain);
+     CLog::Log(LOGDEBUG, "ZeroconfWIN: %s.%s%s Name in use, please choose another", name, regtype, domain);
   else
-    CLog::Log(LOGDEBUG, "CZeroconfWIN: %s.%s%s error code %d", name, regtype, domain, errorCode);
+    CLog::Log(LOGDEBUG, "ZeroconfWIN: %s.%s%s error code %d", name, regtype, domain, errorCode);
 
 }
-
-
-std::string CZeroconfWIN::assemblePublishedName(const std::string& fcr_given_name)
-{
-  std::stringstream ss;
-  ss << fcr_given_name << '@';
-
-  // get our hostname
-  char lp_hostname[256];
-  if (gethostname(lp_hostname, sizeof(lp_hostname)))
-  {
-    //TODO
-    CLog::Log(LOGERROR, "CZeroconfWIN::assemblePublishedName: could not get hostname.. hm... waaaah! PANIC!");
-    ss << "DummyThatCantResolveItsName";
-  }
-  else
-  {
-    ss << lp_hostname;
-  }
-  return ss.str();
-}
\ No newline at end of file
index 2fa2011..1f5be91 100644 (file)
@@ -43,10 +43,9 @@ protected:
 
   virtual void doStop();
 
-private:
+  bool IsZCdaemonRunning();
 
-  //returns the string that gets published (a.k.a. add the hostname)
-  std::string assemblePublishedName(const std::string& fcr_given_name);
+private:
 
   static void DNSSD_API registerCallback(DNSServiceRef sdref, const DNSServiceFlags flags, DNSServiceErrorType errorCode, const char *name, const char *regtype, const char *domain, void *context);
 
index a4a0492..776a051 100644 (file)
@@ -54,7 +54,7 @@ extern "C"
   
   // Devices
   //
-  void Cocoa_MountPoint2DeviceName(char *path);
+  char* Cocoa_MountPoint2DeviceName(char *path);
   bool Cocoa_GetVolumeNameFromMountPoint(const char *mountPoint, CStdString &volumeName);
 
   // Mouse.
@@ -85,6 +85,9 @@ extern "C"
   // http://developer.apple.com/mac/library/qa/qa2001/qa1134.html
   OSStatus SendAppleEventToSystemProcess(AEEventID EventToSend);
 #endif
+
+  void Cocoa_ResetAudioDevices();
+
 #ifdef __cplusplus
 }
 #endif
index 559aee5..2b29cdf 100644 (file)
 #import <unistd.h>
 #import <sys/mount.h>
 
+#define BOOL XBMC_BOOL 
+#include "utils/log.h"
+#undef BOOL
+
 #import <Cocoa/Cocoa.h>
 #import <QuartzCore/QuartzCore.h>
 #import <Carbon/Carbon.h>
 #import <OpenGL/OpenGL.h>
 #import <OpenGL/gl.h>
+#import <AudioUnit/AudioUnit.h>
+#import <AudioToolbox/AudioToolbox.h>
+#import <CoreServices/CoreServices.h>
 
 #import "CocoaInterface.h"
 #import "DllPaths_generated.h"
 
 #import "AutoPool.h"
 
+#import "CoreAudio.h"
+
 // hack for Cocoa_GL_ResizeWindow
 //extern "C" void SDL_SetWidthHeight(int w, int h);
 
@@ -198,6 +207,8 @@ double Cocoa_GetCVDisplayLinkRefreshPeriod(void)
 
 void Cocoa_DoAppleScript(const char* scriptSource)
 {
+  CCocoaAutoPool pool;
+
   NSDictionary* errorDict;
   NSAppleEventDescriptor* returnDescriptor = NULL;
   NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:
@@ -263,19 +274,18 @@ const char* Cocoa_GetIconFromBundle(const char *_bundlePath, const char* _iconNa
   return [pngFile UTF8String];
 }
 
-void Cocoa_MountPoint2DeviceName(char* path)
+char* Cocoa_MountPoint2DeviceName(char *path)
 {
+  CCocoaAutoPool pool;
   // if physical DVDs, libdvdnav wants "/dev/rdiskN" device name for OSX,
   // path will get realloc'ed and replaced IF this is a physical DVD.
   char* strDVDDevice;
   strDVDDevice = strdup(path);
-  if (strncasecmp(strDVDDevice + strlen(strDVDDevice) - 8, "VIDEO_TS", 8) == 0)
+  if (strncasecmp(strDVDDevice, "/Volumes/", 9) == 0)
   {
     struct statfs *mntbufp;
     int i, mounts;
     
-    strDVDDevice[strlen(strDVDDevice) - 9] = '\0';
-
     // find a match for /Volumes/<disk name>
     mounts = getmntinfo(&mntbufp, MNT_WAIT);  // NOT THREAD SAFE!
     for (i = 0; i < mounts; i++)
@@ -291,10 +301,12 @@ void Cocoa_MountPoint2DeviceName(char* path)
     }
     free(strDVDDevice);
   }
+  return path;
 }
 
 bool Cocoa_GetVolumeNameFromMountPoint(const char *mountPoint, CStdString &volumeName)
 {
+  CCocoaAutoPool pool;
   unsigned i, count = 0;
   struct statfs *buf = NULL;
   CStdString mountpoint, devicepath;
@@ -659,4 +671,51 @@ OSStatus SendAppleEventToSystemProcess(AEEventID EventToSend)
 
   return(error); 
 }
+
+void Cocoa_ResetAudioDevices()
+{
+  // Reset any devices with an AC3/DTS/SPDIF stream back to a Linear PCM
+  // so that they can become a default output device
+  CoreAudioDeviceList deviceList;
+  CCoreAudioHardware::GetOutputDevices(&deviceList);
+  for (CoreAudioDeviceList::iterator d = deviceList.begin(); d != deviceList.end(); d++)
+  {
+    CCoreAudioDevice device(*d);
+    AudioStreamIdList streamList;
+    if (device.GetStreams(&streamList))
+    {
+      for (AudioStreamIdList::iterator s = streamList.begin(); s != streamList.end(); s++)
+      {
+        CCoreAudioStream stream;
+        if (stream.Open(*s))
+        {
+          AudioStreamBasicDescription currentFormat;
+          if (stream.GetPhysicalFormat(&currentFormat))
+          {
+            if (currentFormat.mFormatID == 'IAC3' || currentFormat.mFormatID == kAudioFormat60958AC3)
+            {
+              StreamFormatList formatList;
+              if (stream.GetAvailablePhysicalFormats(&formatList))
+              {
+                for (StreamFormatList::iterator f = formatList.begin(); f != formatList.end(); f++)
+                {
+                  if ((*f).mFormat.mFormatID == kAudioFormatLinearPCM)
+                  {
+                    if (stream.SetPhysicalFormat(&(*f).mFormat))
+                    {
+                      sleep(1);
+                      break;
+                    }
+                  }
+                }
+              }
+            }              
+          }
+          stream.Close();
+        }
+      }
+    }
+  }  
+}
+
 #endif
index c26bab9..81ce999 100644 (file)
@@ -149,7 +149,25 @@ bool CCoreAudioChannelLayout::CopyLayout(AudioChannelLayout& layout)
   
   return (ret == noErr);
 }
-                   
+
+bool CCoreAudioChannelLayout::SetLayout(AudioChannelLayoutTag layoutTag)
+{
+  UInt32 propSize = 0;
+  AudioFormatGetPropertyInfo(kAudioFormatProperty_ChannelLayoutForTag, sizeof(layoutTag), &layoutTag, &propSize);
+  m_pLayout = (AudioChannelLayout*)malloc(propSize);
+  OSStatus ret = AudioFormatGetProperty(kAudioFormatProperty_ChannelLayoutForTag, sizeof(layoutTag), &layoutTag, &propSize, m_pLayout);
+  m_pLayout->mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions;
+  return (ret == noErr);  
+}
+
+AudioChannelLabel CCoreAudioChannelLayout::GetChannelLabel(UInt32 index)
+{
+  if (!m_pLayout || (index >= m_pLayout->mNumberChannelDescriptions))
+    return kAudioChannelLabel_Unknown;
+  
+  return m_pLayout->mChannelDescriptions[index].mChannelLabel;
+}
+
 UInt32 CCoreAudioChannelLayout::GetChannelCountForLayout(AudioChannelLayout& layout)
 {
     UInt32 channels = 0;
@@ -171,6 +189,13 @@ UInt32 CCoreAudioChannelLayout::GetChannelCountForLayout(AudioChannelLayout& lay
     return channels;
 }
 
+UInt32 CCoreAudioChannelLayout::GetChannelCount()
+{
+  if (m_pLayout)
+    return GetChannelCountForLayout(*m_pLayout);
+  return 0;
+}
+
 const char* CCoreAudioChannelLayout::ChannelLabelToString(UInt32 label)
 {
   if (label > MAX_CHANNEL_LABEL)
@@ -218,7 +243,6 @@ const char* CCoreAudioChannelLayout::ChannelLayoutToString(AudioChannelLayout& l
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // CCoreAudioHardware
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
 AudioDeviceID CCoreAudioHardware::FindAudioDevice(CStdString searchName)
 {
   if (!searchName.length())
@@ -502,6 +526,13 @@ const char* CCoreAudioDevice::GetName(CStdString& name)
   return name.c_str();
 }
 
+const char* CCoreAudioDevice::GetName()
+{
+  // Use internal storage
+  return GetName(m_Name);
+}
+
+
 UInt32 CCoreAudioDevice::GetTotalOutputChannels()
 {
   if (!m_DeviceId)
@@ -978,6 +1009,7 @@ bool CCoreAudioStream::SetPhysicalFormat(AudioStreamBasicDescription* pDesc)
       (unsigned int)m_StreamId, (unsigned int)ret, CONVERT_OSSTATUS(ret));
     return false;
   }
+  sleep(1);   // For the change to take effect
   return true;   
 }
 
index d8ff928..73764a0 100644 (file)
@@ -76,6 +76,9 @@ public:
   virtual ~CCoreAudioChannelLayout();
   operator AudioChannelLayout*() {return m_pLayout;}
   bool CopyLayout(AudioChannelLayout& layout);
+  bool SetLayout(AudioChannelLayoutTag layoutTag);
+  UInt32 GetChannelCount();
+  AudioChannelLabel GetChannelLabel(UInt32 index);
   static UInt32 GetChannelCountForLayout(AudioChannelLayout& layout);
   static const char* ChannelLabelToString(UInt32 label);
   static const char* ChannelLayoutToString(AudioChannelLayout& layout, CStdString& str);
@@ -100,6 +103,7 @@ public:
   
   AudioDeviceID GetId() {return m_DeviceId;}
   const char* GetName(CStdString& name);
+  const char* GetName();
   UInt32 GetTotalOutputChannels();
   bool GetStreams(AudioStreamIdList* pList);
   bool IsRunning();
@@ -122,6 +126,7 @@ protected:
   AudioDeviceIOProc m_IoProc;
   Float64 m_SampleRateRestore;
   UInt32 m_BufferSizeRestore;
+  CStdString m_Name;
 };
 
 typedef std::list<AudioStreamRangedDescription> StreamFormatList;
index 7dd3279..d942edb 100644 (file)
 extern "C"
 {
 #endif
-  bool  DarwinIsAppleTV2(void);
-  float GetIOSVersion(void);
-  int   GetDarwinFrameworkPath(bool forPython, char* path, uint32_t *pathsize);
-  int   GetDarwinExecutablePath(char* path, uint32_t *pathsize);
-  bool  DarwinHasVideoToolboxDecoder(void);
-  int   DarwinBatteryLevel(void);
-  void  DarwinSetScheduling(int message);
+  bool        DarwinIsAppleTV2(void);
+  const char *GetDarwinVersionString(void);
+  float       GetIOSVersion(void);
+  int         GetDarwinFrameworkPath(bool forPython, char* path, uint32_t *pathsize);
+  int         GetDarwinExecutablePath(char* path, uint32_t *pathsize);
+  bool        DarwinHasVideoToolboxDecoder(void);
+  int         DarwinBatteryLevel(void);
+  void        DarwinSetScheduling(int message);
 #ifdef __cplusplus
 }
 #endif
index 8938471..b9dc320 100644 (file)
@@ -65,6 +65,11 @@ bool DarwinIsAppleTV2(void)
   return (result == 1);
 }
 
+const char *GetDarwinVersionString(void)
+{
+  return [[[NSProcessInfo processInfo] operatingSystemVersionString] UTF8String];
+}
+
 float GetIOSVersion(void)
 {
   CCocoaAutoPool pool;
index 76e8b7f..7431445 100644 (file)
@@ -39,12 +39,17 @@ extern NSString* const MediaKeyPreviousNotification;
 @interface HotKeyController : NSObject
 {
   CFMachPortRef m_eventPort;
+  CFRunLoopSourceRef m_runLoopSource;
   BOOL          m_active;
   BOOL          m_controlSysVolume;
   BOOL          m_controlSysPower;
 }
 
 + (HotKeyController*)sharedController;
+
+- (void)enableTap;
+- (void)disableTap;
+
 - (CFMachPortRef)eventPort;
 
 - (void)sysPower:  (BOOL)enable;
index 791f9fd..0a1a890 100644 (file)
@@ -27,6 +27,7 @@
 
 #import "HotKeyController.h"
 #import <IOKit/hidsystem/ev_keymap.h>
+#import <sys/sysctl.h>
 
 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
 #if __LP64__ || NS_BUILD_32_LIKE_64
@@ -132,34 +133,66 @@ NSString* const MediaKeyPreviousNotification  = @"MediaKeyPreviousNotification";
   return m_active;
 }
 
+- (BOOL)getDebuggerActive
+{
+  // Technical Q&A QA1361
+  // returns true if the current process is being debugged (either 
+  // running under the debugger or has a debugger attached post facto).
+  int                 junk;
+  int                 mib[4];
+  struct kinfo_proc   info;
+  size_t              size;
+
+  // initialize the flags so that, if sysctl fails for some bizarre 
+  // reason, we get a predictable result.
+  info.kp_proc.p_flag = 0;
+
+  // initialize mib, which tells sysctl the info we want, in this case
+  // we are looking for information about a specific process ID.
+  mib[0] = CTL_KERN;
+  mib[1] = KERN_PROC;
+  mib[2] = KERN_PROC_PID;
+  mib[3] = getpid();
+
+  // Call sysctl.
+  size = sizeof(info);
+  junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
+  assert(junk == 0);
+
+  // we are being debugged if the P_TRACED flag is set.
+  return ( (info.kp_proc.p_flag & P_TRACED) != 0 );
+}
+
 // WARNING: do not debugger breakpoint in this routine.
 // It's a system level call back that taps ALL Events
 // and you WILL lose all key control :)
 static CGEventRef tapEventCallback2(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
 {
+  HotKeyController *hot_key_controller = (HotKeyController*)refcon;
+
   if (type == kCGEventTapDisabledByTimeout)
-    CGEventTapEnable([[HotKeyController sharedController] eventPort], TRUE);
+  {
+    if ([hot_key_controller getActive])
+      CGEventTapEnable([hot_key_controller eventPort], TRUE);
+    return NULL;
+  }
   
-  if (![[HotKeyController sharedController] getActive] )
-    return event;
-    
-  if (type != NX_SYSDEFINED) 
+  if ((type != NX_SYSDEFINED) || (![hot_key_controller getActive]))
     return event;
 
-  // we get a warning on this when compiling under 10.4 SDK, ignore it.
+  // eventWithCGEvent does not exist under 10.4 SDK,
+  // but thanks to how objc works, it will resolve at runtime on 10.5+
+  // but we will get a compile warning, just ignore it.
   NSEvent *nsEvent = [NSEvent eventWithCGEvent:event];
-  
   if (!nsEvent || [nsEvent subtype] != 8) 
     return event;
     
   int data = [nsEvent data1];
-  int keyCode = (data & 0xFFFF0000) >> 16;
+  int keyCode  = (data & 0xFFFF0000) >> 16;
   int keyFlags = (data & 0xFFFF);
   int keyState = (keyFlags & 0xFF00) >> 8;
   BOOL keyIsRepeat = (keyFlags & 0x1) > 0;
   
-  //NSLog(@"%s keyCode %d", __PRETTY_FUNCTION__, keyCode);
-
   if (keyIsRepeat) 
     return event;
   
@@ -167,7 +200,7 @@ static CGEventRef tapEventCallback2(CGEventTapProxy proxy, CGEventType type, CGE
   switch (keyCode)
   {
     case NX_POWER_KEY:
-      if ([[HotKeyController sharedController] controlPower])
+      if ([hot_key_controller controlPower])
       {
         if (keyState == NX_KEYSTATE_DOWN)
           [center postNotificationName:MediaKeyPower object:(HotKeyController *)refcon];
@@ -176,7 +209,7 @@ static CGEventRef tapEventCallback2(CGEventTapProxy proxy, CGEventType type, CGE
       }
     break;
     case NX_KEYTYPE_MUTE:
-      if ([[HotKeyController sharedController] controlVolume])
+      if ([hot_key_controller controlVolume])
       {
         if (keyState == NX_KEYSTATE_DOWN)
           [center postNotificationName:MediaKeySoundMute object:(HotKeyController *)refcon];
@@ -185,7 +218,7 @@ static CGEventRef tapEventCallback2(CGEventTapProxy proxy, CGEventType type, CGE
       }
     break;
     case NX_KEYTYPE_SOUND_UP:
-      if ([[HotKeyController sharedController] controlVolume])
+      if ([hot_key_controller controlVolume])
       {
         if (keyState == NX_KEYSTATE_DOWN)
           [center postNotificationName:MediaKeySoundUp object:(HotKeyController *)refcon];
@@ -194,7 +227,7 @@ static CGEventRef tapEventCallback2(CGEventTapProxy proxy, CGEventType type, CGE
       }
     break;
     case NX_KEYTYPE_SOUND_DOWN:
-      if ([[HotKeyController sharedController] controlVolume])
+      if ([hot_key_controller controlVolume])
       {
         if (keyState == NX_KEYSTATE_DOWN)
           [center postNotificationName:MediaKeySoundDown object:(HotKeyController *)refcon];
@@ -247,11 +280,24 @@ static CGEventRef tapEventCallback(CGEventTapProxy proxy, CGEventType type, CGEv
 
 -(void)eventTapThread
 {
-  CFRunLoopSourceRef runLoopSource;
+  m_runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorSystemDefault, m_eventPort, 0);
+  CFRunLoopAddSource(CFRunLoopGetCurrent(), m_runLoopSource, kCFRunLoopCommonModes);
+  // Enable the event tap.
+  CGEventTapEnable(m_eventPort, TRUE);
 
-  runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorSystemDefault, m_eventPort, 0);
-  CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
   CFRunLoopRun();
+
+  [self setActive:NO];
+  // Disable the event tap.
+  if (m_eventPort)
+    CGEventTapEnable(m_eventPort, FALSE);
+
+  if (m_runLoopSource)
+    CFRelease(m_runLoopSource);
+  m_runLoopSource = NULL;
+  if (m_eventPort)
+    CFRelease(m_eventPort);
+  m_eventPort = NULL;
 }
 
 - (id)init
@@ -259,27 +305,48 @@ static CGEventRef tapEventCallback(CGEventTapProxy proxy, CGEventType type, CGEv
   if (self = [super init])
   {
     m_active = NO;
+    m_eventPort = NULL;
+    m_runLoopSource = NULL;
     m_controlSysPower = NO;
     m_controlSysVolume = NO;
+  }
+  return self;
+}
+
+- (void)enableTap
+{
+  if (![self getDebuggerActive] && ![self getActive] && floor(NSAppKitVersionNumber) >= 949)
+  {
+    // check runtime, we only allow this on 10.5+
     m_eventPort = CGEventTapCreate(kCGSessionEventTap,
-     kCGHeadInsertEventTap, kCGEventTapOptionDefault,
-     CGEventMaskBit(NX_SYSDEFINED), tapEventCallback, self);
-    if (m_eventPort == NULL)
+      kCGHeadInsertEventTap, kCGEventTapOptionDefault,
+      CGEventMaskBit(NX_SYSDEFINED), tapEventCallback, self);
+    if (m_eventPort != NULL)
     {
-      NSLog(@"Fatal Error: Event Tap could not be created");
-      return self;
+      // Run this in a separate thread so that a slow app
+      // doesn't lag the event tap
+      [NSThread detachNewThreadSelector:@selector(eventTapThread) toTarget:self withObject:nil];
+      [self setActive:YES];
     }
-
-    // Run this in a separate thread so that a slow app doesn't lag the event tap
-    [NSThread detachNewThreadSelector:@selector(eventTapThread) toTarget:self withObject:nil];
   }
-  return self;
 }
 
-- (void)dealloc
+- (void)disableTap
 {
-  CFRelease(m_eventPort);
-  [super dealloc];
-}
+  if ([self getActive])
+  {
+    [self setActive:NO];
 
+    // Disable the event tap.
+    if (m_eventPort)
+      CGEventTapEnable(m_eventPort, FALSE);
+
+    if (m_runLoopSource)
+      CFRelease(m_runLoopSource);
+    m_runLoopSource = NULL;
+    if (m_eventPort)
+      CFRelease(m_eventPort);
+    m_eventPort = NULL;
+  }
+}
 @end
index 9c0acb3..5c4ce6e 100644 (file)
@@ -225,6 +225,25 @@ static void setupWindowMenu(void)
 
 - (void) applicationWillTerminate: (NSNotification *) note
 {
+  [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self
+    name:NSWorkspaceDidMountNotification object:nil];
+
+  [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self
+    name:NSWorkspaceDidUnmountNotification object:nil];
+
+  NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+
+  [center removeObserver:self name:MediaKeyPower object:nil];
+  [center removeObserver:self name:MediaKeySoundMute object:nil];
+  [center removeObserver:self name:MediaKeySoundUp object:nil];
+  [center removeObserver:self name:MediaKeySoundDown object:nil];
+  [center removeObserver:self name:MediaKeyPlayPauseNotification object:nil];
+  [center removeObserver:self name:MediaKeyFastNotification object:nil];
+  [center removeObserver:self name:MediaKeyRewindNotification object:nil];
+  [center removeObserver:self name:MediaKeyNextNotification object:nil];
+  [center removeObserver:self name:MediaKeyPreviousNotification object:nil];
+
+  [[HotKeyController sharedController] disableTap];
 }
 
 - (void) applicationWillResignActive:(NSNotification *) note
@@ -273,16 +292,8 @@ static void setupWindowMenu(void)
 
   NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
 
-  [center addObserver:self
-    selector:@selector(windowDidMoveNotification:)
-    name:NSWindowDidMoveNotification object:nil];
-
-  [center addObserver:self
-    selector:@selector(windowDidReSizeNotification:)
-    name:NSWindowDidResizeNotification object:nil];
-
   // create media key handler singlton
-  [HotKeyController sharedController];
+  [[HotKeyController sharedController] enableTap];
   // add media key notifications
   [center addObserver:self
     selector:@selector(powerKeyNotification)
@@ -406,33 +417,6 @@ static void setupWindowMenu(void)
   [pool release];
 }
 
-- (void) windowDidMoveNotification:(NSNotification*) note
-{
-  Cocoa_CVDisplayLinkUpdate();
-}
-
-- (void) windowDidReSizeNotification:(NSNotification*) note
-{
-  /* 
-  // SDL_PushEvent is not working but
-  // this is how one would pass update events in response to grow events.
-  NSOpenGLContext* context = [NSOpenGLContext currentContext];
-  if (context)
-  {
-    NSView *view = [context view];
-    if (view)
-    {
-      XBMC_Event event;
-      memset(&event, 0, sizeof(event));
-      event.resize.type = XBMC_VIDEORESIZE;
-      event.resize.w = [view frame].size.width;
-      event.resize.h = [view frame].size.height;
-      SDL_PushEvent(&event);
-    }
-  }
-  */
-}
-
 #define VK_SLEEP            0x5F
 #define VK_VOLUME_MUTE      0xAD
 #define VK_VOLUME_DOWN      0xAE
@@ -589,9 +573,11 @@ int main(int argc, char *argv[])
   // see http://lists.libsdl.org/pipermail/sdl-libsdl.org/2008-September/066542.html
   int status;
   status = SDL_main(gArgc, gArgv);
+  SDL_Quit();
 
+  [xbmc_delegate applicationWillTerminate:NULL];
   [xbmc_delegate release];
-  [pool drain];
+  [pool release];
 
   return status;
 }
index 52a3c43..7c0dde3 100644 (file)
@@ -94,7 +94,7 @@ void XBMCHelper::Start()
   int pid = GetProcessPid(XBMC_HELPER_PROGRAM);
   if (pid == -1)
   {
-    printf("Asking helper to start.\n");
+    //printf("Asking helper to start.\n");
     // use -x to have XBMCHelper read its configure file
     std::string cmd = "\"" + m_helperFile + "\" -x &";
     system(cmd.c_str());
index 89ac65b..efbe367 100644 (file)
 
 #define XBMCAppliance_CAT [BRApplianceCategory categoryWithName:@"XBMC" identifier:@"xbmc" preferredOrder:-5]
 
+// ATVVersionInfo declare to shut up compiler warning
+@interface ATVVersionInfo : NSObject
+{
+}
++ (id)currentOSVersion;
+@end
 //--------------------------------------------------------------
 //--------------------------------------------------------------
 @interface BRTopShelfView (specialAdditions)
 @implementation XBMCAppliance
 @synthesize topShelfController=_topShelfController;
 
+-(void)XBMCfixUIDevice
+{
+  // iOS 5.x has removed the internal load of UIKit in AppleTV app
+  // and there is an overlap of some UIKit and AppleTV methods.
+  // This voodoo seems to clear up the wonkiness. :)
+  Class cls = NSClassFromString(@"ATVVersionInfo");
+  if (cls != nil && [[cls currentOSVersion] rangeOfString:@"5."].location != NSNotFound)
+  {
+    id cd = nil;
+
+    @try
+    {
+      cd = [UIDevice currentDevice];
+    }
+    
+    @catch (NSException *e)
+    {
+      NSLog(@"exception: %@", e);
+    }
+    
+    @finally
+    {
+      //NSLog(@"will it work the second try?");
+      cd = [UIDevice currentDevice];
+      NSLog(@"current device fixed: %@", cd);
+    }
+  }
+}
+
 -(id) init
 {
   //NSLog(@"%s", __PRETTY_FUNCTION__);
 {
   //NSLog(@"%s", __PRETTY_FUNCTION__);
   
+  [self XBMCfixUIDevice];
   XBMCController *controller = [[[XBMCController alloc] init] autorelease];
   //XBMCController *controller = [XBMCController sharedInstance];
   return controller;
index 95b2072..228d9f3 100644 (file)
@@ -24,6 +24,7 @@
 #define BOOL XBMC_BOOL 
 #import "WinEventsIOS.h"
 #import "XBMC_events.h"
+#include "utils/log.h"
 #undef BOOL
 
 #import <Foundation/Foundation.h>
 #import "XBMCEAGLView.h"
 #import "XBMCDebugHelpers.h"
 
+//start repeating after 0.5s
+#define REPEATED_KEYPRESS_DELAY_S     0.5
+//pause 0.01s (10ms) between keypresses
+#define REPEATED_KEYPRESS_PAUSE_S 0.01
+
 typedef enum {
 
   ATV_BUTTON_UP                 = 1,
-  ATV_BUTTON_UP_RELEASE         = 1,
   ATV_BUTTON_DOWN               = 2,
-  ATV_BUTTON_DOWN_RELEASE       = 2,
   ATV_BUTTON_LEFT               = 3,
-  ATV_BUTTON_LEFT_RELEASE       = 3,
   ATV_BUTTON_RIGHT              = 4,
-  ATV_BUTTON_RIGHT_RELEASE      = 4,
   ATV_BUTTON_PLAY               = 5,
   ATV_BUTTON_MENU               = 6,
   ATV_BUTTON_PLAY_H             = 7,
   ATV_BUTTON_MENU_H             = 8,
   ATV_BUTTON_LEFT_H             = 9,
-  ATV_BUTTON_LEFT_H_RELEASE     = 9,
   ATV_BUTTON_RIGHT_H            = 10,
-  ATV_BUTTON_RIGHT_H_RELEASE    = 10,
 
   //new aluminium remote buttons
   ATV_ALUMINIUM_PLAY            = 12,
@@ -120,8 +120,9 @@ typedef enum {
   kBREventRemoteActionStop      = 17,
   kBREventRemoteActionFastFwd   = 18,
   kBREventRemoteActionRewind    = 19,
-  kBREventRemoteActionSkipBack  = 20,
-  kBREventRemoteActionSkipFwd   = 21,
+  kBREventRemoteActionSkipFwd   = 20,
+  kBREventRemoteActionSkipBack  = 21,
+
 
   kBREventRemoteActionPlayHold  = 22,
   kBREventRemoteActionCenterHold,
@@ -192,10 +193,15 @@ extern NSString* kBRScreenSaverDismissed;
 @interface XBMCController (PrivateMethods)
 UIWindow      *m_window;
 XBMCEAGLView  *m_glView;
+NSTimer       *m_keyTimer;
 int           m_screensaverTimeout;
 int           m_systemsleepTimeout;
 
 - (void) observeDefaultCenterStuff: (NSNotification *) notification;
+- (void) keyPressTimerCallback: (NSTimer*)theTimer;
+- (void) startKeyPressTimer: (int) keyId;
+- (void) stopKeyPressTimer;
+- (void) setUserEvent:(int) id withHoldTime:(unsigned int) holdTime;
 @end
 //
 //
@@ -317,7 +323,7 @@ int           m_systemsleepTimeout;
 
 - (void)controlWasDeactivated
 {
-  //NSLog(@"%s", __PRETTY_FUNCTION__);
+  NSLog(@"XBMC was forced by FrontRow to exit via controlWasDeactivated");
 
   [m_glView stopAnimation];
 
@@ -335,38 +341,40 @@ int           m_systemsleepTimeout;
   return YES;
 }
 
-- (eATVClientEvent) ATVClientEventFromBREvent:(BREvent*) f_event
+- (eATVClientEvent) ATVClientEventFromBREvent:(BREvent*) f_event 
+                    Repeatable:(bool &) isRepeatable
+                    ButtonState:(bool &) isPressed
 {
   int remoteAction = [f_event remoteAction];
+  CLog::Log(LOGDEBUG,"XBMCPureController: Button press remoteAction = %i", remoteAction);
+  isRepeatable = false;
+  isPressed = false;
 
   switch (remoteAction)
   {
     // tap up
     case kBREventRemoteActionUp:
     case 65676:
+      isRepeatable = true;
       if([f_event value] == 1)
-        return ATV_BUTTON_UP;
-      else
-        return ATV_INVALID_BUTTON;
-        //return ATV_BUTTON_UP_RELEASE;
+        isPressed = true;
+      return ATV_BUTTON_UP;
 
     // tap down
     case kBREventRemoteActionDown:
     case 65677:
+      isRepeatable = true;
       if([f_event value] == 1)
-        return ATV_BUTTON_DOWN;
-      else
-        return ATV_INVALID_BUTTON;
-        //return ATV_BUTTON_DOWN_RELEASE;
+        isPressed = true;
+      return ATV_BUTTON_DOWN;
 
     // tap left
     case kBREventRemoteActionLeft:
     case 65675:
+      isRepeatable = true;
       if([f_event value] == 1)
-        return ATV_BUTTON_LEFT;
-      else
-        return ATV_INVALID_BUTTON;
-        //return ATV_BUTTON_LEFT_RELEASE;
+        isPressed = true;
+      return ATV_BUTTON_LEFT;
 
     // hold left
     case 786612:
@@ -374,16 +382,14 @@ int           m_systemsleepTimeout;
         return ATV_LEARNED_REWIND;
       else
         return ATV_INVALID_BUTTON;
-        //return ATV_LEARNED_REWIND_RELEASE;
 
     // tap right
     case kBREventRemoteActionRight:
     case 65674:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_RIGHT;
-      else
-        return ATV_INVALID_BUTTON;
-        //return ATV_BUTTON_RIGHT_RELEASE;
+        isPressed = true;
+      return ATV_BUTTON_RIGHT;
 
     // hold right
     case 786611:
@@ -391,7 +397,6 @@ int           m_systemsleepTimeout;
         return ATV_LEARNED_FORWARD;
       else
         return ATV_INVALID_BUTTON;
-        //return ATV_LEARNED_FORWARD_RELEASE;
 
     // tap play
     case kBREventRemoteActionPlay:
@@ -454,69 +459,66 @@ int           m_systemsleepTimeout;
 
     // PageUp
     case kBREventRemoteActionPageUp:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_PAGEUP;
-      else
-        return ATV_INVALID_BUTTON;
+        isPressed = true;
+      return ATV_BUTTON_PAGEUP;
 
     // PageDown
     case kBREventRemoteActionPageDown:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_PAGEDOWN;
-      else
-        return ATV_INVALID_BUTTON;
+        isPressed = true;
+      return ATV_BUTTON_PAGEDOWN;
 
     // Pause
     case kBREventRemoteActionPause:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_PAUSE;
-      else
-        return ATV_INVALID_BUTTON;
+        isPressed = true;
+      return ATV_BUTTON_PAUSE;
 
     // Play2
     case kBREventRemoteActionPlay2:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_PLAY2;
-      else
-        return ATV_INVALID_BUTTON;
+        isPressed = true;
+      return ATV_BUTTON_PLAY2;
 
     // Stop
     case kBREventRemoteActionStop:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_STOP;
-      else
-        return ATV_INVALID_BUTTON;
-        //return ATV_BUTTON_STOP_RELEASE;
+        isPressed = true;
+      return ATV_BUTTON_STOP;
 
     // Fast Forward
     case kBREventRemoteActionFastFwd:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_FASTFWD;
-      else
-        return ATV_INVALID_BUTTON;
-        //return ATV_BUTTON_FASTFWD_RELEASE;
+        isPressed = true;
+      return ATV_BUTTON_FASTFWD;
 
     // Rewind
     case kBREventRemoteActionRewind:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_REWIND;
-      else
-        return ATV_INVALID_BUTTON;
-        //return ATV_BUTTON_REWIND_RELEASE;
+        isPressed = true;
+      return ATV_BUTTON_REWIND;
 
     // Skip Forward
     case kBREventRemoteActionSkipFwd:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_SKIPFWD;
-      else
-        return ATV_INVALID_BUTTON;
+        isPressed = true;
+      return ATV_BUTTON_SKIPFWD;
 
     // Skip Back
     case kBREventRemoteActionSkipBack:
+      isRepeatable = true;
       if ([f_event value] == 1)
-        return ATV_BUTTON_SKIPBACK;
-      else
-        return ATV_INVALID_BUTTON;
+        isPressed = true;
+      return ATV_BUTTON_SKIPBACK;
 
     // Gesture Swipe Left
     case kBREventRemoteActionSwipeLeft:
@@ -582,6 +584,17 @@ int           m_systemsleepTimeout;
   }
 }
 
+- (void)setUserEvent:(int) id withHoldTime:(unsigned int) holdTime
+{
+  XBMC_Event newEvent;
+  memset(&newEvent, 0, sizeof(newEvent));
+
+  newEvent.type = XBMC_USEREVENT;
+  newEvent.jbutton.which = id;
+  newEvent.jbutton.holdTime = holdTime;
+  CWinEventsIOS::MessagePush(&newEvent);
+}
+
 - (BOOL)brEventAction:(BREvent*)event
 {
   //NSLog(@"%s", __PRETTY_FUNCTION__);
@@ -589,15 +602,19 @@ int           m_systemsleepTimeout;
        if ([m_glView isAnimating])
   {
     BOOL is_handled = NO;
-    eATVClientEvent xbmc_ir_key = [self ATVClientEventFromBREvent:event];
+    bool isRepeatable = false;
+    bool isPressed = false;
+    eATVClientEvent xbmc_ir_key = [self ATVClientEventFromBREvent:event 
+                                        Repeatable:isRepeatable
+                                        ButtonState:isPressed];
     
     if ( xbmc_ir_key != ATV_INVALID_BUTTON )
     {
-      XBMC_Event newEvent;
-      memset(&newEvent, 0, sizeof(newEvent));
-
       if (xbmc_ir_key == ATV_BTKEYPRESS && [event value] == 1)
       {
+        XBMC_Event newEvent;
+        memset(&newEvent, 0, sizeof(newEvent));
+
         NSDictionary *dict = [event eventDictionary];
         NSString *key_nsstring = [dict objectForKey:@"kBRKeyEventCharactersKey"];
         
@@ -633,9 +650,23 @@ int           m_systemsleepTimeout;
       }
       else
       {
-        newEvent.type = XBMC_USEREVENT;
-        newEvent.user.code = xbmc_ir_key;
-        CWinEventsIOS::MessagePush(&newEvent);
+        if(isRepeatable)
+        {
+          if(isPressed)
+          {
+            [self setUserEvent:xbmc_ir_key withHoldTime:0]; //fire event
+            [self startKeyPressTimer:xbmc_ir_key];//start repeat timer
+          }
+          else
+          {
+            //stop the timer
+            [self stopKeyPressTimer];
+          }
+        }
+        else
+        {
+          [self setUserEvent:xbmc_ir_key  withHoldTime:0];
+        }
         is_handled = TRUE;
       }
     }
@@ -649,11 +680,62 @@ int           m_systemsleepTimeout;
 
 #pragma mark -
 #pragma mark private helper methods
+- (void)startKeyPressTimer: (int) keyId
+{ 
+  NSNumber *number = [NSNumber numberWithInt:keyId]; 
+  NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSDate date], @"StartDate", 
+                                                                  number, @"keyId", nil];
+  
+  NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:REPEATED_KEYPRESS_DELAY_S]; 
+
+  [self stopKeyPressTimer];
+
+  //schedule repeated timer which starts after REPEATED_KEYPRESS_DELAY_S and fires
+  //every REPEATED_KEYPRESS_PAUSE_S
+  m_keyTimer       = [[NSTimer alloc] initWithFireDate:fireDate 
+                                      interval:REPEATED_KEYPRESS_PAUSE_S 
+                                      target:self 
+                                      selector:@selector(keyPressTimerCallback:) 
+                                      userInfo:dict 
+                                      repeats:YES]; 
+  //schedule the timer to the runloop
+  NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; 
+  [runLoop addTimer:m_keyTimer forMode:NSDefaultRunLoopMode]; 
+} 
+
+- (void)stopKeyPressTimer
+{
+  if(m_keyTimer != nil)
+  {
+    [m_keyTimer invalidate];
+    [m_keyTimer release];
+    m_keyTimer = nil;
+  }
+}
+
+- (void)keyPressTimerCallback:(NSTimer*)theTimer 
+{ 
+  //if queue is empty - skip this timer event
+  //for letting it process
+  if(CWinEventsIOS::GetQueueSize())
+    return;
+  NSDate *startDate = [[theTimer userInfo] objectForKey:@"StartDate"];
+  int keyId = [[[theTimer userInfo] objectForKey:@"keyId"] intValue];
+  //calc the holdTime - timeIntervalSinceNow gives the
+  //passed time since startDate in seconds as negative number
+  //so multiply with -1000 for getting the positive ms
+  NSTimeInterval holdTime = [startDate timeIntervalSinceNow] * -1000.0f;
+  [self setUserEvent:keyId withHoldTime:(unsigned int)holdTime];
+} 
+
 //
 - (void)observeDefaultCenterStuff: (NSNotification *) notification
 {
   //NSLog(@"default: %@", [notification name]);
 
+  if ([notification name] == UIApplicationDidReceiveMemoryWarningNotification)
+    NSLog(@"XBMC: %@", [notification name]);
+
   //if ([notification name] == kBRScreenSaverActivated)
   //  [m_glView stopAnimation];
   
@@ -987,3 +1069,4 @@ int           m_systemsleepTimeout;
 }
 
 @end
+
index e047604..2ec33f7 100644 (file)
     [self deinitDisplayLink];
                animating = FALSE;
     if (!g_application.m_bStop)
-      g_application.Stop(0);
+    {
+      ThreadMessage tMsg = {TMSG_QUIT};
+      g_application.getApplicationMessenger().SendMessage(tMsg);
+    }
     // wait for animation thread to die
     if ([animationThread isFinished] == NO)
       [animationThreadLock lockWhenCondition:TRUE];
   // reload Lowtide/AppleTV, boo.
   [g_xbmcController enableScreenSaver];
   [g_xbmcController enableSystemSleep];
-  exit(0);
   //[g_xbmcController applicationDidExit];
+  exit(0);
 }
 
 //--------------------------------------------------------------
index 45e6a83..45028c1 100644 (file)
@@ -36,6 +36,7 @@
   CGPoint lastGesturePoint;
   CGFloat lastPinchScale;
   CGFloat currentPinchScale;  
+  CGFloat screenScale;
   bool touchBeginSignaled;
        
   UIInterfaceOrientation orientation;
@@ -46,6 +47,7 @@
 @property CGPoint lastGesturePoint;
 @property CGFloat lastPinchScale;
 @property CGFloat currentPinchScale;
+@property CGFloat screenScale;
 @property bool touchBeginSignaled;
 @property CGSize screensize;
 @property XBMC_Event lastEvent;
index 63eefa5..0d14fee 100644 (file)
@@ -66,6 +66,7 @@ XBMCEAGLView  *m_glView;
 @synthesize lastGesturePoint;
 @synthesize lastPinchScale;
 @synthesize currentPinchScale;
+@synthesize screenScale;
 @synthesize lastEvent;
 @synthesize touchBeginSignaled;
 @synthesize screensize;
@@ -169,6 +170,8 @@ XBMCEAGLView  *m_glView;
   if( [m_glView isXBMCAlive] )//NO GESTURES BEFORE WE ARE UP AND RUNNING
   {
     CGPoint point = [sender locationOfTouch:0 inView:m_glView];  
+    point.x *= screenScale;
+    point.y *= screenScale;
     currentPinchScale += [sender scale] - lastPinchScale;
     lastPinchScale = [sender scale];  
   
@@ -193,6 +196,8 @@ XBMCEAGLView  *m_glView;
     if( [sender state] == UIGestureRecognizerStateBegan )
     {
       CGPoint point = [sender locationOfTouch:0 inView:m_glView];  
+      point.x *= screenScale;
+      point.y *= screenScale;
       touchBeginSignaled = false;
       lastGesturePoint = point;
     }
@@ -200,6 +205,8 @@ XBMCEAGLView  *m_glView;
     if( [sender state] == UIGestureRecognizerStateChanged )
     {
       CGPoint point = [sender locationOfTouch:0 inView:m_glView];    
+      point.x *= screenScale;
+      point.y *= screenScale;
       bool bNotify = false;
       CGFloat yMovement=point.y - lastGesturePoint.y;
       CGFloat xMovement=point.x - lastGesturePoint.x;
@@ -247,7 +254,8 @@ XBMCEAGLView  *m_glView;
 - (IBAction)handleDoubleFingerSingleTap:(UIGestureRecognizer *)sender 
 {
   CGPoint point = [sender locationOfTouch:0 inView:m_glView];
-  
+  point.x *= screenScale;
+  point.y *= screenScale;
   //NSLog(@"%s toubleTap", __PRETTY_FUNCTION__);
   
   XBMC_Event newEvent;
@@ -278,6 +286,8 @@ XBMCEAGLView  *m_glView;
     if( [touches count] == 1 && [touch tapCount] == 1)
     {
       lastGesturePoint = [touch locationInView:m_glView];    
+      lastGesturePoint.x *= screenScale;
+      lastGesturePoint.y *= screenScale;  
       XBMC_Event newEvent;
       memset(&newEvent, 0, sizeof(newEvent));
       
@@ -333,6 +343,12 @@ XBMCEAGLView  *m_glView;
                  name: nil
                object: nil];
   
+  /* Check if screen is Retina */
+  if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
+    screenScale = [[UIScreen mainScreen] scale];
+  else
+    screenScale = 1.0;
+  
   /* We start in landscape mode */
   CGRect srect = frame;
   srect.size = CGSizeMake( frame.size.height, frame.size.width );
@@ -426,8 +442,8 @@ XBMCEAGLView  *m_glView;
 //--------------------------------------------------------------
 - (CGSize) getScreenSize
 {
-  screensize.width  = m_glView.bounds.size.width;
-  screensize.height = m_glView.bounds.size.height;  
+  screensize.width  = m_glView.bounds.size.width * screenScale;
+  screensize.height = m_glView.bounds.size.height * screenScale;  
   return screensize;
 }
 //--------------------------------------------------------------
index f648278..8c13d66 100644 (file)
     // Get the layer
     CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
     
+    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
+    {
+      eaglLayer.contentsScale = [[UIScreen mainScreen] scale];
+      self.contentScaleFactor = [[UIScreen mainScreen] scale];
+    }
     eaglLayer.opaque = TRUE;
     eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
       [NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking,
     
     glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);
     
-    CGRect rect = self.bounds; 
-    
-    if(rect.size.height > rect.size.width) {
-      glViewport(0, 0, rect.size.height, rect.size.width);
-      glScissor(0, 0, rect.size.height, rect.size.width);
+    if(framebufferHeight > framebufferWidth) {
+      glViewport(0, 0, framebufferHeight, framebufferWidth);
+      glScissor(0, 0, framebufferHeight, framebufferWidth);
     } 
     else
     {
-      glViewport(0, 0, rect.size.width, rect.size.height);
-      glScissor(0, 0, rect.size.width, rect.size.height);
+      glViewport(0, 0, framebufferWidth, framebufferHeight);
+      glScissor(0, 0, framebufferWidth, framebufferHeight);
     }
   }
 }
     [self deinitDisplayLink];
                animating = FALSE;
     if (!g_application.m_bStop)
-      g_application.Stop(0);
+    {
+      ThreadMessage tMsg = {TMSG_QUIT};
+      g_application.getApplicationMessenger().SendMessage(tMsg);
+    }
     // wait for animation thread to die
     if ([animationThread isFinished] == NO)
       [animationThreadLock lockWhenCondition:TRUE];
   // reload Lowtide/AppleTV, boo.
   [g_xbmcController enableScreenSaver];
   [g_xbmcController enableSystemSleep];
-  exit(0);
   //[g_xbmcController applicationDidExit];
+  exit(0);
 }
 
 //--------------------------------------------------------------
index 9323325..53831fc 100644 (file)
@@ -62,10 +62,15 @@ namespace PERIPHERALS
     PERIPHERAL_TUNER
   };
 
+  struct PeripheralID
+  {
+    int m_iVendorId;
+    int m_iProductId;
+  };
+
   struct PeripheralDeviceMapping
   {
-    int                              m_iVendorId;
-    int                              m_iProductId;
+    std::vector<PeripheralID>        m_PeripheralID;
     PeripheralBusType                m_busType;
     PeripheralType                   m_class;
     CStdString                       m_strDeviceName;
@@ -155,16 +160,14 @@ namespace PERIPHERALS
       return iVal;
     };
 
-    static char *IntToHexString(int iVal)
+    static void FormatHexString(int iVal, CStdString &strHexString)
     {
       if (iVal < 0)
         iVal = 0;
       if (iVal > 65536)
         iVal = 65536;
 
-      char *buf = new char[4];
-      sprintf(buf, "%04X", iVal);
-      return buf;
+      strHexString.Format("%04X", iVal);
     };
   };
 }
index 40bda0b..9fbe952 100644 (file)
@@ -27,9 +27,7 @@
 #include "devices/PeripheralNIC.h"
 #include "devices/PeripheralNyxboard.h"
 #include "devices/PeripheralTuner.h"
-#ifdef HAVE_LIBCEC
 #include "devices/PeripheralCecAdapter.h"
-#endif
 #include "bus/PeripheralBusUSB.h"
 #include "dialogs/GUIDialogPeripheralManager.h"
 
@@ -43,6 +41,7 @@
 #include "guilib/LocalizeStrings.h"
 #include "dialogs/GUIDialogKaiToast.h"
 #include "utils/StringUtils.h"
+#include "guilib/Key.h"
 
 using namespace PERIPHERALS;
 using namespace XFILE;
@@ -105,12 +104,20 @@ void CPeripherals::Clear(void)
 
   /* delete mappings */
   for (unsigned int iMappingPtr = 0; iMappingPtr < m_mappings.size(); iMappingPtr++)
+  {
+    map<CStdString, CSetting *> settings = m_mappings.at(iMappingPtr).m_settings;
+    for (map<CStdString, CSetting *>::iterator itr = settings.begin(); itr != settings.end(); itr++)
+      delete itr->second;
     m_mappings.at(iMappingPtr).m_settings.clear();
+  }
   m_mappings.clear();
 
   /* reset class state */
   m_bIsStarted   = false;
   m_bInitialised = false;
+#if !defined(HAVE_LIBCEC)
+  m_bMissingLibCecWarningDisplayed = false;
+#endif
 }
 
 void CPeripherals::TriggerDeviceScan(const PeripheralBusType type /* = PERIPHERAL_BUS_UNKNOWN */)
@@ -196,6 +203,18 @@ int CPeripherals::GetPeripheralsWithFeature(vector<CPeripheral *> &results, cons
   return iReturn;
 }
 
+size_t CPeripherals::GetNumberOfPeripherals() const
+{
+  size_t iReturn(0);
+  CSingleLock lock(m_critSection);
+  for (unsigned int iBusPtr = 0; iBusPtr < m_busses.size(); iBusPtr++)
+  {
+    iReturn += m_busses.at(iBusPtr)->GetNumberOfPeripherals();
+  }
+
+  return iReturn;
+}
+
 bool CPeripherals::HasPeripheralWithFeature(const PeripheralFeature feature, PeripheralBusType busType /* = PERIPHERAL_BUS_UNKNOWN */) const
 {
   vector<CPeripheral *> dummy;
@@ -204,106 +223,103 @@ bool CPeripherals::HasPeripheralWithFeature(const PeripheralFeature feature, Per
 
 CPeripheral *CPeripherals::CreatePeripheral(CPeripheralBus &bus, const PeripheralType type, const CStdString &strLocation, int iVendorId /* = 0 */, int iProductId /* = 0 */)
 {
-  CPeripheral *peripheral = GetPeripheralAtLocation(strLocation, bus.Type());
+  CPeripheral *peripheral = NULL;
+  /* check whether there's something mapped in peripherals.xml */
+  PeripheralType mappedType = type;
+  CStdString strDeviceName;
+  int iMappingPtr = GetMappingForDevice(bus, type, iVendorId, iProductId);
+  bool bHasMapping(iMappingPtr >= 0);
+  if (bHasMapping)
+  {
+    mappedType    = m_mappings[iMappingPtr].m_mappedTo;
+    strDeviceName = m_mappings[iMappingPtr].m_strDeviceName;
+  }
+  else
+  {
+    /* don't create instances for devices that aren't mapped in peripherals.xml */
+    return NULL;
+  }
 
-  /* only create a new device instances if there's no device at the given location */
-  if (!peripheral)
+  switch(mappedType)
   {
-    /* check whether there's something mapped in peripherals.xml */
-    PeripheralType mappedType = type;
-    CStdString strDeviceName;
-    int iMappingPtr = GetMappingForDevice(bus, type, iVendorId, iProductId);
-    bool bHasMapping(iMappingPtr >= 0);
-    if (bHasMapping)
-    {
-      mappedType    = m_mappings[iMappingPtr].m_mappedTo;
-      strDeviceName = m_mappings[iMappingPtr].m_strDeviceName;
-    }
-    else
+  case PERIPHERAL_HID:
+    peripheral = new CPeripheralHID(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
+    break;
+
+  case PERIPHERAL_NIC:
+    peripheral = new CPeripheralNIC(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
+    break;
+
+  case PERIPHERAL_DISK:
+    peripheral = new CPeripheralDisk(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
+    break;
+
+  case PERIPHERAL_NYXBOARD:
+    peripheral = new CPeripheralNyxboard(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
+    break;
+
+  case PERIPHERAL_TUNER:
+    peripheral = new CPeripheralTuner(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
+    break;
+
+  case PERIPHERAL_BLUETOOTH:
+    peripheral = new CPeripheralBluetooth(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
+    break;
+
+  case PERIPHERAL_CEC:
+#if defined(HAVE_LIBCEC)
+    peripheral = new CPeripheralCecAdapter(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
+#else
+    if (!m_bMissingLibCecWarningDisplayed)
     {
-      /* don't create instances for devices that aren't mapped in peripherals.xml */
-      return NULL;
+      m_bMissingLibCecWarningDisplayed = true;
+      CLog::Log(LOGWARNING, "%s - libCEC support has not been compiled in, so the CEC adapter cannot be used.", __FUNCTION__);
+      CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Warning, g_localizeStrings.Get(36000), g_localizeStrings.Get(36017));
     }
-
-    switch(mappedType)
-    {
-    case PERIPHERAL_HID:
-      peripheral = new CPeripheralHID(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
-      break;
-
-    case PERIPHERAL_NIC:
-      peripheral = new CPeripheralNIC(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
-      break;
-
-    case PERIPHERAL_DISK:
-      peripheral = new CPeripheralDisk(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
-      break;
-
-    case PERIPHERAL_NYXBOARD:
-      peripheral = new CPeripheralNyxboard(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
-      break;
-
-    case PERIPHERAL_TUNER:
-      peripheral = new CPeripheralTuner(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
-      break;
-
-    case PERIPHERAL_BLUETOOTH:
-      peripheral = new CPeripheralBluetooth(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
-      break;
-
-#ifdef HAVE_LIBCEC
-    case PERIPHERAL_CEC:
-      peripheral = new CPeripheralCecAdapter(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
-      break;
 #endif
+    break;
 
-    default:
-      peripheral = new CPeripheral(type, bus.Type(), strLocation, strDeviceName, iVendorId, iProductId);
-      break;
-    }
+  default:
+    break;
+  }
 
-    if (peripheral)
+  if (peripheral)
+  {
+    /* try to initialise the new peripheral
+     * Initialise() will make sure that each device is only initialised once */
+    if (peripheral->Initialise())
     {
-      /* try to initialise the new peripheral
-       * Initialise() will make sure that each device is only initialised once */
-      if (peripheral->Initialise())
-      {
-        if (!bHasMapping)
-          peripheral->SetHidden(true);
-        bus.Register(peripheral);
-      }
-      else
-      {
-        CLog::Log(LOGDEBUG, "%s - failed to initialise peripheral on '%s'", __FUNCTION__, strLocation.c_str());
-        delete peripheral;
-        peripheral = NULL;
-      }
+      if (!bHasMapping)
+        peripheral->SetHidden(true);
+      bus.Register(peripheral);
+    }
+    else
+    {
+      CLog::Log(LOGDEBUG, "%s - failed to initialise peripheral on '%s'", __FUNCTION__, strLocation.c_str());
+      delete peripheral;
+      peripheral = NULL;
     }
   }
 
   return peripheral;
 }
 
-void CPeripherals::OnDeviceAdded(const CPeripheralBus &bus, const CStdString &strLocation)
+void CPeripherals::OnDeviceAdded(const CPeripheralBus &bus, const CPeripheral &peripheral)
 {
   CGUIDialogPeripheralManager *dialog = (CGUIDialogPeripheralManager *)g_windowManager.GetWindow(WINDOW_DIALOG_PERIPHERAL_MANAGER);
   if (dialog && dialog->IsActive())
     dialog->Update();
 
-  CPeripheral *peripheral = GetByPath(strLocation);
-  if (peripheral)
-    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(35005), peripheral->DeviceName());
+  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(35005), peripheral.DeviceName());
 }
 
-void CPeripherals::OnDeviceDeleted(const CPeripheralBus &bus, const CStdString &strLocation)
+void CPeripherals::OnDeviceDeleted(const CPeripheralBus &bus, const CPeripheral &peripheral)
 {
   CGUIDialogPeripheralManager *dialog = (CGUIDialogPeripheralManager *)g_windowManager.GetWindow(WINDOW_DIALOG_PERIPHERAL_MANAGER);
   if (dialog && dialog->IsActive())
     dialog->Update();
 
-  CPeripheral *peripheral = GetByPath(strLocation);
-  if (peripheral)
-    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(35006), peripheral->DeviceName());
+  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(35006), peripheral.DeviceName());
 }
 
 int CPeripherals::GetMappingForDevice(const CPeripheralBus &bus, const PeripheralType classType, int iVendorId, int iProductId) const
@@ -312,14 +328,28 @@ int CPeripherals::GetMappingForDevice(const CPeripheralBus &bus, const Periphera
   for (unsigned int iMappingPtr = 0; iMappingPtr < m_mappings.size(); iMappingPtr++)
   {
     PeripheralDeviceMapping mapping = m_mappings.at(iMappingPtr);
+
+    bool bProductMatch = false;
+    if (mapping.m_PeripheralID.size() == 0)
+    {
+      bProductMatch = true;
+    }
+    else
+    {
+      for (unsigned int i = 0; i < mapping.m_PeripheralID.size(); i++)
+        if (mapping.m_PeripheralID[i].m_iVendorId == iVendorId && mapping.m_PeripheralID[i].m_iProductId == iProductId)
+          bProductMatch = true;
+    }
+
     bool bBusMatch = (mapping.m_busType == PERIPHERAL_BUS_UNKNOWN || mapping.m_busType == bus.Type());
-    bool bVendorMatch = (mapping.m_iVendorId == 0 || mapping.m_iVendorId == iVendorId);
-    bool bProductMatch = (mapping.m_iProductId == 0 || mapping.m_iProductId == iProductId);
     bool bClassMatch = (mapping.m_class == PERIPHERAL_UNKNOWN || mapping.m_class == classType);
 
-    if (bBusMatch && bVendorMatch && bProductMatch && bClassMatch)
+    if (bProductMatch && bBusMatch && bClassMatch)
     {
-      CLog::Log(LOGDEBUG, "%s - device (%s:%s) mapped to %s (type = %s)", __FUNCTION__, PeripheralTypeTranslator::IntToHexString(iVendorId), PeripheralTypeTranslator::IntToHexString(iProductId), mapping.m_strDeviceName.c_str(), PeripheralTypeTranslator::TypeToString(mapping.m_mappedTo));
+      CStdString strVendorId, strProductId;
+      PeripheralTypeTranslator::FormatHexString(iVendorId, strVendorId);
+      PeripheralTypeTranslator::FormatHexString(iProductId, strProductId);
+      CLog::Log(LOGDEBUG, "%s - device (%s:%s) mapped to %s (type = %s)", __FUNCTION__, strVendorId.c_str(), strProductId.c_str(), mapping.m_strDeviceName.c_str(), PeripheralTypeTranslator::TypeToString(mapping.m_mappedTo));
       return iMappingPtr;
     }
   }
@@ -333,12 +363,23 @@ void CPeripherals::GetSettingsFromMapping(CPeripheral &peripheral) const
   for (unsigned int iMappingPtr = 0; iMappingPtr < m_mappings.size(); iMappingPtr++)
   {
     const PeripheralDeviceMapping *mapping = &m_mappings.at(iMappingPtr);
+
+    bool bProductMatch = false;
+    if (mapping->m_PeripheralID.size() == 0)
+    {
+      bProductMatch = true;
+    }
+    else
+    {
+      for (unsigned int i = 0; i < mapping->m_PeripheralID.size(); i++)
+        if (mapping->m_PeripheralID[i].m_iVendorId == peripheral.VendorId() && mapping->m_PeripheralID[i].m_iProductId == peripheral.ProductId())
+          bProductMatch = true;
+    }
+
     bool bBusMatch = (mapping->m_busType == PERIPHERAL_BUS_UNKNOWN || mapping->m_busType == peripheral.GetBusType());
-    bool bVendorMatch = (mapping->m_iVendorId == 0 || mapping->m_iVendorId == peripheral.VendorId());
-    bool bProductMatch = (mapping->m_iProductId == 0 || mapping->m_iProductId == peripheral.ProductId());
     bool bClassMatch = (mapping->m_class == PERIPHERAL_UNKNOWN || mapping->m_class == peripheral.Type());
 
-    if (bBusMatch && bVendorMatch && bProductMatch && bClassMatch)
+    if (bBusMatch && bProductMatch && bClassMatch)
     {
       for (map<CStdString, CSetting *>::const_iterator itr = mapping->m_settings.begin(); itr != mapping->m_settings.end(); itr++)
         peripheral.AddSetting((*itr).first, (*itr).second);
@@ -362,21 +403,41 @@ bool CPeripherals::LoadMappings(void)
     return false;
   }
 
-  TiXmlElement *currentNode = pRootElement->FirstChildElement("peripheral");
-  while (currentNode)
+  for (TiXmlElement *currentNode = pRootElement->FirstChildElement("peripheral"); currentNode; currentNode = currentNode->NextSiblingElement("peripheral"))
   {
+    CStdStringArray vpArray, idArray;
+    PeripheralID id;
     PeripheralDeviceMapping mapping;
 
-    mapping.m_iVendorId     = currentNode->Attribute("vendor") ? PeripheralTypeTranslator::HexStringToInt(currentNode->Attribute("vendor")) : 0;
-    mapping.m_iProductId    = currentNode->Attribute("product") ? PeripheralTypeTranslator::HexStringToInt(currentNode->Attribute("product")) : 0;
+    mapping.m_strDeviceName = currentNode->Attribute("name") ? CStdString(currentNode->Attribute("name")) : StringUtils::EmptyString;
+
+    // If there is no vendor_product attribute ignore this entry
+    if (currentNode->Attribute("vendor_product"))
+    {
+      // The vendor_product attribute is a list of comma separated vendor:product pairs
+      StringUtils::SplitString(currentNode->Attribute("vendor_product"), ",", vpArray);
+      for (unsigned int i = 0; i < vpArray.size(); i++)
+      {
+        StringUtils::SplitString(vpArray[i], ":", idArray);
+        if (idArray.size() != 2)
+        {
+          CLog::Log(LOGERROR, "%s - ignoring node \"%s\" with invalid vendor_product attribute", __FUNCTION__, mapping.m_strDeviceName.c_str());
+          continue;
+        }
+
+        id.m_iVendorId = PeripheralTypeTranslator::HexStringToInt(idArray[0]);
+        id.m_iProductId = PeripheralTypeTranslator::HexStringToInt(idArray[1]);
+        mapping.m_PeripheralID.push_back(id);
+      }
+    }
+
     mapping.m_busType       = PeripheralTypeTranslator::GetBusTypeFromString(currentNode->Attribute("bus"));
     mapping.m_class         = PeripheralTypeTranslator::GetTypeFromString(currentNode->Attribute("class"));
-    mapping.m_strDeviceName = currentNode->Attribute("name") ? CStdString(currentNode->Attribute("name")) : StringUtils::EmptyString;
     mapping.m_mappedTo      = PeripheralTypeTranslator::GetTypeFromString(currentNode->Attribute("mapTo"));
     GetSettingsFromMappingsFile(currentNode, mapping.m_settings);
 
     m_mappings.push_back(mapping);
-    currentNode = currentNode->NextSiblingElement("peripheral");
+    CLog::Log(LOGDEBUG, "%s - loaded node \"%s\"", __FUNCTION__, mapping.m_strDeviceName.c_str());
   }
 
   return true;
@@ -385,6 +446,8 @@ bool CPeripherals::LoadMappings(void)
 void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdString, CSetting *> &m_settings)
 {
   TiXmlElement *currentNode = xmlNode->FirstChildElement("setting");
+  int iMaxOrder(0);
+
   while (currentNode)
   {
     CSetting *setting = NULL;
@@ -410,17 +473,17 @@ void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdSt
     {
       int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0;
       int iMin   = currentNode->Attribute("min") ? atoi(currentNode->Attribute("min")) : 0;
-      int iStep  = currentNode->Attribute("step") ? atoi(currentNode->Attribute("step")) : 0;
-      int iMax   = currentNode->Attribute("max") ? atoi(currentNode->Attribute("max")) : 0;
+      int iStep  = currentNode->Attribute("step") ? atoi(currentNode->Attribute("step")) : 1;
+      int iMax   = currentNode->Attribute("max") ? atoi(currentNode->Attribute("max")) : 255;
       CStdString strFormat(currentNode->Attribute("format"));
       setting = new CSettingInt(0, strKey, iLabelId, iValue, iMin, iStep, iMax, SPIN_CONTROL_INT, strFormat);
     }
     else if (strSettingsType.Equals("float"))
     {
-      float fValue = currentNode->Attribute("value") ? atof(currentNode->Attribute("value")) : 0;
-      float fMin   = currentNode->Attribute("min") ? atof(currentNode->Attribute("min")) : 0;
-      float fStep  = currentNode->Attribute("step") ? atof(currentNode->Attribute("step")) : 0;
-      float fMax   = currentNode->Attribute("max") ? atof(currentNode->Attribute("max")) : 0;
+      float fValue = currentNode->Attribute("value") ? (float) atof(currentNode->Attribute("value")) : 0;
+      float fMin   = currentNode->Attribute("min") ? (float) atof(currentNode->Attribute("min")) : 0;
+      float fStep  = currentNode->Attribute("step") ? (float) atof(currentNode->Attribute("step")) : 0;
+      float fMax   = currentNode->Attribute("max") ? (float) atof(currentNode->Attribute("max")) : 0;
       setting = new CSettingFloat(0, strKey, iLabelId, fValue, fMin, fStep, fMax, SPIN_CONTROL_FLOAT);
     }
     else
@@ -430,10 +493,32 @@ void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdSt
     }
 
     //TODO add more types if needed
+
+    /* set the visibility */
     setting->SetVisible(bConfigurable);
+
+    /* set the order */
+    int iOrder(0);
+    currentNode->Attribute("order", &iOrder);
+    /* if the order attribute is invalid or 0, then the setting will be added at the end */
+    if (iOrder < 0)
+      iOrder = 0;
+    setting->SetOrder(iOrder);
+    if (iOrder > iMaxOrder)
+      iMaxOrder = iOrder;
+
+    /* and add this new setting */
     m_settings[strKey] = setting;
+
     currentNode = currentNode->NextSiblingElement("setting");
   }
+
+  /* add the settings without an order attribute or an invalid order attribute set at the end */
+  for (map<CStdString, CSetting *>::iterator it = m_settings.begin(); it != m_settings.end(); it++)
+  {
+    if (it->second->GetOrder() == 0)
+      it->second->SetOrder(++iMaxOrder);
+  }
 }
 
 void CPeripherals::GetDirectory(const CStdString &strPath, CFileItemList &items) const
@@ -469,3 +554,89 @@ CPeripheral *CPeripherals::GetByPath(const CStdString &strPath) const
 
   return NULL;
 }
+
+bool CPeripherals::OnAction(const CAction &action)
+{
+  if (action.GetID() == ACTION_MUTE)
+  {
+    return ToggleMute();
+  }
+
+  if (SupportsCEC() && action.GetAmount() && (action.GetID() == ACTION_VOLUME_UP || action.GetID() == ACTION_VOLUME_DOWN))
+  {
+    vector<CPeripheral *> peripherals;
+    if (GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
+    {
+      for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
+      {
+        CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
+        if (cecDevice && cecDevice->HasConnectedAudioSystem())
+        {
+          if (action.GetID() == ACTION_VOLUME_UP)
+            cecDevice->ScheduleVolumeUp();
+          else
+            cecDevice->ScheduleVolumeDown();
+          return true;
+        }
+      }
+    }
+  }
+
+  return false;
+}
+
+bool CPeripherals::IsMuted(void)
+{
+  vector<CPeripheral *> peripherals;
+  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
+  {
+    for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
+    {
+      CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
+      if (cecDevice && cecDevice->IsMuted())
+        return true;
+    }
+  }
+
+  return false;
+}
+
+bool CPeripherals::ToggleMute(void)
+{
+  vector<CPeripheral *> peripherals;
+  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
+  {
+    for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
+    {
+      CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
+      if (cecDevice && cecDevice->HasConnectedAudioSystem())
+      {
+        cecDevice->ScheduleMute();
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
+
+bool CPeripherals::GetNextKeypress(float frameTime, CKey &key)
+{
+  vector<CPeripheral *> peripherals;
+  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
+  {
+    for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
+    {
+      CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
+      if (cecDevice && cecDevice->GetButton())
+      {
+        CKey newKey(cecDevice->GetButton(), cecDevice->GetHoldTime());
+        cecDevice->ResetButton();
+        key = newKey;
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
index 96a3b1f..a98ead5 100644 (file)
@@ -29,6 +29,8 @@ class CFileItemList;
 class CSetting;
 class CSettingsCategory;
 class TiXmlElement;
+class CAction;
+class CKey;
 
 namespace PERIPHERALS
 {
@@ -82,6 +84,8 @@ namespace PERIPHERALS
      */
     virtual int GetPeripheralsWithFeature(std::vector<CPeripheral *> &results, const PeripheralFeature feature, PeripheralBusType busType = PERIPHERAL_BUS_UNKNOWN) const;
 
+    size_t GetNumberOfPeripherals() const;
+
     /*!
      * @brief Check whether there is at least one device present with the given feature.
      * @param feature The feature to check for.
@@ -93,16 +97,16 @@ namespace PERIPHERALS
     /*!
      * @brief Called when a device has been added to a bus.
      * @param bus The bus the device was added to.
-     * @param strLocation The path of the fileitem.
+     * @param peripheral The peripheral that has been added.
      */
-    virtual void OnDeviceAdded(const CPeripheralBus &bus, const CStdString &strLocation);
+    virtual void OnDeviceAdded(const CPeripheralBus &bus, const CPeripheral &peripheral);
 
     /*!
      * @brief Called when a device has been deleted from a bus.
      * @param bus The bus from which the device removed.
-     * @param strLocation The path of the fileitem.
+     * @param peripheral The peripheral that has been removed.
      */
-    virtual void OnDeviceDeleted(const CPeripheralBus &bus, const CStdString &strLocation);
+    virtual void OnDeviceDeleted(const CPeripheralBus &bus, const CPeripheral &peripheral);
 
     /*!
      * @brief Creates a new instance of a peripheral.
@@ -145,6 +149,54 @@ namespace PERIPHERALS
      */
     virtual CPeripheral *GetByPath(const CStdString &strPath) const;
 
+    /*!
+     * @brief Try to let one of the peripherals handle an action.
+     * @param action The change to handle.
+     * @return True when this change was handled by a peripheral (and should not be handled by anything else), false otherwise.
+     */
+    virtual bool OnAction(const CAction &action);
+
+    /*!
+     * @brief Check whether there's a peripheral that reports to be muted.
+     * @return True when at least one peripheral reports to be muted, false otherwise.
+     */
+    virtual bool IsMuted(void);
+
+    /*!
+     * @brief Try to toggle the mute status via a peripheral.
+     * @return True when this change was handled by a peripheral (and should not be handled by anything else), false otherwise.
+     */
+    virtual bool ToggleMute(void);
+
+    /*!
+     * @brief Try to mute the audio via a peripheral.
+     * @return True when this change was handled by a peripheral (and should not be handled by anything else), false otherwise.
+     */
+    virtual bool Mute(void) { return ToggleMute(); } // TODO CEC only supports toggling the mute status at this time
+
+    /*!
+     * @brief Try to unmute the audio via a peripheral.
+     * @return True when this change was handled by a peripheral (and should not be handled by anything else), false otherwise.
+     */
+    virtual bool UnMute(void) { return ToggleMute(); } // TODO CEC only supports toggling the mute status at this time
+
+    /*!
+     * @brief Try to get a keypress from a peripheral.
+     * @param frameTime The current frametime.
+     * @param key The fetched key.
+     * @return True when a keypress was fetched, false otherwise.
+     */
+    virtual bool GetNextKeypress(float frameTime, CKey &key);
+
+    bool SupportsCEC(void) const
+    {
+#if defined(HAVE_LIBCEC)
+      return true;
+#else
+      return false;
+#endif
+    }
+
   private:
     CPeripherals(void);
     bool LoadMappings(void);
@@ -153,6 +205,9 @@ namespace PERIPHERALS
 
     bool                                 m_bInitialised;
     bool                                 m_bIsStarted;
+#if !defined(HAVE_LIBCEC)
+    bool                                 m_bMissingLibCecWarningDisplayed;
+#endif
     std::vector<CPeripheralBus *>        m_busses;
     std::vector<PeripheralDeviceMapping> m_mappings;
     CSettingsCategory *                  m_settings;
index baba6f2..2595a9c 100644 (file)
@@ -1,11 +1,11 @@
 SRCS=PeripheralBus.cpp
 
-ifeq (@USE_LIBUSB@,1)
 ifeq (@USE_LIBUDEV@,1)
 SRCS+=linux/PeripheralBusUSBLibUdev.cpp
-else
-SRCS+=linux/PeripheralBusUSBLibUSB.cpp
 endif
+
+ifeq (@USE_LIBUSB@,1)
+SRCS+=linux/PeripheralBusUSBLibUSB.cpp
 endif
 
 ifeq ($(findstring osx,@ARCH@),osx)
index 4b680e5..ffc0029 100644 (file)
@@ -147,7 +147,7 @@ void CPeripheralBus::UnregisterRemovedDevices(const PeripheralScanResults &resul
       m_peripherals.erase(m_peripherals.begin() + iDevicePtr);
       lock.Leave();
 
-      m_manager->OnDeviceDeleted(*this, peripheral->FileLocation());
+      m_manager->OnDeviceDeleted(*this, *peripheral);
       delete peripheral;
     }
   }
@@ -159,7 +159,7 @@ void CPeripheralBus::RegisterNewDevices(const PeripheralScanResults &results)
   for (unsigned int iResultPtr = 0; iResultPtr < results.m_results.size(); iResultPtr++)
   {
     PeripheralScanResult result = results.m_results.at(iResultPtr);
-    if (!HasPeripheral(result.m_strLocation) && result.m_type != PERIPHERAL_UNKNOWN)
+    if (!HasPeripheral(result.m_strLocation))
       g_peripherals.CreatePeripheral(*this, result.m_type, result.m_strLocation, result.m_iVendorId, result.m_iProductId);
   }
 }
@@ -282,7 +282,7 @@ void CPeripheralBus::Register(CPeripheral *peripheral)
     CLog::Log(LOGNOTICE, "%s - new %s device registered on %s->%s: %s (%s:%s)", __FUNCTION__, PeripheralTypeTranslator::TypeToString(peripheral->Type()), PeripheralTypeTranslator::BusTypeToString(m_type), peripheral->Location().c_str(), peripheral->DeviceName().c_str(), peripheral->VendorIdAsString(), peripheral->ProductIdAsString());
     lock.Leave();
 
-    m_manager->OnDeviceAdded(*this, peripheral->FileLocation());
+    m_manager->OnDeviceAdded(*this, *peripheral);
   }
 }
 
@@ -339,3 +339,8 @@ CPeripheral *CPeripheralBus::GetByPath(const CStdString &strPath) const
 
   return NULL;
 }
+
+size_t CPeripheralBus::GetNumberOfPeripherals() const
+{
+  return m_peripherals.size();
+}
index e1dd2be..da234ca 100644 (file)
@@ -99,6 +99,8 @@ namespace PERIPHERALS
      */
     virtual int GetPeripheralsWithFeature(std::vector<CPeripheral *> &results, const PeripheralFeature feature) const;
 
+    virtual size_t GetNumberOfPeripherals() const;
+
     /*!
      * @brief Get all features that are supported by devices on this bus.
      * @param features All features.
index b0e87c8..3dff72d 100644 (file)
 
 #include "PeripheralBusUSBLibUdev.h"
 #include "peripherals/Peripherals.h"
+extern "C" {
 #include <libudev.h>
-#include <usb.h>
+}
 #include <poll.h>
 #include "utils/log.h"
 
+#ifndef USB_CLASS_PER_INTERFACE
+#define USB_CLASS_PER_INTERFACE         0
+#endif
+
+#ifndef USB_CLASS_AUDIO
+#define USB_CLASS_AUDIO                 1
+#endif
+
+#ifndef USB_CLASS_COMM
+#define USB_CLASS_COMM                  2
+#endif
+
+#ifndef USB_CLASS_HID
+#define USB_CLASS_HID                   3
+#endif
+
+#ifndef USB_CLASS_PHYSICAL
+#define USB_CLASS_PHYSICAL              5
+#endif
+
+#ifndef USB_CLASS_PTP
+#define USB_CLASS_PTP                   6
+#endif
+
+#ifndef USB_CLASS_PRINTER
+#define USB_CLASS_PRINTER               7
+#endif
+
+#ifndef USB_CLASS_MASS_STORAGE
+#define USB_CLASS_MASS_STORAGE          8
+#endif
+
+#ifndef USB_CLASS_HUB
+#define USB_CLASS_HUB                   9
+#endif
+
+#ifndef USB_CLASS_DATA
+#define USB_CLASS_DATA                  10
+#endif
+
+#ifndef USB_CLASS_APP_SPEC
+#define USB_CLASS_APP_SPEC              0xfe
+#endif
+
+#ifndef USB_CLASS_VENDOR_SPEC
+#define USB_CLASS_VENDOR_SPEC           0xff
+#endif
+
 using namespace PERIPHERALS;
 
 CPeripheralBusUSB::CPeripheralBusUSB(CPeripherals *manager) :
@@ -52,48 +101,77 @@ CPeripheralBusUSB::CPeripheralBusUSB(CPeripherals *manager) :
   CLog::Log(LOGDEBUG, "%s - initialised udev monitor: %d", __FUNCTION__, m_udevFd);
 }
 
+CPeripheralBusUSB::~CPeripheralBusUSB(void)
+{
+  StopThread(true);
+  udev_monitor_unref(m_udevMon);
+  udev_unref(m_udev);
+}
+
 bool CPeripheralBusUSB::PerformDeviceScan(PeripheralScanResults &results)
 {
   struct udev_enumerate *enumerate;
   struct udev_list_entry *devices, *dev_list_entry;
-  struct udev_device *dev;
+  struct udev_device *dev(NULL), *parent(NULL);
   enumerate = udev_enumerate_new(m_udev);
   udev_enumerate_scan_devices(enumerate);
   devices = udev_enumerate_get_list_entry(enumerate);
+
+  bool bContinue(true);
+  CStdString strPath, strClass;
   udev_list_entry_foreach(dev_list_entry, devices)
   {
-    const char *strPath;
     strPath = udev_list_entry_get_name(dev_list_entry);
+    if (strPath.IsEmpty())
+      bContinue = false;
 
-    dev = udev_device_new_from_syspath(m_udev, strPath);
-    if (!dev)
-      continue;
-
-    dev = udev_device_get_parent(udev_device_get_parent(dev));
-    if (!dev || !udev_device_get_sysattr_value(dev,"idVendor") || !udev_device_get_sysattr_value(dev, "idProduct"))
-      continue;
+    if (bContinue)
+    {
+      if (!(parent = udev_device_new_from_syspath(m_udev, strPath)))
+        bContinue = false;
+    }
 
-    const char *strClass = udev_device_get_sysattr_value(dev, "bDeviceClass");
-    if (!strClass)
-      continue;
+    if (bContinue)
+    {
+      dev = udev_device_get_parent(udev_device_get_parent(parent));
+      if (!dev || !udev_device_get_sysattr_value(dev,"idVendor") || !udev_device_get_sysattr_value(dev, "idProduct"))
+        bContinue = false;
+    }
 
-    int iClass = PeripheralTypeTranslator::HexStringToInt(strClass);
-    if (iClass == USB_CLASS_PER_INTERFACE)
+    if (bContinue)
     {
-      //TODO
-      iClass = USB_CLASS_HID;
+      strClass = udev_device_get_sysattr_value(dev, "bDeviceClass");
+      if (strClass.IsEmpty())
+        bContinue = false;
     }
 
-    PeripheralScanResult result;
-    result.m_iVendorId   = PeripheralTypeTranslator::HexStringToInt(udev_device_get_sysattr_value(dev, "idVendor"));
-    result.m_iProductId  = PeripheralTypeTranslator::HexStringToInt(udev_device_get_sysattr_value(dev, "idProduct"));
-    result.m_type        = GetType(iClass);
-    result.m_strLocation = udev_device_get_syspath(dev);
+    if (bContinue)
+    {
+      int iClass = PeripheralTypeTranslator::HexStringToInt(strClass.c_str());
+      if (iClass == USB_CLASS_PER_INTERFACE)
+      {
+        //TODO just assume this is a HID device for now, since the only devices that we're currently
+        //     interested in are HID devices
+        iClass = USB_CLASS_HID;
+      }
 
-    if (!results.ContainsResult(result))
-      results.m_results.push_back(result);
+      PeripheralScanResult result;
+      result.m_iVendorId   = PeripheralTypeTranslator::HexStringToInt(udev_device_get_sysattr_value(dev, "idVendor"));
+      result.m_iProductId  = PeripheralTypeTranslator::HexStringToInt(udev_device_get_sysattr_value(dev, "idProduct"));
+      result.m_type        = GetType(iClass);
+      result.m_strLocation = udev_device_get_syspath(dev);
 
-    udev_device_unref(dev);
+      if (!results.ContainsResult(result))
+        results.m_results.push_back(result);
+    }
+
+    bContinue = true;
+    if (parent)
+    {
+      /* unref the _parent_ device */
+      udev_device_unref(parent);
+      parent = NULL;
+    }
   }
   /* Free the enumerator object */
   udev_enumerate_unref(enumerate);
index 5dbd7c9..06c6068 100644 (file)
@@ -34,6 +34,8 @@ namespace PERIPHERALS
   {
   public:
     CPeripheralBusUSB(CPeripherals *manager);
+    virtual ~CPeripheralBusUSB(void);
+
     virtual void Clear(void);
 
     /*!
index ea9d0ed..3bcd954 100644 (file)
@@ -30,6 +30,7 @@ using namespace PERIPHERALS;
 #include <IOKit/usb/IOUSBLib.h>
 #include <IOKit/hid/IOHIDLib.h>
 #include <IOKit/hid/IOHIDKeys.h>
+#include <IOKit/serial/IOSerialKeys.h>
 
 typedef struct USBDevicePrivateData {
   CPeripheralBusUSB     *refCon;
@@ -132,7 +133,7 @@ void CPeripheralBusUSB::DeviceDetachCallback(void *refCon, io_service_t service,
     }
     privateDataRef->refCon->ScanForDevices();
     
-    CLog::Log(LOGDEBUG, "HID Device Detach:%s, %s\n",
+    CLog::Log(LOGDEBUG, "USB Device Detach:%s, %s\n",
       privateDataRef->deviceName.c_str(), privateDataRef->result.m_strLocation.c_str());
     result = IOObjectRelease(privateDataRef->notification);
     delete privateDataRef;
@@ -185,11 +186,10 @@ void CPeripheralBusUSB::DeviceAttachCallback(CPeripheralBusUSB* refCon, io_itera
     result = (*deviceInterface)->GetLocationID(   deviceInterface, &locationId);
     result = (*deviceInterface)->GetDeviceClass(  deviceInterface, &bDeviceClass);
 
-    // we only care about usb devices with an HID interface class
     io_service_t usbInterface;
     io_iterator_t interface_iterator;
     IOUSBFindInterfaceRequest  request;
-    request.bInterfaceClass    = kUSBHIDInterfaceClass;
+    request.bInterfaceClass    = kIOUSBFindInterfaceDontCare;
     request.bInterfaceSubClass = kIOUSBFindInterfaceDontCare;
     request.bInterfaceProtocol = kIOUSBFindInterfaceDontCare;
     request.bAlternateSetting  = kIOUSBFindInterfaceDontCare;
@@ -216,13 +216,15 @@ void CPeripheralBusUSB::DeviceAttachCallback(CPeripheralBusUSB* refCon, io_itera
         continue;
       }
 
-      // finally we can get to bInterfaceClass/bInterfaceProtocol
+      // finally we can get to the bInterfaceClass
       // we should also check for kHIDKeyboardInterfaceProtocol but
       // some IR remotes that emulate an HID keyboard do not report this.
       UInt8 bInterfaceClass;
       result = (*interfaceInterface)->GetInterfaceClass(interfaceInterface, &bInterfaceClass);
-      if (bInterfaceClass == kUSBHIDInterfaceClass)
+      if (bInterfaceClass == kUSBHIDInterfaceClass || bInterfaceClass == kUSBCommunicationDataInterfaceClass)
       {
+        char ttlDeviceFilePath[MAXPATHLEN] = {0};
+        CFStringRef deviceFilePathAsCFString;
         USBDevicePrivateData *privateDataRef;
         privateDataRef = new USBDevicePrivateData;
         // save the device info to our private data.
@@ -230,7 +232,33 @@ void CPeripheralBusUSB::DeviceAttachCallback(CPeripheralBusUSB* refCon, io_itera
         privateDataRef->deviceName = deviceName;
         privateDataRef->result.m_iVendorId  = vendorId;
         privateDataRef->result.m_iProductId = productId;
-        privateDataRef->result.m_strLocation.Format("%d", locationId);
+
+        if (bInterfaceClass == kUSBCommunicationDataInterfaceClass)
+        {
+          // fetch the bds device path if this is USB serial device.
+          // to do this we have to switch from the kIOUSBPlane to
+          // kIOServicePlane, then we can search down for the path.
+          io_registry_entry_t parent;
+          kern_return_t kresult;
+          kresult = IORegistryEntryGetParentEntry(usbInterface, kIOServicePlane, &parent);
+          if (kresult == KERN_SUCCESS)
+          {
+            deviceFilePathAsCFString = (CFStringRef)IORegistryEntrySearchCFProperty(parent,
+              kIOServicePlane, CFSTR(kIOCalloutDeviceKey), kCFAllocatorDefault, kIORegistryIterateRecursively);
+            if (deviceFilePathAsCFString)
+            {
+              // Convert the path from a CFString to a NULL-terminated C string
+              CFStringGetCString((CFStringRef)deviceFilePathAsCFString,
+                ttlDeviceFilePath, MAXPATHLEN - 1, kCFStringEncodingASCII);
+              CFRelease(deviceFilePathAsCFString);
+            }
+            IOObjectRelease(parent);
+          }
+        }
+        if (strlen(ttlDeviceFilePath))
+          privateDataRef->result.m_strLocation.Format("%s", ttlDeviceFilePath);
+        else
+          privateDataRef->result.m_strLocation.Format("%d", locationId);
 
         if (bDeviceClass == kUSBCompositeClass)
           privateDataRef->result.m_type = refCon->GetType(bInterfaceClass);
@@ -250,7 +278,7 @@ void CPeripheralBusUSB::DeviceAttachCallback(CPeripheralBusUSB* refCon, io_itera
           if (result == kIOReturnSuccess)
           {
             refCon->m_scan_results.m_results.push_back(privateDataRef->result);
-            CLog::Log(LOGDEBUG, "HID Device Attach:%s, %s\n",
+            CLog::Log(LOGDEBUG, "USB Device Attach:%s, %s\n",
               deviceName, privateDataRef->result.m_strLocation.c_str());
           }
           else
index 183318a..53ec8f4 100644 (file)
@@ -40,16 +40,10 @@ CPeripheralBusUSB::CPeripheralBusUSB(CPeripherals *manager) :
 
 bool CPeripheralBusUSB::PerformDeviceScan(PeripheralScanResults &results)
 {
-  bool bReturn(true);
-
-  /* add device scans for non-generic devices here */
-
-  bReturn |= PerformDeviceScan(&USB_HID_GUID, PERIPHERAL_HID, results);
-  //disabled scanning for disks, since nothing is being done with them
-  // bReturn |= PerformDeviceScan(&USB_DISK_GUID, PERIPHERAL_DISK, results);
-  bReturn |= PerformDeviceScan(&USB_RAW_GUID, PERIPHERAL_UNKNOWN, results);
-
-  return bReturn;
+  /* XXX we'll just scan the RAW guid and find all devices. they'll show up as type 'unknown' in the UI,
+     but the other option is that they're detected more than once, because RAW will return all devices.
+     we have to scan the RAW guid here, because not every device is found by it's GUID correctly, e.g. CDC adapters. */
+  return PerformDeviceScan(&USB_RAW_GUID, PERIPHERAL_UNKNOWN, results);
 }
 
 bool CPeripheralBusUSB::PerformDeviceScan(const GUID *guid, const PeripheralType type, PeripheralScanResults &results)
@@ -129,7 +123,8 @@ bool CPeripheralBusUSB::PerformDeviceScan(const GUID *guid, const PeripheralType
       result.m_iVendorId    = PeripheralTypeTranslator::HexStringToInt(strVendorId.c_str());
       result.m_iProductId   = PeripheralTypeTranslator::HexStringToInt(strProductId.c_str());
 
-      results.m_results.push_back(result);
+      if (!results.ContainsResult(result))
+        results.m_results.push_back(result);
     }
   }
 
index e871c84..13f28cb 100644 (file)
@@ -12,5 +12,5 @@ endif
 
 LIB = peripheral-devices.a
 
-include ../../../Makefile.include
+include @abs_top_srcdir@/Makefile.include
 -include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS)))
index 27ab0a4..3d9a238 100644 (file)
 using namespace PERIPHERALS;
 using namespace std;
 
+struct SortBySettingsOrder
+{
+  bool operator()(const CSetting *left, const CSetting *right)
+  {
+    return left->GetOrder() < right->GetOrder();
+  }
+};
+
 CPeripheral::CPeripheral(const PeripheralType type, const PeripheralBusType busType, const CStdString &strLocation, const CStdString &strDeviceName, int iVendorId, int iProductId) :
   m_type(type),
   m_busType(busType),
@@ -37,13 +45,13 @@ CPeripheral::CPeripheral(const PeripheralType type, const PeripheralBusType busT
   m_strDeviceName(strDeviceName),
   m_strFileLocation(StringUtils::EmptyString),
   m_iVendorId(iVendorId),
-  m_strVendorId(PeripheralTypeTranslator::IntToHexString(iVendorId)),
   m_iProductId(iProductId),
-  m_strProductId(PeripheralTypeTranslator::IntToHexString(iProductId)),
   m_bInitialised(false),
   m_bHidden(false),
   m_bError(false)
 {
+  PeripheralTypeTranslator::FormatHexString(iVendorId, m_strVendorId);
+  PeripheralTypeTranslator::FormatHexString(iProductId, m_strProductId);
   m_strFileLocation.Format("peripherals://%s/%s.dev", PeripheralTypeTranslator::BusTypeToString(busType), strLocation.c_str());
 }
 
@@ -54,9 +62,9 @@ CPeripheral::CPeripheral(void) :
   m_strDeviceName(StringUtils::EmptyString),
   m_strFileLocation(StringUtils::EmptyString),
   m_iVendorId(0),
-  m_strVendorId(PeripheralTypeTranslator::IntToHexString(0)),
+  m_strVendorId("0000"),
   m_iProductId(0),
-  m_strProductId(PeripheralTypeTranslator::IntToHexString(0)),
+  m_strProductId("0000"),
   m_bInitialised(false),
   m_bHidden(false)
 {
@@ -64,7 +72,7 @@ CPeripheral::CPeripheral(void) :
 
 CPeripheral::~CPeripheral(void)
 {
-  PersistSettings();
+  PersistSettings(true);
 
   for (unsigned int iSubdevicePtr = 0; iSubdevicePtr < m_subDevices.size(); iSubdevicePtr++)
     delete m_subDevices.at(iSubdevicePtr);
@@ -135,7 +143,7 @@ bool CPeripheral::Initialise(void)
     return bReturn;
 
   g_peripherals.GetSettingsFromMapping(*this);
-  m_strSettingsFile.Format("special://profile/peripheral_data/%s_%s_%s.xml", PeripheralTypeTranslator::BusTypeToString(m_busType), m_strVendorId, m_strProductId);
+  m_strSettingsFile.Format("special://profile/peripheral_data/%s_%s_%s.xml", PeripheralTypeTranslator::BusTypeToString(m_busType), m_strVendorId.c_str(), m_strProductId.c_str());
   LoadPersistedSettings();
 
   for (unsigned int iFeaturePtr = 0; iFeaturePtr < m_features.size(); iFeaturePtr++)
@@ -168,6 +176,15 @@ bool CPeripheral::IsMultiFunctional(void) const
   return m_subDevices.size() > 0;
 }
 
+vector<CSetting *> CPeripheral::GetSettings(void) const
+{
+  vector<CSetting *> settings;
+  for (map<CStdString, CSetting *>::const_iterator it = m_settings.begin(); it != m_settings.end(); it++)
+    settings.push_back(it->second);
+  sort(settings.begin(), settings.end(), SortBySettingsOrder());
+  return settings;
+}
+
 void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
 {
   if (!setting)
@@ -183,7 +200,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
     case SETTINGS_TYPE_BOOL:
       {
         const CSettingBool *mappedSetting = (const CSettingBool *) setting;
-        CSettingBool *boolSetting = new CSettingBool(0, strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->GetControlType());
+        CSettingBool *boolSetting = new CSettingBool(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->GetControlType());
         if (boolSetting)
         {
           boolSetting->SetVisible(mappedSetting->IsVisible());
@@ -194,7 +211,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
     case SETTINGS_TYPE_INT:
       {
         const CSettingInt *mappedSetting = (const CSettingInt *) setting;
-        CSettingInt *intSetting = new CSettingInt(0, strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_iMin, mappedSetting->m_iStep, mappedSetting->m_iMax, mappedSetting->GetControlType(), mappedSetting->m_strFormat);
+        CSettingInt *intSetting = new CSettingInt(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_iMin, mappedSetting->m_iStep, mappedSetting->m_iMax, mappedSetting->GetControlType(), mappedSetting->m_strFormat);
         if (intSetting)
         {
           intSetting->SetVisible(mappedSetting->IsVisible());
@@ -205,7 +222,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
     case SETTINGS_TYPE_FLOAT:
       {
         const CSettingFloat *mappedSetting = (const CSettingFloat *) setting;
-        CSettingFloat *floatSetting = new CSettingFloat(0, strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_fMin, mappedSetting->m_fStep, mappedSetting->m_fMax, mappedSetting->GetControlType());
+        CSettingFloat *floatSetting = new CSettingFloat(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_fMin, mappedSetting->m_fStep, mappedSetting->m_fMax, mappedSetting->GetControlType());
         if (floatSetting)
         {
           floatSetting->SetVisible(mappedSetting->IsVisible());
@@ -216,7 +233,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
     case SETTINGS_TYPE_STRING:
       {
         const CSettingString *mappedSetting = (const CSettingString *) setting;
-        CSettingString *stringSetting = new CSettingString(0, strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData().c_str(), mappedSetting->GetControlType(), mappedSetting->m_bAllowEmpty, mappedSetting->m_iHeadingString);
+        CSettingString *stringSetting = new CSettingString(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData().c_str(), mappedSetting->GetControlType(), mappedSetting->m_bAllowEmpty, mappedSetting->m_iHeadingString);
         if (stringSetting)
         {
           stringSetting->SetVisible(mappedSetting->IsVisible());
@@ -323,7 +340,7 @@ void CPeripheral::SetSetting(const CStdString &strKey, bool bValue)
       bool bChanged(boolSetting->GetData() != bValue);
       boolSetting->SetData(bValue);
       if (bChanged && m_bInitialised)
-        OnSettingChanged(strKey);
+        m_changedSettings.insert(strKey);
     }
   }
 }
@@ -339,7 +356,7 @@ void CPeripheral::SetSetting(const CStdString &strKey, int iValue)
       bool bChanged(intSetting->GetData() != iValue);
       intSetting->SetData(iValue);
       if (bChanged && m_bInitialised)
-        OnSettingChanged(strKey);
+        m_changedSettings.insert(strKey);
     }
   }
 }
@@ -355,11 +372,26 @@ void CPeripheral::SetSetting(const CStdString &strKey, float fValue)
       bool bChanged(floatSetting->GetData() != fValue);
       floatSetting->SetData(fValue);
       if (bChanged && m_bInitialised)
-        OnSettingChanged(strKey);
+        m_changedSettings.insert(strKey);
     }
   }
 }
 
+void CPeripheral::SetSettingVisible(const CStdString &strKey, bool bSetTo)
+{
+  map<CStdString, CSetting *>::iterator it = m_settings.find(strKey);
+  if (it != m_settings.end())
+    (*it).second->SetVisible(bSetTo);
+}
+
+bool CPeripheral::IsSettingVisible(const CStdString &strKey) const
+{
+  map<CStdString, CSetting *>::const_iterator it = m_settings.find(strKey);
+  if (it != m_settings.end())
+    return (*it).second->IsVisible();
+  return false;
+}
+
 void CPeripheral::SetSetting(const CStdString &strKey, const CStdString &strValue)
 {
   map<CStdString, CSetting *>::iterator it = m_settings.find(strKey);
@@ -373,7 +405,7 @@ void CPeripheral::SetSetting(const CStdString &strKey, const CStdString &strValu
         bool bChanged(!stringSetting->GetData().Equals(strValue));
         stringSetting->SetData(strValue);
         if (bChanged && m_bInitialised)
-          OnSettingChanged(strKey);
+          m_changedSettings.insert(strKey);
       }
     }
     else if ((*it).second->GetType() == SETTINGS_TYPE_INT)
@@ -385,7 +417,7 @@ void CPeripheral::SetSetting(const CStdString &strKey, const CStdString &strValu
   }
 }
 
-void CPeripheral::PersistSettings(void) const
+void CPeripheral::PersistSettings(bool bExiting /* = false */)
 {
   TiXmlDocument doc;
   TiXmlElement node("settings");
@@ -433,6 +465,13 @@ void CPeripheral::PersistSettings(void) const
   }
 
   doc.SaveFile(m_strSettingsFile);
+
+  if (!bExiting)
+  {
+    for (set<CStdString>::const_iterator it = m_changedSettings.begin(); it != m_changedSettings.end(); it++)
+      OnSettingChanged(*it);
+  }
+  m_changedSettings.clear();
 }
 
 void CPeripheral::LoadPersistedSettings(void)
@@ -456,26 +495,24 @@ void CPeripheral::ResetDefaultSettings(void)
 {
   ClearSettings();
   g_peripherals.GetSettingsFromMapping(*this);
-  OnSettingsChanged();
-}
 
-void CPeripheral::ClearSettings(void)
-{
   map<CStdString, CSetting *>::iterator it = m_settings.begin();
   while (it != m_settings.end())
   {
-    delete (*it).second;
+    m_changedSettings.insert((*it).first);
     ++it;
   }
-  m_settings.clear();
+
+  PersistSettings();
 }
 
-void CPeripheral::OnSettingsChanged(void)
+void CPeripheral::ClearSettings(void)
 {
   map<CStdString, CSetting *>::iterator it = m_settings.begin();
   while (it != m_settings.end())
   {
-    OnSettingChanged((*it).first);
+    delete (*it).second;
     ++it;
   }
+  m_settings.clear();
 }
index 291f679..1c6ca71 100644 (file)
@@ -20,7 +20,7 @@
  *
  */
 
-#include <vector>
+#include <set>
 #include "utils/StdString.h"
 #include "peripherals/PeripheralTypes.h"
 
@@ -32,7 +32,7 @@ namespace PERIPHERALS
 
   class CPeripheral
   {
-    friend class CGUIDialogPeripheralSettings;;
+    friend class CGUIDialogPeripheralSettings;
 
   public:
     CPeripheral(const PeripheralType type, const PeripheralBusType busType, const CStdString &strLocation, const CStdString &strDeviceName, int iVendorId, int iProductId);
@@ -45,9 +45,9 @@ namespace PERIPHERALS
     const CStdString &FileLocation(void) const     { return m_strFileLocation; }
     const CStdString &Location(void) const         { return m_strLocation; }
     int VendorId(void) const                       { return m_iVendorId; }
-    const char *VendorIdAsString(void) const       { return m_strVendorId; }
+    const char *VendorIdAsString(void) const       { return m_strVendorId.c_str(); }
     int ProductId(void) const                      { return m_iProductId; }
-    const char *ProductIdAsString(void) const      { return m_strProductId; }
+    const char *ProductIdAsString(void) const      { return m_strProductId.c_str(); }
     const PeripheralType Type(void) const          { return m_type; }
     const PeripheralBusType GetBusType(void) const { return m_busType; };
     const CStdString &DeviceName(void) const       { return m_strDeviceName; }
@@ -87,11 +87,6 @@ namespace PERIPHERALS
     virtual void OnSettingChanged(const CStdString &strChangedSetting) {};
 
     /*!
-     * @brief Called when one or more settings changed. Calls OnSettingChanged for every setting.
-     */
-    virtual void OnSettingsChanged(void);
-
-    /*!
      * @brief Get all subdevices if this device is multifunctional.
      * @param subDevices The subdevices.
      */
@@ -133,6 +128,8 @@ namespace PERIPHERALS
      */
     virtual const CStdString GetSettingString(const CStdString &strKey) const;
     virtual void SetSetting(const CStdString &strKey, const CStdString &strValue);
+    virtual void SetSettingVisible(const CStdString &strKey, bool bSetTo);
+    virtual bool IsSettingVisible(const CStdString &strKey) const;
 
     virtual int GetSettingInt(const CStdString &strKey) const;
     virtual void SetSetting(const CStdString &strKey, int iValue);
@@ -143,10 +140,12 @@ namespace PERIPHERALS
     virtual float GetSettingFloat(const CStdString &strKey) const;
     virtual void SetSetting(const CStdString &strKey, float fValue);
 
-    virtual void PersistSettings(void) const;
+    virtual void PersistSettings(bool bExiting = false);
     virtual void LoadPersistedSettings(void);
     virtual void ResetDefaultSettings(void);
 
+    virtual std::vector<CSetting *> GetSettings(void) const;
+
     virtual bool ErrorOccured(void) const { return m_bError; }
 
   protected:
@@ -159,14 +158,15 @@ namespace PERIPHERALS
     CStdString                       m_strSettingsFile;
     CStdString                       m_strFileLocation;
     int                              m_iVendorId;
-    char *                           m_strVendorId;
+    CStdString                       m_strVendorId;
     int                              m_iProductId;
-    char *                           m_strProductId;
+    CStdString                       m_strProductId;
     bool                             m_bInitialised;
     bool                             m_bHidden;
     bool                             m_bError;
     std::vector<PeripheralFeature>   m_features;
     std::vector<CPeripheral *>       m_subDevices;
     std::map<CStdString, CSetting *> m_settings;
+    std::set<CStdString>             m_changedSettings;
   };
 }
index bdc97a8..0cb6602 100644 (file)
  *  http://www.gnu.org/copyleft/gpl.html
  *
  */
-#include "system.h"
 
-#ifdef HAVE_LIBCEC
+#include "system.h"
+#if defined(HAVE_LIBCEC)
 #include "PeripheralCecAdapter.h"
 #include "input/XBIRRemote.h"
 #include "Application.h"
+#include "DynamicDll.h"
 #include "threads/SingleLock.h"
 #include "dialogs/GUIDialogKaiToast.h"
 #include "guilib/LocalizeStrings.h"
 #include "peripherals/Peripherals.h"
 #include "peripherals/bus/PeripheralBus.h"
+#include "settings/GUISettings.h"
+#include "settings/Settings.h"
 #include "utils/log.h"
+#include "utils/Variant.h"
 
-#include <libcec/CECExports.h>
+#include <libcec/cec.h>
 
 using namespace PERIPHERALS;
 using namespace ANNOUNCEMENT;
 using namespace CEC;
 
-#define CEC_LIB_SUPPORTED_VERSION 2
+#define CEC_LIB_SUPPORTED_VERSION 0x1500
+
+/* time in seconds to ignore standby commands from devices after the screensaver has been activated */
+#define SCREENSAVER_TIMEOUT       10
+#define VOLUME_CHANGE_TIMEOUT     250
+#define VOLUME_REFRESH_TIMEOUT    100
+
+class DllLibCECInterface
+{
+public:
+  virtual ~DllLibCECInterface() {}
+  virtual ICECAdapter* CECInitialise(libcec_configuration *configuration)=0;
+  virtual void*        CECDestroy(ICECAdapter *adapter)=0;
+};
+
+class DllLibCEC : public DllDynamic, DllLibCECInterface
+{
+  DECLARE_DLL_WRAPPER(DllLibCEC, DLL_PATH_LIBCEC)
+
+  DEFINE_METHOD1(ICECAdapter*, CECInitialise, (libcec_configuration *p1))
+  DEFINE_METHOD1(void*       , CECDestroy,    (ICECAdapter *p1))
+
+  BEGIN_METHOD_RESOLVE()
+    RESOLVE_METHOD_RENAME(CECInitialise,  CECInitialise)
+    RESOLVE_METHOD_RENAME(CECDestroy, CECDestroy)
+  END_METHOD_RESOLVE()
+};
 
 CPeripheralCecAdapter::CPeripheralCecAdapter(const PeripheralType type, const PeripheralBusType busType, const CStdString &strLocation, const CStdString &strDeviceName, int iVendorId, int iProductId) :
   CPeripheralHID(type, busType, strLocation, strDeviceName, iVendorId, iProductId),
-  CThread("CEC parser"),
+  CThread("CEC Adapter"),
   m_bStarted(false),
   m_bHasButton(false),
-  m_bIsReady(false)
+  m_bIsReady(false),
+  m_bHasConnectedAudioSystem(false),
+  m_strMenuLanguage("???"),
+  m_lastKeypress(0),
+  m_lastChange(VOLUME_CHANGE_NONE),
+  m_iExitCode(0),
+  m_bIsMuted(false) // TODO fetch the correct initial value when system audiostatus is implemented in libCEC
 {
-  m_cecParser = LoadLibCec("XBMC", CECDEVICE_PLAYBACKDEVICE1);
-  if (!m_cecParser || m_cecParser->GetMinVersion() > CEC_LIB_SUPPORTED_VERSION)
-  {
-    /* unsupported libcec version */
-    CLog::Log(LOGERROR, g_localizeStrings.Get(36013).c_str(), CEC_LIB_SUPPORTED_VERSION, m_cecParser ? m_cecParser->GetMinVersion() : -1);
+  m_button.iButton = 0;
+  m_button.iDuration = 0;
+  m_screensaverLastActivated.SetValid(false);
 
-    CStdString strMessage;
-    strMessage.Format(g_localizeStrings.Get(36013).c_str(), CEC_LIB_SUPPORTED_VERSION, m_cecParser ? m_cecParser->GetMinVersion() : -1);
-    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(36000), strMessage);
-    m_bError = true;
-    UnloadLibCec(m_cecParser);
-    m_cecParser = NULL;
-  }
-  else
-  {
-    m_features.push_back(FEATURE_CEC);
-  }
+  m_configuration.Clear();
+  m_features.push_back(FEATURE_CEC);
 }
 
 CPeripheralCecAdapter::~CPeripheralCecAdapter(void)
 {
   CAnnouncementManager::RemoveAnnouncer(this);
-  if (m_cecParser)
+
+  m_bStop = true;
+  StopThread(true);
+
+  if (m_dll && m_cecAdapter)
   {
-    FlushLog();
-    m_cecParser->Close(1000);
-    UnloadLibCec(m_cecParser);
+    m_dll->CECDestroy(m_cecAdapter);
+    m_cecAdapter = NULL;
+    delete m_dll;
+    m_dll = NULL;
   }
-  StopThread(true);
 }
 
-void CPeripheralCecAdapter::Announce(EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data)
+void CPeripheralCecAdapter::Announce(AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data)
 {
-  if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "ApplicationStop") && m_bIsReady)
+  if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "OnQuit") && m_bIsReady)
   {
-    if (GetSettingBool("cec_power_off_shutdown"))
-      m_cecParser->PowerOffDevices();
-    else if (GetSettingBool("cec_mark_inactive_shutdown"))
-      m_cecParser->SetInactiveView();
+    m_iExitCode = data.asInteger(0);
+    StopThread(false);
   }
-  else if (flag == GUI && !strcmp(sender, "xbmc") && !strcmp(message, "OnScreensaverDeactivated") && GetSettingBool("cec_standby_screensaver") && m_bIsReady)
+  else if (flag == GUI && !strcmp(sender, "xbmc") && !strcmp(message, "OnScreensaverDeactivated") && m_bIsReady)
   {
-    m_cecParser->PowerOnDevices();
+    if (m_configuration.bPowerOffScreensaver == 1)
+    {
+      // power off/on on screensaver is set, and devices to wake are set
+      if (!m_configuration.wakeDevices.IsEmpty())
+        m_cecAdapter->PowerOnDevices(CECDEVICE_BROADCAST);
+
+      // the option to make XBMC the active source is set
+      if (m_configuration.bActivateSource == 1)
+        m_cecAdapter->SetActiveSource();
+    }
   }
-  else if (flag == GUI && !strcmp(sender, "xbmc") && !strcmp(message, "OnScreensaverActivated") && GetSettingBool("cec_standby_screensaver"))
+  else if (flag == GUI && !strcmp(sender, "xbmc") && !strcmp(message, "OnScreensaverActivated") && m_bIsReady)
   {
-    m_cecParser->StandbyDevices();
+    // Don't put devices to standby if application is currently playing
+    if ((!g_application.IsPlaying() || g_application.IsPaused()) && m_configuration.bPowerOffScreensaver == 1)
+    {
+      m_screensaverLastActivated = CDateTime::GetCurrentDateTime();
+      // only power off when we're the active source
+      if (m_cecAdapter->IsLibCECActiveSource())
+        m_cecAdapter->StandbyDevices(CECDEVICE_BROADCAST);
+    }
   }
   else if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "OnSleep"))
   {
-    if (GetSettingBool("cec_power_off_shutdown") && m_bIsReady)
-      m_cecParser->PowerOffDevices();
+    // this will also power off devices when we're the active source
+    CSingleLock lock(m_critSection);
+    m_bStop = true;
+    WaitForThreadExit(0);
   }
   else if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "OnWake"))
   {
+    // reconnect to the device
+    CSingleLock lock(m_critSection);
     CLog::Log(LOGDEBUG, "%s - reconnecting to the CEC adapter after standby mode", __FUNCTION__);
-    m_cecParser->Close();
 
-    CStdString strPort = GetSettingString("port");
-    if (!m_cecParser->Open(strPort.c_str(), 10000))
-    {
-      CLog::Log(LOGERROR, "%s - failed to reconnect to the CEC adapter", __FUNCTION__);
-      m_bStop = true;
-    }
-    else
-    {
-      if (GetSettingBool("cec_power_on_startup"))
-        PowerOnCecDevices();
-      m_cecParser->SetActiveView();
-    }
+    // close the previous connection
+    m_cecAdapter->Close();
+
+    // and open a new one
+    m_bStop = false;
+    Create();
   }
 }
 
 bool CPeripheralCecAdapter::InitialiseFeature(const PeripheralFeature feature)
 {
-  if (feature == FEATURE_CEC && !m_bStarted)
+  if (feature == FEATURE_CEC && !m_bStarted && GetSettingBool("enabled"))
   {
+    SetConfigurationFromSettings();
+    m_callbacks.CBCecLogMessage           = &CecLogMessage;
+    m_callbacks.CBCecKeyPress             = &CecKeyPress;
+    m_callbacks.CBCecCommand              = &CecCommand;
+    m_callbacks.CBCecConfigurationChanged = &CecConfiguration;
+    m_configuration.callbackParam         = this;
+    m_configuration.callbacks             = &m_callbacks;
+
+    m_dll = new DllLibCEC;
+    if (m_dll->Load() && m_dll->IsLoaded())
+      m_cecAdapter = m_dll->CECInitialise(&m_configuration);
+    else
+      return false;
+
+    if (m_configuration.serverVersion < CEC_LIB_SUPPORTED_VERSION)
+    {
+      /* unsupported libcec version */
+      CLog::Log(LOGERROR, g_localizeStrings.Get(36013).c_str(), CEC_LIB_SUPPORTED_VERSION, m_cecAdapter ? m_configuration.serverVersion : -1);
+
+      CStdString strMessage;
+      strMessage.Format(g_localizeStrings.Get(36013).c_str(), CEC_LIB_SUPPORTED_VERSION, m_cecAdapter ? m_configuration.serverVersion : -1);
+      CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(36000), strMessage);
+      m_bError = true;
+      if (m_cecAdapter)
+        m_dll->CECDestroy(m_cecAdapter);
+      m_cecAdapter = NULL;
+
+      m_features.clear();
+      return false;
+    }
+    else
+    {
+      CLog::Log(LOGDEBUG, "%s - using libCEC v%s", __FUNCTION__, m_cecAdapter->ToString((cec_server_version)m_configuration.serverVersion));
+    }
+
     m_bStarted = true;
     Create();
   }
@@ -130,320 +205,605 @@ bool CPeripheralCecAdapter::InitialiseFeature(const PeripheralFeature feature)
   return CPeripheral::InitialiseFeature(feature);
 }
 
-void CPeripheralCecAdapter::Process(void)
+CStdString CPeripheralCecAdapter::GetComPort(void)
 {
-  if (!GetSettingBool("enabled"))
-  {
-    CLog::Log(LOGDEBUG, "%s - CEC adapter is disabled in peripheral settings", __FUNCTION__);
-    m_bStarted = false;
-    return;
-  }
-
-  // the device needs a second to settle after it's plugged in
-  Sleep(CEC_SETTLE_DOWN_TIME);
-
   CStdString strPort = GetSettingString("port");
   if (strPort.IsEmpty())
   {
-    std::vector<cec_device> deviceList;
     strPort = m_strFileLocation;
+    cec_adapter deviceList[10];
     TranslateComPort(strPort);
-    int iFound = m_cecParser->FindDevices(deviceList, strPort);
+    uint8_t iFound = m_cecAdapter->FindAdapters(deviceList, 10, strPort.c_str());
 
     if (iFound <= 0)
     {
       CLog::Log(LOGWARNING, "%s - no CEC adapters found on %s", __FUNCTION__, strPort.c_str());
       CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(36000), g_localizeStrings.Get(36011));
-      m_bStarted = false;
-      return;
+      strPort = "";
     }
     else
     {
-      cec_device dev = deviceList[0];
+      cec_adapter *dev = &deviceList[0];
       if (iFound > 1)
         CLog::Log(LOGDEBUG, "%s - multiple com ports found for device. taking the first one", __FUNCTION__);
       else
-        CLog::Log(LOGDEBUG, "%s - autodetect com port '%s'", __FUNCTION__, dev.comm.c_str());
-      if (!strPort.Equals(dev.comm.c_str()))
-      {
-        strPort = dev.comm.c_str();
-        SetSetting("port", strPort);
-      }
+        CLog::Log(LOGDEBUG, "%s - autodetect com port '%s'", __FUNCTION__, dev->comm);
+
+      strPort = dev->comm;
     }
   }
 
+  return strPort;
+}
+
+bool CPeripheralCecAdapter::OpenConnection(void)
+{
+  bool bIsOpen(false);
+
+  if (!GetSettingBool("enabled"))
+  {
+    CLog::Log(LOGDEBUG, "%s - CEC adapter is disabled in peripheral settings", __FUNCTION__);
+    m_bStarted = false;
+    return bIsOpen;
+  }
+  
+  CStdString strPort = GetComPort();
+  if (strPort.empty())
+    return bIsOpen;
+
   // open the CEC adapter
   CLog::Log(LOGDEBUG, "%s - opening a connection to the CEC adapter: %s", __FUNCTION__, strPort.c_str());
 
-  if (!m_cecParser->Open(strPort.c_str(), 10000))
+  // scanning the CEC bus takes about 5 seconds, so display a notification to inform users that we're busy
+  CStdString strMessage;
+  strMessage.Format(g_localizeStrings.Get(21336), g_localizeStrings.Get(36000));
+  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), strMessage);
+
+  bool bConnectionFailedDisplayed(false);
+
+  while (!m_bStop && !bIsOpen)
   {
-    FlushLog();
-    CLog::Log(LOGERROR, "%s - could not opening a connection to the CEC adapter", __FUNCTION__);
-    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(36000), g_localizeStrings.Get(36012));
-    m_bStarted = false;
-    return;
+    if ((bIsOpen = m_cecAdapter->Open(strPort.c_str(), 10000)) == false)
+    {
+      CLog::Log(LOGERROR, "%s - could not opening a connection to the CEC adapter", __FUNCTION__);
+      if (!bConnectionFailedDisplayed)
+        CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(36000), g_localizeStrings.Get(36012));
+      bConnectionFailedDisplayed = true;
+
+      Sleep(10000);
+    }
+  }
+
+  if (bIsOpen)
+  {
+    CLog::Log(LOGDEBUG, "%s - connection to the CEC adapter opened", __FUNCTION__);
+
+    if (!m_configuration.wakeDevices.IsEmpty())
+      m_cecAdapter->PowerOnDevices(CECDEVICE_BROADCAST);
+
+    if (m_configuration.bActivateSource == 1)
+      m_cecAdapter->SetActiveSource();
   }
 
-  CLog::Log(LOGDEBUG, "%s - connection to the CEC adapter opened", __FUNCTION__);
-  m_bIsReady = true;
+  return bIsOpen;
+}
+
+void CPeripheralCecAdapter::Process(void)
+{
+  if (!OpenConnection())
+    return;
+
   CAnnouncementManager::AddAnnouncer(this);
 
-  if (GetSettingBool("cec_power_on_startup"))
-    PowerOnCecDevices();
-  m_cecParser->SetActiveView();
-  FlushLog();
+  m_queryThread = new CPeripheralCecAdapterUpdateThread(this, &m_configuration);
+  m_queryThread->Create(false);
 
   while (!m_bStop)
   {
-    FlushLog();
-    ProcessNextCommand();
-    Sleep(50);
+    if (!m_bStop)
+      ProcessVolumeChange();
+
+    if (!m_bStop)
+      Sleep(5);
+  }
+
+  delete m_queryThread;
+
+  if (m_iExitCode != EXITCODE_REBOOT)
+  {
+    if (m_cecAdapter->IsLibCECActiveSource())
+    {
+      if (!m_configuration.powerOffDevices.IsEmpty())
+      {
+        CLog::Log(LOGDEBUG, "%s - sending standby commands", __FUNCTION__);
+        m_cecAdapter->StandbyDevices();
+      }
+      else if (m_configuration.bSendInactiveSource == 1)
+      {
+        CLog::Log(LOGDEBUG, "%s - sending inactive source commands", __FUNCTION__);
+        m_cecAdapter->SetInactiveView();
+      }
+    }
+    else
+    {
+      CLog::Log(LOGDEBUG, "%s - XBMC is not the active source, not sending any standby commands", __FUNCTION__);
+    }
   }
 
-  m_cecParser->Close(500);
+  m_cecAdapter->Close();
 
   CLog::Log(LOGDEBUG, "%s - CEC adapter processor thread ended", __FUNCTION__);
   m_bStarted = false;
 }
 
-bool CPeripheralCecAdapter::PowerOffCecDevices(void)
+bool CPeripheralCecAdapter::HasConnectedAudioSystem(void)
 {
-  bool bReturn(false);
+  CSingleLock lock(m_critSection);
+  return m_bHasConnectedAudioSystem;
+}
 
-  if (m_cecParser && m_bIsReady)
+void CPeripheralCecAdapter::SetAudioSystemConnected(bool bSetTo)
+{
+  CSingleLock lock(m_critSection);
+  m_bHasConnectedAudioSystem = bSetTo;
+}
+
+void CPeripheralCecAdapter::ScheduleVolumeUp(void)
+{
   {
-    CLog::Log(LOGDEBUG, "%s - powering off CEC capable devices", __FUNCTION__);
-    bReturn = m_cecParser->PowerOffDevices();
+    CSingleLock lock(m_critSection);
+    m_volumeChangeQueue.push(VOLUME_CHANGE_UP);
   }
-
-  return bReturn;
+  Sleep(5);
 }
 
-bool CPeripheralCecAdapter::PowerOnCecDevices(void)
+void CPeripheralCecAdapter::ScheduleVolumeDown(void)
 {
-  bool bReturn(false);
-
-  if (m_cecParser && m_bIsReady)
   {
-    CLog::Log(LOGDEBUG, "%s - powering on CEC capable devices", __FUNCTION__);
-    bReturn = m_cecParser->PowerOnDevices();
+    CSingleLock lock(m_critSection);
+    m_volumeChangeQueue.push(VOLUME_CHANGE_DOWN);
   }
+  Sleep(5);
+}
 
-  return bReturn;
+void CPeripheralCecAdapter::ScheduleMute(void)
+{
+  {
+    CSingleLock lock(m_critSection);
+    m_volumeChangeQueue.push(VOLUME_CHANGE_MUTE);
+  }
+  Sleep(5);
 }
 
-bool CPeripheralCecAdapter::StandbyCecDevices(void)
+void CPeripheralCecAdapter::ProcessVolumeChange(void)
 {
-  bool bReturn(false);
+  bool bSendRelease(false);
+  CecVolumeChange pendingVolumeChange = VOLUME_CHANGE_NONE;
+  {
+    CSingleLock lock(m_critSection);
+    if (m_volumeChangeQueue.size() > 0)
+    {
+      /* get the first change from the queue */
+      pendingVolumeChange = m_volumeChangeQueue.front();
+      m_volumeChangeQueue.pop();
+
+      /* remove all dupe entries */
+      while (m_volumeChangeQueue.size() > 0 && m_volumeChangeQueue.front() == pendingVolumeChange)
+        m_volumeChangeQueue.pop();
+
+      /* send another keypress after VOLUME_REFRESH_TIMEOUT ms */
+      bool bRefresh(m_lastKeypress + VOLUME_REFRESH_TIMEOUT < XbmcThreads::SystemClockMillis());
+
+      /* only send the keypress when it hasn't been sent yet */
+      if (pendingVolumeChange != m_lastChange)
+      {
+        m_lastKeypress = XbmcThreads::SystemClockMillis();
+        m_lastChange = pendingVolumeChange;
+      }
+      else if (bRefresh)
+      {
+        m_lastKeypress = XbmcThreads::SystemClockMillis();
+        pendingVolumeChange = m_lastChange;
+      }
+      else
+        pendingVolumeChange = VOLUME_CHANGE_NONE;
+    }
+    else if (m_lastKeypress > 0 && m_lastKeypress + VOLUME_CHANGE_TIMEOUT < XbmcThreads::SystemClockMillis())
+    {
+      /* send a key release */
+      m_lastKeypress = 0;
+      bSendRelease = true;
+      m_lastChange = VOLUME_CHANGE_NONE;
+    }
+  }
 
-  if (m_cecParser && m_bIsReady)
+  switch (pendingVolumeChange)
   {
-    CLog::Log(LOGDEBUG, "%s - putting CEC capable devices in standby mode", __FUNCTION__);
-    bReturn = m_cecParser->StandbyDevices();
+  case VOLUME_CHANGE_UP:
+    m_cecAdapter->SendKeypress(CECDEVICE_AUDIOSYSTEM, CEC_USER_CONTROL_CODE_VOLUME_UP, false);
+    break;
+  case VOLUME_CHANGE_DOWN:
+    m_cecAdapter->SendKeypress(CECDEVICE_AUDIOSYSTEM, CEC_USER_CONTROL_CODE_VOLUME_DOWN, false);
+    break;
+  case VOLUME_CHANGE_MUTE:
+    m_cecAdapter->SendKeypress(CECDEVICE_AUDIOSYSTEM, CEC_USER_CONTROL_CODE_MUTE, false);
+    {
+      CSingleLock lock(m_critSection);
+      m_bIsMuted = !m_bIsMuted;
+    }
+    break;
+  case VOLUME_CHANGE_NONE:
+    if (bSendRelease)
+      m_cecAdapter->SendKeyRelease(CECDEVICE_AUDIOSYSTEM, false);
+    break;
   }
+}
 
-  return bReturn;
+void CPeripheralCecAdapter::VolumeUp(void)
+{
+  if (HasConnectedAudioSystem())
+  {
+    CSingleLock lock(m_critSection);
+    m_volumeChangeQueue.push(VOLUME_CHANGE_UP);
+  }
 }
 
-bool CPeripheralCecAdapter::SendPing(void)
+void CPeripheralCecAdapter::VolumeDown(void)
 {
-  bool bReturn(false);
-  if (m_cecParser && m_bIsReady)
+  if (HasConnectedAudioSystem())
   {
-    CLog::Log(LOGDEBUG, "%s - sending ping to the CEC adapter", __FUNCTION__);
-    bReturn = m_cecParser->Ping();
+    CSingleLock lock(m_critSection);
+    m_volumeChangeQueue.push(VOLUME_CHANGE_DOWN);
   }
+}
 
-  return bReturn;
+void CPeripheralCecAdapter::Mute(void)
+{
+  if (HasConnectedAudioSystem())
+  {
+    CSingleLock lock(m_critSection);
+    m_volumeChangeQueue.push(VOLUME_CHANGE_MUTE);
+  }
 }
 
-bool CPeripheralCecAdapter::StartBootloader(void)
+bool CPeripheralCecAdapter::IsMuted(void)
 {
-  bool bReturn(false);
-  if (m_cecParser && m_bIsReady)
+  if (HasConnectedAudioSystem())
   {
-    CLog::Log(LOGDEBUG, "%s - starting the bootloader", __FUNCTION__);
-    bReturn = m_cecParser->StartBootloader();
+    CSingleLock lock(m_critSection);
+    return m_bIsMuted;
   }
+  return false;
+}
 
-  return bReturn;
+void CPeripheralCecAdapter::SetMenuLanguage(const char *strLanguage)
+{
+  if (m_strMenuLanguage.Equals(strLanguage))
+    return;
+
+  CStdString strGuiLanguage;
+
+  if (!strcmp(strLanguage, "bul"))
+    strGuiLanguage = "Bulgarian";
+  else if (!strcmp(strLanguage, "hrv"))
+    strGuiLanguage = "Croatian";
+  else if (!strcmp(strLanguage, "cze"))
+    strGuiLanguage = "Czech";
+  else if (!strcmp(strLanguage, "dan"))
+    strGuiLanguage = "Danish";
+  else if (!strcmp(strLanguage, "dut"))
+    strGuiLanguage = "Dutch";
+  else if (!strcmp(strLanguage, "eng"))
+    strGuiLanguage = "English";
+  else if (!strcmp(strLanguage, "fin"))
+    strGuiLanguage = "Finnish";
+  else if (!strcmp(strLanguage, "fre"))
+    strGuiLanguage = "French";
+  else if (!strcmp(strLanguage, "ger"))
+    strGuiLanguage = "German";
+  else if (!strcmp(strLanguage, "gre"))
+    strGuiLanguage = "Greek";
+  else if (!strcmp(strLanguage, "hun"))
+    strGuiLanguage = "Hungarian";
+  else if (!strcmp(strLanguage, "ita"))
+    strGuiLanguage = "Italian";
+  else if (!strcmp(strLanguage, "nor"))
+    strGuiLanguage = "Norwegian";
+  else if (!strcmp(strLanguage, "pol"))
+    strGuiLanguage = "Polish";
+  else if (!strcmp(strLanguage, "por"))
+    strGuiLanguage = "Portuguese";
+  else if (!strcmp(strLanguage, "rum"))
+    strGuiLanguage = "Romanian";
+  else if (!strcmp(strLanguage, "rus"))
+    strGuiLanguage = "Russian";
+  else if (!strcmp(strLanguage, "srp"))
+    strGuiLanguage = "Serbian";
+  else if (!strcmp(strLanguage, "slo"))
+    strGuiLanguage = "Slovenian";
+  else if (!strcmp(strLanguage, "spa"))
+    strGuiLanguage = "Spanish";
+  else if (!strcmp(strLanguage, "swe"))
+    strGuiLanguage = "Swedish";
+  else if (!strcmp(strLanguage, "tur"))
+    strGuiLanguage = "Turkish";
+
+  if (!strGuiLanguage.IsEmpty())
+  {
+    g_application.getApplicationMessenger().SetGUILanguage(strGuiLanguage);
+    CLog::Log(LOGDEBUG, "%s - language set to '%s'", __FUNCTION__, strGuiLanguage.c_str());
+  }
+  else
+    CLog::Log(LOGWARNING, "%s - TV menu language set to unknown value '%s'", __FUNCTION__, strLanguage);
 }
 
-void CPeripheralCecAdapter::ProcessNextCommand(void)
+int CPeripheralCecAdapter::CecCommand(void *cbParam, const cec_command &command)
 {
-  cec_command command;
-  if (m_cecParser && m_bIsReady && m_cecParser->GetNextCommand(&command))
+  CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam;
+  if (!adapter)
+    return 0;
+
+  if (adapter->m_bIsReady)
   {
-    CLog::Log(LOGDEBUG, "%s - processing command: initiator=%d destination=%d opcode=%d", __FUNCTION__, command.source, command.destination, command.opcode);
+    CLog::Log(LOGDEBUG, "%s - processing command: initiator=%1x destination=%1x opcode=%02x", __FUNCTION__, command.initiator, command.destination, command.opcode);
 
     switch (command.opcode)
     {
     case CEC_OPCODE_STANDBY:
       /* a device was put in standby mode */
-      CLog::Log(LOGDEBUG, "%s - device %d was put in standby mode", __FUNCTION__, command.source);
-      if (command.source == CECDEVICE_TV && GetSettingBool("standby_pc_on_tv_standby"))
+      CLog::Log(LOGDEBUG, "%s - device %1x was put in standby mode", __FUNCTION__, command.initiator);
+      if (command.initiator == CECDEVICE_TV && adapter->m_configuration.bPowerOffOnStandby == 1 &&
+          (!adapter->m_screensaverLastActivated.IsValid() || CDateTime::GetCurrentDateTime() - adapter->m_screensaverLastActivated > CDateTimeSpan(0, 0, 0, SCREENSAVER_TIMEOUT)))
       {
-        m_bStarted = false;
+        adapter->m_bStarted = false;
         g_application.getApplicationMessenger().Suspend();
       }
       break;
+    case CEC_OPCODE_SET_MENU_LANGUAGE:
+      if (adapter->m_configuration.bUseTVMenuLanguage == 1 && command.initiator == CECDEVICE_TV && command.parameters.size == 3)
+      {
+        char strNewLanguage[4];
+        for (int iPtr = 0; iPtr < 3; iPtr++)
+          strNewLanguage[iPtr] = command.parameters[iPtr];
+        strNewLanguage[3] = 0;
+        adapter->SetMenuLanguage(strNewLanguage);
+      }
+      break;
+    case CEC_OPCODE_DECK_CONTROL:
+      if (command.initiator == CECDEVICE_TV &&
+          command.parameters.size == 1 &&
+          command.parameters[0] == CEC_DECK_CONTROL_MODE_STOP)
+      {
+        CSingleLock lock(adapter->m_critSection);
+        cec_keypress key;
+        key.duration = 500;
+        key.keycode = CEC_USER_CONTROL_CODE_STOP;
+        adapter->m_buttonQueue.push(key);
+      }
+      break;
+    case CEC_OPCODE_PLAY:
+      if (command.initiator == CECDEVICE_TV &&
+          command.parameters.size == 1)
+      {
+        if (command.parameters[0] == CEC_PLAY_MODE_PLAY_FORWARD)
+        {
+          CSingleLock lock(adapter->m_critSection);
+          cec_keypress key;
+          key.duration = 500;
+          key.keycode = CEC_USER_CONTROL_CODE_PLAY;
+          adapter->m_buttonQueue.push(key);
+        }
+        else if (command.parameters[0] == CEC_PLAY_MODE_PLAY_STILL)
+        {
+          CSingleLock lock(adapter->m_critSection);
+          cec_keypress key;
+          key.duration = 500;
+          key.keycode = CEC_USER_CONTROL_CODE_PAUSE;
+          adapter->m_buttonQueue.push(key);
+        }
+      }
+      break;
+    case CEC_OPCODE_REPORT_POWER_STATUS:
+      if (command.initiator == CECDEVICE_TV &&
+          command.parameters.size == 1 &&
+          command.parameters[0] == CEC_POWER_STATUS_ON &&
+          adapter->m_queryThread)
+      {
+        adapter->m_queryThread->Signal();
+      }
+      break;
     default:
       break;
     }
   }
+  return 1;
+}
+
+int CPeripheralCecAdapter::CecConfiguration(void *cbParam, const libcec_configuration &config)
+{
+  CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam;
+  if (!adapter)
+    return 0;
+
+  CSingleLock lock(adapter->m_critSection);
+  adapter->SetConfigurationFromLibCEC(config);
+  return 1;
+}
+
+int CPeripheralCecAdapter::CecKeyPress(void *cbParam, const cec_keypress &key)
+{
+  CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam;
+  if (!adapter)
+    return 0;
+
+  CSingleLock lock(adapter->m_critSection);
+  adapter->m_buttonQueue.push(key);
+  return 1;
+}
+
+bool CPeripheralCecAdapter::GetNextCecKey(cec_keypress &key)
+{
+  bool bReturn(false);
+  CSingleLock lock(m_critSection);
+  if (!m_buttonQueue.empty())
+  {
+    key = m_buttonQueue.front();
+    m_buttonQueue.pop();
+    bReturn = true;
+  }
+
+  return bReturn;
 }
 
 bool CPeripheralCecAdapter::GetNextKey(void)
 {
+  bool bHasButton(false);
   CSingleLock lock(m_critSection);
-  if (m_bHasButton)
-    return false;
+  if (m_bHasButton && m_button.iDuration > 0)
+    return bHasButton;
 
   cec_keypress key;
-  if (!m_bIsReady || !(m_bHasButton = m_cecParser->GetNextKeypress(&key)))
-    return false;
+  if (!m_bIsReady || !GetNextCecKey(key))
+    return bHasButton;
 
-  CLog::Log(LOGDEBUG, "%s - received key %d", __FUNCTION__, key.keycode);
-  m_button.iButtonReleased = XbmcThreads::SystemClockMillis();
-  m_button.iButton        = 0;
-  m_button.iButtonPressed = m_button.iButtonReleased - key.duration;
+  CLog::Log(LOGDEBUG, "%s - received key %2x", __FUNCTION__, key.keycode);
+  WORD iButton = 0;
+  bHasButton = true;
 
   switch (key.keycode)
   {
   case CEC_USER_CONTROL_CODE_SELECT:
-    m_button.iButton = XINPUT_IR_REMOTE_SELECT;
+    iButton = XINPUT_IR_REMOTE_SELECT;
     break;
   case CEC_USER_CONTROL_CODE_UP:
-    m_button.iButton = XINPUT_IR_REMOTE_UP;
+    iButton = XINPUT_IR_REMOTE_UP;
     break;
   case CEC_USER_CONTROL_CODE_DOWN:
-    m_button.iButton = XINPUT_IR_REMOTE_DOWN;
+    iButton = XINPUT_IR_REMOTE_DOWN;
     break;
   case CEC_USER_CONTROL_CODE_LEFT:
   case CEC_USER_CONTROL_CODE_LEFT_UP:
   case CEC_USER_CONTROL_CODE_LEFT_DOWN:
-    m_button.iButton = XINPUT_IR_REMOTE_LEFT;
+    iButton = XINPUT_IR_REMOTE_LEFT;
     break;
   case CEC_USER_CONTROL_CODE_RIGHT:
   case CEC_USER_CONTROL_CODE_RIGHT_UP:
   case CEC_USER_CONTROL_CODE_RIGHT_DOWN:
-    m_button.iButton = XINPUT_IR_REMOTE_RIGHT;
+    iButton = XINPUT_IR_REMOTE_RIGHT;
     break;
   case CEC_USER_CONTROL_CODE_ROOT_MENU:
-    m_button.iButton = XINPUT_IR_REMOTE_MENU;
+    iButton = XINPUT_IR_REMOTE_MENU;
     break;
   case CEC_USER_CONTROL_CODE_EXIT:
-    m_button.iButton = XINPUT_IR_REMOTE_BACK;
+    iButton = XINPUT_IR_REMOTE_BACK;
     break;
   case CEC_USER_CONTROL_CODE_ENTER:
-    m_button.iButton = XINPUT_IR_REMOTE_ENTER;
+    iButton = XINPUT_IR_REMOTE_ENTER;
     break;
   case CEC_USER_CONTROL_CODE_CHANNEL_DOWN:
-    m_button.iButton = XINPUT_IR_REMOTE_CHANNEL_MINUS;
+    iButton = XINPUT_IR_REMOTE_CHANNEL_MINUS;
     break;
   case CEC_USER_CONTROL_CODE_CHANNEL_UP:
-    m_button.iButton = XINPUT_IR_REMOTE_CHANNEL_PLUS;
+    iButton = XINPUT_IR_REMOTE_CHANNEL_PLUS;
     break;
   case CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL:
-    m_button.iButton = XINPUT_IR_REMOTE_BACK;
+    iButton = XINPUT_IR_REMOTE_BACK;
     break;
   case CEC_USER_CONTROL_CODE_SOUND_SELECT:
-    m_button.iButton = XINPUT_IR_REMOTE_LANGUAGE;
+    iButton = XINPUT_IR_REMOTE_LANGUAGE;
     break;
   case CEC_USER_CONTROL_CODE_POWER:
-    m_button.iButton = XINPUT_IR_REMOTE_POWER;
+    iButton = XINPUT_IR_REMOTE_POWER;
     break;
   case CEC_USER_CONTROL_CODE_VOLUME_UP:
-    m_button.iButton = XINPUT_IR_REMOTE_VOLUME_PLUS;
+    iButton = XINPUT_IR_REMOTE_VOLUME_PLUS;
     break;
   case CEC_USER_CONTROL_CODE_VOLUME_DOWN:
-    m_button.iButton = XINPUT_IR_REMOTE_VOLUME_MINUS;
+    iButton = XINPUT_IR_REMOTE_VOLUME_MINUS;
     break;
   case CEC_USER_CONTROL_CODE_MUTE:
-    m_button.iButton = XINPUT_IR_REMOTE_MUTE;
+    iButton = XINPUT_IR_REMOTE_MUTE;
     break;
   case CEC_USER_CONTROL_CODE_PLAY:
-    m_button.iButton = XINPUT_IR_REMOTE_PLAY;
+    iButton = XINPUT_IR_REMOTE_PLAY;
     break;
   case CEC_USER_CONTROL_CODE_STOP:
-    m_button.iButton = XINPUT_IR_REMOTE_STOP;
+    iButton = XINPUT_IR_REMOTE_STOP;
     break;
   case CEC_USER_CONTROL_CODE_PAUSE:
-    m_button.iButton = XINPUT_IR_REMOTE_STOP;
+    iButton = XINPUT_IR_REMOTE_PAUSE;
     break;
   case CEC_USER_CONTROL_CODE_REWIND:
-    m_button.iButton = XINPUT_IR_REMOTE_REVERSE;
+    iButton = XINPUT_IR_REMOTE_REVERSE;
     break;
   case CEC_USER_CONTROL_CODE_FAST_FORWARD:
-    m_button.iButton = XINPUT_IR_REMOTE_FORWARD;
+    iButton = XINPUT_IR_REMOTE_FORWARD;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER0:
-    m_button.iButton = XINPUT_IR_REMOTE_0;
+    iButton = XINPUT_IR_REMOTE_0;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER1:
-    m_button.iButton = XINPUT_IR_REMOTE_1;
+    iButton = XINPUT_IR_REMOTE_1;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER2:
-    m_button.iButton = XINPUT_IR_REMOTE_2;
+    iButton = XINPUT_IR_REMOTE_2;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER3:
-    m_button.iButton = XINPUT_IR_REMOTE_3;
+    iButton = XINPUT_IR_REMOTE_3;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER4:
-    m_button.iButton = XINPUT_IR_REMOTE_4;
+    iButton = XINPUT_IR_REMOTE_4;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER5:
-    m_button.iButton = XINPUT_IR_REMOTE_5;
+    iButton = XINPUT_IR_REMOTE_5;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER6:
-    m_button.iButton = XINPUT_IR_REMOTE_6;
+    iButton = XINPUT_IR_REMOTE_6;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER7:
-    m_button.iButton = XINPUT_IR_REMOTE_7;
+    iButton = XINPUT_IR_REMOTE_7;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER8:
-    m_button.iButton = XINPUT_IR_REMOTE_8;
+    iButton = XINPUT_IR_REMOTE_8;
     break;
   case CEC_USER_CONTROL_CODE_NUMBER9:
-    m_button.iButton = XINPUT_IR_REMOTE_9;
+    iButton = XINPUT_IR_REMOTE_9;
     break;
   case CEC_USER_CONTROL_CODE_RECORD:
-    m_button.iButton = XINPUT_IR_REMOTE_RECORD;
+    iButton = XINPUT_IR_REMOTE_RECORD;
     break;
   case CEC_USER_CONTROL_CODE_CLEAR:
-    m_button.iButton = XINPUT_IR_REMOTE_CLEAR;
+    iButton = XINPUT_IR_REMOTE_CLEAR;
     break;
   case CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION:
-    m_button.iButton = XINPUT_IR_REMOTE_INFO;
+    iButton = XINPUT_IR_REMOTE_INFO;
     break;
   case CEC_USER_CONTROL_CODE_PAGE_UP:
-    m_button.iButton = XINPUT_IR_REMOTE_CHANNEL_PLUS;
+    iButton = XINPUT_IR_REMOTE_CHANNEL_PLUS;
     break;
   case CEC_USER_CONTROL_CODE_PAGE_DOWN:
-    m_button.iButton = XINPUT_IR_REMOTE_CHANNEL_MINUS;
-    break;
-  case CEC_USER_CONTROL_CODE_EJECT:
+    iButton = XINPUT_IR_REMOTE_CHANNEL_MINUS;
     break;
   case CEC_USER_CONTROL_CODE_FORWARD:
-    m_button.iButton = XINPUT_IR_REMOTE_SKIP_PLUS;
+    iButton = XINPUT_IR_REMOTE_SKIP_PLUS;
     break;
   case CEC_USER_CONTROL_CODE_BACKWARD:
-    m_button.iButton = XINPUT_IR_REMOTE_SKIP_MINUS;
-    break;
-  case CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION:
+    iButton = XINPUT_IR_REMOTE_SKIP_MINUS;
     break;
   case CEC_USER_CONTROL_CODE_F1_BLUE:
-    m_button.iButton = XINPUT_IR_REMOTE_BLUE;
+    iButton = XINPUT_IR_REMOTE_BLUE;
     break;
   case CEC_USER_CONTROL_CODE_F2_RED:
-    m_button.iButton = XINPUT_IR_REMOTE_RED;
+    iButton = XINPUT_IR_REMOTE_RED;
     break;
   case CEC_USER_CONTROL_CODE_F3_GREEN:
-    m_button.iButton = XINPUT_IR_REMOTE_GREEN;
+    iButton = XINPUT_IR_REMOTE_GREEN;
     break;
   case CEC_USER_CONTROL_CODE_F4_YELLOW:
-    m_button.iButton = XINPUT_IR_REMOTE_YELLOW;
+    iButton = XINPUT_IR_REMOTE_YELLOW;
     break;
+  case CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION:
+  case CEC_USER_CONTROL_CODE_EJECT:
   case CEC_USER_CONTROL_CODE_SETUP_MENU:
   case CEC_USER_CONTROL_CODE_CONTENTS_MENU:
   case CEC_USER_CONTROL_CODE_FAVORITE_MENU:
@@ -475,11 +835,25 @@ bool CPeripheralCecAdapter::GetNextKey(void)
   case CEC_USER_CONTROL_CODE_F5:
   case CEC_USER_CONTROL_CODE_DATA:
   case CEC_USER_CONTROL_CODE_UNKNOWN:
-    m_bHasButton = false;
-    return false;
+  default:
+    bHasButton = false;
+    return bHasButton;
   }
 
-  return true;
+  if (!m_bHasButton && bHasButton && iButton == m_button.iButton && m_button.iDuration == 0 && key.duration > 0)
+  {
+    /* released button of the previous keypress */
+    return m_bHasButton;
+  }
+
+  if (bHasButton)
+  {
+    m_bHasButton = true;
+    m_button.iDuration = key.duration;
+    m_button.iButton = iButton;
+  }
+
+  return m_bHasButton;
 }
 
 WORD CPeripheralCecAdapter::GetButton(void)
@@ -494,18 +868,10 @@ WORD CPeripheralCecAdapter::GetButton(void)
 unsigned int CPeripheralCecAdapter::GetHoldTime(void)
 {
   CSingleLock lock(m_critSection);
-  if (!m_bHasButton)
+  if (m_bHasButton && m_button.iDuration == 0)
     GetNextKey();
 
-  if (!m_bHasButton)
-    return 0;
-
-  if (m_button.iButtonPressed && m_button.iButtonReleased)
-    return m_button.iButtonReleased - m_button.iButtonPressed;
-  else if (m_button.iButtonPressed)
-    return XbmcThreads::SystemClockMillis() - m_button.iButtonPressed;
-
-  return 0;
+  return m_bHasButton ? m_button.iDuration : 0;
 }
 
 void CPeripheralCecAdapter::ResetButton(void)
@@ -519,39 +885,48 @@ void CPeripheralCecAdapter::OnSettingChanged(const CStdString &strChangedSetting
   if (strChangedSetting.Equals("enabled"))
   {
     bool bEnabled(GetSettingBool("enabled"));
-    if (!bEnabled && m_cecParser && m_bStarted)
+    if (!bEnabled && m_cecAdapter && m_bStarted)
       StopThread(true);
-    else if (bEnabled && !m_cecParser && m_bStarted)
+    else if (bEnabled && !m_cecAdapter && m_bStarted)
       InitialiseFeature(FEATURE_CEC);
   }
+  else
+  {
+    SetConfigurationFromSettings();
+    m_queryThread->UpdateConfiguration(&m_configuration);
+  }
 }
 
-void CPeripheralCecAdapter::FlushLog(void)
+int CPeripheralCecAdapter::CecLogMessage(void *cbParam, const cec_log_message &message)
 {
-  cec_log_message message;
-  while (m_cecParser && m_cecParser->GetNextLogMessage(&message))
-  {
-    int iLevel = -1;
-    switch (message.level)
-    {
-    case CEC_LOG_ERROR:
-      iLevel = LOGERROR;
-      break;
-    case CEC_LOG_WARNING:
-      iLevel = LOGWARNING;
-      break;
-    case CEC_LOG_NOTICE:
-      iLevel = LOGDEBUG;
-      break;
-    case CEC_LOG_DEBUG:
-      if (GetSettingBool("cec_debug_logging"))
-        iLevel = LOGDEBUG;
-      break;
-    }
+  CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam;
+  if (!adapter)
+    return 0;
 
-    if (iLevel >= 0)
-      CLog::Log(iLevel, "%s - %s", __FUNCTION__, message.message.c_str());
+  int iLevel = -1;
+  switch (message.level)
+  {
+  case CEC_LOG_ERROR:
+    iLevel = LOGERROR;
+    break;
+  case CEC_LOG_WARNING:
+    iLevel = LOGWARNING;
+    break;
+  case CEC_LOG_NOTICE:
+    iLevel = LOGDEBUG;
+    break;
+  case CEC_LOG_TRAFFIC:
+  case CEC_LOG_DEBUG:
+    iLevel = LOGDEBUG;
+    break;
+  default:
+    break;
   }
+
+  if (iLevel >= 0)
+    CLog::Log(iLevel, "%s - %s", __FUNCTION__, message.message);
+
+  return 1;
 }
 
 bool CPeripheralCecAdapter::TranslateComPort(CStdString &strLocation)
@@ -565,4 +940,301 @@ bool CPeripheralCecAdapter::TranslateComPort(CStdString &strLocation)
 
   return false;
 }
+
+void CPeripheralCecAdapter::SetConfigurationFromLibCEC(const CEC::libcec_configuration &config)
+{
+  // set the primary device type
+  m_configuration.deviceTypes.Clear();
+  m_configuration.deviceTypes.Add(config.deviceTypes[0]);
+  SetSetting("device_type", (int)config.deviceTypes[0]);
+
+  // set the connected device
+  m_configuration.baseDevice = config.baseDevice;
+  SetSetting("connected_device", (int)config.baseDevice);
+
+  // set the HDMI port number
+  m_configuration.iHDMIPort = config.iHDMIPort;
+  SetSetting("cec_hdmi_port", config.iHDMIPort);
+
+  // set the physical address, when baseDevice or iHDMIPort are not set
+  if (m_configuration.baseDevice == CECDEVICE_UNKNOWN ||
+      m_configuration.iHDMIPort == 0 || m_configuration.iHDMIPort > 4)
+  {
+    m_configuration.iPhysicalAddress = config.iPhysicalAddress;
+    CStdString strPhysicalAddress;
+    strPhysicalAddress.Format("%x", config.iPhysicalAddress);
+    SetSetting("physical_address", strPhysicalAddress);
+  }
+
+  // set the tv vendor override
+  m_configuration.tvVendor = config.tvVendor;
+  SetSetting("tv_vendor", (int)config.tvVendor);
+
+  // set the devices to wake when starting
+  m_configuration.wakeDevices = config.wakeDevices;
+  CStdString strWakeDevices;
+  for (unsigned int iPtr = 0; iPtr <= 16; iPtr++)
+    if (config.wakeDevices[iPtr])
+      strWakeDevices.AppendFormat(" %X", iPtr);
+  SetSetting("wake_devices", strWakeDevices.Trim());
+
+  // set the devices to power off when stopping
+  m_configuration.powerOffDevices = config.powerOffDevices;
+  CStdString strPowerOffDevices;
+  for (unsigned int iPtr = 0; iPtr <= 16; iPtr++)
+    if (config.powerOffDevices[iPtr])
+      strPowerOffDevices.AppendFormat(" %X", iPtr);
+  SetSetting("wake_devices", strPowerOffDevices.Trim());
+
+  // set the boolean settings
+  m_configuration.bUseTVMenuLanguage = config.bUseTVMenuLanguage;
+  SetSetting("use_tv_menu_language", m_configuration.bUseTVMenuLanguage == 1);
+
+  m_configuration.bActivateSource = config.bActivateSource;
+  SetSetting("activate_source", m_configuration.bActivateSource == 1);
+
+  m_configuration.bPowerOffScreensaver = config.bPowerOffScreensaver;
+  SetSetting("cec_standby_screensaver", m_configuration.bPowerOffScreensaver == 1);
+
+  m_configuration.bPowerOffOnStandby = config.bPowerOffOnStandby;
+  SetSetting("standby_pc_on_tv_standby", m_configuration.bPowerOffOnStandby == 1);
+
+  if (config.serverVersion >= CEC_SERVER_VERSION_1_5_1)
+    m_configuration.bSendInactiveSource = config.bSendInactiveSource;
+  SetSetting("send_inactive_source", m_configuration.bSendInactiveSource == 1);
+}
+
+void CPeripheralCecAdapter::SetConfigurationFromSettings(void)
+{
+  // client version 1.5.0
+  m_configuration.clientVersion = CEC_CLIENT_VERSION_1_5_1;
+
+  // device name 'XBMC'
+  snprintf(m_configuration.strDeviceName, 13, "%s", GetSettingString("device_name").c_str());
+
+  // set the primary device type
+  m_configuration.deviceTypes.Clear();
+  int iDeviceType = GetSettingInt("device_type");
+  if (iDeviceType != (int)CEC_DEVICE_TYPE_RECORDING_DEVICE &&
+      iDeviceType != (int)CEC_DEVICE_TYPE_PLAYBACK_DEVICE &&
+      iDeviceType != (int)CEC_DEVICE_TYPE_TUNER)
+    iDeviceType = (int)CEC_DEVICE_TYPE_RECORDING_DEVICE;
+  m_configuration.deviceTypes.Add((cec_device_type)iDeviceType);
+
+  // always try to autodetect the address.
+  // when the firmware supports this, it will override the physical address, connected device and hdmi port settings
+  m_configuration.bAutodetectAddress = 1;
+
+  // set the physical address
+  // when set, it will override the connected device and hdmi port settings
+  CStdString strPhysicalAddress = GetSettingString("physical_address");
+  int iPhysicalAddress;
+  if (sscanf(strPhysicalAddress.c_str(), "%x", &iPhysicalAddress) == 1 && iPhysicalAddress > 0 && iPhysicalAddress < 0xFFFF)
+    m_configuration.iPhysicalAddress = iPhysicalAddress;
+
+  // set the connected device
+  int iConnectedDevice = GetSettingInt("connected_device");
+  if (iConnectedDevice == 0 || iConnectedDevice == 5)
+    m_configuration.baseDevice = (cec_logical_address)iConnectedDevice;
+
+  // set the HDMI port number
+  int iHDMIPort = GetSettingInt("cec_hdmi_port");
+  if (iHDMIPort >= 0 && iHDMIPort <= 4)
+    m_configuration.iHDMIPort = iHDMIPort;
+
+  // set the tv vendor override
+  int iVendor = GetSettingInt("tv_vendor");
+  if (iVendor > 0 && iVendor < 0xFFFFFF)
+    m_configuration.tvVendor = iVendor;
+
+  // read the devices to wake when starting
+  CStdString strWakeDevices = CStdString(GetSettingString("wake_devices")).Trim();
+  m_configuration.wakeDevices.Clear();
+  ReadLogicalAddresses(strWakeDevices, m_configuration.wakeDevices);
+
+  // read the devices to power off when stopping
+  CStdString strStandbyDevices = CStdString(GetSettingString("standby_devices")).Trim();
+  m_configuration.powerOffDevices.Clear();
+  ReadLogicalAddresses(strStandbyDevices, m_configuration.powerOffDevices);
+
+  // always get the settings from the rom, when supported by the firmware
+  m_configuration.bGetSettingsFromROM = 1;
+
+  // read the boolean settings
+  m_configuration.bUseTVMenuLanguage   = GetSettingBool("use_tv_menu_language") ? 1 : 0;
+  m_configuration.bActivateSource      = GetSettingBool("activate_source") ? 1 : 0;
+  m_configuration.bPowerOffScreensaver = GetSettingBool("cec_standby_screensaver") ? 1 : 0;
+  m_configuration.bPowerOffOnStandby   = GetSettingBool("standby_pc_on_tv_standby") ? 1 : 0;
+  m_configuration.bSendInactiveSource  = GetSettingBool("send_inactive_source") ? 1 : 0;
+}
+
+void CPeripheralCecAdapter::ReadLogicalAddresses(const CStdString &strString, cec_logical_addresses &addresses)
+{
+  for (size_t iPtr = 0; iPtr < strString.size(); iPtr++)
+  {
+    CStdString strDevice = CStdString(strString.substr(iPtr, 1)).Trim();
+    if (!strDevice.IsEmpty())
+    {
+      int iDevice(0);
+      if (sscanf(strDevice.c_str(), "%x", &iDevice) == 1 && iDevice >= 0 && iDevice <= 0xF)
+        addresses.Set((cec_logical_address)iDevice);
+    }
+  }
+}
+
+CPeripheralCecAdapterUpdateThread::CPeripheralCecAdapterUpdateThread(CPeripheralCecAdapter *adapter, libcec_configuration *configuration) :
+    CThread("CEC Adapter Update Thread"),
+    m_adapter(adapter),
+    m_configuration(*configuration),
+    m_bNextConfigurationScheduled(false),
+    m_bIsUpdating(true)
+{
+  m_nextConfiguration.Clear();
+  m_event.Reset();
+}
+
+CPeripheralCecAdapterUpdateThread::~CPeripheralCecAdapterUpdateThread(void)
+{
+  StopThread(false);
+  m_event.Set();
+  StopThread(true);
+}
+
+void CPeripheralCecAdapterUpdateThread::Signal(void)
+{
+  m_event.Set();
+}
+
+bool CPeripheralCecAdapterUpdateThread::UpdateConfiguration(libcec_configuration *configuration)
+{
+  CSingleLock lock(m_critSection);
+  if (m_bIsUpdating)
+  {
+    m_bNextConfigurationScheduled = true;
+    m_nextConfiguration = *configuration;
+  }
+  else
+  {
+    m_configuration = *configuration;
+    m_event.Set();
+  }
+  return true;
+}
+
+bool CPeripheralCecAdapterUpdateThread::WaitReady(void)
+{
+  // don't wait if we're not powering up anything
+  if (m_configuration.wakeDevices.IsEmpty() && m_configuration.bActivateSource == 0)
+    return true;
+
+  // wait for the TV if we're configured to become the active source.
+  // wait for the first device in the wake list otherwise.
+  cec_logical_address waitFor = (m_configuration.bActivateSource == 1) ?
+      CECDEVICE_TV :
+      m_configuration.wakeDevices.primary;
+
+  cec_power_status powerStatus(CEC_POWER_STATUS_UNKNOWN);
+  bool bContinue(true);
+  while (bContinue && !m_adapter->m_bStop && !m_bStop && powerStatus != CEC_POWER_STATUS_ON)
+  {
+    powerStatus = m_adapter->m_cecAdapter->GetDevicePowerStatus(waitFor);
+    if (powerStatus != CEC_POWER_STATUS_ON)
+      bContinue = !m_event.WaitMSec(1000);
+  }
+
+  return powerStatus == CEC_POWER_STATUS_ON;
+}
+
+bool CPeripheralCecAdapterUpdateThread::SetInitialConfiguration(void)
+{
+  // devices to wake are set
+  if (!m_configuration.wakeDevices.IsEmpty())
+    m_adapter->m_cecAdapter->PowerOnDevices(CECDEVICE_BROADCAST);
+
+  // the option to make XBMC the active source is set
+  if (m_configuration.bActivateSource == 1)
+    m_adapter->m_cecAdapter->SetActiveSource();
+
+  // wait until devices are powered up
+  if (!WaitReady())
+    return false;
+
+  // request the menu language of the TV
+  if (m_configuration.bUseTVMenuLanguage == 1)
+  {
+    cec_menu_language language;
+    if (m_adapter->m_cecAdapter->GetDeviceMenuLanguage(CECDEVICE_TV, &language))
+      m_adapter->SetMenuLanguage(language.language);
+  }
+
+  // request the OSD name of the TV
+  CStdString strNotification;
+  cec_osd_name tvName = m_adapter->m_cecAdapter->GetDeviceOSDName(CECDEVICE_TV);
+  strNotification.Format("%s: %s", g_localizeStrings.Get(36016), tvName.name);
+
+  /* disable the mute setting when an amp is found, because the amp handles the mute setting and
+     set PCM output to 100% */
+  if (m_adapter->m_cecAdapter->IsActiveDeviceType(CEC_DEVICE_TYPE_AUDIO_SYSTEM))
+  {
+    // request the OSD name of the amp
+    cec_osd_name ampName = m_adapter->m_cecAdapter->GetDeviceOSDName(CECDEVICE_AUDIOSYSTEM);
+    CLog::Log(LOGDEBUG, "%s - CEC capable amplifier found (%s). volume will be controlled on the amp", __FUNCTION__, ampName.name);
+    strNotification.AppendFormat(" - %s", ampName.name);
+
+    // set amp present
+    m_adapter->SetAudioSystemConnected(true);
+    g_settings.m_bMute = false;
+    g_settings.m_nVolumeLevel = VOLUME_MAXIMUM;
+  }
+
+  m_adapter->m_bIsReady = true;
+
+  // try to send an OSD string to the TV
+  m_adapter->m_cecAdapter->SetOSDString(CECDEVICE_TV, CEC_DISPLAY_CONTROL_DISPLAY_FOR_DEFAULT_TIME, g_localizeStrings.Get(36016).c_str());
+  // and let the gui know that we're done
+  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), strNotification);
+
+  CSingleLock lock(m_critSection);
+  m_bIsUpdating = false;
+  return true;
+}
+
+void CPeripheralCecAdapterUpdateThread::Process(void)
+{
+  // set the initial configuration
+  if (!SetInitialConfiguration())
+    return;
+
+  // and wait for updates
+  bool bUpdate(false);
+  while (!m_bStop)
+  {
+    // update received
+    if (m_event.WaitMSec(500) || bUpdate)
+    {
+      if (m_bStop)
+        return;
+      // set the new configuration
+      bool bConfigSet(m_adapter->m_cecAdapter->SetConfiguration(&m_configuration));
+      CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), g_localizeStrings.Get(bConfigSet ? 36023 : 36024));
+      {
+        CSingleLock lock(m_critSection);
+        bUpdate = m_bNextConfigurationScheduled;
+        if (bUpdate)
+        {
+          // another update is scheduled
+          m_bNextConfigurationScheduled = false;
+          m_configuration = m_nextConfiguration;
+        }
+        else
+        {
+          // nothing left to do, wait for updates
+          m_bIsUpdating = false;
+          m_event.Reset();
+        }
+      }
+    }
+  }
+}
+
 #endif
index ee566c0..2ad8772 100644 (file)
  *
  */
 
+#if !defined(HAVE_LIBCEC)
+#include "Peripheral.h"
+
+// an empty implementation, so CPeripherals can be compiled without a bunch of #ifdef's when libCEC is not available
+namespace PERIPHERALS
+{
+  class CPeripheralCecAdapter : public CPeripheral
+  {
+  public:
+    bool HasConnectedAudioSystem(void) { return false; }
+    void ScheduleVolumeUp(void) {}
+    void ScheduleVolumeDown(void) {}
+    bool IsMuted(void) { return false; }
+    void ScheduleMute(void) {}
+
+    WORD GetButton(void) { return 0; }
+    unsigned int GetHoldTime(void) { return 0; }
+    void ResetButton(void) {}
+  };
+}
+
+#else
+
 #include "PeripheralHID.h"
 #include "interfaces/AnnouncementManager.h"
 #include "threads/Thread.h"
 #include "threads/CriticalSection.h"
 #include <queue>
 
+// undefine macro isset, it collides with function in cectypes.h
+#ifdef isset
+#undef isset
+#endif
+#include <libcec/cectypes.h>
+
+class DllLibCEC;
+
 namespace CEC
 {
-  class ICECDevice;
+  class ICECAdapter;
 };
 
 namespace PERIPHERALS
 {
+  class CPeripheralCecAdapterUpdateThread;
+
   typedef struct
   {
     WORD         iButton;
-    unsigned int iButtonPressed;
-    unsigned int iButtonReleased;
+    unsigned int iDuration;
   } CecButtonPress;
 
+  typedef enum
+  {
+    VOLUME_CHANGE_NONE,
+    VOLUME_CHANGE_UP,
+    VOLUME_CHANGE_DOWN,
+    VOLUME_CHANGE_MUTE
+  } CecVolumeChange;
 
   class CPeripheralCecAdapter : public CPeripheralHID, public ANNOUNCEMENT::IAnnouncer, private CThread
   {
+    friend class CPeripheralCecAdapterUpdateThread;
+
   public:
     CPeripheralCecAdapter(const PeripheralType type, const PeripheralBusType busType, const CStdString &strLocation, const CStdString &strDeviceName, int iVendorId, int iProductId);
     virtual ~CPeripheralCecAdapter(void);
 
-    virtual void Announce(ANNOUNCEMENT::EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data);
-    virtual bool PowerOffCecDevices(void);
-    virtual bool PowerOnCecDevices(void);
-    virtual bool StandbyCecDevices(void);
-
-    virtual bool SendPing(void);
-    virtual bool StartBootloader(void);
+    virtual void Announce(ANNOUNCEMENT::AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data);
+    virtual bool HasConnectedAudioSystem(void);
+    virtual void SetAudioSystemConnected(bool bSetTo);
+    virtual void ScheduleVolumeUp(void);
+    virtual void VolumeUp(void);
+    virtual void ScheduleVolumeDown(void);
+    virtual void VolumeDown(void);
+    virtual void ScheduleMute(void);
+    virtual void Mute(void);
+    virtual bool IsMuted(void);
 
     virtual void OnSettingChanged(const CStdString &strChangedSetting);
 
     virtual WORD GetButton(void);
     virtual unsigned int GetHoldTime(void);
     virtual void ResetButton(void);
+    virtual CStdString GetComPort(void);
 
   protected:
-    virtual void FlushLog(void);
+    virtual bool OpenConnection(void);
+    virtual void SetConfigurationFromSettings(void);
+    virtual void SetConfigurationFromLibCEC(const CEC::libcec_configuration &config);
+    static void ReadLogicalAddresses(const CStdString &strString, CEC::cec_logical_addresses &addresses);
+    static int CecKeyPress(void *cbParam, const CEC::cec_keypress &key);
+    static int CecLogMessage(void *cbParam, const CEC::cec_log_message &message);
+    static int CecCommand(void *cbParam, const CEC::cec_command &command);
+    static int CecConfiguration(void *cbParam, const CEC::libcec_configuration &config);
+
     virtual bool GetNextKey(void);
+    virtual bool GetNextCecKey(CEC::cec_keypress &key);
     virtual bool InitialiseFeature(const PeripheralFeature feature);
     virtual void Process(void);
-    virtual void ProcessNextCommand(void);
+    virtual void ProcessVolumeChange(void);
+    virtual void SetMenuLanguage(const char *strLanguage);
     static bool FindConfigLocation(CStdString &strString);
     static bool TranslateComPort(CStdString &strPort);
 
-    CEC::ICECDevice *m_cecParser;
-    bool             m_bStarted;
-    bool             m_bHasButton;
-    bool             m_bIsReady;
-    CecButtonPress   m_button;
-    CCriticalSection m_critSection;
+    DllLibCEC*                        m_dll;
+    CEC::ICECAdapter*                 m_cecAdapter;
+    bool                              m_bStarted;
+    bool                              m_bHasButton;
+    bool                              m_bIsReady;
+    bool                              m_bHasConnectedAudioSystem;
+    CStdString                        m_strMenuLanguage;
+    CDateTime                         m_screensaverLastActivated;
+    CecButtonPress                    m_button;
+    std::queue<CEC::cec_keypress>     m_buttonQueue;
+    std::queue<CecVolumeChange>       m_volumeChangeQueue;
+    unsigned int                      m_lastKeypress;
+    CecVolumeChange                   m_lastChange;
+    int                               m_iExitCode;
+    bool                              m_bIsMuted;
+    CPeripheralCecAdapterUpdateThread*m_queryThread;
+    CEC::ICECCallbacks                m_callbacks;
+    CCriticalSection                  m_critSection;
+    CEC::libcec_configuration         m_configuration;
+  };
+
+  class CPeripheralCecAdapterUpdateThread : public CThread
+  {
+  public:
+    CPeripheralCecAdapterUpdateThread(CPeripheralCecAdapter *adapter, CEC::libcec_configuration *configuration);
+    virtual ~CPeripheralCecAdapterUpdateThread(void);
+
+    virtual void Signal(void);
+    virtual bool UpdateConfiguration(CEC::libcec_configuration *configuration);
+
+  protected:
+    virtual bool WaitReady(void);
+    virtual bool SetInitialConfiguration(void);
+    virtual void Process(void);
+
+    CPeripheralCecAdapter *    m_adapter;
+    CEvent                     m_event;
+    CCriticalSection           m_critSection;
+    CEC::libcec_configuration  m_configuration;
+    CEC::libcec_configuration  m_nextConfiguration;
+    bool                       m_bNextConfigurationScheduled;
+    bool                       m_bIsUpdating;
   };
 }
+
+#endif
index da590d5..48469cc 100644 (file)
@@ -23,6 +23,7 @@
 #include "utils/log.h"
 #include "settings/Settings.h"
 #include "guilib/LocalizeStrings.h"
+#include "input/ButtonTranslator.h"
 
 using namespace PERIPHERALS;
 using namespace std;
@@ -36,10 +37,10 @@ CPeripheralHID::CPeripheralHID(const PeripheralType type, const PeripheralBusTyp
 
 CPeripheralHID::~CPeripheralHID(void)
 {
-  if (!m_strKeymap.IsEmpty() && GetSettingBool("keymap_enabled") && g_settings.m_activeKeyboardMapping.Equals(m_strKeymap))
+  if (!m_strKeymap.IsEmpty() && !GetSettingBool("do_not_use_custom_keymap"))
   {
     CLog::Log(LOGDEBUG, "%s - switching active keymapping to: default", __FUNCTION__);
-    g_settings.m_activeKeyboardMapping = "default";
+    CButtonTranslator::GetInstance().RemoveDevice(m_strKeymap);
   }
 }
 
@@ -58,22 +59,25 @@ bool CPeripheralHID::InitialiseFeature(const PeripheralFeature feature)
       SetSetting("keymap", m_strKeymap);
     }
 
+    if (!IsSettingVisible("keymap"))
+      SetSettingVisible("do_not_use_custom_keymap", false);
+
     if (!m_strKeymap.IsEmpty())
     {
-      bool bKeymapEnabled(GetSettingBool("keymap_enabled"));
+      bool bKeymapEnabled(!GetSettingBool("do_not_use_custom_keymap"));
       if (bKeymapEnabled)
       {
-        CLog::Log(LOGDEBUG, "%s - switching active keymapping to: %s", __FUNCTION__, m_strKeymap.c_str());
-        g_settings.m_activeKeyboardMapping = m_strKeymap;
+        CLog::Log(LOGDEBUG, "%s - adding keymapping for: %s", __FUNCTION__, m_strKeymap.c_str());
+        CButtonTranslator::GetInstance().AddDevice(m_strKeymap);
       }
-      else if (!bKeymapEnabled && g_settings.m_activeKeyboardMapping.Equals(m_strKeymap))
+      else if (!bKeymapEnabled)
       {
-        CLog::Log(LOGDEBUG, "%s - switching active keymapping to: default", __FUNCTION__);
-        g_settings.m_activeKeyboardMapping = "default";
+        CLog::Log(LOGDEBUG, "%s - removing keymapping for: %s", __FUNCTION__, m_strKeymap.c_str());
+        CButtonTranslator::GetInstance().RemoveDevice(m_strKeymap);
       }
     }
 
-    CLog::Log(LOGDEBUG, "%s - initialised HID device (%s:%s)", __FUNCTION__, m_strVendorId, m_strProductId);
+    CLog::Log(LOGDEBUG, "%s - initialised HID device (%s:%s)", __FUNCTION__, m_strVendorId.c_str(), m_strProductId.c_str());
   }
 
   return CPeripheral::InitialiseFeature(feature);
@@ -81,7 +85,7 @@ bool CPeripheralHID::InitialiseFeature(const PeripheralFeature feature)
 
 void CPeripheralHID::OnSettingChanged(const CStdString &strChangedSetting)
 {
-  if (m_bInitialised && ((strChangedSetting.Equals("keymap") && GetSettingBool("keymap_enabled")) || strChangedSetting.Equals("keymap_enabled")))
+  if (m_bInitialised && ((strChangedSetting.Equals("keymap") && !GetSettingBool("do_not_use_custom_keymap")) || strChangedSetting.Equals("keymap_enabled")))
   {
     m_bInitialised = false;
     InitialiseFeature(FEATURE_HID);
index 4ba895b..71fcfa6 100644 (file)
@@ -23,7 +23,7 @@
 #include "PeripheralHID.h"
 #include "guilib/Key.h"
 #include "utils/log.h"
-#include "interfaces/Builtins.h"
+#include "Application.h"
 
 using namespace PERIPHERALS;
 using namespace std;
@@ -59,11 +59,12 @@ bool CPeripheralNyxboard::LookupSymAndUnicode(XBMC_keysym &keysym, uint8_t *key,
   if (!strCommand.IsEmpty())
   {
     CLog::Log(LOGDEBUG, "%s - executing command '%s'", __FUNCTION__, strCommand.c_str());
-    CBuiltins::Execute(strCommand);
-
-    *key = 0;
-    *unicode = (char) 0;
-    return true;
+    if (g_application.ExecuteXBMCAction(strCommand))
+    {
+      *key = 0;
+      *unicode = (char) 0;
+      return true;
+    }
   }
 
   return false;
index 599bacb..120a9f0 100644 (file)
@@ -138,7 +138,10 @@ bool CGUIDialogPeripheralManager::OnMessage(CGUIMessage& message)
     case GUI_MSG_ITEM_SELECT:
       return true;
     case GUI_MSG_WINDOW_INIT:
-      return OnMessageInit(message);
+      {
+        OnMessageInit(message);
+        break;
+      }
     case GUI_MSG_CLICKED:
       return OnMessageClick(message);
   }
index 8018d54..cc801ef 100644 (file)
@@ -66,17 +66,15 @@ void CGUIDialogPeripheralSettings::CreateSettings()
 
   if (m_item)
   {
-    int iIndex = 1;
     CPeripheral *peripheral = g_peripherals.GetByPath(m_item->GetPath());
     if (peripheral)
     {
-      map<CStdString, CSetting *>::iterator it = peripheral->m_settings.begin();
-      while (it != peripheral->m_settings.end())
+      vector<CSetting *> settings = peripheral->GetSettings();
+      for (size_t iPtr = 0; iPtr < settings.size(); iPtr++)
       {
-        CSetting *setting = (*it).second;
+        CSetting *setting = settings[iPtr];
         if (!setting->IsVisible())
         {
-          ++it;
           CLog::Log(LOGDEBUG, "%s - invisible", __FUNCTION__);
           continue;
         }
@@ -89,7 +87,7 @@ void CGUIDialogPeripheralSettings::CreateSettings()
             if (boolSetting)
             {
               m_boolSettings.insert(make_pair(CStdString(boolSetting->GetSetting()), boolSetting->GetData()));
-              AddBool(iIndex++, boolSetting->GetLabel(), &m_boolSettings[boolSetting->GetSetting()], true);
+              AddBool(boolSetting->GetOrder(), boolSetting->GetLabel(), &m_boolSettings[boolSetting->GetSetting()], true);
             }
           }
           break;
@@ -99,7 +97,7 @@ void CGUIDialogPeripheralSettings::CreateSettings()
             if (intSetting)
             {
               m_intSettings.insert(make_pair(CStdString(intSetting->GetSetting()), (float) intSetting->GetData()));
-              AddSlider(iIndex++, intSetting->GetLabel(), &m_intSettings[intSetting->GetSetting()], intSetting->m_iMin, intSetting->m_iStep, intSetting->m_iMax, CGUIDialogVideoSettings::FormatInteger, false);
+              AddSlider(intSetting->GetOrder(), intSetting->GetLabel(), &m_intSettings[intSetting->GetSetting()], (float)intSetting->m_iMin, (float)intSetting->m_iStep, (float)intSetting->m_iMax, CGUIDialogVideoSettings::FormatInteger, false);
             }
           }
           break;
@@ -109,7 +107,7 @@ void CGUIDialogPeripheralSettings::CreateSettings()
             if (floatSetting)
             {
               m_floatSettings.insert(make_pair(CStdString(floatSetting->GetSetting()), floatSetting->GetData()));
-              AddSlider(iIndex++, floatSetting->GetLabel(), &m_floatSettings[floatSetting->GetSetting()], floatSetting->m_fMin, floatSetting->m_fStep, floatSetting->m_fMax, CGUIDialogVideoSettings::FormatFloat, false);
+              AddSlider(floatSetting->GetOrder(), floatSetting->GetLabel(), &m_floatSettings[floatSetting->GetSetting()], floatSetting->m_fMin, floatSetting->m_fStep, floatSetting->m_fMax, CGUIDialogVideoSettings::FormatFloat, false);
             }
           }
           break;
@@ -119,7 +117,7 @@ void CGUIDialogPeripheralSettings::CreateSettings()
             if (stringSetting)
             {
               m_stringSettings.insert(make_pair(CStdString(stringSetting->GetSetting()), stringSetting->GetData()));
-              AddString(iIndex, stringSetting->GetLabel(), &m_stringSettings[stringSetting->GetSetting()]);
+              AddString(stringSetting->GetOrder(), stringSetting->GetLabel(), &m_stringSettings[stringSetting->GetSetting()]);
             }
           }
           break;
@@ -128,7 +126,6 @@ void CGUIDialogPeripheralSettings::CreateSettings()
           CLog::Log(LOGDEBUG, "%s - unknown type", __FUNCTION__);
           break;
         }
-        ++it;
       }
     }
     else
@@ -176,6 +173,8 @@ void CGUIDialogPeripheralSettings::UpdatePeripheralSettings(void)
     peripheral->SetSetting((*stringItr).first, (*stringItr).second);
     ++stringItr;
   }
+
+  peripheral->PersistSettings();
 }
 
 bool CGUIDialogPeripheralSettings::OnMessage(CGUIMessage &message)
index f99d2de..9df0347 100644 (file)
@@ -22,6 +22,7 @@
 #include "threads/SystemClock.h"
 #include "system.h"
 #include "GUIWindowPictures.h"
+#include "URL.h"
 #include "Util.h"
 #include "Picture.h"
 #include "Application.h"
@@ -40,6 +41,7 @@
 #include "utils/TimeUtils.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
+#include "Autorun.h"
 
 #define CONTROL_BTNVIEWASICONS      2
 #define CONTROL_BTNSORTBY           3
@@ -58,6 +60,26 @@ CGUIWindowPictures::CGUIWindowPictures(void)
     : CGUIMediaWindow(WINDOW_PICTURES, "MyPics.xml")
 {
   m_thumbLoader.SetObserver(this);
+  m_slideShowStarted = false;
+}
+
+void CGUIWindowPictures::OnInitWindow()
+{
+  CGUIMediaWindow::OnInitWindow();
+  if (m_slideShowStarted)
+  {
+    CGUIWindowSlideShow* wndw = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW);
+    CStdString path;
+    if (wndw && wndw->GetCurrentSlide())
+      URIUtils::GetDirectory(wndw->GetCurrentSlide()->GetPath(),path);
+    if (path.Equals(m_vecItems->GetPath()))
+    {
+      if (wndw && wndw->GetCurrentSlide())
+        m_viewControl.SetSelectedItem(wndw->GetCurrentSlide()->GetPath());
+      m_iSelectedItem = m_viewControl.GetSelectedItem();
+    }
+    m_slideShowStarted = false;
+  }
 }
 
 CGUIWindowPictures::~CGUIWindowPictures(void)
@@ -301,7 +323,7 @@ bool CGUIWindowPictures::ShowPicture(int iItem, bool startSlideShow)
 
 #ifdef HAS_DVD_DRIVE
   if (pItem->IsDVD())
-    return MEDIA_DETECT::CAutorun::PlayDisc(!MEDIA_DETECT::CAutorun::CanResumePlayDVD() || CGUIDialogYesNo::ShowAndGetInput(341, -1, -1, -1, 13404, 12021));
+    return MEDIA_DETECT::CAutorun::PlayDiscAskResume(m_vecItems->Get(iItem)->GetPath());
 #endif
 
   if (pItem->m_bIsShareOrDrive)
@@ -334,6 +356,7 @@ bool CGUIWindowPictures::ShowPicture(int iItem, bool startSlideShow)
   if (startSlideShow)
     pSlideShow->StartSlideShow(false);
 
+  m_slideShowStarted = true;
   g_windowManager.ActivateWindow(WINDOW_SLIDESHOW);
 
   return true;
@@ -351,7 +374,10 @@ void CGUIWindowPictures::OnShowPictureRecursive(const CStdString& strPath)
                             m_guiState->GetSortMethod(),
                             m_guiState->GetSortOrder());
     if (pSlideShow->NumSlides())
+    {
+      m_slideShowStarted = true;
       g_windowManager.ActivateWindow(WINDOW_SLIDESHOW);
+    }
   }
 }
 
@@ -368,6 +394,7 @@ void CGUIWindowPictures::OnSlideShowRecursive(const CStdString &strPicture)
       strExtensions = viewState->GetExtensions();
       delete viewState;
     }
+    m_slideShowStarted = true;
     pSlideShow->RunSlideShow(strPicture, true,
                              g_guiSettings.GetBool("slideshow.shuffle"),false,
                              m_guiState->GetSortMethod(),
@@ -400,6 +427,7 @@ void CGUIWindowPictures::OnSlideShow(const CStdString &strPicture)
       strExtensions = viewState->GetExtensions();
       delete viewState;
     }
+    m_slideShowStarted = true;
     pSlideShow->RunSlideShow(strPicture, false ,false, false,
                              m_guiState->GetSortMethod(),
                              m_guiState->GetSortOrder(),
index 2e019e8..192c88b 100644 (file)
@@ -34,6 +34,7 @@ public:
   CGUIWindowPictures(void);
   virtual ~CGUIWindowPictures(void);
   virtual bool OnMessage(CGUIMessage& message);
+  virtual void OnInitWindow();
 
 protected:
   virtual bool GetDirectory(const CStdString &strDirectory, CFileItemList& items);
@@ -61,4 +62,5 @@ protected:
   DllImageLib m_ImageLib;
 
   CPictureThumbLoader m_thumbLoader;
+  bool m_slideShowStarted;
 };
index ffe47a5..f02d65c 100644 (file)
@@ -561,7 +561,7 @@ EVENT_RESULT CGUIWindowSlideShow::OnMouseEvent(const CPoint &point, const CMouse
     }
     else 
     {
-      Zoom(m_iZoomFactor - event.m_offsetX);
+      Zoom((int)(m_iZoomFactor - event.m_offsetX));
     }
     return EVENT_RESULT_HANDLED;    
   }
@@ -766,13 +766,15 @@ bool CGUIWindowSlideShow::OnMessage(CGUIMessage& message)
     {
       if(m_bSlideShow && m_bPlayingVideo)
         g_windowManager.ActivateWindow(WINDOW_FULLSCREEN_VIDEO);
-      m_bPlayingVideo = false;
     }
     break;
     case GUI_MSG_PLAYBACK_STOPPED:
     {
-      m_bSlideShow = false;
-      g_windowManager.PreviousWindow();
+      if (m_bSlideShow && m_bPlayingVideo)
+      {
+        m_bSlideShow = false;
+        g_windowManager.PreviousWindow();
+      }
     }
     break;
   }
index 2f35125..8b1423d 100644 (file)
@@ -68,6 +68,9 @@ void CPlayList::Add(const CFileItemPtr &item, int iPosition, int iOrder)
   else
     m_iPlayableItems++;
 
+  // set 'IsPlayable' property - needed for properly handling plugin:// URLs
+  item->SetProperty("IsPlayable", true);
+
   //CLog::Log(LOGDEBUG,"%s item:(%02i/%02i)[%s]", __FUNCTION__, iPosition, item->m_iprogramCount, item->GetPath().c_str());
   if (iPosition == iOldSize)
     m_vecItems.push_back(item);
index fdf6dae..4aba8d9 100644 (file)
@@ -83,7 +83,8 @@ bool CPlayListM3U::Load(const CStdString& strFileName)
   while (file.ReadString(szLine, 1024))
   {
     strLine = szLine;
-    StringUtils::RemoveCRLF(strLine);
+    strLine.TrimRight(" \t\r\n");
+    strLine.TrimLeft(" \t");
 
     if (strLine.Left( (int)strlen(M3U_INFO_MARKER) ) == M3U_INFO_MARKER)
     {
@@ -105,6 +106,9 @@ bool CPlayListM3U::Load(const CStdString& strFileName)
     {
       CStdString strFileName = strLine;
 
+      if (strFileName.size() > 0 && strFileName[0] == '#')
+        continue; // assume a comment or something else we don't support
+
       // Skip self - do not load playlist recursively
       if (URIUtils::GetFileName(strFileName).Equals(m_strPlayListName))
         continue;
index f469e4e..f99e519 100644 (file)
@@ -264,12 +264,15 @@ vector<CSmartPlaylistRule::DATABASE_FIELD> CSmartPlaylistRule::GetFields(const C
     fields.push_back(FIELD_AIRDATE);
     fields.push_back(FIELD_PLAYCOUNT);
     fields.push_back(FIELD_LASTPLAYED);
-    fields.push_back(FIELD_INPROGRESS);
     if (!sortOrders)
+    {
+      fields.push_back(FIELD_INPROGRESS);
       fields.push_back(FIELD_GENRE);
+    }
     fields.push_back(FIELD_YEAR); // premiered
     fields.push_back(FIELD_DIRECTOR);
-    fields.push_back(FIELD_ACTOR);
+    if (!sortOrders)
+      fields.push_back(FIELD_ACTOR);
     fields.push_back(FIELD_EPISODE);
     fields.push_back(FIELD_SEASON);
     fields.push_back(FIELD_FILENAME);
@@ -291,7 +294,8 @@ vector<CSmartPlaylistRule::DATABASE_FIELD> CSmartPlaylistRule::GetFields(const C
     fields.push_back(FIELD_WRITER);
     fields.push_back(FIELD_PLAYCOUNT);
     fields.push_back(FIELD_LASTPLAYED);
-    fields.push_back(FIELD_INPROGRESS);
+    if (!sortOrders)
+      fields.push_back(FIELD_INPROGRESS);
     fields.push_back(FIELD_GENRE);
     fields.push_back(FIELD_COUNTRY);
     fields.push_back(FIELD_YEAR); // premiered
@@ -304,7 +308,8 @@ vector<CSmartPlaylistRule::DATABASE_FIELD> CSmartPlaylistRule::GetFields(const C
     fields.push_back(FIELD_HASTRAILER);
     fields.push_back(FIELD_FILENAME);
     fields.push_back(FIELD_PATH);
-    fields.push_back(FIELD_SET);
+    if (!sortOrders)
+      fields.push_back(FIELD_SET);
     isVideo = true;
 //    fields.push_back(FIELD_DATEADDED);  // no date added yet in db
   }
@@ -575,26 +580,6 @@ CStdString CSmartPlaylistRule::GetWhereClause(CDatabase &db, const CStdString& s
     query = "idFile" + negate + " in (select distinct idFile from streamdetails where strSubtitleLanguage " + parameter + ")";
   else if (m_field == FIELD_VIDEOASPECT)
     query = "idFile" + negate + " in (select distinct idFile from streamdetails where fVideoAspect " + parameter + ")";
-  else if (m_field == FIELD_PLAYLIST)
-  { // playlist field - grab our playlist and add to our where clause
-    CStdString playlistFile = CSmartPlaylistDirectory::GetPlaylistByName(m_parameter, strType);
-    if (!playlistFile.IsEmpty())
-    {
-      CSmartPlaylist playlist;
-      playlist.Load(playlistFile);
-      CStdString playlistQuery;
-      // only playlists of same type will be part of the query
-      if (playlist.GetType().Equals(strType) || (playlist.GetType().Equals("mixed") && (strType == "songs" || strType == "musicvideos")) || playlist.GetType().IsEmpty())
-      {
-        playlist.SetType(strType);
-        playlistQuery = playlist.GetWhereClause(db, false);
-      }
-      if (m_operator == OPERATOR_DOES_NOT_EQUAL && playlist.GetType().Equals(strType))
-        query.Format("NOT (%s)", playlistQuery.c_str());
-      else if (m_operator == OPERATOR_EQUALS && playlist.GetType().Equals(strType))
-        query = playlistQuery;
-    }
-  }
   if (m_field == FIELD_PLAYCOUNT && strType != "songs" && strType != "albums")
   { // playcount is stored as NULL or number in video db
     if ((m_operator == OPERATOR_EQUALS && m_parameter == "0") ||
@@ -658,7 +643,7 @@ CStdString CSmartPlaylistRule::GetDatabaseField(DATABASE_FIELD field, const CStd
     else if (field == FIELD_PLOTOUTLINE) result.Format("c%02d", VIDEODB_ID_PLOTOUTLINE);
     else if (field == FIELD_TAGLINE) result.Format("c%02d", VIDEODB_ID_TAGLINE);
     else if (field == FIELD_VOTES) result.Format("c%02d", VIDEODB_ID_VOTES);
-    else if (field == FIELD_RATING) result.Format("c%02d", VIDEODB_ID_RATING);
+    else if (field == FIELD_RATING) result.Format("CAST(c%02d as DECIMAL(5,3))", VIDEODB_ID_RATING);
     else if (field == FIELD_TIME) result.Format("c%02d", VIDEODB_ID_RUNTIME);
     else if (field == FIELD_WRITER) result.Format("c%02d", VIDEODB_ID_CREDITS);   // join required
     else if (field == FIELD_PLAYCOUNT) result = "playCount";
@@ -677,7 +662,7 @@ CStdString CSmartPlaylistRule::GetDatabaseField(DATABASE_FIELD field, const CStd
     else if (field == FIELD_PATH) result = "strPath";
     else if (field == FIELD_RANDOM) result = "RANDOM()";      // only used for order clauses
     else if (field == FIELD_DATEADDED) result = "idMovie";       // only used for order clauses
-    else if (field == FIELD_SET) result = "strSet";
+    else if (field == FIELD_SET) result = "cant_order_by_set";
     return result;
   }
   else if (type == "musicvideos")
@@ -711,6 +696,7 @@ CStdString CSmartPlaylistRule::GetDatabaseField(DATABASE_FIELD field, const CStd
     else if (field == FIELD_YEAR) result.Format("c%02d", VIDEODB_ID_TV_PREMIERED);
     else if (field == FIELD_GENRE) result.Format("c%02d", VIDEODB_ID_TV_GENRE);
     else if (field == FIELD_MPAA) result.Format("c%02d", VIDEODB_ID_TV_MPAA);
+    else if (field == FIELD_STUDIO) result.Format("c%02d", VIDEODB_ID_TV_STUDIOS);
     else if (field == FIELD_DIRECTOR) result = "cant_order_by_director"; // join required
     else if (field == FIELD_ACTOR) result = "cant_order_by_actor";    // join required
     else if (field == FIELD_NUMEPISODES) result = "totalcount";
@@ -718,7 +704,7 @@ CStdString CSmartPlaylistRule::GetDatabaseField(DATABASE_FIELD field, const CStd
     else if (field == FIELD_PLAYCOUNT) result = "watched";
     else if (field == FIELD_RANDOM) result = "RANDOM()";      // only used for order clauses
     else if (field == FIELD_DATEADDED) result = "idShow";       // only used for order clauses
-    else if (field == FIELD_PATH) return "strPath";
+    else if (field == FIELD_PATH) result = "strPath";
     return result;
   }
   if (type == "episodes")
@@ -925,7 +911,7 @@ void CSmartPlaylist::AddRule(const CSmartPlaylistRule &rule)
   m_playlistRules.push_back(rule);
 }
 
-CStdString CSmartPlaylist::GetWhereClause(CDatabase &db, bool needWhere /* = true */)
+CStdString CSmartPlaylist::GetWhereClause(CDatabase &db, set<CStdString> &referencedPlaylists, bool needWhere /* = true */)
 {
   CStdString rule, currentRule;
   for (vector<CSmartPlaylistRule>::iterator it = m_playlistRules.begin(); it != m_playlistRules.end(); ++it)
@@ -935,7 +921,33 @@ CStdString CSmartPlaylist::GetWhereClause(CDatabase &db, bool needWhere /* = tru
     else if (needWhere)
       rule += "WHERE ";
     rule += "(";
-    currentRule = (*it).GetWhereClause(db, GetType());
+    CStdString currentRule;
+    if (it->m_field == CSmartPlaylistRule::FIELD_PLAYLIST)
+    {
+      CStdString playlistFile = CSmartPlaylistDirectory::GetPlaylistByName(it->m_parameter, GetType());
+      if (!playlistFile.IsEmpty() && referencedPlaylists.find(playlistFile) == referencedPlaylists.end())
+      {
+        referencedPlaylists.insert(playlistFile);
+        CSmartPlaylist playlist;
+        playlist.Load(playlistFile);
+        CStdString playlistQuery;
+        // only playlists of same type will be part of the query
+        if (playlist.GetType().Equals(GetType()) || (playlist.GetType().Equals("mixed") && (GetType() == "songs" || GetType() == "musicvideos")) || playlist.GetType().IsEmpty())
+        {
+          playlist.SetType(GetType());
+          playlistQuery = playlist.GetWhereClause(db, referencedPlaylists, false);
+        }
+        if (playlist.GetType().Equals(GetType()))
+        {
+          if (it->m_operator == CSmartPlaylistRule::OPERATOR_DOES_NOT_EQUAL)
+            currentRule.Format("NOT (%s)", playlistQuery.c_str());
+          else
+            currentRule = playlistQuery;
+        }
+      }
+    }
+    else
+      currentRule = (*it).GetWhereClause(db, GetType());
     // if we don't get a rule, we add '1' or '0' so the query is still valid and doesn't fail
     if (currentRule.IsEmpty())
       currentRule = m_matchAllRules ? "'1'" : "'0'";
index 5359a62..4da982b 100644 (file)
@@ -23,6 +23,7 @@
 #include "utils/StdString.h"
 #include "tinyXML/tinyxml.h"
 #include <vector>
+#include <set>
 
 class CDatabase;
 
@@ -167,7 +168,16 @@ public:
   bool GetOrderAscending() const { return m_orderAscending; };
 
   void AddRule(const CSmartPlaylistRule &rule);
-  CStdString GetWhereClause(CDatabase &db, bool needWhere = true);
+
+  /*! \brief get the where clause for a playlist
+   We handle playlists inside playlists separately in order to ensure we don't introduce infinite loops
+   by playlist A including playlist B which also (perhaps via other playlists) then includes playlistA.
+   
+   \param db the database to use to format up results
+   \param referencedPlaylists a set of playlists to know when we reach a cycle
+   \param needWhere whether we need to prepend the where clause with "WHERE "
+   */
+  CStdString GetWhereClause(CDatabase &db, std::set<CStdString> &referencedPlaylists, bool needWhere = true);
   CStdString GetOrderClause(CDatabase &db);
 
   const std::vector<CSmartPlaylistRule> &GetRules() const;
index 24d1fc1..16d950a 100644 (file)
@@ -30,7 +30,6 @@
 #include "utils/LabelFormatter.h"
 #include "Autorun.h"
 #include "guilib/GUIWindowManager.h"
-#include "dialogs/GUIDialogYesNo.h"
 #include "dialogs/GUIDialogKeyboard.h"
 #include "filesystem/Directory.h"
 #include "filesystem/File.h"
@@ -236,7 +235,7 @@ bool CGUIWindowPrograms::OnPlayMedia(int iItem)
 
 #ifdef HAS_DVD_DRIVE
   if (pItem->IsDVD())
-    return MEDIA_DETECT::CAutorun::PlayDisc(!MEDIA_DETECT::CAutorun::CanResumePlayDVD() || CGUIDialogYesNo::ShowAndGetInput(341, -1, -1, -1, 13404, 12021));
+    return MEDIA_DETECT::CAutorun::PlayDiscAskResume(m_vecItems->Get(iItem)->GetPath());
 #endif
 
   if (pItem->m_bIsFolder) return false;
index 4c5b4f6..aa9daa8 100644 (file)
@@ -98,6 +98,11 @@ public:
 
   virtual bool TestRender() = 0;
 
+  /**
+   * Project (x,y,z) 3d scene coordinates to (x,y) 2d screen coordinates
+   */
+  virtual void Project(float &x, float &y, float &z) { }
+
   void GetRenderVersion(unsigned int& major, unsigned int& minor) const;
   const CStdString& GetRenderVendor() const { return m_RenderVendor; }
   const CStdString& GetRenderRenderer() const { return m_RenderRenderer; }
index 1b877c1..938cb36 100644 (file)
@@ -172,6 +172,10 @@ void CRenderSystemDX::SetMonitor(HMONITOR monitor)
 
 bool CRenderSystemDX::ResetRenderSystem(int width, int height, bool fullScreen, float refreshRate)
 {
+  HMONITOR hMonitor = MonitorFromWindow(m_hDeviceWnd, MONITOR_DEFAULTTONULL);
+  if (hMonitor)
+    SetMonitor(hMonitor);
+
   SetRenderParams(width, height, fullScreen, refreshRate);
 
   CRect rc;
@@ -191,6 +195,18 @@ bool CRenderSystemDX::ResetRenderSystem(int width, int height, bool fullScreen,
   return true;
 }
 
+void CRenderSystemDX::OnMove()
+{
+  if (!m_bRenderCreated)
+    return;
+
+  HMONITOR currentMonitor = m_pD3D->GetAdapterMonitor(m_adapter);
+  HMONITOR newMonitor = MonitorFromWindow(m_hDeviceWnd, MONITOR_DEFAULTTONULL);
+  if (newMonitor != NULL && currentMonitor != newMonitor)
+    ResetRenderSystem(m_nBackBufferWidth, m_nBackBufferHeight, m_bFullScreenDevice, m_refreshRate);
+}
+
+
 bool CRenderSystemDX::IsSurfaceFormatOk(D3DFORMAT surfFormat, DWORD usage)
 {
   // Verify the compatibility
@@ -806,6 +822,22 @@ void CRenderSystemDX::SetCameraPosition(const CPoint &camera, int screenWidth, i
   D3DXMATRIX mtxProjection;
   D3DXMatrixPerspectiveOffCenterLH(&mtxProjection, (-w - offset.x)*0.5f, (w - offset.x)*0.5f, (-h + offset.y)*0.5f, (h + offset.y)*0.5f, h, 100*h);
   m_pD3DDevice->SetTransform(D3DTS_PROJECTION, &mtxProjection);
+
+  m_world = mtxWorld;
+  m_view = mtxView;
+  m_projection = mtxProjection;
+  m_viewPort = viewport;
+}
+
+void CRenderSystemDX::Project(float &x, float &y, float &z)
+{
+  D3DXVECTOR3 vScreenCoord;
+  D3DXVECTOR3 vLocation(x, y, z);
+
+  D3DXVec3Project(&vScreenCoord, &vLocation, &m_viewPort, &m_projection, &m_view, &m_world);
+  x = vScreenCoord.x;
+  y = vScreenCoord.y;
+  z = 0;
 }
 
 bool CRenderSystemDX::TestRender()
index e98c343..2988eea 100644 (file)
@@ -76,6 +76,8 @@ public:
 
   virtual bool TestRender();
 
+  virtual void Project(float &x, float &y, float &z);
+
   LPDIRECT3DDEVICE9 Get3DDevice() { return m_pD3DDevice; }
   int GetBackbufferCount() const { return m_D3DPP.BackBufferCount; }
 
@@ -119,6 +121,7 @@ protected:
   void BuildPresentParameters();
   virtual void UpdateMonitor() {};
   BOOL IsDepthFormatOk(D3DFORMAT DepthFormat, D3DFORMAT RenderTargetFormat);
+  void OnMove();
 
   LPDIRECT3D9                 m_pD3D;
 
@@ -151,6 +154,11 @@ protected:
   std::vector<ID3DResource*>  m_resources;
 
   bool                        m_inScene; ///< True if we're in a BeginScene()/EndScene() block
+
+  D3DVIEWPORT9                m_viewPort;
+  D3DXMATRIX                  m_projection;
+  D3DXMATRIX                  m_view;
+  D3DXMATRIX                  m_world;
 };
 
 #endif
index 8a3ab64..be7dfea 100644 (file)
 *
 */
 
-
-#include "system.h"
+#include "RenderSystemGL.h"
 
 #ifdef HAS_GL
 
 #include "guilib/GraphicContext.h"
 #include "settings/AdvancedSettings.h"
-#include "RenderSystemGL.h"
 #include "utils/log.h"
 #include "utils/GLUtils.h"
 #include "utils/TimeUtils.h"
@@ -387,6 +385,8 @@ void CRenderSystemGL::CaptureStateBlock()
 {
   if (!m_bRenderCreated)
     return;
+  
+  glGetIntegerv(GL_VIEWPORT, m_viewPort);
 
   glMatrixMode(GL_PROJECTION);
   glPushMatrix();
@@ -407,6 +407,7 @@ void CRenderSystemGL::ApplyStateBlock()
   if (!m_bRenderCreated)
     return;
 
+  glViewport(m_viewPort[0], m_viewPort[1], m_viewPort[2], m_viewPort[3]);
   glMatrixMode(GL_PROJECTION);
   glPopMatrix();
   glMatrixMode(GL_TEXTURE);
@@ -445,9 +446,24 @@ void CRenderSystemGL::SetCameraPosition(const CPoint &camera, int screenWidth, i
   glFrustum( (-w - offset.x)*0.5f, (w - offset.x)*0.5f, (-h + offset.y)*0.5f, (h + offset.y)*0.5f, h, 100*h);
   glMatrixMode(GL_MODELVIEW);
 
+  glGetIntegerv(GL_VIEWPORT, m_viewPort);
+  glGetDoublev(GL_MODELVIEW_MATRIX, m_view);
+  glGetDoublev(GL_PROJECTION_MATRIX, m_projection);
+
   g_graphicsContext.EndPaint();
 }
 
+void CRenderSystemGL::Project(float &x, float &y, float &z)
+{
+  GLdouble coordX, coordY, coordZ;
+  if (gluProject(x, y, z, m_view, m_projection, m_viewPort, &coordX, &coordY, &coordZ) == GLU_TRUE)
+  {
+    x = (float)coordX;
+    y = (float)(m_viewPort[3] - coordY);
+    z = 0;
+  }
+}
+
 bool CRenderSystemGL::TestRender()
 {
   static float theta = 0.0;
index 10d4353..9c02031 100644 (file)
@@ -24,6 +24,7 @@
 
 #pragma once
 
+#include "system.h"
 #include "rendering/RenderSystem.h"
 
 class CRenderSystemGL : public CRenderSystemBase
@@ -60,6 +61,8 @@ public:
 
   virtual bool TestRender();
 
+  virtual void Project(float &x, float &y, float &z);
+
   virtual void GetGLSLVersion(int& major, int& minor);
 
   virtual void ResetGLErrors();
@@ -82,6 +85,12 @@ protected:
 
   int        m_glslMajor;
   int        m_glslMinor;
+  
+#ifdef HAS_GL
+  GLdouble   m_view[16];
+  GLdouble   m_projection[16];
+  GLint      m_viewPort[4];
+#endif
 };
 
 #endif // RENDER_SYSTEM_H
index ff9122b..544dc14 100644 (file)
@@ -395,9 +395,27 @@ void CRenderSystemGLES::SetCameraPosition(const CPoint &camera, int screenWidth,
   g_matrices.Frustum( (-w - offset.x)*0.5f, (w - offset.x)*0.5f, (-h + offset.y)*0.5f, (h + offset.y)*0.5f, h, 100*h);
   g_matrices.MatrixMode(MM_MODELVIEW);
 
+  glGetIntegerv(GL_VIEWPORT, m_viewPort);
+  GLfloat* matx;
+  matx = g_matrices.GetMatrix(MM_MODELVIEW);
+  memcpy(m_view, matx, 16 * sizeof(GLfloat));
+  matx = g_matrices.GetMatrix(MM_PROJECTION);
+  memcpy(m_projection, matx, 16 * sizeof(GLfloat));
+
   g_graphicsContext.EndPaint();
 }
 
+void CRenderSystemGLES::Project(float &x, float &y, float &z)
+{
+  GLfloat coordX, coordY, coordZ;
+  if (g_matrices.Project(x, y, z, m_view, m_projection, m_viewPort, &coordX, &coordY, &coordZ))
+  {
+    x = coordX;
+    y = (float)(m_viewPort[3] - coordY);
+    z = 0;
+  }
+}
+
 bool CRenderSystemGLES::TestRender()
 {
   static float theta = 0.0;
index 9c6966d..d7690b6 100644 (file)
@@ -73,6 +73,8 @@ public:
   virtual void RestoreHardwareTransform();
 
   virtual bool TestRender();
+
+  virtual void Project(float &x, float &y, float &z);
   
   void InitialiseGUIShader();
   void EnableGUIShader(ESHADERMETHOD method);
@@ -101,6 +103,10 @@ protected:
 
   CGUIShader  **m_pGUIshader;  // One GUI shader for each method
   ESHADERMETHOD m_method;      // Current GUI Shader method
+
+  GLfloat    m_view[16];
+  GLfloat    m_projection[16];
+  GLint      m_viewPort[4];
 };
 
 #endif // RENDER_SYSTEM_H
index 7b02cc4..12db104 100644 (file)
@@ -93,11 +93,15 @@ void CAdvancedSettings::Initialize()
   m_videoEnableHighQualityHwScalers = false;
   m_videoAutoScaleMaxFps = 30.0f;
   m_videoAllowMpeg4VDPAU = false;
+  m_videoAllowMpeg4VAAPI = false;  
   m_videoDisableBackgroundDeinterlace = false;
   m_videoCaptureUseOcclusionQuery = -1; //-1 is auto detect
   m_DXVACheckCompatibility = false;
   m_DXVACheckCompatibilityPresent = false;
   m_DXVAForceProcessorRenderer = true;
+  m_DXVANoDeintProcForProgressive = false;
+  m_videoFpsDetect = 1;
+  m_videoDefaultLatency = 0.0;
 
   m_musicUseTimeSeeking = true;
   m_musicTimeSeekForward = 10;
@@ -114,12 +118,6 @@ void CAdvancedSettings::Initialize()
   m_slideshowZoomAmount = 5.0f;
   m_slideshowBlackBarCompensation = 20.0f;
 
-  m_lcdRows = 4;
-  m_lcdColumns = 20;
-  m_lcdAddress1 = 0;
-  m_lcdAddress2 = 0x40;
-  m_lcdAddress3 = 0x14;
-  m_lcdAddress4 = 0x54;
   m_lcdHeartbeat = false;
   m_lcdDimOnScreenSave = false;
   m_lcdScrolldelay = 1;
@@ -135,7 +133,6 @@ void CAdvancedSettings::Initialize()
   m_handleMounting = g_application.IsStandAlone();
 
   m_fullScreenOnMovieStart = true;
-  m_noDVDROM = false;
   m_cachePath = "special://temp/";
 
   m_videoCleanDateTimeRegExp = "(.*[^ _\\,\\.\\(\\)\\[\\]\\-])[ _\\.\\(\\)\\[\\]\\-]+(19[0-9][0-9]|20[0-1][0-9])([ _\\,\\.\\(\\)\\[\\]\\-]|[^0-9]$)";
@@ -144,8 +141,8 @@ void CAdvancedSettings::Initialize()
   m_videoCleanStringRegExps.push_back("(\\[.*\\])");
 
   m_moviesExcludeFromScanRegExps.push_back("-trailer");
-  m_moviesExcludeFromScanRegExps.push_back("[-._ \\\\/]sample[-._ \\\\/]");
-  m_tvshowExcludeFromScanRegExps.push_back("[-._ \\\\/]sample[-._ \\\\/]");
+  m_moviesExcludeFromScanRegExps.push_back("[!-._ \\\\/]sample[-._ \\\\/]");
+  m_tvshowExcludeFromScanRegExps.push_back("[!-._ \\\\/]sample[-._ \\\\/]");
 
   m_folderStackRegExps.push_back("((cd|dvd|dis[ck])[0-9]+)$");
 
@@ -291,6 +288,8 @@ void CAdvancedSettings::Initialize()
   m_guiAlgorithmDirtyRegions = 0;
   m_guiDirtyRegionNoFlipTimeout = -1;
   m_logEnableAirtunes = false;
+  m_airTunesPort = 36666;
+  m_airPlayPort = 36667;
 }
 
 bool CAdvancedSettings::Load()
@@ -311,7 +310,7 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
   TiXmlDocument advancedXML;
   if (!CFile::Exists(file))
   {
-    CLog::Log(LOGNOTICE, "No settings file to load to load (%s)", file.c_str());
+    CLog::Log(LOGNOTICE, "No settings file to load (%s)", file.c_str());
     return;
   }
 
@@ -453,6 +452,7 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
     XMLUtils::GetBoolean(pElement,"enablehighqualityhwscalers", m_videoEnableHighQualityHwScalers);
     XMLUtils::GetFloat(pElement,"autoscalemaxfps",m_videoAutoScaleMaxFps, 0.0f, 1000.0f);
     XMLUtils::GetBoolean(pElement,"allowmpeg4vdpau",m_videoAllowMpeg4VDPAU);
+    XMLUtils::GetBoolean(pElement,"allowmpeg4vaapi",m_videoAllowMpeg4VAAPI);    
     XMLUtils::GetBoolean(pElement, "disablebackgrounddeinterlace", m_videoDisableBackgroundDeinterlace);
     XMLUtils::GetInt(pElement, "useocclusionquery", m_videoCaptureUseOcclusionQuery, -1, 1);
 
@@ -540,6 +540,46 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
     m_DXVACheckCompatibilityPresent = XMLUtils::GetBoolean(pElement,"checkdxvacompatibility", m_DXVACheckCompatibility);
 
     XMLUtils::GetBoolean(pElement,"forcedxvarenderer", m_DXVAForceProcessorRenderer);
+    XMLUtils::GetBoolean(pElement,"dxvanodeintforprogressive", m_DXVANoDeintProcForProgressive);
+    //0 = disable fps detect, 1 = only detect on timestamps with uniform spacing, 2 detect on all timestamps
+    XMLUtils::GetInt(pElement, "fpsdetect", m_videoFpsDetect, 0, 2);
+
+    // Store global display latency settings
+    TiXmlElement* pVideoLatency = pElement->FirstChildElement("latency");
+    if (pVideoLatency)
+    {
+      float refresh, refreshmin, refreshmax, delay;
+      TiXmlElement* pRefreshVideoLatency = pVideoLatency->FirstChildElement("refresh");
+
+      while (pRefreshVideoLatency)
+      {
+        RefreshVideoLatency videolatency = {0};
+
+        if (XMLUtils::GetFloat(pRefreshVideoLatency, "rate", refresh))
+        {
+          videolatency.refreshmin = refresh - 0.01f;
+          videolatency.refreshmax = refresh + 0.01f;
+        }
+        else if (XMLUtils::GetFloat(pRefreshVideoLatency, "min", refreshmin) &&
+                 XMLUtils::GetFloat(pRefreshVideoLatency, "max", refreshmax))
+        {
+          videolatency.refreshmin = refreshmin;
+          videolatency.refreshmax = refreshmax;
+        }
+        if (XMLUtils::GetFloat(pRefreshVideoLatency, "delay", delay, -600.0f, 600.0f))
+          videolatency.delay = delay;
+
+        if (videolatency.refreshmin > 0.0f && videolatency.refreshmax >= videolatency.refreshmin)
+          m_videoRefreshLatency.push_back(videolatency);
+        else
+          CLog::Log(LOGWARNING, "Ignoring malformed display latency <refresh> entry, min:%f max:%f", videolatency.refreshmin, videolatency.refreshmax);
+
+        pRefreshVideoLatency = pRefreshVideoLatency->NextSiblingElement("refresh");
+      }
+
+      // Get default global display latency
+      XMLUtils::GetFloat(pVideoLatency, "delay", m_videoDefaultLatency, -600.0f, 600.0f);
+    }
   }
 
   pElement = pRootElement->FirstChildElement("musiclibrary");
@@ -592,12 +632,6 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
   pElement = pRootElement->FirstChildElement("lcd");
   if (pElement)
   {
-    XMLUtils::GetInt(pElement, "rows", m_lcdRows, 1, 4);
-    XMLUtils::GetInt(pElement, "columns", m_lcdColumns, 1, 40);
-    XMLUtils::GetInt(pElement, "address1", m_lcdAddress1, 0, 0x100);
-    XMLUtils::GetInt(pElement, "address2", m_lcdAddress2, 0, 0x100);
-    XMLUtils::GetInt(pElement, "address3", m_lcdAddress3, 0, 0x100);
-    XMLUtils::GetInt(pElement, "address4", m_lcdAddress4, 0, 0x100);
     XMLUtils::GetBoolean(pElement, "heartbeat", m_lcdHeartbeat);
     XMLUtils::GetBoolean(pElement, "dimonscreensave", m_lcdDimOnScreenSave);
     XMLUtils::GetInt(pElement, "scrolldelay", m_lcdScrolldelay, -8, 8);
@@ -654,14 +688,17 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
     g_advancedSettings.m_logLevel = std::max(g_advancedSettings.m_logLevel, g_advancedSettings.m_logLevelHint);
     CLog::SetLogLevel(g_advancedSettings.m_logLevel);
   }
-  
-  XMLUtils::GetBoolean(pRootElement, "enableairtunesdebuglog", m_logEnableAirtunes);
-    
+     
   XMLUtils::GetString(pRootElement, "cddbaddress", m_cddbAddress);
 
+  //airtunes + airplay
+  XMLUtils::GetBoolean(pRootElement, "enableairtunesdebuglog", m_logEnableAirtunes);
+  XMLUtils::GetInt(pRootElement,     "airtunesport", m_airTunesPort);
+  XMLUtils::GetInt(pRootElement,     "airplayport", m_airPlayPort);  
+  
+
   XMLUtils::GetBoolean(pRootElement, "handlemounting", m_handleMounting);
 
-  XMLUtils::GetBoolean(pRootElement, "nodvdrom", m_noDVDROM);
 #ifdef HAS_SDL
   XMLUtils::GetBoolean(pRootElement, "fullscreen", m_startFullScreen);
 #endif
@@ -797,7 +834,7 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
       CStdString strFrom, strTo;
       TiXmlNode* pFrom = pSubstitute->FirstChild("from");
       if (pFrom)
-        strFrom = _P(pFrom->FirstChild()->Value()).c_str();
+        strFrom = CSpecialProtocol::TranslatePath(pFrom->FirstChild()->Value()).c_str();
       TiXmlNode* pTo = pSubstitute->FirstChild("to");
       if (pTo)
         strTo = pTo->FirstChild()->Value();
@@ -1052,3 +1089,16 @@ void CAdvancedSettings::AddSettingsFile(const CStdString &filename)
 {
   m_settingsFiles.push_back(filename);
 }
+
+float CAdvancedSettings::GetDisplayLatency(float refreshrate)
+{
+  float delay = m_videoDefaultLatency / 1000.0f;
+  for (int i = 0; i < (int) m_videoRefreshLatency.size(); i++)
+  {
+    RefreshVideoLatency& videolatency = m_videoRefreshLatency[i];
+    if (refreshrate >= videolatency.refreshmin && refreshrate <= videolatency.refreshmax)
+      delay = videolatency.delay / 1000.0f;
+  }
+
+  return delay; // in seconds
+}
index 643e598..6c38dd4 100644 (file)
@@ -26,8 +26,9 @@
 
 class TiXmlElement;
 
-struct DatabaseSettings
+class DatabaseSettings
 {
+public:
   CStdString type;
   CStdString host;
   CStdString port;
@@ -58,6 +59,15 @@ struct RefreshOverride
   bool  fallback;
 };
 
+
+struct RefreshVideoLatency
+{
+  float refreshmin;
+  float refreshmax;
+
+  float delay;
+};
+
 typedef std::vector<TVShowRegexp> SETTINGS_TVSHOWLIST;
 
 class CAdvancedSettings
@@ -122,12 +132,17 @@ class CAdvancedSettings
     bool  m_videoEnableHighQualityHwScalers;
     float m_videoAutoScaleMaxFps;
     bool  m_videoAllowMpeg4VDPAU;
+    bool  m_videoAllowMpeg4VAAPI;
     std::vector<RefreshOverride> m_videoAdjustRefreshOverrides;
+    std::vector<RefreshVideoLatency> m_videoRefreshLatency;
+    float m_videoDefaultLatency;
     bool m_videoDisableBackgroundDeinterlace;
     int  m_videoCaptureUseOcclusionQuery;
     bool m_DXVACheckCompatibility;
     bool m_DXVACheckCompatibilityPresent;
     bool m_DXVAForceProcessorRenderer;
+    bool m_DXVANoDeintProcForProgressive;
+    int  m_videoFpsDetect;
 
     CStdString m_videoDefaultPlayer;
     CStdString m_videoDefaultDVDPlayer;
@@ -137,12 +152,6 @@ class CAdvancedSettings
     float m_slideshowZoomAmount;
     float m_slideshowPanAmount;
 
-    int m_lcdRows;
-    int m_lcdColumns;
-    int m_lcdAddress1;
-    int m_lcdAddress2;
-    int m_lcdAddress3;
-    int m_lcdAddress4;
     bool m_lcdHeartbeat;
     bool m_lcdDimOnScreenSave;
     int m_lcdScrolldelay;
@@ -154,13 +163,16 @@ class CAdvancedSettings
     int m_busyDialogDelay;
     int m_logLevel;
     int m_logLevelHint;
-    bool m_logEnableAirtunes;//airtunes spams alot - so make it an option
     CStdString m_cddbAddress;
+    
+    //airtunes + airplay
+    bool m_logEnableAirtunes;
+    int m_airTunesPort;
+    int m_airPlayPort;    
 
     bool m_handleMounting;
 
     bool m_fullScreenOnMovieStart;
-    bool m_noDVDROM;
     CStdString m_cachePath;
     CStdString m_videoCleanDateTimeRegExp;
     CStdStringArray m_videoCleanStringRegExps;
@@ -303,6 +315,8 @@ class CAdvancedSettings
     bool m_enableMultimediaKeys;
     std::vector<CStdString> m_settingsFiles;
     void ParseSettingsFile(const CStdString &file);
+
+    float GetDisplayLatency(float refreshrate);
 };
 
 XBMC_GLOBAL(CAdvancedSettings,g_advancedSettings);
index efa3701..5f9d049 100644 (file)
@@ -170,7 +170,7 @@ void CGUIDialogContentSettings::CreateSettings()
   case CONTENT_MOVIES:
     {
       AddBool(1,20345,&m_bRunScan, m_bShowScanSettings);
-      AddBool(2,20330,&m_bUseDirNames, m_bShowScanSettings);
+      AddBool(2,20329,&m_bUseDirNames, m_bShowScanSettings);
       AddBool(3,20346,&m_bScanRecursive, m_bShowScanSettings && ((m_bUseDirNames && !m_bSingleItem) || !m_bUseDirNames));
       AddBool(4,20383,&m_bSingleItem, m_bShowScanSettings && (m_bUseDirNames && !m_bScanRecursive));
       AddBool(5,20432,&m_bNoUpdate, m_bShowScanSettings);
index 1b8a79d..0bcb50c 100644 (file)
@@ -29,7 +29,6 @@
 #include "LinuxTimezone.h"
 #endif
 #include "Application.h"
-#include "filesystem/SpecialProtocol.h"
 #include "AdvancedSettings.h"
 #include "guilib/LocalizeStrings.h"
 #include "utils/StringUtils.h"
 #include "cores/dvdplayer/DVDCodecs/Video/CrystalHD.h"
 #include "utils/PCMRemap.h"
 #include "guilib/GUIFont.h" // for FONT_STYLE_* definitions
+#include "guilib/GUIFontManager.h"
+#include "utils/Weather.h"
+#include "LangInfo.h"
+#include "utils/XMLUtils.h"
 #if defined(__APPLE__)
   #include "osx/DarwinUtils.h"
 #endif
@@ -219,7 +222,7 @@ void CSettingsGroup::GetCategories(vecSettingsCategory &vecCategories)
   {
     vecSettings settings;
     // check whether we actually have these settings available.
-    g_guiSettings.GetSettingsGroup(m_vecCategories[i]->m_strCategory, settings);
+    g_guiSettings.GetSettingsGroup(m_vecCategories[i], settings);
     if (settings.size())
       vecCategories.push_back(m_vecCategories[i]);
   }
@@ -240,7 +243,7 @@ void CGUISettings::Initialize()
   AddBool(pic, "pictures.usetags", 14082, true);
   AddBool(pic,"pictures.generatethumbs",13360,true);
   AddBool(pic, "pictures.useexifrotation", 20184, true);
-  AddBool(pic, "pictures.showvideos", 22022, false);
+  AddBool(pic, "pictures.showvideos", 22022, true);
   // FIXME: hide this setting until it is properly respected. In the meanwhile, default to AUTO.
   AddInt(NULL, "pictures.displayresolution", 169, (int)RES_AUTORES, (int)RES_AUTORES, 1, (int)RES_AUTORES, SPIN_CONTROL_TEXT);
 
@@ -256,12 +259,8 @@ void CGUISettings::Initialize()
   AddGroup(2, 8);
   CSettingsCategory* wea = AddCategory(2, "weather", 16000);
   AddInt(NULL, "weather.currentlocation", 0, 1, 1, 1, 3, SPIN_CONTROL_INT_PLUS);
-  AddString(wea, "weather.areacode1", 14019, "USNY0996 - New York, NY", BUTTON_CONTROL_STANDARD);
-  AddString(wea, "weather.areacode2", 14020, "UKXX0085 - London, United Kingdom", BUTTON_CONTROL_STANDARD);
-  AddString(wea, "weather.areacode3", 14021, "JAXX0085 - Tokyo, Japan", BUTTON_CONTROL_STANDARD);
-  AddSeparator(wea, "weather.sep1");
-  AddDefaultAddon(wea, "weather.script", 24027, DEFAULT_WEATHER_ADDON, ADDON_SCRIPT_WEATHER);
-  AddString(wea, "weather.scriptsettings", 21417, "", BUTTON_CONTROL_STANDARD, true);
+  AddDefaultAddon(wea, "weather.addon", 24027, "weather.wunderground", ADDON_SCRIPT_WEATHER);
+  AddString(wea, "weather.addonsettings", 21417, "", BUTTON_CONTROL_STANDARD, true);
 
   // My Music Settings
   AddGroup(3, 2);
@@ -422,8 +421,8 @@ void CGUISettings::Initialize()
   // Todo: Implement test pattern for DX
   AddString(vs, "videoscreen.testpattern",226,"", BUTTON_CONTROL_STANDARD);
 #endif
-#if defined(_LINUX) && !defined(__APPLE__)
-  AddBool(NULL, "videoscreen.haslcd", 4501, false);
+#if defined(HAS_LCD)
+  AddBool(vs, "videoscreen.haslcd", 4501, false);
 #endif
 
   CSettingsCategory* ao = AddCategory(4, "audiooutput", 772);
@@ -484,12 +483,50 @@ void CGUISettings::Initialize()
   AddSeparator(in, "input.sep1");
 #endif
   AddBool(in, "input.remoteaskeyboard", 21449, false);
-#if (defined(__APPLE__) && defined(__arm_))
+#if defined(TARGET_DARWIN_IOS)
   AddBool(NULL, "input.enablemouse", 21369, true);
 #else
   AddBool(in, "input.enablemouse", 21369, true);
 #endif
 
+  CSettingsCategory* net = AddCategory(4, "network", 798);
+  if (g_application.IsStandAlone())
+  {
+#ifndef __APPLE__
+    AddString(NULL, "network.interface",775,"", SPIN_CONTROL_TEXT);
+
+    map<int, int> networkAssignments;
+    networkAssignments.insert(make_pair(716, NETWORK_DHCP));
+    networkAssignments.insert(make_pair(717, NETWORK_STATIC));
+    networkAssignments.insert(make_pair(787, NETWORK_DISABLED));
+    AddInt(NULL, "network.assignment", 715, NETWORK_DHCP, networkAssignments, SPIN_CONTROL_TEXT);
+    AddString(NULL, "network.ipaddress", 719, "0.0.0.0", EDIT_CONTROL_IP_INPUT);
+    AddString(NULL, "network.subnet", 720, "255.255.255.0", EDIT_CONTROL_IP_INPUT);
+    AddString(NULL, "network.gateway", 721, "0.0.0.0", EDIT_CONTROL_IP_INPUT);
+    AddString(NULL, "network.dns", 722, "0.0.0.0", EDIT_CONTROL_IP_INPUT);
+    AddString(NULL, "network.dnssuffix", 22002, "", EDIT_CONTROL_INPUT, true);
+    AddString(NULL, "network.essid", 776, "0.0.0.0", BUTTON_CONTROL_STANDARD);
+
+    map<int, int> networkEncapsulations;
+    networkEncapsulations.insert(make_pair(780, ENC_NONE));
+    networkEncapsulations.insert(make_pair(781, ENC_WEP));
+    networkEncapsulations.insert(make_pair(782, ENC_WPA));
+    networkEncapsulations.insert(make_pair(783, ENC_WPA2));
+    AddInt(NULL, "network.enc", 778, ENC_NONE, networkEncapsulations, SPIN_CONTROL_TEXT);
+    AddString(NULL, "network.key", 777, "0.0.0.0", EDIT_CONTROL_INPUT);
+#ifndef _WIN32
+    AddString(NULL, "network.save", 779, "", BUTTON_CONTROL_STANDARD);
+#endif
+    AddSeparator(NULL, "network.sep1");
+#endif
+  }
+  AddBool(net, "network.usehttpproxy", 708, false);
+  AddString(net, "network.httpproxyserver", 706, "", EDIT_CONTROL_INPUT);
+  AddString(net, "network.httpproxyport", 730, "8080", EDIT_CONTROL_NUMBER_INPUT, false, 707);
+  AddString(net, "network.httpproxyusername", 1048, "", EDIT_CONTROL_INPUT);
+  AddString(net, "network.httpproxypassword", 733, "", EDIT_CONTROL_HIDDEN_INPUT,true,733);
+  AddInt(net, "network.bandwidth", 14041, 0, 0, 512, 100*1024, SPIN_CONTROL_INT_PLUS, MASK_KBPS, TEXT_OFF);
+
   CSettingsCategory* pwm = AddCategory(4, "powermanagement", 14095);
   // Note: Application.cpp might hide powersaving settings if not supported.
   AddInt(pwm, "powermanagement.displaysoff", 1450, 0, 0, 5, 120, SPIN_CONTROL_INT_PLUS, MASK_MINS, TEXT_OFF);
@@ -555,7 +592,7 @@ void CGUISettings::Initialize()
   flattenTVShowOptions.insert(make_pair(20422, 2));
   AddInt(vdl, "videolibrary.flattentvshows", 20412, 1, flattenTVShowOptions, SPIN_CONTROL_TEXT);
 
-  AddBool(NULL, "videolibrary.flattenmoviesets", 22002, false);
+  AddBool(vdl, "videolibrary.groupmoviesets", 20458, false);
   AddBool(vdl, "videolibrary.updateonstartup", 22000, false);
   AddBool(vdl, "videolibrary.backgroundupdate", 22001, false);
   AddSeparator(vdl, "videolibrary.sep3");
@@ -589,7 +626,7 @@ void CGUISettings::Initialize()
   AddBool(vp, "videoplayer.usevaapi", 13426, true);
 #endif
 #ifdef HAS_DX
-  AddBool(g_sysinfo.IsVistaOrHigher() ? vp: NULL, "videoplayer.usedxva2", 13427, false);
+  AddBool(g_sysinfo.IsVistaOrHigher() ? vp: NULL, "videoplayer.usedxva2", 13427, g_sysinfo.IsVistaOrHigher() ? true : false);
 #endif
 #ifdef HAVE_LIBCRYSTALHD
   AddBool(CCrystalHD::GetInstance()->DevicePresent() ? vp: NULL, "videoplayer.usechd", 13428, true);
@@ -671,7 +708,7 @@ void CGUISettings::Initialize()
   AddInt(vid, "myvideos.selectaction", 22079, SELECT_ACTION_PLAY_OR_RESUME, myVideosSelectActions, SPIN_CONTROL_TEXT);
   AddBool(NULL, "myvideos.treatstackasfile", 20051, true);
   AddBool(vid, "myvideos.extractflags",20433, true);
-  AddBool(vid, "myvideos.filemetadata", 20419, true);
+  AddBool(vid, "myvideos.replacelabels", 20419, true);
   AddBool(NULL, "myvideos.extractthumb",20433, true);
 
   CSettingsCategory* sub = AddCategory(5, "subtitles", 287);
@@ -687,6 +724,7 @@ void CGUISettings::Initialize()
   AddInt(sub, "subtitles.style", 736, FONT_STYLE_BOLD, fontStyles, SPIN_CONTROL_TEXT);
   AddInt(sub, "subtitles.color", 737, SUBTITLE_COLOR_START + 1, SUBTITLE_COLOR_START, 1, SUBTITLE_COLOR_END, SPIN_CONTROL_TEXT);
   AddString(sub, "subtitles.charset", 735, "DEFAULT", SPIN_CONTROL_TEXT);
+  AddBool(sub,"subtitles.overrideassfonts", 21368, false);
   AddSeparator(sub, "subtitles.sep1");
   AddPath(sub, "subtitles.custompath", 21366, "", BUTTON_CONTROL_PATH_INPUT, false, 657);
 
@@ -705,99 +743,62 @@ void CGUISettings::Initialize()
 
   AddDefaultAddon(NULL, "scrapers.moviesdefault", 21413, "metadata.themoviedb.org", ADDON_SCRAPER_MOVIES);
   AddDefaultAddon(NULL, "scrapers.tvshowsdefault", 21414, "metadata.tvdb.com", ADDON_SCRAPER_TVSHOWS);
-  AddDefaultAddon(NULL, "scrapers.musicvideosdefault", 21415, "metadata.mtv.com", ADDON_SCRAPER_MUSICVIDEOS);
+  AddDefaultAddon(NULL, "scrapers.musicvideosdefault", 21415, "metadata.yahoomusic.com", ADDON_SCRAPER_MUSICVIDEOS);
   AddBool(NULL, "scrapers.langfallback", 21416, false);
 
-  // network settings
-  AddGroup(6, 705);
+  // service settings
+  AddGroup(6, 14036);
+
+  CSettingsCategory* srvGeneral = AddCategory(6, "general", 16000);
+  AddString(srvGeneral,"services.devicename", 1271, "XBMC", EDIT_CONTROL_INPUT);
+
+  CSettingsCategory* srvUpnp = AddCategory(6, "upnp", 20187);
+  AddBool(srvUpnp, "services.upnpserver", 21360, false);
+  AddBool(srvUpnp, "services.upnprenderer", 21881, false);
 
-  CSettingsCategory* srv = AddCategory(6, "services", 14036);
-  AddString(srv,"services.devicename", 1271, "XBMC", EDIT_CONTROL_INPUT);
-  AddSeparator(srv,"services.sep4");
-  AddBool(srv, "services.upnpserver", 21360, false);
-  AddBool(srv, "services.upnprenderer", 21881, false);
-  AddSeparator(srv,"services.sep3");
 #ifdef HAS_WEB_SERVER
-  AddBool(srv,  "services.webserver",        263, false);
+  CSettingsCategory* srvWeb = AddCategory(6, "webserver", 33101);
+  AddBool(srvWeb,  "services.webserver",        263, false);
 #ifdef _LINUX
-  AddString(srv,"services.webserverport",    730, (geteuid()==0)?"80":"8080", EDIT_CONTROL_NUMBER_INPUT, false, 730);
+  AddString(srvWeb,"services.webserverport",    730, (geteuid()==0)?"80":"8080", EDIT_CONTROL_NUMBER_INPUT, false, 730);
 #else
-  AddString(srv,"services.webserverport",    730, "80", EDIT_CONTROL_NUMBER_INPUT, false, 730);
+  AddString(srvWeb,"services.webserverport",    730, "80", EDIT_CONTROL_NUMBER_INPUT, false, 730);
 #endif
-  AddString(srv,"services.webserverusername",1048, "xbmc", EDIT_CONTROL_INPUT);
-  AddString(srv,"services.webserverpassword",733, "", EDIT_CONTROL_HIDDEN_INPUT, true, 733);
-  AddDefaultAddon(srv, "services.webskin",199, DEFAULT_WEB_INTERFACE, ADDON_WEB_INTERFACE);
+  AddString(srvWeb,"services.webserverusername",1048, "xbmc", EDIT_CONTROL_INPUT);
+  AddString(srvWeb,"services.webserverpassword",733, "", EDIT_CONTROL_HIDDEN_INPUT, true, 733);
+  AddDefaultAddon(srvWeb, "services.webskin",199, DEFAULT_WEB_INTERFACE, ADDON_WEB_INTERFACE);
 #endif
 #ifdef HAS_EVENT_SERVER
-  AddSeparator(srv,"services.sep1");
-  AddBool(srv,  "services.esenabled",         791, true);
+  CSettingsCategory* srvEvent = AddCategory(6, "remotecontrol", 790);
+  AddBool(srvEvent,  "services.esenabled",         791, true);
   AddString(NULL,"services.esport",            792, "9777", EDIT_CONTROL_NUMBER_INPUT, false, 792);
   AddInt(NULL,   "services.esportrange",       793, 10, 1, 1, 100, SPIN_CONTROL_INT);
   AddInt(NULL,   "services.esmaxclients",      797, 20, 1, 1, 100, SPIN_CONTROL_INT);
-  AddBool(srv,  "services.esallinterfaces",   794, false);
+  AddBool(srvEvent,  "services.esallinterfaces",   794, false);
   AddInt(NULL,   "services.esinitialdelay",    795, 750, 5, 5, 10000, SPIN_CONTROL_INT);
   AddInt(NULL,   "services.escontinuousdelay", 796, 25, 5, 5, 10000, SPIN_CONTROL_INT);
 #endif
 #ifdef HAS_ZEROCONF
-  AddSeparator(srv, "services.sep2");
+  CSettingsCategory* srvZeroconf = AddCategory(6, "zeroconf", 1259);
 #ifdef TARGET_WINDOWS
-  AddBool(srv, "services.zeroconf", 1260, false);
+  AddBool(srvZeroconf, "services.zeroconf", 1260, false);
 #else
-  AddBool(srv, "services.zeroconf", 1260, true);
+  AddBool(srvZeroconf, "services.zeroconf", 1260, true);
 #endif
 #endif
 
 #ifdef HAS_AIRPLAY
-  AddSeparator(srv, "services.sep5");
-  AddBool(srv, "services.airplay", 1270, false);
-  AddBool(srv, "services.useairplaypassword", 1272, false);
-  AddString(srv, "services.airplaypassword", 733, "", EDIT_CONTROL_HIDDEN_INPUT, false, 733);
-  AddSeparator(srv, "services.sep6");  
-#endif
-
-#ifndef _WIN32
-  CSettingsCategory* smb = AddCategory(6, "smb", 1200);
-  AddString(smb, "smb.winsserver",  1207,   "",  EDIT_CONTROL_IP_INPUT);
-  AddString(smb, "smb.workgroup",   1202,   "WORKGROUP", EDIT_CONTROL_INPUT, false, 1202);
+  CSettingsCategory* srvAirplay = AddCategory(6, "airplay", 1273);
+  AddBool(srvAirplay, "services.airplay", 1270, false);
+  AddBool(srvAirplay, "services.useairplaypassword", 1272, false);
+  AddString(srvAirplay, "services.airplaypassword", 733, "", EDIT_CONTROL_HIDDEN_INPUT, false, 733); 
 #endif
 
-  CSettingsCategory* net = AddCategory(6, "network", 798);
-  if (g_application.IsStandAlone())
-  {
-#ifndef __APPLE__
-    AddString(NULL, "network.interface",775,"", SPIN_CONTROL_TEXT);
-
-    map<int, int> networkAssignments;
-    networkAssignments.insert(make_pair(716, NETWORK_DHCP));
-    networkAssignments.insert(make_pair(717, NETWORK_STATIC));
-    networkAssignments.insert(make_pair(787, NETWORK_DISABLED));
-    AddInt(NULL, "network.assignment", 715, NETWORK_DHCP, networkAssignments, SPIN_CONTROL_TEXT);
-    AddString(NULL, "network.ipaddress", 719, "0.0.0.0", EDIT_CONTROL_IP_INPUT);
-    AddString(NULL, "network.subnet", 720, "255.255.255.0", EDIT_CONTROL_IP_INPUT);
-    AddString(NULL, "network.gateway", 721, "0.0.0.0", EDIT_CONTROL_IP_INPUT);
-    AddString(NULL, "network.dns", 722, "0.0.0.0", EDIT_CONTROL_IP_INPUT);
-    AddString(NULL, "network.dnssuffix", 22002, "", EDIT_CONTROL_INPUT, true);
-    AddString(NULL, "network.essid", 776, "0.0.0.0", BUTTON_CONTROL_STANDARD);
-
-    map<int, int> networkEncapsulations;
-    networkEncapsulations.insert(make_pair(780, ENC_NONE));
-    networkEncapsulations.insert(make_pair(781, ENC_WEP));
-    networkEncapsulations.insert(make_pair(782, ENC_WPA));
-    networkEncapsulations.insert(make_pair(783, ENC_WPA2));
-    AddInt(NULL, "network.enc", 778, ENC_NONE, networkEncapsulations, SPIN_CONTROL_TEXT);
-    AddString(NULL, "network.key", 777, "0.0.0.0", EDIT_CONTROL_INPUT);
 #ifndef _WIN32
-    AddString(NULL, "network.save", 779, "", BUTTON_CONTROL_STANDARD);
-#endif
-    AddSeparator(NULL, "network.sep1");
+  CSettingsCategory* srvSmb = AddCategory(6, "smb", 1200);
+  AddString(srvSmb, "smb.winsserver",  1207,   "",  EDIT_CONTROL_IP_INPUT);
+  AddString(srvSmb, "smb.workgroup",   1202,   "WORKGROUP", EDIT_CONTROL_INPUT, false, 1202);
 #endif
-  }
-  AddBool(net, "network.usehttpproxy", 708, false);
-  AddString(net, "network.httpproxyserver", 706, "", EDIT_CONTROL_INPUT);
-  AddString(net, "network.httpproxyport", 730, "8080", EDIT_CONTROL_NUMBER_INPUT, false, 707);
-  AddString(net, "network.httpproxyusername", 1048, "", EDIT_CONTROL_INPUT);
-  AddString(net, "network.httpproxypassword", 733, "", EDIT_CONTROL_HIDDEN_INPUT,true,733);
-  AddInt(net, "network.bandwidth", 14041, 0, 0, 512, 100*1024, SPIN_CONTROL_INT_PLUS, MASK_KBPS, TEXT_OFF);
 
   // appearance settings
   AddGroup(7, 480);
@@ -861,6 +862,9 @@ void CGUISettings::Initialize()
   AddInt(NULL, "window.height", 0, 480, 10, 1, INT_MAX, SPIN_CONTROL_INT);
 
   AddPath(NULL,"system.playlistspath",20006,"set default",BUTTON_CONTROL_PATH_INPUT,false);
+
+  // PVR-related setting typically used by skins that are aimed at PVR and non-PVR builds
+  AddBool(NULL, "pvrmanager.enabled", 449, false);
 }
 
 CGUISettings::~CGUISettings(void)
@@ -898,21 +902,32 @@ CSettingsGroup *CGUISettings::GetGroup(int groupID)
   return NULL;
 }
 
+void CGUISettings::AddSetting(CSettingsCategory* cat, CSetting* setting)
+{
+  if (!setting)
+    return;
+
+  if (cat)
+    cat->m_settings.push_back(setting);
+  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(setting->GetSetting()).ToLower(), setting));
+}
+
 void CGUISettings::AddSeparator(CSettingsCategory* cat, const char *strSetting)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingSeparator *pSetting = new CSettingSeparator(iOrder, CStdString(strSetting).ToLower());
   if (!pSetting) return;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
 void CGUISettings::AddBool(CSettingsCategory* cat, const char *strSetting, int iLabel, bool bData, int iControlType)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingBool* pSetting = new CSettingBool(iOrder, CStdString(strSetting).ToLower(), iLabel, bData, iControlType);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
+
 bool CGUISettings::GetBool(const char *strSetting) const
 {
   ASSERT(settingsMap.size());
@@ -959,10 +974,10 @@ void CGUISettings::ToggleBool(const char *strSetting)
 
 void CGUISettings::AddFloat(CSettingsCategory* cat, const char *strSetting, int iLabel, float fData, float fMin, float fStep, float fMax, int iControlType)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingFloat* pSetting = new CSettingFloat(iOrder, CStdString(strSetting).ToLower(), iLabel, fData, fMin, fStep, fMax, iControlType);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
 float CGUISettings::GetFloat(const char *strSetting) const
@@ -1003,39 +1018,36 @@ void CGUISettings::LoadMasterLock(TiXmlElement *pRootElement)
     LoadFromXML(pRootElement, it);
 }
 
-
 void CGUISettings::AddInt(CSettingsCategory* cat, const char *strSetting, int iLabel, int iData, int iMin, int iStep, int iMax, int iControlType, const char *strFormat)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingInt* pSetting = new CSettingInt(iOrder, CStdString(strSetting).ToLower(), iLabel, iData, iMin, iStep, iMax, iControlType, strFormat);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
 void CGUISettings::AddInt(CSettingsCategory* cat, const char *strSetting, int iLabel, int iData, int iMin, int iStep, int iMax, int iControlType, int iFormat, int iLabelMin/*=-1*/)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingInt* pSetting = new CSettingInt(iOrder, CStdString(strSetting).ToLower(), iLabel, iData, iMin, iStep, iMax, iControlType, iFormat, iLabelMin);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
-void CGUISettings::AddInt(CSettingsCategory* cat, const char *strSetting,
-                          int iLabel, int iData, const map<int,int>& entries,
-                          int iControlType)
+void CGUISettings::AddInt(CSettingsCategory* cat, const char *strSetting, int iLabel, int iData, const map<int,int>& entries, int iControlType)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingInt* pSetting = new CSettingInt(iOrder, CStdString(strSetting).ToLower(), iLabel, iData, entries, iControlType);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
 void CGUISettings::AddHex(CSettingsCategory* cat, const char *strSetting, int iLabel, int iData, int iMin, int iStep, int iMax, int iControlType, const char *strFormat)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingHex* pSetting = new CSettingHex(iOrder, CStdString(strSetting).ToLower(), iLabel, iData, iMin, iStep, iMax, iControlType, strFormat);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
 int CGUISettings::GetInt(const char *strSetting) const
@@ -1068,26 +1080,26 @@ void CGUISettings::SetInt(const char *strSetting, int iSetting)
 
 void CGUISettings::AddString(CSettingsCategory* cat, const char *strSetting, int iLabel, const char *strData, int iControlType, bool bAllowEmpty, int iHeadingString)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingString* pSetting = new CSettingString(iOrder, CStdString(strSetting).ToLower(), iLabel, strData, iControlType, bAllowEmpty, iHeadingString);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
 void CGUISettings::AddPath(CSettingsCategory* cat, const char *strSetting, int iLabel, const char *strData, int iControlType, bool bAllowEmpty, int iHeadingString)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingPath* pSetting = new CSettingPath(iOrder, CStdString(strSetting).ToLower(), iLabel, strData, iControlType, bAllowEmpty, iHeadingString);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
 void CGUISettings::AddDefaultAddon(CSettingsCategory* cat, const char *strSetting, int iLabel, const char *strData, const TYPE type)
 {
-  int iOrder = cat?++cat->m_entries:0;
+  int iOrder = cat ? cat->m_settings.size() : 0;
   CSettingAddon* pSetting = new CSettingAddon(iOrder, CStdString(strSetting).ToLower(), iLabel, strData, type);
   if (!pSetting) return ;
-  settingsMap.insert(pair<CStdString, CSetting*>(CStdString(strSetting).ToLower(), pSetting));
+  AddSetting(cat, pSetting);
 }
 
 const CStdString &CGUISettings::GetString(const char *strSetting, bool bPrompt /* = true */) const
@@ -1149,14 +1161,18 @@ CSetting *CGUISettings::GetSetting(const char *strSetting)
 }
 
 // get all the settings beginning with the term "strGroup"
-void CGUISettings::GetSettingsGroup(const char *strGroup, vecSettings &settings)
+void CGUISettings::GetSettingsGroup(CSettingsCategory* cat, vecSettings &settings)
 {
+  if (!cat || cat->m_settings.size() <= 0)
+    return;
+
   vecSettings unorderedSettings;
-  for (mapIter it = settingsMap.begin(); it != settingsMap.end(); it++)
+  for (unsigned int index = 0; index < cat->m_settings.size(); index++)
   {
-    if ((*it).first.Left(strlen(strGroup)).Equals(strGroup) && (*it).second->GetOrder() > 0 && !(*it).second->IsAdvanced())
-      unorderedSettings.push_back((*it).second);
+    if (!cat->m_settings.at(index)->IsAdvanced())
+      unorderedSettings.push_back(cat->m_settings.at(index));
   }
+
   // now order them...
   sort(unorderedSettings.begin(), unorderedSettings.end(), sortsettings());
 
@@ -1258,12 +1274,6 @@ void CGUISettings::LoadFromXML(TiXmlElement *pRootElement, mapIter &it, bool adv
         CStdString strValue = pGrandChild->FirstChild() ? pGrandChild->FirstChild()->Value() : "";
         if (strValue != "-")
         { // update our item
-          if ((*it).second->GetType() == SETTINGS_TYPE_PATH)
-          { // check our path
-            int pathVersion = 0;
-            pGrandChild->Attribute("pathversion", &pathVersion);
-            strValue = CSpecialProtocol::ReplaceOldPath(strValue, pathVersion);
-          }
           (*it).second->FromString(strValue);
           if (advanced)
             (*it).second->SetAdvanced();
@@ -1297,7 +1307,7 @@ void CGUISettings::SaveXML(TiXmlNode *pRootNode)
       { // successfully added (or found) our group
         TiXmlElement newElement(strSplit[1]);
         if ((*it).second->GetType() == SETTINGS_TYPE_PATH)
-          newElement.SetAttribute("pathversion", CSpecialProtocol::path_version);
+          newElement.SetAttribute("pathversion", XMLUtils::path_version);
         TiXmlNode *pNewNode = pChild->InsertEndChild(newElement);
         if (pNewNode)
         {
@@ -1384,3 +1394,40 @@ void CGUISettings::SetResolution(RESOLUTION res)
   SetString("videoscreen.screenmode", mode);
   m_LookAndFeelResolution = res;
 }
+
+bool CGUISettings::SetLanguage(const CStdString &strLanguage)
+{
+  CStdString strPreviousLanguage = GetString("locale.language");
+  CStdString strNewLanguage = strLanguage;
+  if (strNewLanguage != strPreviousLanguage)
+  {
+    CStdString strLangInfoPath;
+    strLangInfoPath.Format("special://xbmc/language/%s/langinfo.xml", strNewLanguage.c_str());
+    if (!g_langInfo.Load(strLangInfoPath))
+      return false;
+
+    if (g_langInfo.ForceUnicodeFont() && !g_fontManager.IsFontSetUnicode())
+    {
+      CLog::Log(LOGINFO, "Language needs a ttf font, loading first ttf font available");
+      CStdString strFontSet;
+      if (g_fontManager.GetFirstFontSetUnicode(strFontSet))
+        strNewLanguage = strFontSet;
+      else
+        CLog::Log(LOGERROR, "No ttf font found but needed: %s", strFontSet.c_str());
+    }
+    SetString("locale.language", strNewLanguage);
+
+    g_charsetConverter.reset();
+
+    CStdString strLanguagePath;
+    strLanguagePath.Format("special://xbmc/language/%s/strings.xml", strNewLanguage.c_str());
+    if (!g_localizeStrings.Load(strLanguagePath))
+      return false;
+
+    // also tell our weather and skin to reload as these are localized
+    g_weatherManager.Refresh();
+    g_application.ReloadSkin();
+  }
+
+  return true;
+}
index 869e336..fb2308f 100644 (file)
@@ -394,13 +394,12 @@ public:
   {
     m_strCategory = strCategory;
     m_labelID = labelID;
-    m_entries = 0;
   }
   ~CSettingsCategory() {};
 
   CStdString m_strCategory;
   int m_labelID;
-  int m_entries;
+  std::vector<CSetting*> m_settings;
 };
 
 typedef std::vector<CSettingsCategory *> vecSettingsCategory;
@@ -450,6 +449,7 @@ public:
   CSettingsCategory* AddCategory(int groupID, const char *strCategory, int labelID);
   CSettingsGroup *GetGroup(int windowID);
 
+  void AddSetting(CSettingsCategory* cat, CSetting* setting);
   void AddBool(CSettingsCategory* cat, const char *strSetting, int iLabel, bool bSetting, int iControlType = CHECKMARK_CONTROL);
   bool GetBool(const char *strSetting) const;
   void SetBool(const char *strSetting, bool bSetting);
@@ -480,7 +480,7 @@ public:
 
   CSetting *GetSetting(const char *strSetting);
 
-  void GetSettingsGroup(const char *strGroup, vecSettings &settings);
+  void GetSettingsGroup(CSettingsCategory* cat, vecSettings &settings);
   void LoadXML(TiXmlElement *pRootElement, bool hideSettings = false);
   void SaveXML(TiXmlNode *pRootNode);
   void LoadMasterLock(TiXmlElement *pRootElement);
@@ -488,6 +488,7 @@ public:
   RESOLUTION GetResolution() const;
   static RESOLUTION GetResFromString(const CStdString &res);
   void SetResolution(RESOLUTION res);
+  bool SetLanguage(const CStdString &strLanguage);
 
   //m_LookAndFeelResolution holds the real gui resolution
   RESOLUTION m_LookAndFeelResolution;
index e977e0c..48f213c 100644 (file)
 #include "network/AirPlayServer.h"
 #endif
 
+#if defined(HAS_WEB_SERVER)
+#include "network/WebServer.h"
+#endif
+
 using namespace std;
 using namespace XFILE;
 using namespace ADDON;
@@ -147,9 +151,6 @@ CGUIWindowSettingsCategory::CGUIWindowSettingsCategory(void)
   // set the correct ID range...
   m_idRange = 8;
   m_iScreen = 0;
-  // set the network settings so that we don't reset them unnecessarily
-  m_iNetworkAssignment = -1;
-  m_strErrorMessage = "";
   m_strOldTrackFormat = "";
   m_strOldTrackFormatRight = "";
   m_returningFromSkinLoad = false;
@@ -176,14 +177,6 @@ bool CGUIWindowSettingsCategory::OnMessage(CGUIMessage &message)
   case GUI_MSG_CLICKED:
     {
       unsigned int iControl = message.GetSenderId();
-      /*   if (iControl >= CONTROL_START_BUTTONS && iControl < CONTROL_START_BUTTONS + m_vecSections.size())
-         {
-          // change the setting...
-          m_iSection = iControl-CONTROL_START_BUTTONS;
-          CheckNetworkSettings();
-          CreateSettings();
-          return true;
-         }*/
       for (unsigned int i = 0; i < m_vecSettings.size(); i++)
       {
         if (m_vecSettings[i]->GetID() == (int)iControl)
@@ -211,7 +204,6 @@ bool CGUIWindowSettingsCategory::OnMessage(CGUIMessage &message)
           }
         }
         m_iSection = focusedControl - CONTROL_START_BUTTONS;
-        CheckNetworkSettings();
 
         CreateSettings();
       }
@@ -265,7 +257,6 @@ bool CGUIWindowSettingsCategory::OnMessage(CGUIMessage &message)
       m_delayedSetting = NULL;
 
       CheckForUpdates();
-      CheckNetworkSettings();
       CGUIWindow::OnMessage(message);
       FreeControls();
       return true;
@@ -355,7 +346,7 @@ void CGUIWindowSettingsCategory::CreateSettings()
   if (!group)
     return;
   vecSettings settings;
-  g_guiSettings.GetSettingsGroup(m_vecSections[m_iSection]->m_strCategory, settings);
+  g_guiSettings.GetSettingsGroup(m_vecSections[m_iSection], settings);
   int iControlID = CONTROL_START_CONTROL;
   for (unsigned int i = 0; i < settings.size(); i++)
   {
@@ -584,8 +575,7 @@ void CGUIWindowSettingsCategory::UpdateSettings()
       CGUIControl *pControl = (CGUIControl *)GetControl(pSettingControl->GetID());
       if (pControl)
       {
-        int value = g_guiSettings.GetResolution();
-        if (g_settings.m_ResInfo[value].bFullScreen)
+        if (g_Windowing.IsFullScreen())
           pControl->SetEnabled(true);
         else
           pControl->SetEnabled(false);
@@ -867,12 +857,6 @@ void CGUIWindowSettingsCategory::UpdateSettings()
       if (strSetting.Equals("screensaver.usedimonpause") && g_guiSettings.GetString("screensaver.mode").Equals("screensaver.xbmc.builtin.dim"))
         pControl->SetEnabled(false);
     }
-    else if (strSetting.Left(16).Equals("weather.areacode"))
-    {
-      CSettingString *pSetting = (CSettingString *)GetSetting(strSetting)->GetSetting();
-      CGUIButtonControl *pControl = (CGUIButtonControl *)GetControl(GetSetting(strSetting)->GetID());
-      pControl->SetLabel2(CWeather::GetAreaCity(pSetting->GetData()));
-    }
     else if (strSetting.Equals("musicfiles.trackformat"))
     {
       if (m_strOldTrackFormat != g_guiSettings.GetString("musicfiles.trackformat"))
@@ -937,16 +921,22 @@ void CGUIWindowSettingsCategory::UpdateSettings()
         pControl->SetEnabled(enabled);
       }
     }
-    else if (strSetting.Equals("weather.scriptsettings"))
+    else if (strSetting.Equals("weather.addonsettings"))
     {
       AddonPtr addon;
-      if (CAddonMgr::Get().GetAddon(g_guiSettings.GetString("weather.script"), addon, ADDON_SCRIPT_WEATHER))
+      if (CAddonMgr::Get().GetAddon(g_guiSettings.GetString("weather.addon"), addon, ADDON_SCRIPT_WEATHER))
       {
         CGUIControl *pControl = (CGUIControl *)GetControl(pSettingControl->GetID());
         if (pControl)
           pControl->SetEnabled(addon->HasSettings());
       }
     }
+    else if (strSetting.Equals("input.peripherals"))
+    {
+      CGUIControl *pControl = (CGUIControl *)GetControl(pSettingControl->GetID());
+      if (pControl)
+        pControl->SetEnabled(g_peripherals.GetNumberOfPeripherals() > 0);
+    }
 #if defined(_LINUX) && !defined(__APPLE__)
     else if (strSetting.Equals("audiooutput.custompassthrough"))
     {
@@ -969,34 +959,12 @@ void CGUIWindowSettingsCategory::UpdateSettings()
   }
 }
 
-void CGUIWindowSettingsCategory::UpdateRealTimeSettings()
-{
-  // date and time used to be here
-}
-
 void CGUIWindowSettingsCategory::OnClick(CBaseSettingControl *pSettingControl)
 {
   CStdString strSetting = pSettingControl->GetSetting()->GetSetting();
-  if (strSetting.Left(16).Equals("weather.areacode"))
+  if (strSetting.Equals("weather.addonsettings"))
   {
-    CStdString strSearch;
-    if (CGUIDialogKeyboard::ShowAndGetInput(strSearch, g_localizeStrings.Get(14024), false))
-    {
-      strSearch.Replace(" ", "+");
-      CStdString strResult = ((CSettingString *)pSettingControl->GetSetting())->GetData();
-      if (g_weatherManager.GetSearchResults(strSearch, strResult))
-      {
-        ((CSettingString *)pSettingControl->GetSetting())->SetData(strResult);
-        // Update the labels on the location spinner
-        g_weatherManager.Reset();
-        // Refresh the weather using the new location
-        g_weatherManager.Refresh();
-      }
-    }
-  }
-  else if (strSetting.Equals("weather.scriptsettings"))
-  {
-    CStdString name = g_guiSettings.GetString("weather.script");
+    CStdString name = g_guiSettings.GetString("weather.addon");
     AddonPtr addon;
     if (CAddonMgr::Get().GetAddon(name, addon, ADDON_SCRIPT_WEATHER))
     { // TODO: maybe have ShowAndGetInput return a bool if settings changed, then only reset weather if true.
@@ -1020,7 +988,7 @@ void CGUIWindowSettingsCategory::OnClick(CBaseSettingControl *pSettingControl)
   { // prompt for the addon
     CSettingAddon *setting = (CSettingAddon *)pSettingControl->GetSetting();
     CStdString addonID = setting->GetData();
-    if (CGUIWindowAddonBrowser::SelectAddonID(setting->m_type, addonID, setting->m_type == ADDON_SCREENSAVER || setting->m_type == ADDON_VIZ) == 1)
+    if (CGUIWindowAddonBrowser::SelectAddonID(setting->m_type, addonID, setting->m_type == ADDON_SCREENSAVER || setting->m_type == ADDON_VIZ || setting->m_type == ADDON_SCRIPT_WEATHER) == 1)
       setting->SetData(addonID);
     else
       return;
@@ -1290,16 +1258,37 @@ void CGUIWindowSettingsCategory::OnSettingChanged(CBaseSettingControl *pSettingC
   {
 #ifdef HAS_ZEROCONF
     //ifdef zeroconf here because it's only found in guisettings if defined
-    CZeroconf::GetInstance()->Stop();
     if(g_guiSettings.GetBool("services.zeroconf"))
+    {
+      CZeroconf::GetInstance()->Stop();
       CZeroconf::GetInstance()->Start();
+    }
+#ifdef HAS_AIRPLAY
+    else
+    {
+      g_application.StopAirplayServer(true);
+      g_guiSettings.SetBool("services.airplay", false);
+      CZeroconf::GetInstance()->Stop();
+    }
+#endif
 #endif
   }
   else if (strSetting.Equals("services.airplay"))
   {  
 #ifdef HAS_AIRPLAY  
     if (g_guiSettings.GetBool("services.airplay"))
+    {
+#ifdef HAS_ZEROCONF
+      // AirPlay needs zeroconf
+      if(!g_guiSettings.GetBool("services.zeroconf"))
+      {
+        g_guiSettings.SetBool("services.zeroconf", true);
+        CZeroconf::GetInstance()->Stop();
+        CZeroconf::GetInstance()->Start();
+      }
+#endif //HAS_ZEROCONF
       g_application.StartAirplayServer();//will stop the server before internal
+    }
     else
       g_application.StopAirplayServer(true);//will stop the server before internal    
 #endif//HAS_AIRPLAY      
@@ -1464,32 +1453,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(CBaseSettingControl *pSettingC
     CGUISpinControlEx *pControl = (CGUISpinControlEx *)GetControl(pSettingControl->GetID());
     CStdString strLanguage = pControl->GetCurrentLabel();
     if (strLanguage != ".svn" && strLanguage != pSettingString->GetData())
-    {
-      CStdString strLangInfoPath;
-      strLangInfoPath.Format("special://xbmc/language/%s/langinfo.xml", strLanguage.c_str());
-      g_langInfo.Load(strLangInfoPath);
-
-      if (g_langInfo.ForceUnicodeFont() && !g_fontManager.IsFontSetUnicode())
-      {
-        CLog::Log(LOGINFO, "Language needs a ttf font, loading first ttf font available");
-        CStdString strFontSet;
-        if (g_fontManager.GetFirstFontSetUnicode(strFontSet))
-          strLanguage = strFontSet;
-        else
-          CLog::Log(LOGERROR, "No ttf font found but needed: %s", strFontSet.c_str());
-      }
-      g_guiSettings.SetString("locale.language", strLanguage);
-
-      g_charsetConverter.reset();
-
-      CStdString strLanguagePath;
-      strLanguagePath.Format("special://xbmc/language/%s/strings.xml", strLanguage.c_str());
-      g_localizeStrings.Load(strLanguagePath);
-
-      // also tell our weather and skin to reload as these are localized
-      g_weatherManager.Refresh();
-      g_application.ReloadSkin();
-    }
+      g_guiSettings.SetLanguage(strLanguage);
   }
   else if (strSetting.Equals("lookandfeel.skintheme"))
   { //a new Theme was chosen
@@ -1560,18 +1524,19 @@ void CGUIWindowSettingsCategory::OnSettingChanged(CBaseSettingControl *pSettingC
     CStdString path = g_guiSettings.GetString(strSetting,false);
     VECSOURCES shares;
 
-    g_mediaManager.GetNetworkLocations(shares);
-    g_mediaManager.GetLocalDrives(shares);
-
-    UpdateSettings();
     bool bWriteOnly = true;
 
     if (strSetting.Equals("subtitles.custompath"))
     {
       bWriteOnly = false;
       shares = g_settings.m_videoSources;
-      g_mediaManager.GetLocalDrives(shares);
     }
+
+    g_mediaManager.GetNetworkLocations(shares);
+    g_mediaManager.GetLocalDrives(shares);
+
+    UpdateSettings();
+
     if (CGUIDialogFileBrowser::ShowAndGetDirectory(shares, g_localizeStrings.Get(pSettingString->m_iHeadingString), path, bWriteOnly))
     {
       pSettingString->SetData(path);
@@ -1609,15 +1574,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(CBaseSettingControl *pSettingC
     /* okey we really don't need to restarat, only deinit samba, but that could be damn hard if something is playing*/
     //TODO - General way of handling setting changes that require restart
 
-    CGUIDialogOK *dlg = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO);
-    if (!dlg) return ;
-    dlg->SetHeading( g_localizeStrings.Get(14038) );
-    dlg->SetLine( 0, g_localizeStrings.Get(14039) );
-    dlg->SetLine( 1, g_localizeStrings.Get(14040));
-    dlg->SetLine( 2, "");
-    dlg->DoModal();
-
-    if (dlg->IsConfirmed())
+    if (CGUIDialogYesNo::ShowAndGetInput(14038, 14039, 14040, -1, -1))
     {
       g_settings.Save();
       g_application.getApplicationMessenger().RestartApp();
@@ -1958,9 +1915,6 @@ CGUIControl* CGUIWindowSettingsCategory::AddSetting(CSetting *pSetting, float wi
 
 void CGUIWindowSettingsCategory::FrameMove()
 {
-  // update realtime changeable stuff
-  UpdateRealTimeSettings();
-
   if (m_delayedSetting && m_delayedTimer.GetElapsedMilliseconds() > 3000)
   { // we send a thread message so that it's processed the following frame (some settings won't
     // like being changed during Render())
@@ -2005,60 +1959,6 @@ void CGUIWindowSettingsCategory::DoProcess(unsigned int currentTime, CDirtyRegio
 void CGUIWindowSettingsCategory::Render()
 {
   CGUIWindow::Render();
-  // render the error message if necessary
-  if (m_strErrorMessage.size())
-  {
-    CGUIFont *pFont = g_fontManager.GetFont("font13");
-    float fPosY = g_graphicsContext.GetHeight() * 0.8f;
-    float fPosX = g_graphicsContext.GetWidth() * 0.5f;
-    CGUITextLayout::DrawText(pFont, fPosX, fPosY, 0xffffffff, 0, m_strErrorMessage, XBFONT_CENTER_X);
-  }
-}
-
-void CGUIWindowSettingsCategory::CheckNetworkSettings()
-{
-  if (!g_application.IsStandAlone())
-    return;
-
-  // check if our network needs restarting (requires a reset, so check well!)
-  if (m_iNetworkAssignment == -1)
-  {
-    // nothing to do here, folks - move along.
-    return ;
-  }
-  // we need a reset if:
-  // 1.  The Network Assignment has changed OR
-  // 2.  The Network Assignment is STATIC and one of the network fields have changed
-  if (m_iNetworkAssignment != g_guiSettings.GetInt("network.assignment") ||
-      (m_iNetworkAssignment == NETWORK_STATIC && (
-         m_strNetworkIPAddress != g_guiSettings.GetString("network.ipaddress") ||
-         m_strNetworkSubnet != g_guiSettings.GetString("network.subnet") ||
-         m_strNetworkGateway != g_guiSettings.GetString("network.gateway") ||
-         m_strNetworkDNS != g_guiSettings.GetString("network.dns"))))
-  {
-/*    // our network settings have changed - we should prompt the user to reset XBMC
-    if (CGUIDialogYesNo::ShowAndGetInput(14038, 14039, 14040, 0))
-    {
-      // reset settings
-      g_application.getApplicationMessenger().RestartApp();
-      // Todo: aquire new network settings without restart app!
-    }
-    else*/
-
-    // update our settings variables
-    m_iNetworkAssignment = g_guiSettings.GetInt("network.assignment");
-    m_strNetworkIPAddress = g_guiSettings.GetString("network.ipaddress");
-    m_strNetworkSubnet = g_guiSettings.GetString("network.subnet");
-    m_strNetworkGateway = g_guiSettings.GetString("network.gateway");
-    m_strNetworkDNS = g_guiSettings.GetString("network.dns");
-
-    // replace settings
-    /*   g_guiSettings.SetInt("network.assignment", m_iNetworkAssignment);
-       g_guiSettings.SetString("network.ipaddress", m_strNetworkIPAddress);
-       g_guiSettings.SetString("network.subnet", m_strNetworkSubnet);
-       g_guiSettings.SetString("network.gateway", m_strNetworkGateway);
-       g_guiSettings.SetString("network.dns", m_strNetworkDNS);*/
-  }
 }
 
 void CGUIWindowSettingsCategory::FillInSubtitleHeights(CSetting *pSetting, CGUISpinControlEx *pControl)
@@ -2096,8 +1996,12 @@ void CGUIWindowSettingsCategory::FillInSubtitleFonts(CSetting *pSetting)
   // find TTF fonts
   {
     CFileItemList items;
+    CFileItemList items2;
+    CDirectory::GetDirectory("special://home/media/Fonts/", items2);
+
     if (CDirectory::GetDirectory("special://xbmc/media/Fonts/", items))
     {
+      items.Append(items2);
       for (int i = 0; i < items.Size(); ++i)
       {
         CFileItemPtr pItem = items[i];
@@ -2278,30 +2182,34 @@ void CGUIWindowSettingsCategory::FillInCharSets(CSetting *pSetting)
 
 DisplayMode CGUIWindowSettingsCategory::FillInScreens(CStdString strSetting, RESOLUTION res)
 {
-  CBaseSettingControl *control = GetSetting(strSetting);
-  control->SetDelayed();
-  CGUISpinControlEx *pControl = (CGUISpinControlEx *)GetControl(control->GetID());
-  pControl->Clear();
-
-  CStdString strScreen;
-  if (g_advancedSettings.m_canWindowed)
-    pControl->AddLabel(g_localizeStrings.Get(242), -1);
-
-  for (int idx = 0; idx < g_Windowing.GetNumScreens(); idx++)
-  {
-    strScreen.Format(g_localizeStrings.Get(241), g_settings.m_ResInfo[RES_DESKTOP + idx].iScreen + 1);
-    pControl->AddLabel(strScreen, g_settings.m_ResInfo[RES_DESKTOP + idx].iScreen);
-  }
-
   DisplayMode mode;
-
   if (res == RES_WINDOW)
     mode = DM_WINDOWED;
   else
     mode = g_settings.m_ResInfo[res].iScreen;
 
-  pControl->SetValue(mode);
-  g_guiSettings.SetInt("videoscreen.screen", mode);
+  // we expect "videoscreen.screen" but it might be hidden on some platforms,
+  // so check that we actually have a visable control.
+  CBaseSettingControl *control = GetSetting(strSetting);
+  if (control)
+  {
+    control->SetDelayed();
+    CGUISpinControlEx *pControl = (CGUISpinControlEx *)GetControl(control->GetID());
+    pControl->Clear();
+
+    CStdString strScreen;
+    if (g_advancedSettings.m_canWindowed)
+      pControl->AddLabel(g_localizeStrings.Get(242), -1);
+
+    for (int idx = 0; idx < g_Windowing.GetNumScreens(); idx++)
+    {
+      strScreen.Format(g_localizeStrings.Get(241), g_settings.m_ResInfo[RES_DESKTOP + idx].iScreen + 1);
+      pControl->AddLabel(strScreen, g_settings.m_ResInfo[RES_DESKTOP + idx].iScreen);
+    }
+    pControl->SetValue(mode);
+    g_guiSettings.SetInt("videoscreen.screen", mode);
+  }
+
   return mode;
 }
 
@@ -2575,7 +2483,7 @@ void CGUIWindowSettingsCategory::FillInSkinColors(CSetting *pSetting)
   URIUtils::AddFileToFolder(g_SkinInfo->Path(),"colors",strPath);
 
   CFileItemList items;
-  CDirectory::GetDirectory(PTH_IC(strPath), items, ".xml");
+  CDirectory::GetDirectory(CSpecialProtocol::TranslatePathConvertCase(strPath), items, ".xml");
   // Search for Themes in the Current skin!
   for (int i = 0; i < items.Size(); ++i)
   {
@@ -2647,16 +2555,6 @@ void CGUIWindowSettingsCategory::FillInStartupWindow(CSetting *pSetting)
 
 void CGUIWindowSettingsCategory::OnInitWindow()
 {
-  if (g_application.IsStandAlone())
-  {
-#ifndef __APPLE__
-    m_iNetworkAssignment = g_guiSettings.GetInt("network.assignment");
-    m_strNetworkIPAddress = g_guiSettings.GetString("network.ipaddress");
-    m_strNetworkSubnet = g_guiSettings.GetString("network.subnet");
-    m_strNetworkGateway = g_guiSettings.GetString("network.gateway");
-    m_strNetworkDNS = g_guiSettings.GetString("network.dns");
-#endif
-  }
   m_strOldTrackFormat = g_guiSettings.GetString("musicfiles.trackformat");
   m_strOldTrackFormatRight = g_guiSettings.GetString("musicfiles.trackformatright");
   SetupControls();
index 1bd08d8..7ce31ab 100644 (file)
@@ -70,7 +70,6 @@ protected:
   CGUIControl* AddIntBasedSpinControl(CSetting *pSetting, float groupWidth, int &iControlID);
   void CreateSettings();
   void UpdateSettings();
-  void UpdateRealTimeSettings();
   void CheckForUpdates();
   void FreeSettingsControls();
   virtual void FreeControls();
@@ -91,12 +90,6 @@ protected:
   CGUIButtonControl *m_pOriginalButton;
   CGUIEditControl *m_pOriginalEdit;
   CGUIImage *m_pOriginalImage;
-  // Network settings
-  int m_iNetworkAssignment;
-  CStdString m_strNetworkIPAddress;
-  CStdString m_strNetworkSubnet;
-  CStdString m_strNetworkGateway;
-  CStdString m_strNetworkDNS;
 
   CStdString m_strErrorMessage;
 
index e26fc65..6aaf61b 100644 (file)
@@ -33,6 +33,7 @@
 #include "dialogs/GUIDialogYesNo.h"
 #include "guilib/LocalizeStrings.h"
 #include "utils/log.h"
+#include "windowing/WindowingFactory.h"
 
 using namespace std;
 
@@ -350,7 +351,7 @@ void CGUIWindowSettingsScreenCalibration::UpdateFromControl(int iControl)
   }
   // set the label control correctly
   CStdString strText;
-  if (g_settings.m_ResInfo[m_Res[m_iCurRes]].bFullScreen)
+  if (g_Windowing.IsFullScreen())
     strText.Format("%ix%i@%.2f - %s | %s", g_settings.m_ResInfo[m_Res[m_iCurRes]].iWidth,
       g_settings.m_ResInfo[m_Res[m_iCurRes]].iHeight, g_settings.m_ResInfo[m_Res[m_iCurRes]].fRefreshRate,
       g_localizeStrings.Get(244).c_str(), strStatus.c_str());
index 64472f3..3557853 100644 (file)
@@ -57,7 +57,7 @@
 #include "utils/URIUtils.h"
 #include "input/MouseStat.h"
 #include "filesystem/File.h"
-#include "addons/AddonManager.h"
+#include "filesystem/DirectoryCache.h"
 
 using namespace std;
 using namespace XFILE;
@@ -103,7 +103,7 @@ void CSettings::Initialize()
   m_bNonLinStretch = false;
 
   m_pictureExtensions = ".png|.jpg|.jpeg|.bmp|.gif|.ico|.tif|.tiff|.tga|.pcx|.cbz|.zip|.cbr|.rar|.m3u|.dng|.nef|.cr2|.crw|.orf|.arw|.erf|.3fr|.dcr|.x3f|.mef|.raf|.mrw|.pef|.sr2|.rss";
-  m_musicExtensions = ".nsv|.m4a|.flac|.aac|.strm|.pls|.rm|.rma|.mpa|.wav|.wma|.ogg|.mp3|.mp2|.m3u|.mod|.amf|.669|.dmf|.dsm|.far|.gdm|.imf|.it|.m15|.med|.okt|.s3m|.stm|.sfx|.ult|.uni|.xm|.sid|.ac3|.dts|.cue|.aif|.aiff|.wpl|.ape|.mac|.mpc|.mp+|.mpp|.shn|.zip|.rar|.wv|.nsf|.spc|.gym|.adx|.dsp|.adp|.ymf|.ast|.afc|.hps|.xsp|.xwav|.waa|.wvs|.wam|.gcm|.idsp|.mpdsp|.mss|.spt|.rsd|.mid|.kar|.sap|.cmc|.cmr|.dmc|.mpt|.mpd|.rmt|.tmc|.tm8|.tm2|.oga|.url|.pxml|.tta|.rss|.cm3|.cms|.dlt|.brstm|.wtv";
+  m_musicExtensions = ".nsv|.m4a|.flac|.aac|.strm|.pls|.rm|.rma|.mpa|.wav|.wma|.ogg|.mp3|.mp2|.m3u|.mod|.amf|.669|.dmf|.dsm|.far|.gdm|.imf|.it|.m15|.med|.okt|.s3m|.stm|.sfx|.ult|.uni|.xm|.sid|.ac3|.dts|.cue|.aif|.aiff|.wpl|.ape|.mac|.mpc|.mp+|.mpp|.shn|.zip|.rar|.wv|.nsf|.spc|.gym|.adx|.dsp|.adp|.ymf|.ast|.afc|.hps|.xsp|.xwav|.waa|.wvs|.wam|.gcm|.idsp|.mpdsp|.mss|.spt|.rsd|.mid|.kar|.sap|.cmc|.cmr|.dmc|.mpt|.mpd|.rmt|.tmc|.tm8|.tm2|.oga|.url|.pxml|.tta|.rss|.cm3|.cms|.dlt|.brstm|.wtv|.mka";
   m_videoExtensions = ".m4v|.3g2|.3gp|.nsv|.tp|.ts|.ty|.strm|.pls|.rm|.rmvb|.m3u|.ifo|.mov|.qt|.divx|.xvid|.bivx|.vob|.nrg|.img|.iso|.pva|.wmv|.asf|.asx|.ogm|.m2v|.avi|.bin|.dat|.mpg|.mpeg|.mp4|.mkv|.avc|.vp3|.svq3|.nuv|.viv|.dv|.fli|.flv|.rar|.001|.wpl|.zip|.vdr|.dvr-ms|.xsp|.mts|.m2t|.m2ts|.evo|.ogv|.sdp|.avs|.rec|.url|.pxml|.vc1|.h264|.rcv|.rss|.mpls|.webm|.bdmv|.wtv";
   m_discStubExtensions = ".disc";
   // internal music extensions
@@ -138,8 +138,6 @@ void CSettings::Initialize()
   m_lastUsedProfile = 0;
   m_currentProfile = 0;
   m_nextIdProfile = 0;
-
-  m_activeKeyboardMapping = "default";
 }
 
 CSettings::~CSettings(void)
@@ -282,10 +280,7 @@ bool CSettings::GetSource(const CStdString &category, const TiXmlNode *source, C
   {
     if (pPathName->FirstChild())
     {
-      int pathVersion = 0;
-      pPathName->Attribute("pathversion", &pathVersion);
       CStdString strPath = pPathName->FirstChild()->Value();
-      strPath = CSpecialProtocol::ReplaceOldPath(strPath, pathVersion);
       // make sure there are no virtualpaths or stack paths defined in xboxmediacenter.xml
       //CLog::Log(LOGDEBUG,"    Found path: %s", strPath.c_str());
       if (!URIUtils::IsStack(strPath))
@@ -680,7 +675,7 @@ bool CSettings::LoadSettings(const CStdString& strSettingsFile)
     int deinterlaceMode;
     bool deinterlaceModePresent = GetInteger(pElement, "deinterlacemode", deinterlaceMode, VS_DEINTERLACEMODE_OFF, VS_DEINTERLACEMODE_OFF, VS_DEINTERLACEMODE_FORCE);
     int interlaceMethod;
-    bool interlaceMethodPresent = GetInteger(pElement, "interlacemethod", interlaceMethod, VS_INTERLACEMETHOD_AUTO, VS_INTERLACEMETHOD_AUTO, VS_INTERLACEMETHOD_INVERSE_TELECINE);
+    bool interlaceMethodPresent = GetInteger(pElement, "interlacemethod", interlaceMethod, VS_INTERLACEMETHOD_AUTO, VS_INTERLACEMETHOD_AUTO, VS_INTERLACEMETHOD_MAX);
     // For smooth conversion of settings stored before the deinterlaceMode existed
     if (!deinterlaceModePresent && interlaceMethodPresent)
     {
@@ -701,7 +696,7 @@ bool CSettings::LoadSettings(const CStdString& strSettingsFile)
     m_defaultVideoSettings.m_DeinterlaceMode = (EDEINTERLACEMODE)deinterlaceMode;
     m_defaultVideoSettings.m_InterlaceMethod = (EINTERLACEMETHOD)interlaceMethod;
     int scalingMethod;
-    GetInteger(pElement, "scalingmethod", scalingMethod, VS_SCALINGMETHOD_LINEAR, VS_SCALINGMETHOD_NEAREST, VS_SCALINGMETHOD_SPLINE36);
+    GetInteger(pElement, "scalingmethod", scalingMethod, VS_SCALINGMETHOD_LINEAR, VS_SCALINGMETHOD_NEAREST, VS_SCALINGMETHOD_MAX);
     m_defaultVideoSettings.m_ScalingMethod = (ESCALINGMETHOD)scalingMethod;
 
     GetInteger(pElement, "viewmode", m_defaultVideoSettings.m_ViewMode, VIEW_MODE_NORMAL, VIEW_MODE_NORMAL, VIEW_MODE_CUSTOM);
@@ -728,7 +723,9 @@ bool CSettings::LoadSettings(const CStdString& strSettingsFile)
   pElement = pRootElement->FirstChildElement("audio");
   if (pElement)
   {
+    XMLUtils::GetBoolean(pElement, "mute", m_bMute);
     GetInteger(pElement, "volumelevel", m_nVolumeLevel, VOLUME_MAXIMUM, VOLUME_MINIMUM, VOLUME_MAXIMUM);
+    GetInteger(pElement, "premutevolumelevel", m_iPreMuteVolumeLevel, 0, 0, 100);
     GetInteger(pElement, "dynamicrangecompression", m_dynamicRangeCompressionLevel, VOLUME_DRC_MINIMUM, VOLUME_DRC_MINIMUM, VOLUME_DRC_MAXIMUM);
   }
 
@@ -756,9 +753,14 @@ bool CSettings::LoadSettings(const CStdString& strSettingsFile)
   if (g_guiSettings.GetBool("debug.showloginfo"))
   {
     g_advancedSettings.m_logLevel = std::max(g_advancedSettings.m_logLevelHint, LOG_LEVEL_DEBUG_FREEMEM);
-    CLog::SetLogLevel(g_advancedSettings.m_logLevel);
     CLog::Log(LOGNOTICE, "Enabled debug logging due to GUI setting (%d)", g_advancedSettings.m_logLevel);
   }
+  else
+  {
+    g_advancedSettings.m_logLevel = std::min(g_advancedSettings.m_logLevelHint, LOG_LEVEL_DEBUG/*LOG_LEVEL_NORMAL*/);
+    CLog::Log(LOGNOTICE, "Disabled debug logging due to GUI setting. Level %d.", g_advancedSettings.m_logLevel);
+  }  
+  CLog::SetLogLevel(g_advancedSettings.m_logLevel);
   return true;
 }
 
@@ -899,7 +901,9 @@ bool CSettings::SaveSettings(const CStdString& strSettingsFile, CGUISettings *lo
   TiXmlElement volumeNode("audio");
   pNode = pRoot->InsertEndChild(volumeNode);
   if (!pNode) return false;
+  XMLUtils::SetBoolean(pNode, "mute", m_bMute);
   XMLUtils::SetInt(pNode, "volumelevel", m_nVolumeLevel);
+  XMLUtils::SetInt(pNode, "premutevolumelevel", m_iPreMuteVolumeLevel);
   XMLUtils::SetInt(pNode, "dynamicrangecompression", m_dynamicRangeCompressionLevel);
 
   SaveCalibration(pRoot);
@@ -945,7 +949,7 @@ bool CSettings::LoadProfile(unsigned int index)
     CStdString strLanguagePath;
     strLanguagePath.Format("special://xbmc/language/%s/strings.xml", strLanguage.c_str());
 
-    CButtonTranslator::GetInstance().Load();
+    CButtonTranslator::GetInstance().Load(true);
     g_localizeStrings.Load(strLanguagePath);
 
     g_Mouse.SetEnabled(g_guiSettings.GetBool("input.enablemouse"));
@@ -973,10 +977,8 @@ bool CSettings::LoadProfile(unsigned int index)
     CGUIMessage msg(GUI_MSG_NOTIFY_ALL,0,0,GUI_MSG_WINDOW_RESET);
     g_windowManager.SendMessage(msg);
 
-    CUtil::DeleteMusicDatabaseDirectoryCache();
-    CUtil::DeleteVideoDatabaseDirectoryCache();
-
-    ADDON::CAddonMgr::Get().StartServices(false);
+    CUtil::DeleteDirectoryCache();
+    g_directoryCache.Clear();
 
     return true;
   }
index e7c494d..61428b0 100644 (file)
 #define PRE_SKIN_VERSION_9_10_COMPATIBILITY 1
 #define PRE_SKIN_VERSION_11_COMPATIBILITY 1
 
+//FIXME - after eden - make that one nicer somehow...
 #if defined(TARGET_DARWIN_IOS) && !defined(TARGET_DARWIN_IOS_ATV2)
+#include "system.h" //for HAS_SKIN_TOUCHED
+#endif
+
+#if defined(HAS_SKIN_TOUCHED) && defined(TARGET_DARWIN_IOS) && !defined(TARGET_DARWIN_IOS_ATV2)
 #define DEFAULT_SKIN          "skin.touched"
 #else
 #define DEFAULT_SKIN          "skin.confluence"
 #endif
 #define DEFAULT_FANART_HEIGHT 0
-#define DEFAULT_WEATHER_ADDON "weather.xbmc.builtin"
 #define DEFAULT_WEB_INTERFACE "webinterface.default"
 #ifdef MID
 #define DEFAULT_VSYNC       VSYNC_DISABLED
@@ -59,7 +63,7 @@
 #define VOLUME_MINIMUM -6000  // -60dB
 #define VOLUME_MAXIMUM 0      // 0dB
 #define VOLUME_DRC_MINIMUM 0    // 0dB
-#define VOLUME_DRC_MAXIMUM 3000 // 30dB
+#define VOLUME_DRC_MAXIMUM 6000 // 60dB
 
 #define VIEW_MODE_NORMAL        0
 #define VIEW_MODE_ZOOM          1
@@ -162,8 +166,6 @@ public:
 
   CStdString m_logFolder;
 
-  CStdString m_activeKeyboardMapping;
-
   bool m_bMyMusicSongInfoInVis;
   bool m_bMyMusicSongThumbInVis;
 
index 9d8d424..6641145 100644 (file)
@@ -65,7 +65,9 @@ enum EINTERLACEMETHOD
   VS_INTERLACEMETHOD_DXVA_BEST = 18,
   // VS_INTERLACEMETHOD_DXVA_ANY = 19, Legacy
 
-  VS_INTERLACEMETHOD_SW_BLEND = 20
+  VS_INTERLACEMETHOD_SW_BLEND = 20,
+
+  VS_INTERLACEMETHOD_MAX // do not use and keep as last enum value.
 };
 
 enum ESCALINGMETHOD
@@ -89,7 +91,9 @@ enum ESCALINGMETHOD
   VS_SCALINGMETHOD_AUTO,
 
   VS_SCALINGMETHOD_SPLINE36_FAST,
-  VS_SCALINGMETHOD_SPLINE36
+  VS_SCALINGMETHOD_SPLINE36,
+
+  VS_SCALINGMETHOD_MAX // do not use and keep as last enum value.
 };
 
 class CVideoSettings
index 5e185c7..f743037 100644 (file)
@@ -528,5 +528,4 @@ const CStdString &CDetectDVDMedia::GetDVDPath()
 {
   return m_diskPath;
 }
-
 #endif
index 12cd00a..250991d 100644 (file)
@@ -92,5 +92,4 @@ private:
   CLibcdio* m_cdio;
 };
 }
-
 #endif
index a1eeace..809273d 100644 (file)
@@ -494,7 +494,7 @@ VOID CIoSupport::GetXbePath(char* szDest)
 
 #if WIN32
   wchar_t szAppPathW[MAX_PATH] = L"";
-  ::GetModuleFileNameW(0, szAppPathW, sizeof(szAppPathW) - 1);
+  ::GetModuleFileNameW(0, szAppPathW, sizeof(szAppPathW)/sizeof(szAppPathW[0]) - 1);
   CStdStringW strPathW = szAppPathW;
   CStdString strPath;
   g_charsetConverter.wToUTF8(strPathW,strPath);
index dc828ec..ced4ad0 100644 (file)
@@ -25,9 +25,9 @@
 #include "IoSupport.h"
 #include "URL.h"
 #include "Util.h"
+#include "utils/URIUtils.h"
 #ifdef _WIN32
 #include "WIN32Util.h"
-#include "utils/URIUtils.h"
 #endif
 #include "guilib/GUIWindowManager.h"
 #ifdef HAS_DVD_DRIVE
 #include "AutorunMediaJob.h"
 #include "settings/GUISettings.h"
 
+#include "FileItem.h"
+#include "filesystem/File.h"
+#include "filesystem/FactoryDirectory.h"
+#include "filesystem/Directory.h"
+#include "utils/Crc32.h"
+
 #ifdef __APPLE__
 #include "osx/DarwinStorageProvider.h"
 #elif defined(_LINUX)
@@ -57,6 +63,7 @@
 #endif
 
 using namespace std;
+using namespace XFILE;
 
 const char MEDIA_SOURCES_XML[] = { "special://profile/mediasources.xml" };
 
@@ -163,7 +170,7 @@ void CMediaManager::GetRemovableDrives(VECSOURCES &removableDrives)
   m_platformStorage->GetRemovableDrives(removableDrives);
 }
 
-void CMediaManager::GetNetworkLocations(VECSOURCES &locations)
+void CMediaManager::GetNetworkLocations(VECSOURCES &locations, bool autolocations)
 {
   // Load our xml file
   LoadSources();
@@ -175,6 +182,30 @@ void CMediaManager::GetNetworkLocations(VECSOURCES &locations)
     share.strName = url.GetWithoutUserDetails();
     locations.push_back(share);
   }
+  if (autolocations)
+  {
+    CMediaSource share;
+    share.m_ignore = true;
+#ifdef HAS_FILESYSTEM_SMB
+    share.strPath = "smb://";
+    share.strName = g_localizeStrings.Get(20171);
+    locations.push_back(share);
+#endif
+
+#ifdef HAS_FILESYSTEM_NFS
+    share.strPath = "nfs://";
+    share.strName = g_localizeStrings.Get(20259);
+    locations.push_back(share);
+#endif// HAS_FILESYSTEM_NFS
+
+    share.strPath = "upnp://";
+    share.strName = "UPnP Devices";
+    locations.push_back(share);
+
+    share.strPath = "zeroconf://";
+    share.strName = "Zeroconf Browser";
+    locations.push_back(share);
+  }
 }
 
 bool CMediaManager::AddNetworkLocation(const CStdString &path)
@@ -239,7 +270,7 @@ void CMediaManager::AddAutoSource(const CMediaSource &share, bool bAutorun)
 
 #ifdef HAS_DVD_DRIVE
   if(bAutorun)
-    MEDIA_DETECT::CAutorun::ExecuteAutorun();
+    MEDIA_DETECT::CAutorun::ExecuteAutorun(share.strPath);
 #endif
 }
 
@@ -303,8 +334,10 @@ bool CMediaManager::IsDiscInDrive(const CStdString& devicePath)
   else
     return false;
 #else
-  // TODO: switch all ports to use auto sources
-  return MEDIA_DETECT::CDetectDVDMedia::IsDiscInDrive();
+  if(URIUtils::IsDVD(devicePath) || devicePath.IsEmpty())
+    return MEDIA_DETECT::CDetectDVDMedia::IsDiscInDrive();   // TODO: switch all ports to use auto sources
+  else
+    return true; // Assume other paths to be mounted already
 #endif
 #else
   return false;
@@ -435,11 +468,126 @@ CStdString CMediaManager::GetDiskLabel(const CStdString& devicePath)
 #endif
 }
 
+CStdString CMediaManager::GetDiskUniqueId(const CStdString& devicePath)
+{
+  CStdString strDevice = devicePath;
+
+  if (strDevice.IsEmpty()) // if no value passed, use the current default disc path.
+    strDevice = GetDiscPath();    // in case of non-Windows we must obtain the disc path
+
+#ifdef _WIN32
+  if (!m_bhasoptical)
+    return "";
+  strDevice = TranslateDevicePath(strDevice);
+  URIUtils::AddSlashAtEnd(strDevice);
+#endif
+
+  CStdString strDrive = g_mediaManager.TranslateDevicePath(strDevice);
+
+#ifndef _WIN32
+  {
+    CSingleLock waitLock(m_muAutoSource);  
+    CCdInfo* pInfo = g_mediaManager.GetCdInfo();
+    if ( pInfo  )
+    {
+      if (pInfo->IsISOUDF(1) || pInfo->IsISOHFS(1) || pInfo->IsIso9660(1) || pInfo->IsIso9660Interactive(1))
+        strDrive = "iso9660://";
+      else
+        strDrive = "D:\\";
+    }
+    else
+    {
+      CLog::Log(LOGERROR, "GetDiskUniqueId: Failed getting CD info");
+      return "";
+    }
+  }
+#endif
+
+  CStdString pathVideoTS = URIUtils::AddFileToFolder(strDrive, "VIDEO_TS");
+  if(! CDirectory::Exists(pathVideoTS) )
+    return ""; // return empty
+
+  CLog::Log(LOGDEBUG, "GetDiskUniqueId: Trying to retrieve ID for path %s", pathVideoTS.c_str());
+  uint32_t dvdcrc = 0;
+  CStdString strID;
+
+  if (HashDVD(pathVideoTS, dvdcrc))
+  {
+    strID.Format("removable://%s_%08x", GetDiskLabel(devicePath), dvdcrc);
+    CLog::Log(LOGDEBUG, "GetDiskUniqueId: Got ID %s for DVD disk", strID.c_str());
+  }
+
+  return strID;
+}
+
+bool CMediaManager::HashDVD(const CStdString& dvdpath, uint32_t& crc)
+{
+  CFileItemList vecItemsTS;
+  bool success = false;
+
+  // first try to open the VIDEO_TS folder of the DVD
+  if (!CDirectory::GetDirectory( dvdpath, vecItemsTS, ".ifo" ))
+  {
+    CLog::Log(LOGERROR, "%s - Cannot open dvd VIDEO_TS folder -- ABORTING", __FUNCTION__);
+    return false;
+  }
+
+  Crc32 crc32;
+  bool dataRead = false;
+
+  vecItemsTS.Sort(SORT_METHOD_FILE, SORT_ORDER_ASC);
+  for (int i = 0; i < vecItemsTS.Size(); i++) 
+  {
+    CFileItemPtr videoTSItem = vecItemsTS[i];
+    success = true;
+
+    // get the file name for logging purposes
+    CStdString fileName = URIUtils::GetFileName(videoTSItem->GetPath());
+    CLog::Log(LOGDEBUG, "%s - Adding file content for dvd file: %s", __FUNCTION__, fileName.c_str());
+    CFile file;
+    if(!file.Open(videoTSItem->GetPath()))
+    {
+      CLog::Log(LOGERROR, "%s - Cannot open dvd file: %s -- ABORTING", __FUNCTION__, fileName.c_str());
+      return false;
+    }
+    int res;
+    char buf[2048];
+    while( (res = file.Read(buf, sizeof(buf))) > 0) 
+    {
+      dataRead = true;
+      crc32.Compute(buf, res);
+    }
+    file.Close();
+  }
+
+  if (!dataRead)
+  {
+    CLog::Log(LOGERROR, "%s - Did not read any data from the IFO files -- ABORTING", __FUNCTION__);
+    return false;
+  }
+
+  // put result back in reference parameter
+  crc = (uint32_t) crc32;
+
+  return success;
+}
+
+
 CStdString CMediaManager::GetDiscPath()
 {
 #ifdef _WIN32
-  return "";
+  return g_mediaManager.TranslateDevicePath("");
 #else
+
+  CSingleLock lock(m_CritSecStorageProvider);
+  VECSOURCES drives;
+  m_platformStorage->GetRemovableDrives(drives);
+  for(unsigned i = 0; i < drives.size(); ++i)
+  {
+    if(drives[i].m_iDriveType == CMediaSource::SOURCE_TYPE_DVD)
+      return drives[i].strPath;
+  }
+
   // iso9660://, cdda://local/ or D:\ depending on disc type
   return MEDIA_DETECT::CDetectDVDMedia::GetDVDPath();
 #endif
index 2ec9851..a5d1345 100644 (file)
@@ -55,7 +55,7 @@ public:
 
   void GetLocalDrives(VECSOURCES &localDrives, bool includeQ = true);
   void GetRemovableDrives(VECSOURCES &removableDrives);
-  void GetNetworkLocations(VECSOURCES &locations);
+  void GetNetworkLocations(VECSOURCES &locations, bool autolocations = true);
 
   bool AddNetworkLocation(const CStdString &path);
   bool HasLocation(const CStdString& path) const;
@@ -72,6 +72,7 @@ public:
   CCdInfo* GetCdInfo(const CStdString& devicePath="");
   bool RemoveCdInfo(const CStdString& devicePath="");
   CStdString GetDiskLabel(const CStdString& devicePath="");
+  CStdString GetDiskUniqueId(const CStdString& devicePath="");
 #endif
   CStdString GetDiscPath();
   void SetHasOpticalDrive(bool bstatus);
@@ -93,6 +94,7 @@ protected:
   CCriticalSection m_muAutoSource, m_CritSecStorageProvider;
 #ifdef HAS_DVD_DRIVE
   std::map<CStdString,CCdInfo*> m_mapCdInfo;
+  bool HashDVD(const CStdString& dvdpath, uint32_t& crc);
 #endif
   bool m_bhasoptical;
 
index 7021840..09183d5 100644 (file)
@@ -643,23 +643,20 @@ int CCdIoSupport::GuessFilesystem(int start_session, track_t track_num)
   return ret;
 }
 
-void CCdIoSupport::GetCdTextInfo(trackinfo *pti, int trackNum)
+void CCdIoSupport::GetCdTextInfo(xbmc_cdtext_t &xcdt, int trackNum)
 {
   CSingleLock lock(*m_cdio);
 
   // Get the CD-Text , if any
   cdtext_t *pcdtext = (cdtext_t *)::cdio_get_cdtext(cdio, trackNum);
 
-  cdtext_init(&pti->cdtext);
-
   if (pcdtext == NULL)
     return ;
 
+  // same ids used in libcdio and for our structure + the ids are consecutive make this copy loop safe.
   for (int i = 0; i < MAX_CDTEXT_FIELDS; i++)
-  {
     if (pcdtext->field[i])
-      pti->cdtext.field[i] = strdup(pcdtext->field[i]);
-  }
+      xcdt[(cdtext_field_t)i] = pcdtext->field[(cdtext_field_t)i];
 }
 
 CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
@@ -675,10 +672,7 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
   cdio = ::cdio_open(source_name, DRIVER_UNKNOWN);
   if (cdio == NULL)
   {
-    char buf[1024];
-    sprintf(buf, "%s: Error in automatically selecting driver with input\n",
-            __FUNCTION__);
-    OutputDebugString( buf );
+    CLog::Log(LOGERROR, "%s: Error in automatically selecting driver with input", __FUNCTION__);
     return NULL;
   }
 
@@ -717,25 +711,20 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
     msf_t msf;
     if (bIsCDRom && !::cdio_get_track_msf(cdio, i, &msf))
     {
-      char buf[1024];
       trackinfo ti;
       ti.nfsInfo = FS_UNKNOWN;
       ti.ms_offset = 0;
       ti.isofs_size = 0;
       ti.nJolietLevel = 0;
       ti.nFrames = 0;
-      cdtext_init(&ti.cdtext);
       info->SetTrackInformation( i, ti );
-      sprintf( buf, "cdio_track_msf for track %i failed, I give up.\n", i);
-      OutputDebugString( buf );
+      CLog::Log(LOGDEBUG, "cdio_track_msf for track %i failed, I give up.", i);
       delete info;
       ::cdio_destroy(cdio);
       return NULL;
     }
 
-    trackinfo ti_0, ti;
-    cdtext_init(&ti_0.cdtext);
-    cdtext_init(&ti.cdtext);
+    trackinfo ti;
     if (bIsCDRom && TRACK_FORMAT_AUDIO == ::cdio_get_track_format(cdio, i))
     {
       m_nNumAudio++;
@@ -754,12 +743,13 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
       // Make sure that we have the Disc related info available
       if (i == 1)
       {
-        GetCdTextInfo(&ti_0, 0);
-        info->SetDiscCDTextInformation( ti_0.cdtext );
+        xbmc_cdtext_t xcdt;
+        GetCdTextInfo(xcdt, 0);
+        info->SetDiscCDTextInformation( xcdt );
       }
 
       // Get this tracks info
-      GetCdTextInfo(&ti, i);
+      GetCdTextInfo(ti.cdtext, i);
     }
     else
     {
@@ -785,7 +775,6 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
   info->SetFirstAudioTrack( m_nFirstAudio );
   info->SetFirstDataTrack( m_nFirstData );
 
-  char buf[1024];
   CLog::Log(LOGINFO, "CD Analysis Report");
   CLog::Log(LOGINFO, STRONG);
 
@@ -807,10 +796,7 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
       else
       {
         m_nFs &= ~FS_MASK; /* del filesystem info */
-        sprintf(buf, "Oops: %i unused sectors at start, "
-                "but hidden track check failed.\n",
-                m_nStartTrack);
-        OutputDebugString( buf );
+        CLog::Log(LOGDEBUG, "Oops: %i unused sectors at start, but hidden track check failed.", m_nStartTrack);
       }
     }
     PrintAnalysis(m_nFs, m_nNumAudio);
@@ -828,15 +814,16 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
       switch ( track_format )
       {
       case TRACK_FORMAT_AUDIO:
-        trackinfo ti;
-        ti.nfsInfo = FS_NO_DATA;
-        m_nFs = FS_NO_DATA;
-        ti.ms_offset = 0;
-        ti.isofs_size = 0;
-        ti.nJolietLevel = 0;
-        ti.nFrames = ::cdio_get_track_lba(cdio, i);
-        cdtext_init(&ti.cdtext);
-        info->SetTrackInformation( i + 1, ti );
+        {
+          trackinfo ti;
+          ti.nfsInfo = FS_NO_DATA;
+          m_nFs = FS_NO_DATA;
+          ti.ms_offset = 0;
+          ti.isofs_size = 0;
+          ti.nJolietLevel = 0;
+          ti.nFrames = ::cdio_get_track_lba(cdio, i);
+          info->SetTrackInformation( i + 1, ti );
+        }
       case TRACK_FORMAT_ERROR:
         break;
       case TRACK_FORMAT_CDI:
@@ -858,33 +845,7 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
 
       m_nFs = GuessFilesystem(m_nStartTrack, i);
       trackinfo ti;
-      cdtext_init(&ti.cdtext);
       ti.nfsInfo = m_nFs;
-      // valid UDF version for xbox
-      if ((m_nFs & FS_MASK) == FS_UDF)
-      {
-        // Is UDF 1.02
-        if (m_nUDFVerMajor > 0x1)
-        {
-          ti.nfsInfo = FS_UNKNOWN;
-          m_strDiscLabel.Empty();
-        }
-        else if (m_nUDFVerMinor > 0x2)
-        {
-          ti.nfsInfo = FS_UNKNOWN;
-          m_strDiscLabel.Empty();
-        }
-      }
-
-      if ((m_nFs & FS_MASK) == FS_ISO_UDF)
-      {
-        // fallback to iso9660 if not udf 1.02
-        if (m_nUDFVerMajor > 0x1)
-          ti.nfsInfo = FS_ISO_9660;
-        else if (m_nUDFVerMinor > 0x2)
-          ti.nfsInfo = FS_ISO_9660;
-      }
-
       ti.ms_offset = m_nMsOffset;
       ti.isofs_size = m_nIsofsSize;
       ti.nJolietLevel = m_nJolietLevel;
@@ -913,12 +874,6 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
 
       info->SetTrackInformation( i, ti );
 
-      // xbox does not support multisession cd's
-      if (!(((m_nFs & FS_MASK) == FS_ISO_9660 ||
-             (m_nFs & FS_MASK) == FS_ISO_HFS ||
-             /* (fs & FS_MASK) == FS_ISO_9660_INTERACTIVE) && (fs & XA))) */
-             (m_nFs & FS_MASK) == FS_ISO_9660_INTERACTIVE)))
-        break; /* no method for non-iso9660 multisessions */
     }
   }
   ::cdio_destroy( cdio );
index 8698ee2..31f60d4 100644 (file)
@@ -40,6 +40,7 @@
 #include <cdio/cdio.h>
 #include "threads/CriticalSection.h"
 #include "utils/StdString.h"
+#include <map>
 
 namespace MEDIA_DETECT
 {
@@ -99,6 +100,8 @@ typedef struct signature
 }
 signature_t;
 
+typedef std::map<cdtext_field_t, CStdString> xbmc_cdtext_t;
+
 typedef struct TRACKINFO
 {
   int nfsInfo;  // Information of the Tracks Filesystem
@@ -108,7 +111,7 @@ typedef struct TRACKINFO
   int nFrames;  // Can be used for cddb query
   int nMins;   // minutes playtime part of Track
   int nSecs;   // seconds playtime part of Track
-  cdtext_t cdtext; //  CD-Text for this track
+  xbmc_cdtext_t cdtext; //  CD-Text for this track
 }
 trackinfo;
 
@@ -119,21 +122,11 @@ public:
   CCdInfo()
   {
     m_bHasCDDBInfo = true;
-    cdtext_init(&m_cdtext);
-    for (int i = 0; i < 100; i++)
-      cdtext_init(&m_ti[i].cdtext);
-
     m_nLength = m_nFirstTrack = m_nNumTrack = m_nNumAudio = m_nFirstAudio = m_nNumData = m_nFirstData = 0;
   }
-  virtual ~CCdInfo()
-  {
-    cdtext_destroy(&m_cdtext);
-    for (int i = 0; i < 100; i++)
-      cdtext_destroy(&m_ti[i].cdtext);
-  }
 
-trackinfo GetTrackInformation( int nTrack ) { return m_ti[nTrack -1]; }
-  cdtext_t GetDiscCDTextInformation() { return m_cdtext; }
+  trackinfo GetTrackInformation( int nTrack ) { return m_ti[nTrack -1]; }
+  xbmc_cdtext_t GetDiscCDTextInformation() { return m_cdtext; }
 
   bool HasDataTracks() { return (m_nNumData > 0); }
   bool HasAudioTracks() { return (m_nNumAudio > 0); }
@@ -150,13 +143,13 @@ trackinfo GetTrackInformation( int nTrack ) { return m_ti[nTrack -1]; }
   // CD-ROM with ISO 9660 filesystem
   bool IsIso9660( int nTrack ) { return ((m_ti[nTrack - 1].nfsInfo & FS_MASK) == FS_ISO_9660); }
   // CD-ROM with joliet extension
-bool IsJoliet( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & JOLIET) ? false : true; }
+  bool IsJoliet( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & JOLIET) ? false : true; }
   // Joliet extension level
   int GetJolietLevel( int nTrack ) { return m_ti[nTrack - 1].nJolietLevel; }
   // ISO filesystem size
   int GetIsoSize( int nTrack ) { return m_ti[nTrack - 1].isofs_size; }
   // CD-ROM with rockridge extensions
-bool IsRockridge( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & ROCKRIDGE) ? false : true; }
+  bool IsRockridge( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & ROCKRIDGE) ? false : true; }
 
   // CD-ROM with CD-RTOS and ISO 9660 filesystem
   bool IsIso9660Interactive( int nTrack ) { return ((m_ti[nTrack - 1].nfsInfo & FS_MASK) == FS_ISO_9660_INTERACTIVE); }
@@ -192,33 +185,33 @@ bool IsRockridge( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & ROCKRIDGE) ?
   bool IsMixedMode( int nTrack ) { return (m_nFirstData == 1 && m_nNumAudio > 0); }
 
   // CD-ROM with XA sectors
-bool IsXA( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & XA) ? false : true; }
+  bool IsXA( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & XA) ? false : true; }
 
   // Multisession CD-ROM
-bool IsMultiSession( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & MULTISESSION) ? false : true; }
+  bool IsMultiSession( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & MULTISESSION) ? false : true; }
   // Gets multisession offset
   int GetMultisessionOffset( int nTrack ) { return m_ti[nTrack - 1].ms_offset; }
 
   // Hidden Track on Audio CD
-bool IsHiddenTrack( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & HIDDEN_TRACK) ? false : true; }
+  bool IsHiddenTrack( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & HIDDEN_TRACK) ? false : true; }
 
   // Photo CD, with audiotracks > 0 Portfolio Photo CD
-bool IsPhotoCd( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & PHOTO_CD) ? false : true; }
+  bool IsPhotoCd( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & PHOTO_CD) ? false : true; }
 
   // CD-ROM with Commodore CDTV
-bool IsCdTv( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & CDTV) ? false : true; }
+  bool IsCdTv( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & CDTV) ? false : true; }
 
   // CD-Plus/Extra
   bool IsCDExtra( int nTrack ) { return (m_nFirstData > 1); }
 
   // Bootable CD
-bool IsBootable( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & BOOTABLE) ? false : true; }
+  bool IsBootable( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & BOOTABLE) ? false : true; }
 
   // Video CD
   bool IsVideoCd( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & VIDEOCDI && m_nNumAudio == 0); }
 
   // Chaoji Video CD
-bool IsChaojiVideoCD( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & CVD) ? false : true; }
+  bool IsChaojiVideoCD( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & CVD) ? false : true; }
 
   // Audio Track
   bool IsAudio( int nTrack ) { return ((m_ti[nTrack - 1].nfsInfo & FS_MASK) == FS_NO_DATA); }
@@ -236,7 +229,7 @@ bool IsChaojiVideoCD( int nTrack ) { return (m_ti[nTrack - 1].nfsInfo & CVD) ? f
   void SetDataTrackCount( int nCount ) { m_nNumData = nCount; }
   void SetAudioTrackCount( int nCount ) { m_nNumAudio = nCount; }
   void SetTrackInformation( int nTrack, trackinfo nInfo ) { if ( nTrack > 0 && nTrack <= 99 ) m_ti[nTrack - 1] = nInfo; }
-void SetDiscCDTextInformation( cdtext_t cdtext ) { m_cdtext = cdtext; }
+  void SetDiscCDTextInformation( xbmc_cdtext_t cdtext ) { m_cdtext = cdtext; }
 
   void SetCddbDiscId( ULONG ulCddbDiscId ) { m_ulCddbDiscId = ulCddbDiscId; }
   void SetDiscLength( int nLength ) { m_nLength = nLength; }
@@ -257,7 +250,7 @@ private:
   int m_nLength;   // Disclength can be used for cddb query, also see trackinfo.nFrames
   bool m_bHasCDDBInfo;
   CStdString m_strDiscLabel;
-  cdtext_t m_cdtext;  //  CD-Text for this disc
+  xbmc_cdtext_t m_cdtext;  //  CD-Text for this disc
 };
 
 class CLibcdio : public CCriticalSection
@@ -309,7 +302,7 @@ public:
   void PrintAnalysis(int fs, int num_audio);
 
   CCdInfo* GetCdInfo(char* cDeviceFileName=NULL);
-  void GetCdTextInfo(trackinfo *pti, int trackNum);
+  void GetCdTextInfo(xbmc_cdtext_t &xcdt, int trackNum);
 
 protected:
   int ReadBlock(int superblock, uint32_t offset, uint8_t bufnum, track_t track_num);
index 4dc5761..bead970 100644 (file)
@@ -24,6 +24,7 @@
 #include "guilib/LocalizeStrings.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
+#include "PosixMountProvider.h"
 
 void CDeviceKitDiskDeviceOldAPI::Update()
 {
@@ -265,21 +266,8 @@ bool CDeviceKitDisksProvider::Eject(CStdString mountpath)
 
 std::vector<CStdString> CDeviceKitDisksProvider::GetDiskUsage()
 {
-  std::vector<CStdString> devices;
-  DeviceMap::iterator itr;
-
-  for(itr = m_AvailableDevices.begin(); itr != m_AvailableDevices.end(); ++itr)
-  {
-    CDeviceKitDiskDevice *device = itr->second;
-    if (device->m_isMounted)
-    {
-      CStdString str;
-      str.Format("%s %.1f GiB", device->m_MountPath.c_str(), device->m_PartitionSizeGiB);
-      devices.push_back(str);
-    }
-  }
-
-  return devices;
+  CPosixMountProvider legacy;
+  return legacy.GetDiskUsage();
 }
 
 bool CDeviceKitDisksProvider::PumpDriveChangeEvents(IStorageEventsCallback *callback)
index 0d87389..47c1649 100644 (file)
@@ -24,6 +24,7 @@
 #include "guilib/LocalizeStrings.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
+#include "PosixMountProvider.h"
 
 CUDiskDevice::CUDiskDevice(const char *DeviceKitUDI)
 {
@@ -245,21 +246,8 @@ bool CUDisksProvider::Eject(CStdString mountpath)
 
 std::vector<CStdString> CUDisksProvider::GetDiskUsage()
 {
-  std::vector<CStdString> devices;
-  DeviceMap::iterator itr;
-
-  for(itr = m_AvailableDevices.begin(); itr != m_AvailableDevices.end(); ++itr)
-  {
-    CUDiskDevice *device = itr->second;
-    if (device->m_isMounted)
-    {
-      CStdString str;
-      str.Format("%s %.1f GiB", device->m_MountPath.c_str(), device->m_PartitionSizeGiB);
-      devices.push_back(str);
-    }
-  }
-
-  return devices;
+  CPosixMountProvider legacy;
+  return legacy.GetDiskUsage();
 }
 
 bool CUDisksProvider::PumpDriveChangeEvents(IStorageEventsCallback *callback)
index 2e5a2bc..a46e07c 100644 (file)
 #include "WIN32Util.h"
 #include "guilib/LocalizeStrings.h"
 #include "filesystem/SpecialProtocol.h"
+#include "storage/MediaManager.h"
+#include "utils/JobManager.h"
 
 bool CWin32StorageProvider::event = false;
 
+void CWin32StorageProvider::Initialize()
+{
+  // check for a DVD drive
+  VECSOURCES vShare;
+  CWIN32Util::GetDrivesByType(vShare, DVD_DRIVES);
+  if(!vShare.empty())
+    g_mediaManager.SetHasOpticalDrive(true);
+
+  // Can be removed once the StorageHandler supports optical media
+  VECSOURCES::const_iterator it;
+  for(it=vShare.begin();it!=vShare.end();++it)
+    if(g_mediaManager.GetDriveStatus(it->strPath) == DRIVE_CLOSED_MEDIA_PRESENT)
+      CJobManager::GetInstance().AddJob(new CDetectDisc(it->strPath, false), NULL);
+  // remove end
+}
+
 void CWin32StorageProvider::GetLocalDrives(VECSOURCES &localDrives)
 {
   CMediaSource share;
-  share.strPath = _P("special://home");
+  share.strPath = CSpecialProtocol::TranslatePath("special://home");
   share.strName = g_localizeStrings.Get(21440);
   share.m_ignore = true;
   share.m_iDriveType = CMediaSource::SOURCE_TYPE_LOCAL;
@@ -62,3 +80,25 @@ bool CWin32StorageProvider::PumpDriveChangeEvents(IStorageEventsCallback *callba
   event = false;
   return b;
 }
+
+CDetectDisc::CDetectDisc(const CStdString &strPath, const bool bautorun)
+  : m_strPath(strPath), m_bautorun(bautorun)
+{
+}
+
+bool CDetectDisc::DoWork()
+{
+  CMediaSource share;
+  share.strPath = m_strPath;
+  share.strStatus = g_mediaManager.GetDiskLabel(share.strPath);
+  share.strDiskUniqueId = g_mediaManager.GetDiskUniqueId(share.strPath);
+  if(g_mediaManager.IsAudio(share.strPath))
+    share.strStatus = "Audio-CD";
+  else if(share.strStatus == "")
+    share.strStatus = g_localizeStrings.Get(446);
+  share.strName = share.strPath;
+  share.m_ignore = true;
+  share.m_iDriveType = CMediaSource::SOURCE_TYPE_DVD;
+  g_mediaManager.AddAutoSource(share, m_bautorun);
+  return true;
+}
index be4f2f2..088a060 100644 (file)
  *
  */
 #include "storage/IStorageProvider.h"
+#include "utils/Job.h"
 
 class CWin32StorageProvider : public IStorageProvider
 {
 public:
   virtual ~CWin32StorageProvider() { }
 
-  virtual void Initialize() { }
+  virtual void Initialize();
   virtual void Stop() { }
 
   virtual void GetLocalDrives(VECSOURCES &localDrives);
@@ -41,3 +42,15 @@ public:
   static void SetEvent() { event = true; }
   static bool event;
 };
+
+class CDetectDisc : public CJob
+{
+public:
+  CDetectDisc(const CStdString &strPath, const bool bautorun);
+  bool DoWork();
+
+private:
+  CStdString  m_strPath;
+  bool        m_bautorun;
+};
+
index 7f6be61..b10ebae 100644 (file)
@@ -23,6 +23,7 @@
 
 #if defined(HAVE_CONFIG_H) && !defined(TARGET_WINDOWS)
 #include "config.h"
+#define DECLARE_UNUSED(a,b) a __attribute__((unused)) b;
 #endif
 
 /*****************
 #define HAS_FILESYSTEM_NFS
 #define HAS_ZEROCONF
 #define HAS_AIRPLAY
+#define HAVE_LIBCEC
+
+#define DECLARE_UNUSED(a,b) a b;
 #endif
 
 /*****************
 #define HAS_LCD
 #ifdef HAVE_DBUS
 #define HAS_DBUS
-#define HAS_DBUS_SERVER
 #endif
 #define HAS_GL
 #ifdef HAVE_X11
 
 // ARM does not support certain features... disable them here!
 #ifdef _ARMEL
-#undef HAS_AVAHI
-#undef HAS_ZEROCONF
 #undef HAS_VISUALISATION
 #undef HAS_FILESYSTEM_HTSP
 #endif
index 29355f9..f06e6d9 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <pthread.h>
 #include <sys/time.h>
+#include <assert.h>
 
 namespace XbmcThreads
 {
@@ -64,7 +65,11 @@ namespace XbmcThreads
       gettimeofday(&tv,NULL);
 
       milliseconds += tv.tv_usec / 1000; // move the usecs onto milliseconds
-      ts.tv_sec = tv.tv_sec + (time_t)(milliseconds/1000);
+
+      time_t tsecs = (time_t)(milliseconds/1000); // temporary used for assert
+      assert(tsecs >= (time_t)0);
+
+      ts.tv_sec = tv.tv_sec + tsecs;
       ts.tv_nsec = (long)((milliseconds % (unsigned long)1000) * (unsigned long)1000000);
       return (pthread_cond_timedwait(&cond,&lock.get_underlying().mutex,&ts) == 0);
     }
index e824996..09c9619 100644 (file)
@@ -55,7 +55,7 @@ void CAlarmClock::Start(const CStdString& strName, float n_secs, const CStdStrin
 
   CStdString strAlarmClock;
   CStdString strStarted;
-  if (event.m_strCommand.Equals("xbmc.shutdown") || event.m_strCommand.Equals("xbmc.shutdown()"))
+  if (strName.CompareNoCase("shutdowntimer") == 0)
   {
     strAlarmClock = g_localizeStrings.Get(20144);
     strStarted = g_localizeStrings.Get(20146);
@@ -93,7 +93,7 @@ void CAlarmClock::Stop(const CStdString& strName, bool bSilent /* false */)
   SAlarmClockEvent& event = iter->second;
 
   CStdString strAlarmClock;
-  if (event.m_strCommand.Equals("xbmc.shutdown") || event.m_strCommand.Equals("xbmc.shutdown()"))
+  if (event.m_strCommand.Equals("xbmc.powerdown") || event.m_strCommand.Equals("xbmc.powerdown()"))
     strAlarmClock = g_localizeStrings.Get(20144);
   else
     strAlarmClock = g_localizeStrings.Get(13208);
diff --git a/xbmc/utils/Base64.cpp b/xbmc/utils/Base64.cpp
new file mode 100644 (file)
index 0000000..42c615c
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include "Base64.h"
+
+#define PADDING '='
+
+using namespace std;
+
+const std::string Base64::m_characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                                         "abcdefghijklmnopqrstuvwxyz"
+                                         "0123456789+/";
+
+void Base64::Encode(const char* input, unsigned int length, std::string &output)
+{
+  if (input == NULL || length == 0)
+    return;
+
+  long l;
+  output.clear();
+
+  for (unsigned int i = 0; i < length; i += 3)
+  {
+    l  = ((((unsigned long) input[i]) << 16) & 0xFFFFFF) |
+         ((((i + 1) < length) ? (((unsigned long) input[i + 1]) << 8) : 0) & 0xFFFF) |
+         ((((i + 2) < length) ? (((unsigned long) input[i + 2]) << 0) : 0) & 0x00FF);
+
+    output.push_back(m_characters[(l >> 18) & 0x3F]);
+    output.push_back(m_characters[(l >> 12) & 0x3F]);
+
+    if (i + 1 < length)
+      output.push_back(m_characters[(l >> 6) & 0x3F]);
+    if (i + 2 < length)
+      output.push_back(m_characters[(l >> 0) & 0x3F]);
+  }
+
+  int left = 3 - (length % 3);
+
+  if (length % 3)
+  {
+    for (int i = 0; i < left; i++)
+      output.push_back(PADDING);
+  }
+}
+
+std::string Base64::Encode(const char* input, unsigned int length)
+{
+  std::string output;
+  Encode(input, length, output);
+
+  return output;
+}
+
+void Base64::Encode(const std::string &input, std::string &output)
+{
+  Encode(input.c_str(), input.size(), output);
+}
+
+std::string Base64::Encode(const std::string &input)
+{
+  std::string output;
+  Encode(input, output);
+
+  return output;
+}
+
+void Base64::Decode(const char* input, unsigned int length, std::string &output)
+{
+  if (input == NULL || length == 0)
+    return;
+
+  long l;
+  output.clear();
+
+  for (unsigned int index = 0; index < length; index++)
+  {
+    if (input[index] == '=')
+    {
+      length = index;
+      break;
+    }
+  }
+
+  for (unsigned int i = 0; i < length; i += 4)
+  {
+    l = ((((unsigned long) m_characters.find(input[i])) & 0x3F) << 18);
+    l |= (((i + 1) < length) ? ((((unsigned long) m_characters.find(input[i + 1])) & 0x3F) << 12) : 0);
+    l |= (((i + 2) < length) ? ((((unsigned long) m_characters.find(input[i + 2])) & 0x3F) <<  6) : 0);
+    l |= (((i + 3) < length) ? ((((unsigned long) m_characters.find(input[i + 3])) & 0x3F) <<  0) : 0);
+
+    output.push_back((char)((l >> 16) & 0xFF));
+    if (i + 2 < length)
+      output.push_back((char)((l >> 8) & 0xFF));
+    if (i + 3 < length)
+      output.push_back((char)((l >> 0) & 0xFF));
+  }
+}
+
+std::string Base64::Decode(const char* input, unsigned int length)
+{
+  std::string output;
+  Decode(input, length, output);
+
+  return output;
+}
+
+void Base64::Decode(const std::string &input, std::string &output)
+{
+  size_t length = input.find_first_of(PADDING);
+  if (length == string::npos)
+    length = input.size();
+
+  Decode(input.c_str(), length, output);
+}
+
+std::string Base64::Decode(const std::string &input)
+{
+  std::string output;
+  Decode(input, output);
+
+  return output;
+}
diff --git a/xbmc/utils/Base64.h b/xbmc/utils/Base64.h
new file mode 100644 (file)
index 0000000..32d760f
--- /dev/null
@@ -0,0 +1,39 @@
+#pragma once
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <string>
+
+class Base64
+{
+public:
+  static void Encode(const char* input, unsigned int length, std::string &output);
+  static std::string Encode(const char* input, unsigned int length);
+  static void Encode(const std::string &input, std::string &output);
+  static std::string Encode(const std::string &input);
+  static void Decode(const char* input, unsigned int length, std::string &output);
+  static std::string Decode(const char* input, unsigned int length);
+  static void Decode(const std::string &input, std::string &output);
+  static std::string Decode(const std::string &input);
+
+private:
+  static const std::string m_characters;
+};
index 243caca..16a0ace 100644 (file)
@@ -599,6 +599,13 @@ void CCharsetConverter::utf32ToStringCharset(const unsigned long* strSource, CSt
   }
 }
 
+void CCharsetConverter::utf8ToSystem(CStdStringA& strSourceDest)
+{
+  CStdString strDest;
+  g_charsetConverter.utf8To("", strSourceDest, strDest);
+  strSourceDest = strDest;
+}
+
 // Taken from RFC2640
 bool CCharsetConverter::isValidUtf8(const char *buf, unsigned int len)
 {
index da34b22..fc68b1b 100644 (file)
@@ -46,6 +46,7 @@ public:
   void utf8ToStringCharset(const CStdStringA& strSource, CStdStringA& strDest);
 
   void utf8ToStringCharset(CStdStringA& strSourceDest);
+  void utf8ToSystem(CStdStringA& strSourceDest);
 
   void utf8To(const CStdStringA& strDestCharset, const CStdStringA& strSource, CStdStringA& strDest);
   void utf8To(const CStdStringA& strDestCharset, const CStdStringA& strSource, CStdString16& strDest);
diff --git a/xbmc/utils/CryptThreading.cpp b/xbmc/utils/CryptThreading.cpp
new file mode 100644 (file)
index 0000000..5bc251a
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ *      Copyright (C) 2005-2008 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#ifdef TARGET_WINDOWS
+#error "The threading options for the cryptography libraries don't need to be and shouldn't be set on Windows. Do not include CryptThreading in your windows project."
+#endif
+
+#include "CryptThreading.h"
+#include "threads/Thread.h"
+#include "utils/log.h"
+
+#if (defined HAVE_CONFIG_H) && (!defined WIN32)
+  #include "config.h"
+#else
+#define HAVE_OPENSSL
+#endif
+
+#ifdef HAVE_OPENSSL
+#include <openssl/crypto.h>
+#endif
+
+#ifdef HAVE_GCRYPT
+#include <gcrypt.h>
+#include <errno.h>
+
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
+#endif
+
+/* ========================================================================= */
+/* openssl locking implementation for curl */
+static CCriticalSection* getlock(int index)
+{
+  return g_cryptThreadingInitializer.get_lock(index);
+}
+
+static void lock_callback(int mode, int type, const char* file, int line)
+{
+  if (mode & 0x01 /* CRYPTO_LOCK from openssl/crypto.h */ )
+    getlock(type)->lock();
+  else
+    getlock(type)->unlock();
+}
+
+static unsigned long thread_id()
+{
+  return (unsigned long)CThread::GetCurrentThreadId();
+}
+/* ========================================================================= */
+
+CryptThreadingInitializer::CryptThreadingInitializer()
+{
+  bool attemptedToSetSSLMTHook = false;
+#ifdef HAVE_OPENSSL
+  // set up OpenSSL
+  numlocks = CRYPTO_num_locks();
+  CRYPTO_set_id_callback(thread_id);
+  CRYPTO_set_locking_callback(lock_callback);
+  attemptedToSetSSLMTHook = true;
+#else
+  numlocks = 1;
+#endif
+
+  locks = new CCriticalSection*[numlocks];
+  for (int i = 0; i < numlocks; i++)
+    locks[i] = NULL;
+
+#ifdef HAVE_GCRYPT
+  // set up gcrypt
+  gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+  attemptedToSetSSLMTHook = true;
+#endif
+
+  if (!attemptedToSetSSLMTHook)
+    CLog::Log(LOGWARNING, "Could not determine the libcurl security library to set the locking scheme. This may cause problem with multithreaded use of ssl or libraries that depend on it (libcurl).");
+  
+}
+
+CryptThreadingInitializer::~CryptThreadingInitializer()
+{
+  CSingleLock l(locksLock);
+#ifdef HAVE_OPENSSL
+  CRYPTO_set_locking_callback(NULL);
+#endif
+
+  for (int i = 0; i < numlocks; i++)
+    delete locks[i]; // I always forget ... delete is NULL safe.
+
+  delete [] locks;
+}
+
+CCriticalSection* CryptThreadingInitializer::get_lock(int index)
+{
+  CSingleLock l(locksLock);
+  CCriticalSection* curlock = locks[index];
+  if (curlock == NULL)
+  {
+    curlock = new CCriticalSection();
+    locks[index] = curlock;
+  }
+
+  return curlock;
+}
+
+
+
+
diff --git a/xbmc/utils/CryptThreading.h b/xbmc/utils/CryptThreading.h
new file mode 100644 (file)
index 0000000..e33984b
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ *      Copyright (C) 2005-2008 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#pragma once
+
+#include "utils/GlobalsHandling.h"
+#include "threads/CriticalSection.h"
+
+class CryptThreadingInitializer
+{
+  CCriticalSection** locks;
+  int numlocks;
+  CCriticalSection locksLock;
+
+public:
+  CryptThreadingInitializer();
+  ~CryptThreadingInitializer();
+
+  CCriticalSection* get_lock(int index);
+};
+
+XBMC_GLOBAL_REF(CryptThreadingInitializer,g_cryptThreadingInitializer);
+#define g_cryptThreadingInitializer XBMC_GLOBAL_USE(CryptThreadingInitializer)
index 8e9f292..e9f96ee 100644 (file)
@@ -87,10 +87,16 @@ static __inline__ uint64_t Endian_Swap64(uint64_t x) {
 #define Endian_SwapLE16(X) (X)
 #define Endian_SwapLE32(X) (X)
 #define Endian_SwapLE64(X) (X)
+#define Endian_SwapBE16(X) Endian_Swap16(X)
+#define Endian_SwapBE32(X) Endian_Swap32(X)
+#define Endian_SwapBE64(X) Endian_Swap64(X)
 #else
 #define Endian_SwapLE16(X) Endian_Swap16(X)
 #define Endian_SwapLE32(X) Endian_Swap32(X)
 #define Endian_SwapLE64(X) Endian_Swap64(X)
+#define Endian_SwapBE16(X) (X)
+#define Endian_SwapBE32(X) (X)
+#define Endian_SwapBE64(X) (X)
 #endif
 
 /* Ends C function definitions when using C++ */
index ff9db1a..3f89726 100644 (file)
@@ -121,3 +121,27 @@ void LogGraphicsInfo()
 #endif /* !HAS_GL */
 }
 
+int glFormatElementByteCount(GLenum format)
+{
+  switch (format)
+  {
+#ifndef HAS_GLES
+  case GL_BGRA:
+#endif
+  case GL_RGBA:
+    return 4;
+#ifndef HAS_GLES
+  case GL_BGR:
+#endif
+  case GL_RGB:
+    return 3;
+  case GL_LUMINANCE_ALPHA:
+    return 2;
+  case GL_LUMINANCE:
+  case GL_ALPHA:
+    return 1;
+  default:
+    CLog::Log(LOGERROR, "glFormatElementByteCount - Unknown format %u", format);
+    return 1;
+  }
+}
index 9f7df3d..883ac4a 100644 (file)
@@ -41,3 +41,4 @@ void _VerifyGLState(const char* szfile, const char* szfunction, int lineno);
 
 void LogGraphicsInfo();
 
+int glFormatElementByteCount(GLenum format);
diff --git a/xbmc/utils/HttpResponse.cpp b/xbmc/utils/HttpResponse.cpp
new file mode 100644 (file)
index 0000000..4900a10
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+#include <stdio.h>
+
+#include "HttpResponse.h"
+
+#define SPACE     " "
+#define SEPARATOR ": "
+#define LINEBREAK "\r\n"
+
+#define HEADER_CONTENT_LENGTH "Content-Length"
+
+std::map<HTTP::StatusCode, std::string> CHttpResponse::m_statusCodeText = CHttpResponse::createStatusCodes();
+
+CHttpResponse::CHttpResponse(HTTP::Method method, HTTP::StatusCode status, HTTP::Version version /* = HTTPVersion1_1 */)
+{
+  m_method = method;
+  m_status = status;
+  m_version = version;
+
+  m_content = NULL;
+  m_contentLength = 0;
+}
+
+void CHttpResponse::AddHeader(const std::string &field, const std::string &value)
+{
+  if (field.empty())
+    return;
+
+  m_headers.push_back(std::pair<std::string, std::string>(field, value));
+}
+
+void CHttpResponse::SetContent(const char* data, unsigned int length)
+{
+  m_content = data;
+
+  if (m_content == NULL)
+    m_contentLength = 0;
+  else
+    m_contentLength = length;
+}
+
+unsigned int CHttpResponse::Create(char *&response)
+{
+  m_buffer.clear();
+
+  m_buffer.append("HTTP/");
+  switch (m_version)
+  {
+    case HTTP::Version1_0:
+      m_buffer.append("1.0");
+      break;
+
+    case HTTP::Version1_1:
+      m_buffer.append("1.1");
+      break;
+
+    default:
+      return 0;
+  }
+
+  char statusBuffer[4];
+  sprintf(statusBuffer, "%d", (int)m_status);
+  m_buffer.append(SPACE);
+  m_buffer.append(statusBuffer);
+
+  m_buffer.append(SPACE);
+  m_buffer.append(m_statusCodeText.find(m_status)->second);
+  m_buffer.append(LINEBREAK);
+
+  bool hasContentLengthHeader = false;
+  for (unsigned int index = 0; index < m_headers.size(); index++)
+  {
+    m_buffer.append(m_headers[index].first);
+    m_buffer.append(SEPARATOR);
+    m_buffer.append(m_headers[index].second);
+    m_buffer.append(LINEBREAK);
+
+    if (m_headers[index].first.compare(HEADER_CONTENT_LENGTH) == 0)
+      hasContentLengthHeader = true;
+  }
+
+  if (!hasContentLengthHeader && m_content != NULL && m_contentLength > 0)
+  {
+    m_buffer.append(HEADER_CONTENT_LENGTH);
+    m_buffer.append(SEPARATOR);
+    char lengthBuffer[11];
+    sprintf(lengthBuffer, "%d", m_contentLength);
+    m_buffer.append(lengthBuffer);
+    m_buffer.append(LINEBREAK);
+  }
+
+  m_buffer.append(LINEBREAK);
+  if (m_content != NULL && m_contentLength > 0)
+    m_buffer.append(m_content, m_contentLength);
+
+  response = (char *)m_buffer.c_str();
+  return m_buffer.size();
+}
+
+std::map<HTTP::StatusCode, std::string> CHttpResponse::createStatusCodes()
+{
+  std::map<HTTP::StatusCode, std::string> map;
+  map[HTTP::Continue]                      = "Continue";
+  map[HTTP::SwitchingProtocols]            = "Switching Protocols";
+  map[HTTP::Processing]                    = "Processing";
+  map[HTTP::ConnectionTimedOut]            = "Connection timed out";
+  map[HTTP::OK]                            = "OK";
+  map[HTTP::Created]                       = "Created";
+  map[HTTP::Accepted]                      = "Accepted";
+  map[HTTP::NonAuthoritativeInformation]   = "Non-Authoritative Information";
+  map[HTTP::NoContent]                     = "No Content";
+  map[HTTP::ResetContent]                  = "Reset Content";
+  map[HTTP::PartialContent]                = "Partial Content";
+  map[HTTP::MultiStatus]                   = "Multi-Status";
+  map[HTTP::MultipleChoices]               = "Multiple Choices";
+  map[HTTP::MovedPermanently]              = "Moved Permanently";
+  map[HTTP::Found]                         = "Found";
+  map[HTTP::SeeOther]                      = "See Other";
+  map[HTTP::NotModified]                   = "Not Modified";
+  map[HTTP::UseProxy]                      = "Use Proxy";
+  //map[HTTP::SwitchProxy]                 = "Switch Proxy";
+  map[HTTP::TemporaryRedirect]             = "Temporary Redirect";
+  map[HTTP::BadRequest]                    = "Bad Request";
+  map[HTTP::Unauthorized]                  = "Unauthorized";
+  map[HTTP::PaymentRequired]               = "Payment Required";
+  map[HTTP::Forbidden]                     = "Forbidden";
+  map[HTTP::NotFound]                      = "Not Found";
+  map[HTTP::MethodNotAllowed]              = "Method Not Allowed";
+  map[HTTP::NotAcceptable]                 = "Not Acceptable";
+  map[HTTP::ProxyAuthenticationRequired]   = "Proxy Authentication Required";
+  map[HTTP::RequestTimeout]                = "Request Time-out";
+  map[HTTP::Conflict]                      = "Conflict";
+  map[HTTP::Gone]                          = "Gone";
+  map[HTTP::LengthRequired]                = "Length Required";
+  map[HTTP::PreconditionFailed]            = "Precondition Failed";
+  map[HTTP::RequestEntityTooLarge]         = "Request Entity Too Large";
+  map[HTTP::RequestURITooLong]             = "Request-URI Too Long";
+  map[HTTP::UnsupportedMediaType]          = "Unsupported Media Type";
+  map[HTTP::RequestedRangeNotSatisfiable]  = "Requested range not satisfiable";
+  map[HTTP::ExpectationFailed]             = "Expectation Failed";
+  map[HTTP::ImATeapot]                     = "I'm a Teapot";
+  map[HTTP::TooManyConnections]            = "There are too many connections from your internet address";
+  map[HTTP::UnprocessableEntity]           = "Unprocessable Entity";
+  map[HTTP::Locked]                        = "Locked";
+  map[HTTP::FailedDependency]              = "Failed Dependency";
+  map[HTTP::UnorderedCollection]           = "UnorderedCollection";
+  map[HTTP::UpgradeRequired]               = "Upgrade Required";
+  map[HTTP::InternalServerError]           = "Internal Server Error";
+  map[HTTP::NotImplemented]                = "Not Implemented";
+  map[HTTP::BadGateway]                    = "Bad Gateway";
+  map[HTTP::ServiceUnavailable]            = "Service Unavailable";
+  map[HTTP::GatewayTimeout]                = "Gateway Time-out";
+  map[HTTP::HTTPVersionNotSupported]       = "HTTP Version not supported";
+  map[HTTP::VariantAlsoNegotiates]         = "Variant Also Negotiates";
+  map[HTTP::InsufficientStorage]           = "Insufficient Storage";
+  map[HTTP::BandwidthLimitExceeded]        = "Bandwidth Limit Exceeded";
+  map[HTTP::NotExtended]                   = "Not Extended";
+
+  return map;
+}
diff --git a/xbmc/utils/HttpResponse.h b/xbmc/utils/HttpResponse.h
new file mode 100644 (file)
index 0000000..5b1a3aa
--- /dev/null
@@ -0,0 +1,136 @@
+#pragma once
+/*
+ *      Copyright (C) 2011 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <string>
+#include <vector>
+#include <map>
+
+namespace HTTP
+{
+  enum Version
+  {
+    Version1_0,
+    Version1_1
+  };
+
+  enum Method
+  {
+    Get,
+    Head,
+    POST,
+    PUT,
+    Delete,
+    Trace,
+    Connect
+  };
+
+  enum StatusCode
+  {
+    // Information 1xx
+    Continue                      = 100,
+    SwitchingProtocols            = 101,
+    Processing                    = 102,
+    ConnectionTimedOut            = 103,
+
+    // Success 2xx
+    OK                            = 200,
+    Created                       = 201,
+    Accepted                      = 202,
+    NonAuthoritativeInformation   = 203,
+    NoContent                     = 204,
+    ResetContent                  = 205,
+    PartialContent                = 206,
+    MultiStatus                   = 207,
+
+    // Redirects 3xx
+    MultipleChoices               = 300,
+    MovedPermanently              = 301,
+    Found                         = 302,
+    SeeOther                      = 303,
+    NotModified                   = 304,
+    UseProxy                      = 305,
+    //SwitchProxy                 = 306,
+    TemporaryRedirect             = 307,
+
+    // Client errors 4xx
+    BadRequest                    = 400,
+    Unauthorized                  = 401,
+    PaymentRequired               = 402,
+    Forbidden                     = 403,
+    NotFound                      = 404,
+    MethodNotAllowed              = 405,
+    NotAcceptable                 = 406,
+    ProxyAuthenticationRequired   = 407,
+    RequestTimeout                = 408,
+    Conflict                      = 409,
+    Gone                          = 410,
+    LengthRequired                = 411,
+    PreconditionFailed            = 412,
+    RequestEntityTooLarge         = 413,
+    RequestURITooLong             = 414,
+    UnsupportedMediaType          = 415,
+    RequestedRangeNotSatisfiable  = 416,
+    ExpectationFailed             = 417,
+    ImATeapot                     = 418,
+    TooManyConnections            = 421,
+    UnprocessableEntity           = 422,
+    Locked                        = 423,
+    FailedDependency              = 424,
+    UnorderedCollection           = 425,
+    UpgradeRequired               = 426,
+
+    // Server errors 5xx
+    InternalServerError           = 500,
+    NotImplemented                = 501,
+    BadGateway                    = 502,
+    ServiceUnavailable            = 503,
+    GatewayTimeout                = 504,
+    HTTPVersionNotSupported       = 505,
+    VariantAlsoNegotiates         = 506,
+    InsufficientStorage           = 507,
+    BandwidthLimitExceeded        = 509,
+    NotExtended                   = 510
+  };
+}
+
+class CHttpResponse
+{
+public:
+  CHttpResponse(HTTP::Method method, HTTP::StatusCode status, HTTP::Version version = HTTP::Version1_1);
+
+  void AddHeader(const std::string &field, const std::string &value);
+  void SetContent(const char* data, unsigned int length);
+
+  unsigned int Create(char *&response);
+
+private:
+  HTTP::Method m_method;
+  HTTP::StatusCode m_status;
+  HTTP::Version m_version;
+  std::vector< std::pair<std::string, std::string> > m_headers;
+  const char* m_content;
+  unsigned int m_contentLength;
+  std::string m_buffer;
+
+  static std::map<HTTP::StatusCode, std::string> m_statusCodeText;
+  static std::map<HTTP::StatusCode, std::string> createStatusCodes();
+};
index 30fd8e4..2219d45 100644 (file)
@@ -19,6 +19,8 @@
  *
  */
 
+#include <locale>
+
 #include "JSONVariantWriter.h"
 
 using namespace std;
@@ -36,6 +38,10 @@ string CJSONVariantWriter::Write(const CVariant &value, bool compact)
   yajl_gen g = yajl_gen_alloc(&conf, NULL);
 #endif
 
+  // Set locale to classic ("C") to ensure valid JSON numbers
+  std::string currentLocale = setlocale(LC_NUMERIC, NULL);
+  setlocale(LC_NUMERIC, "C");
+
   if (InternalWrite(g, value))
   {
     const unsigned char * buffer;
@@ -50,7 +56,11 @@ string CJSONVariantWriter::Write(const CVariant &value, bool compact)
     output = string((const char *)buffer, length);
   }
 
+  // Re-set locale to what it was before using yajl
+  setlocale(LC_NUMERIC, currentLocale.c_str());
+
   yajl_gen_clear(g);
+  yajl_gen_free(g);
 
   return output;
 }
index dd7b28d..a6ba446 100644 (file)
@@ -22,6 +22,7 @@
 #include "JobManager.h"
 #include <algorithm>
 #include "threads/SingleLock.h"
+#include "utils/log.h"
 
 using namespace std;
 
@@ -41,8 +42,8 @@ CJobWorker::CJobWorker(CJobManager *manager) : CThread("Jobworker")
 CJobWorker::~CJobWorker()
 {
   // while we should already be removed from the job manager, if an exception
-  // occurs during processing, we may skip over that step.  Thus, before we
-  // go out of scope, ensure the job manager knows we're gone.
+  // occurs during processing that we haven't caught, we may skip over that step.
+  // Thus, before we go out of scope, ensure the job manager knows we're gone.
   m_jobManager->RemoveWorker(this);
   if(!IsAutoDelete())
     StopThread();
@@ -58,8 +59,15 @@ void CJobWorker::Process()
     if (!job)
       break;
 
-    // we have a job to do
-    bool success = job->DoWork();
+    bool success = false;
+    try
+    {
+      success = job->DoWork();
+    }
+    catch (...)
+    {
+      CLog::Log(LOGERROR, "%s error processing job %s", __FUNCTION__, job->GetType());
+    }
     m_jobManager->OnJobComplete(success, job);
   }
 }
@@ -295,8 +303,15 @@ void CJobManager::OnJobComplete(bool success, CJob *job)
     // tell any listeners we're done with the job, then delete it
     CWorkItem item(*i);
     lock.Leave();
-    if (item.m_callback)
-      item.m_callback->OnJobComplete(item.m_id, success, item.m_job);
+    try
+    {
+      if (item.m_callback)
+        item.m_callback->OnJobComplete(item.m_id, success, item.m_job);
+    }
+    catch (...)
+    {
+      CLog::Log(LOGERROR, "%s error processing job %s", __FUNCTION__, item.m_job->GetType());
+    }
     lock.Enter();
     Processing::iterator j = find(m_processing.begin(), m_processing.end(), job);
     if (j != m_processing.end())
index 43681ff..dff8422 100644 (file)
@@ -168,14 +168,14 @@ CStdString ILCD::GetProgressBar(double tCurrent, double tTotal)
   unsigned char cLCDsmallBlocks = 0xb0; //this char (0xAC-0xAF) will be translated in LCD.cpp to the smallBlock
   unsigned char cLCDbigBlock = 0xab;  //this char will be translated in LCD.cpp to the right bigBlock
   int iBigBlock = 5;      // a big block is a combination of 5 small blocks
-  int m_iColumns = g_advancedSettings.m_lcdColumns - 2;
+  int iColumns = GetColumns()-2;
 
-  if (m_iColumns > 0)
+  if (iColumns > 0)
   {
-    double dBlockSize = tTotal * 0.99 / m_iColumns / iBigBlock; // mult with 0.99 to show the last bar
+    double dBlockSize = tTotal * 0.99 / iColumns / iBigBlock; // mult with 0.99 to show the last bar
 
     CStdString strProgressBar = "[";
-    for (int i = 1;i <= m_iColumns;i++)
+    for (int i = 1;i <= iColumns;i++)
     {
       //set full blocks
       if (tCurrent >= i * iBigBlock * dBlockSize)
index 7892d64..b60bcf2 100644 (file)
@@ -58,6 +58,8 @@ public:
   virtual void Resume() = 0;
   virtual void SetBackLight(int iLight) = 0;
   virtual void SetContrast(int iContrast) = 0;
+  virtual int  GetColumns() = 0;
+  virtual int  GetRows() = 0;
   virtual void SetLine(int iLine, const CStdString& strLine) = 0;
   virtual void DisableOnPlayback(bool playingVideo, bool playingMusic);
   CStdString GetProgressBar(double tCurrent, double tTotal);
index dd0e7dd..232e75c 100644 (file)
@@ -31,23 +31,6 @@ CLCDFactory::~CLCDFactory(void)
 
 ILCD* CLCDFactory::Create()
 {
-#ifdef _XBOX
-  switch (g_guiSettings.GetInt("lcd.modchip"))
-  {
-  case MODCHIP_XENIUM:
-    return new CXeniumLCD();
-    break;
-
-  case MODCHIP_SMARTXX:
-    return new CSmartXXLCD();
-    break;
-
-  case MODCHIP_XECUTER3:
-    return new CX3LCD();
-    break;
-  }
-  return new CSmartXXLCD();
-#endif
 #ifdef _LINUX
   return new XLCDproc();
 #endif
index c91572e..080b284 100644 (file)
@@ -3,10 +3,12 @@ SRCS=AlarmClock.cpp \
      Archive.cpp \
      AsyncFileCopy.cpp \
      AutoPtrHandle.cpp \
+                Base64.cpp \
      BitstreamStats.cpp \
      CharsetConverter.cpp \
      CPUInfo.cpp \
      Crc32.cpp \
+     CryptThreading.cpp \
      DownloadQueue.cpp \
      DownloadQueueManager.cpp \
      Fanart.cpp \
@@ -21,6 +23,7 @@ SRCS=AlarmClock.cpp \
      HTMLUtil.cpp \
      HttpHeader.cpp \
      HttpParser.cpp \
+                HttpResponse.cpp \
      InfoLoader.cpp \
      JobManager.cpp \
      JSONVariantParser.cpp \
@@ -31,6 +34,7 @@ SRCS=AlarmClock.cpp \
      LCDFactory.cpp \
      log.cpp \
      md5.cpp \
+     Mime.cpp \
      PCMAmplifier.cpp \
      PCMRemap.cpp \
      PerformanceSample.cpp \
diff --git a/xbmc/utils/Mime.cpp b/xbmc/utils/Mime.cpp
new file mode 100644 (file)
index 0000000..c0b8cf2
--- /dev/null
@@ -0,0 +1,534 @@
+/*
+ *      Copyright (C) 2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <algorithm>
+
+#include "Mime.h"
+#include "FileItem.h"
+#include "StdString.h"
+#include "URIUtils.h"
+#include "music/tags/MusicInfoTag.h"
+#include "video/VideoInfoTag.h"
+
+using namespace std;
+
+map<string, string> fillMimeTypes()
+{
+  map<string, string> mimeTypes;
+
+  mimeTypes.insert(pair<string, string>("3dm",       "x-world/x-3dmf"));
+  mimeTypes.insert(pair<string, string>("3dmf",      "x-world/x-3dmf"));
+  mimeTypes.insert(pair<string, string>("a",         "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("aab",       "application/x-authorware-bin"));
+  mimeTypes.insert(pair<string, string>("aam",       "application/x-authorware-map"));
+  mimeTypes.insert(pair<string, string>("aas",       "application/x-authorware-seg"));
+  mimeTypes.insert(pair<string, string>("abc",       "text/vnd.abc"));
+  mimeTypes.insert(pair<string, string>("acgi",      "text/html"));
+  mimeTypes.insert(pair<string, string>("afl",       "video/animaflex"));
+  mimeTypes.insert(pair<string, string>("ai",        "application/postscript"));
+  mimeTypes.insert(pair<string, string>("aif",       "audio/aiff"));
+  mimeTypes.insert(pair<string, string>("aifc",      "audio/x-aiff"));
+  mimeTypes.insert(pair<string, string>("aiff",      "audio/aiff"));
+  mimeTypes.insert(pair<string, string>("aim",       "application/x-aim"));
+  mimeTypes.insert(pair<string, string>("aip",       "text/x-audiosoft-intra"));
+  mimeTypes.insert(pair<string, string>("ani",       "application/x-navi-animation"));
+  mimeTypes.insert(pair<string, string>("aos",       "application/x-nokia-9000-communicator-add-on-software"));
+  mimeTypes.insert(pair<string, string>("aps",       "application/mime"));
+  mimeTypes.insert(pair<string, string>("arc",       "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("arj",       "application/arj"));
+  mimeTypes.insert(pair<string, string>("art",       "image/x-jg"));
+  mimeTypes.insert(pair<string, string>("asf",       "video/x-ms-asf"));
+  mimeTypes.insert(pair<string, string>("asm",       "text/x-asm"));
+  mimeTypes.insert(pair<string, string>("asp",       "text/asp"));
+  mimeTypes.insert(pair<string, string>("asx",       "video/x-ms-asf"));
+  mimeTypes.insert(pair<string, string>("au",        "audio/basic"));
+  mimeTypes.insert(pair<string, string>("avi",       "video/x-msvideo"));
+  mimeTypes.insert(pair<string, string>("avs",       "video/avs-video"));
+  mimeTypes.insert(pair<string, string>("bcpio",     "application/x-bcpio"));
+  mimeTypes.insert(pair<string, string>("bin",       "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("bm",        "image/bmp"));
+  mimeTypes.insert(pair<string, string>("bmp",       "image/bmp"));
+  mimeTypes.insert(pair<string, string>("boo",       "application/book"));
+  mimeTypes.insert(pair<string, string>("book",      "application/book"));
+  mimeTypes.insert(pair<string, string>("boz",       "application/x-bzip2"));
+  mimeTypes.insert(pair<string, string>("bsh",       "application/x-bsh"));
+  mimeTypes.insert(pair<string, string>("bz",        "application/x-bzip"));
+  mimeTypes.insert(pair<string, string>("bz2",       "application/x-bzip2"));
+  mimeTypes.insert(pair<string, string>("c",         "text/plain"));
+  mimeTypes.insert(pair<string, string>("c++",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("cat",       "application/vnd.ms-pki.seccat"));
+  mimeTypes.insert(pair<string, string>("cc",        "text/plain"));
+  mimeTypes.insert(pair<string, string>("ccad",      "application/clariscad"));
+  mimeTypes.insert(pair<string, string>("cco",       "application/x-cocoa"));
+  mimeTypes.insert(pair<string, string>("cdf",       "application/cdf"));
+  mimeTypes.insert(pair<string, string>("cer",       "application/pkix-cert"));
+  mimeTypes.insert(pair<string, string>("cer",       "application/x-x509-ca-cert"));
+  mimeTypes.insert(pair<string, string>("cha",       "application/x-chat"));
+  mimeTypes.insert(pair<string, string>("chat",      "application/x-chat"));
+  mimeTypes.insert(pair<string, string>("class",     "application/java"));
+  mimeTypes.insert(pair<string, string>("com",       "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("conf",      "text/plain"));
+  mimeTypes.insert(pair<string, string>("cpio",      "application/x-cpio"));
+  mimeTypes.insert(pair<string, string>("cpp",       "text/x-c"));
+  mimeTypes.insert(pair<string, string>("cpt",       "application/x-cpt"));
+  mimeTypes.insert(pair<string, string>("crl",       "application/pkcs-crl"));
+  mimeTypes.insert(pair<string, string>("crt",       "application/pkix-cert"));
+  mimeTypes.insert(pair<string, string>("csh",       "application/x-csh"));
+  mimeTypes.insert(pair<string, string>("css",       "text/css"));
+  mimeTypes.insert(pair<string, string>("cxx",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("dcr",       "application/x-director"));
+  mimeTypes.insert(pair<string, string>("deepv",     "application/x-deepv"));
+  mimeTypes.insert(pair<string, string>("def",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("der",       "application/x-x509-ca-cert"));
+  mimeTypes.insert(pair<string, string>("dif",       "video/x-dv"));
+  mimeTypes.insert(pair<string, string>("dir",       "application/x-director"));
+  mimeTypes.insert(pair<string, string>("dl",        "video/dl"));
+  mimeTypes.insert(pair<string, string>("doc",       "application/msword"));
+  mimeTypes.insert(pair<string, string>("docx",      "application/vnd.openxmlformats-officedocument.wordprocessingml.document"));
+  mimeTypes.insert(pair<string, string>("dot",       "application/msword"));
+  mimeTypes.insert(pair<string, string>("dp",        "application/commonground"));
+  mimeTypes.insert(pair<string, string>("drw",       "application/drafting"));
+  mimeTypes.insert(pair<string, string>("dump",      "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("dv",        "video/x-dv"));
+  mimeTypes.insert(pair<string, string>("dvi",       "application/x-dvi"));
+  mimeTypes.insert(pair<string, string>("dwf",       "model/vnd.dwf"));
+  mimeTypes.insert(pair<string, string>("dwg",       "image/vnd.dwg"));
+  mimeTypes.insert(pair<string, string>("dxf",       "image/vnd.dwg"));
+  mimeTypes.insert(pair<string, string>("dxr",       "application/x-director"));
+  mimeTypes.insert(pair<string, string>("el",        "text/x-script.elisp"));
+  mimeTypes.insert(pair<string, string>("elc",       "application/x-elc"));
+  mimeTypes.insert(pair<string, string>("env",       "application/x-envoy"));
+  mimeTypes.insert(pair<string, string>("eps",       "application/postscript"));
+  mimeTypes.insert(pair<string, string>("es",        "application/x-esrehber"));
+  mimeTypes.insert(pair<string, string>("etx",       "text/x-setext"));
+  mimeTypes.insert(pair<string, string>("evy",       "application/envoy"));
+  mimeTypes.insert(pair<string, string>("exe",       "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("f",         "text/x-fortran"));
+  mimeTypes.insert(pair<string, string>("f77",       "text/x-fortran"));
+  mimeTypes.insert(pair<string, string>("f90",       "text/x-fortran"));
+  mimeTypes.insert(pair<string, string>("fdf",       "application/vnd.fdf"));
+  mimeTypes.insert(pair<string, string>("fif",       "image/fif"));
+  mimeTypes.insert(pair<string, string>("flac",      "audio/flac"));
+  mimeTypes.insert(pair<string, string>("fli",       "video/fli"));
+  mimeTypes.insert(pair<string, string>("flo",       "image/florian"));
+  mimeTypes.insert(pair<string, string>("flv",       "video/x-flv"));
+  mimeTypes.insert(pair<string, string>("flx",       "text/vnd.fmi.flexstor"));
+  mimeTypes.insert(pair<string, string>("fmf",       "video/x-atomic3d-feature"));
+  mimeTypes.insert(pair<string, string>("for",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("for",       "text/x-fortran"));
+  mimeTypes.insert(pair<string, string>("fpx",       "image/vnd.fpx"));
+  mimeTypes.insert(pair<string, string>("frl",       "application/freeloader"));
+  mimeTypes.insert(pair<string, string>("funk",      "audio/make"));
+  mimeTypes.insert(pair<string, string>("g",         "text/plain"));
+  mimeTypes.insert(pair<string, string>("g3",        "image/g3fax"));
+  mimeTypes.insert(pair<string, string>("gif",       "image/gif"));
+  mimeTypes.insert(pair<string, string>("gl",        "video/x-gl"));
+  mimeTypes.insert(pair<string, string>("gsd",       "audio/x-gsm"));
+  mimeTypes.insert(pair<string, string>("gsm",       "audio/x-gsm"));
+  mimeTypes.insert(pair<string, string>("gsp",       "application/x-gsp"));
+  mimeTypes.insert(pair<string, string>("gss",       "application/x-gss"));
+  mimeTypes.insert(pair<string, string>("gtar",      "application/x-gtar"));
+  mimeTypes.insert(pair<string, string>("gz",        "application/x-compressed"));
+  mimeTypes.insert(pair<string, string>("gzip",      "application/x-gzip"));
+  mimeTypes.insert(pair<string, string>("h",         "text/plain"));
+  mimeTypes.insert(pair<string, string>("hdf",       "application/x-hdf"));
+  mimeTypes.insert(pair<string, string>("help",      "application/x-helpfile"));
+  mimeTypes.insert(pair<string, string>("hgl",       "application/vnd.hp-hpgl"));
+  mimeTypes.insert(pair<string, string>("hh",        "text/plain"));
+  mimeTypes.insert(pair<string, string>("hlb",       "text/x-script"));
+  mimeTypes.insert(pair<string, string>("hlp",       "application/hlp"));
+  mimeTypes.insert(pair<string, string>("hpg",       "application/vnd.hp-hpgl"));
+  mimeTypes.insert(pair<string, string>("hpgl",      "application/vnd.hp-hpgl"));
+  mimeTypes.insert(pair<string, string>("hqx",       "application/binhex"));
+  mimeTypes.insert(pair<string, string>("hta",       "application/hta"));
+  mimeTypes.insert(pair<string, string>("htc",       "text/x-component"));
+  mimeTypes.insert(pair<string, string>("htm",       "text/html"));
+  mimeTypes.insert(pair<string, string>("html",      "text/html"));
+  mimeTypes.insert(pair<string, string>("htmls",     "text/html"));
+  mimeTypes.insert(pair<string, string>("htt",       "text/webviewhtml"));
+  mimeTypes.insert(pair<string, string>("htx",       "text/html"));
+  mimeTypes.insert(pair<string, string>("ice",       "x-conference/x-cooltalk"));
+  mimeTypes.insert(pair<string, string>("ico",       "image/x-icon"));
+  mimeTypes.insert(pair<string, string>("idc",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("ief",       "image/ief"));
+  mimeTypes.insert(pair<string, string>("iefs",      "image/ief"));
+  mimeTypes.insert(pair<string, string>("iges",      "application/iges"));
+  mimeTypes.insert(pair<string, string>("igs",       "application/iges"));
+  mimeTypes.insert(pair<string, string>("igs",       "model/iges"));
+  mimeTypes.insert(pair<string, string>("ima",       "application/x-ima"));
+  mimeTypes.insert(pair<string, string>("imap",      "application/x-httpd-imap"));
+  mimeTypes.insert(pair<string, string>("inf",       "application/inf"));
+  mimeTypes.insert(pair<string, string>("ins",       "application/x-internett-signup"));
+  mimeTypes.insert(pair<string, string>("ip",        "application/x-ip2"));
+  mimeTypes.insert(pair<string, string>("isu",       "video/x-isvideo"));
+  mimeTypes.insert(pair<string, string>("it",        "audio/it"));
+  mimeTypes.insert(pair<string, string>("iv",        "application/x-inventor"));
+  mimeTypes.insert(pair<string, string>("ivr",       "i-world/i-vrml"));
+  mimeTypes.insert(pair<string, string>("ivy",       "application/x-livescreen"));
+  mimeTypes.insert(pair<string, string>("jam",       "audio/x-jam"));
+  mimeTypes.insert(pair<string, string>("jav",       "text/x-java-source"));
+  mimeTypes.insert(pair<string, string>("java",      "text/x-java-source"));
+  mimeTypes.insert(pair<string, string>("jcm",       "application/x-java-commerce"));
+  mimeTypes.insert(pair<string, string>("jfif",      "image/jpeg"));
+  mimeTypes.insert(pair<string, string>("jfif-tbnl", "image/jpeg"));
+  mimeTypes.insert(pair<string, string>("jpe",       "image/jpeg"));
+  mimeTypes.insert(pair<string, string>("jpeg",      "image/jpeg"));
+  mimeTypes.insert(pair<string, string>("jpg",       "image/jpeg"));
+  mimeTypes.insert(pair<string, string>("jps",       "image/x-jps"));
+  mimeTypes.insert(pair<string, string>("js",        "application/x-javascript"));
+  mimeTypes.insert(pair<string, string>("jut",       "image/jutvision"));
+  mimeTypes.insert(pair<string, string>("kar",       "music/x-karaoke"));
+  mimeTypes.insert(pair<string, string>("ksh",       "application/x-ksh"));
+  mimeTypes.insert(pair<string, string>("ksh",       "text/x-script.ksh"));
+  mimeTypes.insert(pair<string, string>("la",        "audio/nspaudio"));
+  mimeTypes.insert(pair<string, string>("lam",       "audio/x-liveaudio"));
+  mimeTypes.insert(pair<string, string>("latex",     "application/x-latex"));
+  mimeTypes.insert(pair<string, string>("lha",       "application/lha"));
+  mimeTypes.insert(pair<string, string>("lhx",       "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("list",      "text/plain"));
+  mimeTypes.insert(pair<string, string>("lma",       "audio/nspaudio"));
+  mimeTypes.insert(pair<string, string>("log",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("lsp",       "application/x-lisp"));
+  mimeTypes.insert(pair<string, string>("lst",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("lsx",       "text/x-la-asf"));
+  mimeTypes.insert(pair<string, string>("ltx",       "application/x-latex"));
+  mimeTypes.insert(pair<string, string>("lzh",       "application/x-lzh"));
+  mimeTypes.insert(pair<string, string>("lzx",       "application/lzx"));
+  mimeTypes.insert(pair<string, string>("m",         "text/x-m"));
+  mimeTypes.insert(pair<string, string>("m1v",       "video/mpeg"));
+  mimeTypes.insert(pair<string, string>("m2a",       "audio/mpeg"));
+  mimeTypes.insert(pair<string, string>("m2v",       "video/mpeg"));
+  mimeTypes.insert(pair<string, string>("m3u",       "audio/x-mpequrl"));
+  mimeTypes.insert(pair<string, string>("man",       "application/x-troff-man"));
+  mimeTypes.insert(pair<string, string>("map",       "application/x-navimap"));
+  mimeTypes.insert(pair<string, string>("mar",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("mbd",       "application/mbedlet"));
+  mimeTypes.insert(pair<string, string>("mc$",       "application/x-magic-cap-package-1.0"));
+  mimeTypes.insert(pair<string, string>("mcd",       "application/x-mathcad"));
+  mimeTypes.insert(pair<string, string>("mcf",       "text/mcf"));
+  mimeTypes.insert(pair<string, string>("mcp",       "application/netmc"));
+  mimeTypes.insert(pair<string, string>("me",        "application/x-troff-me"));
+  mimeTypes.insert(pair<string, string>("mht",       "message/rfc822"));
+  mimeTypes.insert(pair<string, string>("mhtml",     "message/rfc822"));
+  mimeTypes.insert(pair<string, string>("mid",       "audio/midi"));
+  mimeTypes.insert(pair<string, string>("midi",      "audio/midi"));
+  mimeTypes.insert(pair<string, string>("mif",       "application/x-mif"));
+  mimeTypes.insert(pair<string, string>("mime",      "message/rfc822"));
+  mimeTypes.insert(pair<string, string>("mjf",       "audio/x-vnd.audioexplosion.mjuicemediafile"));
+  mimeTypes.insert(pair<string, string>("mjpg",      "video/x-motion-jpeg"));
+  mimeTypes.insert(pair<string, string>("mka",       "audio/x-matroska"));
+  mimeTypes.insert(pair<string, string>("mkv",       "video/x-matroska"));
+  mimeTypes.insert(pair<string, string>("mm",        "application/x-meme"));
+  mimeTypes.insert(pair<string, string>("mme",       "application/base64"));
+  mimeTypes.insert(pair<string, string>("mod",       "audio/mod"));
+  mimeTypes.insert(pair<string, string>("moov",      "video/quicktime"));
+  mimeTypes.insert(pair<string, string>("mov",       "video/quicktime"));
+  mimeTypes.insert(pair<string, string>("movie",     "video/x-sgi-movie"));
+  mimeTypes.insert(pair<string, string>("mp2",       "audio/mpeg"));
+  mimeTypes.insert(pair<string, string>("mp3",       "audio/mpeg3"));
+  mimeTypes.insert(pair<string, string>("mp4",       "video/mp4"));
+  mimeTypes.insert(pair<string, string>("mpa",       "audio/mpeg"));
+  mimeTypes.insert(pair<string, string>("mpc",       "application/x-project"));
+  mimeTypes.insert(pair<string, string>("mpe",       "video/mpeg"));
+  mimeTypes.insert(pair<string, string>("mpeg",      "video/mpeg"));
+  mimeTypes.insert(pair<string, string>("mpg",       "video/mpeg"));
+  mimeTypes.insert(pair<string, string>("mpga",      "audio/mpeg"));
+  mimeTypes.insert(pair<string, string>("mpp",       "application/vnd.ms-project"));
+  mimeTypes.insert(pair<string, string>("mpt",       "application/x-project"));
+  mimeTypes.insert(pair<string, string>("mpv",       "application/x-project"));
+  mimeTypes.insert(pair<string, string>("mpx",       "application/x-project"));
+  mimeTypes.insert(pair<string, string>("mrc",       "application/marc"));
+  mimeTypes.insert(pair<string, string>("ms",        "application/x-troff-ms"));
+  mimeTypes.insert(pair<string, string>("mv",        "video/x-sgi-movie"));
+  mimeTypes.insert(pair<string, string>("my",        "audio/make"));
+  mimeTypes.insert(pair<string, string>("mzz",       "application/x-vnd.audioexplosion.mzz"));
+  mimeTypes.insert(pair<string, string>("nap",       "image/naplps"));
+  mimeTypes.insert(pair<string, string>("naplps",    "image/naplps"));
+  mimeTypes.insert(pair<string, string>("nc",        "application/x-netcdf"));
+  mimeTypes.insert(pair<string, string>("ncm",       "application/vnd.nokia.configuration-message"));
+  mimeTypes.insert(pair<string, string>("nfo",       "text/xml"));
+  mimeTypes.insert(pair<string, string>("nif",       "image/x-niff"));
+  mimeTypes.insert(pair<string, string>("niff",      "image/x-niff"));
+  mimeTypes.insert(pair<string, string>("nix",       "application/x-mix-transfer"));
+  mimeTypes.insert(pair<string, string>("nsc",       "application/x-conference"));
+  mimeTypes.insert(pair<string, string>("nvd",       "application/x-navidoc"));
+  mimeTypes.insert(pair<string, string>("o",         "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("oda",       "application/oda"));
+  mimeTypes.insert(pair<string, string>("ogg",       "audio/ogg"));
+  mimeTypes.insert(pair<string, string>("omc",       "application/x-omc"));
+  mimeTypes.insert(pair<string, string>("omcd",      "application/x-omcdatamaker"));
+  mimeTypes.insert(pair<string, string>("omcr",      "application/x-omcregerator"));
+  mimeTypes.insert(pair<string, string>("p",         "text/x-pascal"));
+  mimeTypes.insert(pair<string, string>("p10",       "application/pkcs10"));
+  mimeTypes.insert(pair<string, string>("p12",       "application/pkcs-12"));
+  mimeTypes.insert(pair<string, string>("p7a",       "application/x-pkcs7-signature"));
+  mimeTypes.insert(pair<string, string>("p7c",       "application/pkcs7-mime"));
+  mimeTypes.insert(pair<string, string>("p7m",       "application/pkcs7-mime"));
+  mimeTypes.insert(pair<string, string>("p7r",       "application/x-pkcs7-certreqresp"));
+  mimeTypes.insert(pair<string, string>("p7s",       "application/pkcs7-signature"));
+  mimeTypes.insert(pair<string, string>("part",      "application/pro_eng"));
+  mimeTypes.insert(pair<string, string>("pas",       "text/pascal"));
+  mimeTypes.insert(pair<string, string>("pbm",       "image/x-portable-bitmap"));
+  mimeTypes.insert(pair<string, string>("pcl",       "application/vnd.hp-pcl"));
+  mimeTypes.insert(pair<string, string>("pct",       "image/x-pict"));
+  mimeTypes.insert(pair<string, string>("pcx",       "image/x-pcx"));
+  mimeTypes.insert(pair<string, string>("pdb",       "chemical/x-pdb"));
+  mimeTypes.insert(pair<string, string>("pdf",       "application/pdf"));
+  mimeTypes.insert(pair<string, string>("pfunk",     "audio/make.my.funk"));
+  mimeTypes.insert(pair<string, string>("pgm",       "image/x-portable-greymap"));
+  mimeTypes.insert(pair<string, string>("pic",       "image/pict"));
+  mimeTypes.insert(pair<string, string>("pict",      "image/pict"));
+  mimeTypes.insert(pair<string, string>("pkg",       "application/x-newton-compatible-pkg"));
+  mimeTypes.insert(pair<string, string>("pko",       "application/vnd.ms-pki.pko"));
+  mimeTypes.insert(pair<string, string>("pl",        "text/x-script.perl"));
+  mimeTypes.insert(pair<string, string>("plx",       "application/x-pixclscript"));
+  mimeTypes.insert(pair<string, string>("pm",        "text/x-script.perl-module"));
+  mimeTypes.insert(pair<string, string>("pm4",       "application/x-pagemaker"));
+  mimeTypes.insert(pair<string, string>("pm5",       "application/x-pagemaker"));
+  mimeTypes.insert(pair<string, string>("png",       "image/png"));
+  mimeTypes.insert(pair<string, string>("pnm",       "application/x-portable-anymap"));
+  mimeTypes.insert(pair<string, string>("pot",       "application/vnd.ms-powerpoint"));
+  mimeTypes.insert(pair<string, string>("pov",       "model/x-pov"));
+  mimeTypes.insert(pair<string, string>("ppa",       "application/vnd.ms-powerpoint"));
+  mimeTypes.insert(pair<string, string>("ppm",       "image/x-portable-pixmap"));
+  mimeTypes.insert(pair<string, string>("pps",       "application/mspowerpoint"));
+  mimeTypes.insert(pair<string, string>("ppt",       "application/mspowerpoint"));
+  mimeTypes.insert(pair<string, string>("ppz",       "application/mspowerpoint"));
+  mimeTypes.insert(pair<string, string>("pre",       "application/x-freelance"));
+  mimeTypes.insert(pair<string, string>("prt",       "application/pro_eng"));
+  mimeTypes.insert(pair<string, string>("ps",        "application/postscript"));
+  mimeTypes.insert(pair<string, string>("psd",       "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("pvu",       "paleovu/x-pv"));
+  mimeTypes.insert(pair<string, string>("pwz",       "application/vnd.ms-powerpoint"));
+  mimeTypes.insert(pair<string, string>("py",        "text/x-script.phyton"));
+  mimeTypes.insert(pair<string, string>("pyc",       "applicaiton/x-bytecode.python"));
+  mimeTypes.insert(pair<string, string>("qcp",       "audio/vnd.qcelp"));
+  mimeTypes.insert(pair<string, string>("qd3",       "x-world/x-3dmf"));
+  mimeTypes.insert(pair<string, string>("qd3d",      "x-world/x-3dmf"));
+  mimeTypes.insert(pair<string, string>("qif",       "image/x-quicktime"));
+  mimeTypes.insert(pair<string, string>("qt",        "video/quicktime"));
+  mimeTypes.insert(pair<string, string>("qtc",       "video/x-qtc"));
+  mimeTypes.insert(pair<string, string>("qti",       "image/x-quicktime"));
+  mimeTypes.insert(pair<string, string>("qtif",      "image/x-quicktime"));
+  mimeTypes.insert(pair<string, string>("ra",        "audio/x-realaudio"));
+  mimeTypes.insert(pair<string, string>("ram",       "audio/x-pn-realaudio"));
+  mimeTypes.insert(pair<string, string>("ras",       "image/cmu-raster"));
+  mimeTypes.insert(pair<string, string>("rast",      "image/cmu-raster"));
+  mimeTypes.insert(pair<string, string>("rexx",      "text/x-script.rexx"));
+  mimeTypes.insert(pair<string, string>("rf",        "image/vnd.rn-realflash"));
+  mimeTypes.insert(pair<string, string>("rgb",       "image/x-rgb"));
+  mimeTypes.insert(pair<string, string>("rm",        "audio/x-pn-realaudio"));
+  mimeTypes.insert(pair<string, string>("rmi",       "audio/mid"));
+  mimeTypes.insert(pair<string, string>("rmm",       "audio/x-pn-realaudio"));
+  mimeTypes.insert(pair<string, string>("rmp",       "audio/x-pn-realaudio"));
+  mimeTypes.insert(pair<string, string>("rng",       "application/ringing-tones"));
+  mimeTypes.insert(pair<string, string>("rnx",       "application/vnd.rn-realplayer"));
+  mimeTypes.insert(pair<string, string>("roff",      "application/x-troff"));
+  mimeTypes.insert(pair<string, string>("rp",        "image/vnd.rn-realpix"));
+  mimeTypes.insert(pair<string, string>("rpm",       "audio/x-pn-realaudio-plugin"));
+  mimeTypes.insert(pair<string, string>("rt",        "text/richtext"));
+  mimeTypes.insert(pair<string, string>("rtf",       "text/richtext"));
+  mimeTypes.insert(pair<string, string>("rtx",       "text/richtext"));
+  mimeTypes.insert(pair<string, string>("rv",        "video/vnd.rn-realvideo"));
+  mimeTypes.insert(pair<string, string>("s",         "text/x-asm"));
+  mimeTypes.insert(pair<string, string>("s3m",       "audio/s3m"));
+  mimeTypes.insert(pair<string, string>("saveme",    "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("sbk",       "application/x-tbook"));
+  mimeTypes.insert(pair<string, string>("scm",       "video/x-scm"));
+  mimeTypes.insert(pair<string, string>("sdml",      "text/plain"));
+  mimeTypes.insert(pair<string, string>("sdp",       "application/sdp"));
+  mimeTypes.insert(pair<string, string>("sdr",       "application/sounder"));
+  mimeTypes.insert(pair<string, string>("sea",       "application/sea"));
+  mimeTypes.insert(pair<string, string>("set",       "application/set"));
+  mimeTypes.insert(pair<string, string>("sgm",       "text/sgml"));
+  mimeTypes.insert(pair<string, string>("sgml",      "text/sgml"));
+  mimeTypes.insert(pair<string, string>("sh",        "text/x-script.sh"));
+  mimeTypes.insert(pair<string, string>("shar",      "application/x-bsh"));
+  mimeTypes.insert(pair<string, string>("shtml",     "text/html"));
+  mimeTypes.insert(pair<string, string>("shtml",     "text/x-server-parsed-html"));
+  mimeTypes.insert(pair<string, string>("sid",       "audio/x-psid"));
+  mimeTypes.insert(pair<string, string>("sit",       "application/x-sit"));
+  mimeTypes.insert(pair<string, string>("sit",       "application/x-stuffit"));
+  mimeTypes.insert(pair<string, string>("skd",       "application/x-koan"));
+  mimeTypes.insert(pair<string, string>("skm",       "application/x-koan"));
+  mimeTypes.insert(pair<string, string>("skp",       "application/x-koan"));
+  mimeTypes.insert(pair<string, string>("skt",       "application/x-koan"));
+  mimeTypes.insert(pair<string, string>("sl",        "application/x-seelogo"));
+  mimeTypes.insert(pair<string, string>("smi",       "application/smil"));
+  mimeTypes.insert(pair<string, string>("smil",      "application/smil"));
+  mimeTypes.insert(pair<string, string>("snd",       "audio/basic"));
+  mimeTypes.insert(pair<string, string>("sol",       "application/solids"));
+  mimeTypes.insert(pair<string, string>("spc",       "text/x-speech"));
+  mimeTypes.insert(pair<string, string>("spl",       "application/futuresplash"));
+  mimeTypes.insert(pair<string, string>("spr",       "application/x-sprite"));
+  mimeTypes.insert(pair<string, string>("sprite",    "application/x-sprite"));
+  mimeTypes.insert(pair<string, string>("src",       "application/x-wais-source"));
+  mimeTypes.insert(pair<string, string>("ssi",       "text/x-server-parsed-html"));
+  mimeTypes.insert(pair<string, string>("ssm",       "application/streamingmedia"));
+  mimeTypes.insert(pair<string, string>("sst",       "application/vnd.ms-pki.certstore"));
+  mimeTypes.insert(pair<string, string>("step",      "application/step"));
+  mimeTypes.insert(pair<string, string>("stl",       "application/sla"));
+  mimeTypes.insert(pair<string, string>("stp",       "application/step"));
+  mimeTypes.insert(pair<string, string>("sv4cpio",   "application/x-sv4cpio"));
+  mimeTypes.insert(pair<string, string>("sv4crc",    "application/x-sv4crc"));
+  mimeTypes.insert(pair<string, string>("svf",       "image/vnd.dwg"));
+  mimeTypes.insert(pair<string, string>("svr",       "application/x-world"));
+  mimeTypes.insert(pair<string, string>("swf",       "application/x-shockwave-flash"));
+  mimeTypes.insert(pair<string, string>("t",         "application/x-troff"));
+  mimeTypes.insert(pair<string, string>("talk",      "text/x-speech"));
+  mimeTypes.insert(pair<string, string>("tar",       "application/x-tar"));
+  mimeTypes.insert(pair<string, string>("tbk",       "application/toolbook"));
+  mimeTypes.insert(pair<string, string>("tcl",       "text/x-script.tcl"));
+  mimeTypes.insert(pair<string, string>("tcsh",      "text/x-script.tcsh"));
+  mimeTypes.insert(pair<string, string>("tex",       "application/x-tex"));
+  mimeTypes.insert(pair<string, string>("texi",      "application/x-texinfo"));
+  mimeTypes.insert(pair<string, string>("texinfo",   "application/x-texinfo"));
+  mimeTypes.insert(pair<string, string>("text",      "text/plain"));
+  mimeTypes.insert(pair<string, string>("tgz",       "application/x-compressed"));
+  mimeTypes.insert(pair<string, string>("tif",       "image/tiff"));
+  mimeTypes.insert(pair<string, string>("tr",        "application/x-troff"));
+  mimeTypes.insert(pair<string, string>("ts",        "video/mp2t"));
+  mimeTypes.insert(pair<string, string>("tsi",       "audio/tsp-audio"));
+  mimeTypes.insert(pair<string, string>("tsp",       "audio/tsplayer"));
+  mimeTypes.insert(pair<string, string>("tsv",       "text/tab-separated-values"));
+  mimeTypes.insert(pair<string, string>("turbot",    "image/florian"));
+  mimeTypes.insert(pair<string, string>("txt",       "text/plain"));
+  mimeTypes.insert(pair<string, string>("uil",       "text/x-uil"));
+  mimeTypes.insert(pair<string, string>("uni",       "text/uri-list"));
+  mimeTypes.insert(pair<string, string>("unis",      "text/uri-list"));
+  mimeTypes.insert(pair<string, string>("unv",       "application/i-deas"));
+  mimeTypes.insert(pair<string, string>("uri",       "text/uri-list"));
+  mimeTypes.insert(pair<string, string>("uris",      "text/uri-list"));
+  mimeTypes.insert(pair<string, string>("ustar",     "application/x-ustar"));
+  mimeTypes.insert(pair<string, string>("uu",        "text/x-uuencode"));
+  mimeTypes.insert(pair<string, string>("uue",       "text/x-uuencode"));
+  mimeTypes.insert(pair<string, string>("vcd",       "application/x-cdlink"));
+  mimeTypes.insert(pair<string, string>("vcs",       "text/x-vcalendar"));
+  mimeTypes.insert(pair<string, string>("vda",       "application/vda"));
+  mimeTypes.insert(pair<string, string>("vdo",       "video/vdo"));
+  mimeTypes.insert(pair<string, string>("vew",       "application/groupwise"));
+  mimeTypes.insert(pair<string, string>("viv",       "video/vivo"));
+  mimeTypes.insert(pair<string, string>("vivo",      "video/vivo"));
+  mimeTypes.insert(pair<string, string>("vmd",       "application/vocaltec-media-desc"));
+  mimeTypes.insert(pair<string, string>("vmf",       "application/vocaltec-media-file"));
+  mimeTypes.insert(pair<string, string>("voc",       "audio/voc"));
+  mimeTypes.insert(pair<string, string>("vos",       "video/vosaic"));
+  mimeTypes.insert(pair<string, string>("vox",       "audio/voxware"));
+  mimeTypes.insert(pair<string, string>("vqe",       "audio/x-twinvq-plugin"));
+  mimeTypes.insert(pair<string, string>("vqf",       "audio/x-twinvq"));
+  mimeTypes.insert(pair<string, string>("vql",       "audio/x-twinvq-plugin"));
+  mimeTypes.insert(pair<string, string>("vrml",      "application/x-vrml"));
+  mimeTypes.insert(pair<string, string>("vrt",       "x-world/x-vrt"));
+  mimeTypes.insert(pair<string, string>("vsd",       "application/x-visio"));
+  mimeTypes.insert(pair<string, string>("vst",       "application/x-visio"));
+  mimeTypes.insert(pair<string, string>("vsw",       "application/x-visio"));
+  mimeTypes.insert(pair<string, string>("w60",       "application/wordperfect6.0"));
+  mimeTypes.insert(pair<string, string>("w61",       "application/wordperfect6.1"));
+  mimeTypes.insert(pair<string, string>("w6w",       "application/msword"));
+  mimeTypes.insert(pair<string, string>("wav",       "audio/wav"));
+  mimeTypes.insert(pair<string, string>("wb1",       "application/x-qpro"));
+  mimeTypes.insert(pair<string, string>("wbmp",      "image/vnd.wap.wbmp"));
+  mimeTypes.insert(pair<string, string>("web",       "application/vnd.xara"));
+  mimeTypes.insert(pair<string, string>("wiz",       "application/msword"));
+  mimeTypes.insert(pair<string, string>("wk1",       "application/x-123"));
+  mimeTypes.insert(pair<string, string>("wma",       "audio/x-ms-wma"));
+  mimeTypes.insert(pair<string, string>("wmf",       "windows/metafile"));
+  mimeTypes.insert(pair<string, string>("wml",       "text/vnd.wap.wml"));
+  mimeTypes.insert(pair<string, string>("wmlc",      "application/vnd.wap.wmlc"));
+  mimeTypes.insert(pair<string, string>("wmls",      "text/vnd.wap.wmlscript"));
+  mimeTypes.insert(pair<string, string>("wmlsc",     "application/vnd.wap.wmlscriptc"));
+  mimeTypes.insert(pair<string, string>("wmv",       "video/x-ms-wmv"));
+  mimeTypes.insert(pair<string, string>("word",      "application/msword"));
+  mimeTypes.insert(pair<string, string>("wp",        "application/wordperfect"));
+  mimeTypes.insert(pair<string, string>("wp5",       "application/wordperfect"));
+  mimeTypes.insert(pair<string, string>("wp6",       "application/wordperfect"));
+  mimeTypes.insert(pair<string, string>("wpd",       "application/wordperfect"));
+  mimeTypes.insert(pair<string, string>("wq1",       "application/x-lotus"));
+  mimeTypes.insert(pair<string, string>("wri",       "application/mswrite"));
+  mimeTypes.insert(pair<string, string>("wrl",       "model/vrml"));
+  mimeTypes.insert(pair<string, string>("wrz",       "model/vrml"));
+  mimeTypes.insert(pair<string, string>("wsc",       "text/scriplet"));
+  mimeTypes.insert(pair<string, string>("wsrc",      "application/x-wais-source"));
+  mimeTypes.insert(pair<string, string>("wtk",       "application/x-wintalk"));
+  mimeTypes.insert(pair<string, string>("xbm",       "image/xbm"));
+  mimeTypes.insert(pair<string, string>("xdr",       "video/x-amt-demorun"));
+  mimeTypes.insert(pair<string, string>("xgz",       "xgl/drawing"));
+  mimeTypes.insert(pair<string, string>("xif",       "image/vnd.xiff"));
+  mimeTypes.insert(pair<string, string>("xl",        "application/excel"));
+  mimeTypes.insert(pair<string, string>("xla",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xlb",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xlc",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xld",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xlk",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xll",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xlm",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xls",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xlsx",      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
+  mimeTypes.insert(pair<string, string>("xlt",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xlv",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xlw",       "application/excel"));
+  mimeTypes.insert(pair<string, string>("xm",        "audio/xm"));
+  mimeTypes.insert(pair<string, string>("xml",       "text/xml"));
+  mimeTypes.insert(pair<string, string>("xmz",       "xgl/movie"));
+  mimeTypes.insert(pair<string, string>("xpix",      "application/x-vnd.ls-xpix"));
+  mimeTypes.insert(pair<string, string>("xpm",       "image/xpm"));
+  mimeTypes.insert(pair<string, string>("x-png",     "image/png"));
+  mimeTypes.insert(pair<string, string>("xsr",       "video/x-amt-showrun"));
+  mimeTypes.insert(pair<string, string>("xwd",       "image/x-xwd"));
+  mimeTypes.insert(pair<string, string>("xyz",       "chemical/x-pdb"));
+  mimeTypes.insert(pair<string, string>("z",         "application/x-compressed"));
+  mimeTypes.insert(pair<string, string>("zip",       "application/zip"));
+  mimeTypes.insert(pair<string, string>("zoo",       "application/octet-stream"));
+  mimeTypes.insert(pair<string, string>("zsh",       "text/x-script.zsh"));
+
+  return mimeTypes;
+}
+
+map<string, string> CMime::m_mimetypes = fillMimeTypes();
+
+string CMime::GetMimeType(const string &extension)
+{
+  if (extension.empty())
+    return "";
+
+  string ext = extension;
+  size_t posNotPoint = ext.find_first_not_of('.');
+  if (posNotPoint != string::npos && posNotPoint > 0)
+    ext = extension.substr(posNotPoint);
+  transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
+
+  map<string, string>::const_iterator it = m_mimetypes.find(ext);
+  if (it != m_mimetypes.end())
+    return it->second;
+
+  return "";
+}
+
+string CMime::GetMimeType(const CFileItem &item)
+{
+  CStdString path = item.GetPath();
+  if (item.HasVideoInfoTag() && !item.GetVideoInfoTag()->GetPath().IsEmpty())
+    path = item.GetVideoInfoTag()->GetPath();
+  else if (item.HasMusicInfoTag() && !item.GetMusicInfoTag()->GetURL().IsEmpty())
+    path = item.GetMusicInfoTag()->GetURL();
+
+  return GetMimeType(URIUtils::GetExtension(path));
+}
diff --git a/xbmc/utils/Mime.h b/xbmc/utils/Mime.h
new file mode 100644 (file)
index 0000000..3b51402
--- /dev/null
@@ -0,0 +1,36 @@
+#pragma once
+/*
+ *      Copyright (C) 2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <string>
+#include <map>
+
+class CFileItem;
+
+class CMime
+{
+public:
+  static std::string GetMimeType(const std::string &extension);
+  static std::string GetMimeType(const CFileItem &item);
+
+private:
+  static std::map<std::string, std::string> m_mimetypes;
+};
index 7bc4bae..bd1884b 100644 (file)
@@ -448,7 +448,7 @@ enum PCMChannels *CPCMRemap::SetInputFormat(unsigned int channels, enum PCMChann
 {
   m_inChannels   = channels;
   m_inSampleSize = sampleSize;
-  m_sampleRate   = sampleRate;
+  m_sampleRate   = (float)sampleRate;
   m_inSet        = channelMap != NULL;
   if (channelMap)
     memcpy(m_inMap, channelMap, sizeof(enum PCMChannels) * channels);
@@ -517,7 +517,7 @@ void CPCMRemap::Remap(void *data, void *out, unsigned int samples, long drc)
 {
   float gain = 1.0f;
   if (drc > 0)
-    gain = pow(10.0f, (float)drc / 1000.0f);
+    gain = pow(10.0f, (float)drc / 2000.0f);
 
   Remap(data, out, samples, gain);
 }
index b7a0f9d..ade6326 100644 (file)
@@ -96,7 +96,7 @@ double CPerformanceSample::GetEstimatedError()
 
   for (int i=0; i<100000;i++)
   {
-    int64_t tmDummy;
+    DECLARE_UNUSED(int64_t,tmDummy);
     tmDummy = CurrentHostCounter();
   }
 
index fc2cfc5..718fb42 100644 (file)
@@ -65,13 +65,17 @@ bool CRecentlyAddedJob::UpdateVideo()
       strRating.Format("%.1f", item->GetVideoInfoTag()->m_fRating);
       
       home->SetProperty("LatestMovie." + value + ".Title"       , item->GetLabel());
-      home->SetProperty("LatestMovie." + value + ".Thumb"       , item->GetThumbnailImage());
       home->SetProperty("LatestMovie." + value + ".Rating"      , strRating);
       home->SetProperty("LatestMovie." + value + ".Year"        , item->GetVideoInfoTag()->m_iYear);
       home->SetProperty("LatestMovie." + value + ".Plot"        , item->GetVideoInfoTag()->m_strPlot);
       home->SetProperty("LatestMovie." + value + ".RunningTime" , item->GetVideoInfoTag()->m_strRuntime);
       home->SetProperty("LatestMovie." + value + ".Path"        , item->GetVideoInfoTag()->m_strFileNameAndPath);
       home->SetProperty("LatestMovie." + value + ".Trailer"     , item->GetVideoInfoTag()->m_strTrailer);
+
+      if (!item->HasThumbnail())
+        m_thumbLoader.LoadItem(item.get());
+
+      home->SetProperty("LatestMovie." + value + ".Thumb"       , item->GetThumbnailImage());
       home->SetProperty("LatestMovie." + value + ".Fanart"      , item->GetCachedFanart());
     }
   } 
@@ -103,10 +107,21 @@ bool CRecentlyAddedJob::UpdateVideo()
       CStdString   EpisodeNo;
       CStdString   value;
       CStdString   strRating;
+      CStdString   strSeason;
       EpisodeNo.Format("s%02de%02d", EpisodeSeason, EpisodeNumber);
       value.Format("%i", i + 1);
       strRating.Format("%.1f", item->GetVideoInfoTag()->m_fRating);
-      
+
+      if (EpisodeSeason == 0)
+        strSeason = g_localizeStrings.Get(20381);
+      else
+        strSeason.Format(g_localizeStrings.Get(20358), EpisodeSeason);
+
+      CFileItem season(strSeason);
+      season.GetVideoInfoTag()->m_strPath = item->GetVideoInfoTag()->m_strShowPath;
+
+      CFileItem show(item->GetVideoInfoTag()->m_strShowPath, true);
+
       home->SetProperty("LatestEpisode." + value + ".ShowTitle"     , item->GetVideoInfoTag()->m_strShowTitle);
       home->SetProperty("LatestEpisode." + value + ".EpisodeTitle"  , item->GetVideoInfoTag()->m_strTitle);
       home->SetProperty("LatestEpisode." + value + ".Rating"        , strRating);      
@@ -115,7 +130,13 @@ bool CRecentlyAddedJob::UpdateVideo()
       home->SetProperty("LatestEpisode." + value + ".EpisodeSeason" , EpisodeSeason);
       home->SetProperty("LatestEpisode." + value + ".EpisodeNumber" , EpisodeNumber);
       home->SetProperty("LatestEpisode." + value + ".Path"          , item->GetVideoInfoTag()->m_strFileNameAndPath);
+
+      if (!item->HasThumbnail())
+        m_thumbLoader.LoadItem(item.get());
+
       home->SetProperty("LatestEpisode." + value + ".Thumb"         , item->GetThumbnailImage());
+      home->SetProperty("LatestEpisode." + value + ".ShowThumb"     , show.GetCachedVideoThumb());
+      home->SetProperty("LatestEpisode." + value + ".SeasonThumb"   , season.GetCachedSeasonThumb());
       home->SetProperty("LatestEpisode." + value + ".Fanart"        , item->GetCachedFanart());
     }
   } 
@@ -132,9 +153,50 @@ bool CRecentlyAddedJob::UpdateVideo()
     home->SetProperty("LatestEpisode." + value + ".EpisodeNumber" , "");
     home->SetProperty("LatestEpisode." + value + ".Path"          , "");
     home->SetProperty("LatestEpisode." + value + ".Thumb"         , "");
+    home->SetProperty("LatestEpisode." + value + ".ShowThumb"     , "");
+    home->SetProperty("LatestEpisode." + value + ".SeasonThumb"   , "");
     home->SetProperty("LatestEpisode." + value + ".Fanart"        , "");
   }  
-  
+
+  i = 0;
+  CFileItemList MusicVideoItems;
+
+  if (videodatabase.GetRecentlyAddedMusicVideosNav("videodb://1/", MusicVideoItems, NUM_ITEMS))
+  {
+    for (; i < MusicVideoItems.Size(); ++i)
+    {
+      CFileItemPtr item = MusicVideoItems.Get(i);
+      CStdString   value;
+      value.Format("%i", i + 1);
+
+      home->SetProperty("LatestMusicVideo." + value + ".Title"       , item->GetLabel());
+      home->SetProperty("LatestMusicVideo." + value + ".Year"        , item->GetVideoInfoTag()->m_iYear);
+      home->SetProperty("LatestMusicVideo." + value + ".Plot"        , item->GetVideoInfoTag()->m_strPlot);
+      home->SetProperty("LatestMusicVideo." + value + ".RunningTime" , item->GetVideoInfoTag()->m_strRuntime);
+      home->SetProperty("LatestMusicVideo." + value + ".Path"        , item->GetVideoInfoTag()->m_strFileNameAndPath);
+      home->SetProperty("LatestMusicVideo." + value + ".Artist"      , item->GetVideoInfoTag()->m_strArtist);
+
+      if (!item->HasThumbnail())
+        m_thumbLoader.LoadItem(item.get());
+
+      home->SetProperty("LatestMusicVideo." + value + ".Thumb"       , item->GetThumbnailImage());
+      home->SetProperty("LatestMusicVideo." + value + ".Fanart"      , item->GetCachedFanart());
+    }
+  }
+  for (; i < NUM_ITEMS; ++i)
+  {
+    CStdString value;
+    value.Format("%i", i + 1);
+    home->SetProperty("LatestMusicVideo." + value + ".Title"       , "");
+    home->SetProperty("LatestMusicVideo." + value + ".Thumb"       , "");
+    home->SetProperty("LatestMusicVideo." + value + ".Year"        , "");
+    home->SetProperty("LatestMusicVideo." + value + ".Plot"        , "");
+    home->SetProperty("LatestMusicVideo." + value + ".RunningTime" , "");
+    home->SetProperty("LatestMusicVideo." + value + ".Path"        , "");
+    home->SetProperty("LatestMusicVideo." + value + ".Artist"      , "");
+    home->SetProperty("LatestMusicVideo." + value + ".Fanart"      , "");
+  }
+
   videodatabase.Close();
   return true;
 }
index 0546857..a77f095 100644 (file)
@@ -20,6 +20,7 @@
  *
  */
 
+#include "ThumbLoader.h"
 #include "Job.h"
 
 enum ERecentlyAddedFlag
@@ -37,6 +38,8 @@ public:
   bool UpdateMusic();
   bool UpdateTotal();
   virtual bool DoWork();
+protected:
+  CVideoThumbLoader m_thumbLoader;
 private:
   int m_flag;
 };
index 7a5a6af..534ef4b 100644 (file)
@@ -24,9 +24,11 @@ public:
 bool CSaveFileStateJob::DoWork()
 {
   CStdString progressTrackingFile = m_item.GetPath();
-
-  if (m_item.IsDVD()) 
-    progressTrackingFile = m_item.GetVideoInfoTag()->m_strFileNameAndPath; // this variable contains removable:// suffixed by disc label
+  if (m_item.HasVideoInfoTag() && m_item.GetVideoInfoTag()->m_strFileNameAndPath.Find("removable://") == 0)
+    progressTrackingFile = m_item.GetVideoInfoTag()->m_strFileNameAndPath; // this variable contains removable:// suffixed by disc label+uniqueid or is empty if label not uniquely identified
+  else if (m_item.HasProperty("original_listitem_url") && 
+      URIUtils::IsPlugin(m_item.GetProperty("original_listitem_url").asString()))
+    progressTrackingFile = m_item.GetProperty("original_listitem_url").asString();
 
   if (progressTrackingFile != "")
   {
index c61db51..debe010 100644 (file)
@@ -446,6 +446,7 @@ void CScraperParser::Clean(CStdString& strDirty)
       HTML::CHTMLUtil::ConvertHTMLToW(wbuffer,wConverted);
       g_charsetConverter.fromW(wConverted,strBuffer,GetSearchStringEncoding());
       RemoveWhiteSpace(strBuffer);
+      ConvertJSON(strBuffer);
       strDirty.erase(i,i2-i+14);
       strDirty.Insert(i,strBuffer);
       i += strBuffer.size();
@@ -476,6 +477,40 @@ void CScraperParser::RemoveWhiteSpace(CStdString &string)
   string.TrimRight(" \t\r\n");
 }
 
+void CScraperParser::ConvertJSON(CStdString &string)
+{
+  CRegExp reg;
+  reg.RegComp("\\\\u([0-f]{4})");
+  while (reg.RegFind(string.c_str()) > -1)
+  {
+    int pos = reg.GetSubStart(1);
+    char* szReplace = reg.GetReplaceString("\\1");
+
+    CStdString replace;
+    replace.Format("&#x%s;", szReplace);
+    string.replace(string.begin()+pos-2, string.begin()+pos+4, replace);
+
+    free(szReplace);
+  }
+
+  CRegExp reg2;
+  reg2.RegComp("\\\\x([0-9]{2})([^\\\\]+;)");
+  while (reg2.RegFind(string.c_str()) > -1)
+  {
+    int pos1 = reg2.GetSubStart(1);
+    int pos2 = reg2.GetSubStart(2);
+    char* szHexValue = reg2.GetReplaceString("\\1");
+
+    CStdString replace;
+    replace.Format("%c", strtol(szHexValue, NULL, 16));
+    string.replace(string.begin()+pos1-2, string.begin()+pos2+reg2.GetSubLength(2), replace);
+
+    free(szHexValue);
+  }
+
+  string.Replace("\\\"","\"");
+}
+
 void CScraperParser::ClearBuffers()
 {
   //clear all m_param strings
index 8ec6a5d..938c293 100644 (file)
@@ -68,6 +68,7 @@ private:
    \param string the string in question, which will be modified.
    */
   void RemoveWhiteSpace(CStdString &string);
+  void ConvertJSON(CStdString &string);
   void ClearBuffers();
   void GetBufferParams(bool* result, const char* attribute, bool defvalue);
   void InsertToken(CStdString& strOutput, int buf, const char* token);
index 09d3756..04e09b6 100644 (file)
@@ -73,7 +73,8 @@ bool CScraperUrl::Parse()
 
 bool CScraperUrl::ParseElement(const TiXmlElement* element)
 {
-  if (!element || !element->FirstChild()) return false;
+  if (!element || !element->FirstChild() ||
+      !element->FirstChild()->Value()) return false;
 
   stringstream stream;
   stream << *element;
index 1c9e03f..58093b0 100644 (file)
@@ -22,6 +22,8 @@
 #include "system.h"
 #include "Splash.h"
 #include "guilib/GUIImage.h"
+#include "guilib/GUILabelControl.h"
+#include "guilib/GUIFontManager.h"
 #include "filesystem/File.h"
 #include "windowing/WindowingFactory.h"
 #include "rendering/RenderSystem.h"
@@ -33,12 +35,17 @@ CSplash::CSplash(const CStdString& imageName)
 {
   m_ImageName = imageName;
   fade = 0.5;
+  m_messageLayout = NULL;
+  m_image = NULL;
+  m_layoutWasLoading = false;
 }
 
 
 CSplash::~CSplash()
 {
   Stop();
+  delete m_image;
+  delete m_messageLayout;
 }
 
 void CSplash::OnStartup()
@@ -49,21 +56,54 @@ void CSplash::OnExit()
 
 void CSplash::Show()
 {
+  Show("");
+}
+
+void CSplash::Show(const CStdString& message)
+{
   g_graphicsContext.Lock();
   g_graphicsContext.Clear();
 
   RESOLUTION_INFO res(1280,720,0);
   g_graphicsContext.SetRenderingResolution(res, true);  
-  CGUIImage* image = new CGUIImage(0, 0, 0, 0, 1280, 720, m_ImageName);  
-  image->SetAspectRatio(CAspectRatio::AR_CENTER);  
-  image->AllocResources();
+  if (!m_image)
+  {
+    m_image = new CGUIImage(0, 0, 0, 0, 1280, 720, m_ImageName);
+    m_image->SetAspectRatio(CAspectRatio::AR_CENTER);
+  }
 
   //render splash image
   g_Windowing.BeginRender();
 
-  image->Render();
-  image->FreeResources();
-  delete image;
+  m_image->AllocResources();
+  m_image->Render();
+  m_image->FreeResources();
+
+  // render message
+  if (!message.IsEmpty())
+  {
+    if (!m_layoutWasLoading)
+    {
+      // load arial font, white body, no shadow, size: 20, no additional styling
+      CGUIFont *messageFont = g_fontManager.LoadTTF("__splash__", "arial.ttf", 0xFFFFFFFF, 0, 20, FONT_STYLE_NORMAL, false, 1.0f, 1.0f, &res);
+      if (messageFont)
+        m_messageLayout = new CGUITextLayout(messageFont, true, 0);
+      m_layoutWasLoading = true;
+    }
+    if (m_messageLayout)
+    {
+      m_messageLayout->Update(message, 1150, false, true);
+
+      float textWidth, textHeight;
+      m_messageLayout->GetTextExtent(textWidth, textHeight);
+      // ideally place text in center of empty area below splash image
+      float y = 540 + m_image->GetTextureHeight() / 4 - textHeight / 2;
+      if (y + textHeight > 720) // make sure entire text is visible
+        y = 720 - textHeight;
+
+      m_messageLayout->RenderOutline(640, y, 0, 0xFF000000, XBFONT_CENTER_X, 1280);
+    }
+  }
 
   //show it on screen
   g_Windowing.EndRender();
index 5cd7e6e..bec9306 100644 (file)
@@ -24,6 +24,9 @@
 #include "StdString.h"
 #include "threads/Thread.h"
 
+class CGUITextLayout;
+class CGUIImage;
+
 class CSplash : public CThread
 {
 public:
@@ -36,6 +39,7 @@ public:
 
   // In case you don't want to use another thread
   void Show();
+  void Show(const CStdString& message);
   void Hide();
 
 private:
@@ -45,6 +49,10 @@ private:
 
   float fade;
   CStdString m_ImageName;
+
+  CGUITextLayout* m_messageLayout;
+  CGUIImage* m_image;
+  bool m_layoutWasLoading;
 #ifdef HAS_DX
   D3DGAMMARAMP newRamp;
   D3DGAMMARAMP oldRamp;
index 3c39d7c..f4aacd1 100644 (file)
@@ -295,20 +295,17 @@ CStdString CSysInfo::GetXBVerInfo()
 bool CSysInfo::IsAeroDisabled()
 {
 #ifdef _WIN32
-  OSVERSIONINFOEX osvi;
-  ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
-  osvi.dwOSVersionInfoSize = sizeof(osvi);
-
-  if (GetVersionEx((OSVERSIONINFO *)&osvi))
+  if (IsVistaOrHigher())
   {
-    if (osvi.dwMajorVersion == 5)
-      return true; // windows XP -> no Aero
-
     BOOL aeroEnabled = FALSE;
     HRESULT res = DwmIsCompositionEnabled(&aeroEnabled);
     if (SUCCEEDED(res))
       return !aeroEnabled;
   }
+  else
+  {
+    return true;
+  }
 #endif
   return false;
 }
@@ -395,10 +392,16 @@ CStdString CSysInfo::GetKernelVersion()
     }
     else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
     {
-      if( osvi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
-      {
-        strKernel.append("XP Professional x64 Edition");
-      }
+      if( GetSystemMetrics(SM_SERVERR2) )
+        strKernel.append("Windows Server 2003 R2");
+      else if ( osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER )
+        strKernel.append("Windows Storage Server 2003");
+      else if ( osvi.wSuiteMask & VER_SUITE_WH_SERVER )
+        strKernel.append("Windows Home Server");
+      else if( osvi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
+        strKernel.append("Windows XP Professional x64 Edition");
+      else
+        strKernel.append("Windows Server 2003");
     }
     else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
     {
@@ -537,7 +540,14 @@ CStdString CSysInfo::GetUnameVersion()
   {
     char buffer[256] = {'\0'};
     if (fread(buffer, sizeof(char), sizeof(buffer), pipe) > 0 && !ferror(pipe))
+    {
       result = buffer;
+#if defined(TARGET_DARWIN)
+      result.Trim();
+      result += ", "; 
+      result += GetDarwinVersionString();
+#endif
+    }
     else
       CLog::Log(LOGWARNING, "Unable to determine Uname version");
     pclose(pipe);
index 6873a39..a3a4023 100644 (file)
@@ -228,6 +228,18 @@ void URIUtils::GetCommonPath(CStdString& strParent, const CStdString& strPath)
   }
 }
 
+bool URIUtils::ProtocolHasParentInHostname(const CStdString& prot)
+{
+  return prot.Equals("zip")
+      || prot.Equals("rar");
+}
+
+bool URIUtils::ProtocolHasEncodedHostname(const CStdString& prot)
+{
+  return ProtocolHasParentInHostname(prot)
+      || prot.Equals("musicsearch");
+}
+
 CStdString URIUtils::GetParentPath(const CStdString& strPath)
 {
   CStdString strReturn;
@@ -241,7 +253,7 @@ bool URIUtils::GetParentPath(const CStdString& strPath, CStdString& strParent)
 
   CURL url(strPath);
   CStdString strFile = url.GetFileName();
-  if ( ((url.GetProtocol() == "rar") || (url.GetProtocol() == "zip")) && strFile.IsEmpty())
+  if ( URIUtils::ProtocolHasParentInHostname(url.GetProtocol()) && strFile.IsEmpty())
   {
     strFile = url.GetHostName();
     return GetParentPath(strFile, strParent);
@@ -349,7 +361,12 @@ CStdString URIUtils::SubstitutePath(const CStdString& strPath)
       i != g_advancedSettings.m_pathSubstitutions.end(); i++)
   {
     if (strncmp(strPath.c_str(), i->first.c_str(), i->first.size()) == 0)
-      return URIUtils::AddFileToFolder(i->second, strPath.Mid(i->first.size()));
+    {
+      if (strPath.size() > i->first.size())
+        return URIUtils::AddFileToFolder(i->second, strPath.Mid(i->first.size()));
+      else
+        return i->second;
+    }
   }
   return strPath;
 }
@@ -391,9 +408,6 @@ bool URIUtils::IsOnDVD(const CStdString& strFile)
 #ifdef _WIN32
   if (strFile.Mid(1,1) == ":")
     return (GetDriveType(strFile.Left(2)) == DRIVE_CDROM);
-#else
-  if (strFile.Left(2).CompareNoCase("d:") == 0)
-    return true;
 #endif
 
   if (strFile.Left(4).CompareNoCase("dvd:") == 0)
@@ -435,7 +449,7 @@ bool URIUtils::IsOnLAN(const CStdString& strPath)
     return true;
 
   CURL url(strPath);
-  if(IsInArchive(strPath))
+  if (url.GetProtocol() == "rar" || url.GetProtocol() == "zip")
     return IsOnLAN(url.GetHostName());
 
   if(!IsRemote(strPath))
@@ -489,11 +503,16 @@ bool URIUtils::IsHD(const CStdString& strFileName)
   if (IsInArchive(strFileName))
     return IsHD(url.GetHostName());
 
-  return url.IsLocal();
+  return url.GetProtocol().IsEmpty() || url.GetProtocol() == "file";
 }
 
 bool URIUtils::IsDVD(const CStdString& strFile)
 {
+  CStdString strFileLow = strFile;
+  strFileLow.MakeLower();
+  if (strFileLow.Find("video_ts.ifo") != -1 && IsOnDVD(strFile))
+    return true;
+
 #if defined(_WIN32)
   if (strFile.Left(6).Equals("dvd://"))
     return true;
@@ -505,9 +524,7 @@ bool URIUtils::IsDVD(const CStdString& strFile)
   if(GetDriveType(strFile.c_str()) == DRIVE_CDROM)
     return true;
 #else
-  CStdString strFileLow = strFile;
-  strFileLow.MakeLower();
-  if (strFileLow == "d:/"  || strFileLow == "d:\\"  || strFileLow == "d:" || strFileLow == "iso9660://" || strFileLow == "udf://" || strFileLow == "dvd://1" )
+  if (strFileLow == "iso9660://" || strFileLow == "udf://" || strFileLow == "dvd://1" )
     return true;
 #endif
 
index 7e854b4..751f1f0 100644 (file)
@@ -108,5 +108,8 @@ public:
     AddFileToFolder(strFolder, strFile, result);
     return result;
   }
+
+  static bool ProtocolHasParentInHostname(const CStdString& prot);
+  static bool ProtocolHasEncodedHostname(const CStdString& prot);
 };
 
index 45a8148..b7ca22d 100644 (file)
@@ -239,11 +239,11 @@ bool CVariant::asBoolean(bool fallback) const
     case VariantTypeBoolean:
       return m_data.boolean;
     case VariantTypeInteger:
-      return (bool)m_data.integer;
+      return (m_data.integer != 0);
     case VariantTypeUnsignedInteger:
-      return (bool)m_data.unsignedinteger;
+      return (m_data.unsignedinteger != 0);
     case VariantTypeDouble:
-      return (bool)m_data.dvalue;
+      return (m_data.dvalue != 0);
     case VariantTypeString:
       if (m_string.empty() || m_string.compare("0") == 0 || m_string.compare("false") == 0)
         return false;
@@ -299,8 +299,9 @@ CVariant &CVariant::operator[](const std::string &key)
 
 const CVariant &CVariant::operator[](const std::string &key) const
 {
-  if (m_type == VariantTypeObject && isMember(key))
-    return m_map.at(key);
+  VariantMap::const_iterator it;
+  if (m_type == VariantTypeObject && (it = m_map.find(key)) != m_map.end())
+    return it->second;
   else
     return ConstNullVariant;
 }
index fdaa173..6a896a3 100644 (file)
 #if (defined HAVE_CONFIG_H) && (!defined WIN32)
   #include "config.h"
 #endif
-#include "system.h"
 #include "Weather.h"
 #include "filesystem/ZipManager.h"
-#ifdef HAS_FILESYSTEM_RAR
-#include "filesystem/RarManager.h"
-#endif
-#include "filesystem/FileCurl.h"
 #include "XMLUtils.h"
 #include "Temperature.h"
 #include "network/Network.h"
-#include "Util.h"
 #include "Application.h"
 #include "settings/GUISettings.h"
 #include "settings/Settings.h"
 #include "guilib/GUIWindowManager.h"
 #include "GUIUserMessages.h"
-#include "dialogs/GUIDialogProgress.h"
-#include "dialogs/GUIDialogSelect.h"
 #include "XBDateTime.h"
 #include "LangInfo.h"
 #include "guilib/LocalizeStrings.h"
 #include "filesystem/Directory.h"
-#include "utils/TimeUtils.h"
 #include "StringUtils.h"
+#include "URIUtils.h"
 #include "log.h"
+#include "addons/AddonManager.h"
+#include "interfaces/python/XBPython.h"
 
 using namespace std;
+using namespace ADDON;
 using namespace XFILE;
 
-#define CONTROL_BTNREFRESH  2
-#define CONTROL_SELECTLOCATION 3
-#define CONTROL_LABELLOCATION 10
-#define CONTROL_LABELUPDATED 11
-#define CONTROL_IMAGELOGO  101
-
-#define CONTROL_IMAGENOWICON 21
-#define CONTROL_LABELNOWCOND 22
-#define CONTROL_LABELNOWTEMP 23
-#define CONTROL_LABELNOWFEEL 24
-#define CONTROL_LABELNOWUVID 25
-#define CONTROL_LABELNOWWIND 26
-#define CONTROL_LABELNOWDEWP 27
-#define CONTROL_LABELNOWHUMI 28
-
-#define CONTROL_STATICTEMP  223
-#define CONTROL_STATICFEEL  224
-#define CONTROL_STATICUVID  225
-#define CONTROL_STATICWIND  226
-#define CONTROL_STATICDEWP  227
-#define CONTROL_STATICHUMI  228
-
-#define CONTROL_LABELD0DAY  31
-#define CONTROL_LABELD0HI  32
-#define CONTROL_LABELD0LOW  33
-#define CONTROL_LABELD0GEN  34
-#define CONTROL_IMAGED0IMG  35
-
-#define PARTNER_ID    "1004124588"   //weather.com partner id
-#define PARTNER_KEY    "079f24145f208494"  //weather.com partner key
-
 #define LOCALIZED_TOKEN_FIRSTID    370
 #define LOCALIZED_TOKEN_LASTID     395
 #define LOCALIZED_TOKEN_FIRSTID2  1396
@@ -94,26 +58,17 @@ using namespace XFILE;
 /*
 FIXME'S
 >strings are not centered
->weather.com dev account is mine not a general xbmc one
 */
 
-// USE THESE FOR ZIP
 #define WEATHER_BASE_PATH "special://temp/weather/"
-#define WEATHER_USE_ZIP 1
-#define WEATHER_USE_RAR 0
+#define WEATHER_ICON_PATH "special://temp/weather/"
 #define WEATHER_SOURCE_FILE "special://xbmc/media/weather.zip"
 
-// OR THESE FOR RAR
-//#define WEATHER_BASE_PATH "special://temp/weather/"
-//#define WEATHER_USE_ZIP 0
-//#define WEATHER_USE_RAR 1
-//#define WEATHER_SOURCE_FILE "special://xbmc/media/weather.rar"
-
 bool CWeatherJob::m_imagesOkay = false;
 
-CWeatherJob::CWeatherJob(const CStdString &areaCode)
+CWeatherJob::CWeatherJob(int location)
 {
-  m_areaCode = areaCode;
+  m_location = location;
 }
 
 bool CWeatherJob::DoWork()
@@ -122,29 +77,38 @@ bool CWeatherJob::DoWork()
   if (!g_application.getNetwork().IsAvailable(true))
     return false;
 
+  AddonPtr addon;
+  if (!ADDON::CAddonMgr::Get().GetAddon(g_guiSettings.GetString("weather.addon"), addon, ADDON_SCRIPT_WEATHER))
+    return false;
+
+  // initialize our sys.argv variables
+  std::vector<CStdString> argv;
+  argv.push_back(addon->LibPath());
+
+  CStdString strSetting;
+  strSetting.Format("%i", m_location);
+  argv.push_back(strSetting);
+
   // Download our weather
   CLog::Log(LOGINFO, "WEATHER: Downloading weather");
-  XFILE::CFileCurl httpUtil;
-  CStdString strURL;
-
-  strURL.Format("http://xoap.weather.com/weather/local/%s?cc=*&unit=m&dayf=4&prod=xoap&link=xoap&par=%s&key=%s",
-                m_areaCode.c_str(), PARTNER_ID, PARTNER_KEY);
-  CStdString xml;
-  if (httpUtil.Get(strURL, xml))
+  // call our script, passing the areacode
+  if (g_pythonParser.evalFile(argv[0], argv,addon))
   {
-    CLog::Log(LOGINFO, "WEATHER: Weather download successful");
+    while (true)
+    {
+      if (!g_pythonParser.isRunning(g_pythonParser.getScriptId(addon->LibPath().c_str())))
+        break;
+      Sleep(100);
+    }
     if (!m_imagesOkay)
     {
       CDirectory::Create(WEATHER_BASE_PATH);
-      if (WEATHER_USE_ZIP)
-        g_ZipManager.ExtractArchive(WEATHER_SOURCE_FILE, WEATHER_BASE_PATH);
-#ifdef HAS_FILESYSTEM_RAR
-      else if (WEATHER_USE_RAR)
-        g_RarManager.ExtractArchive(WEATHER_SOURCE_FILE, WEATHER_BASE_PATH);
-#endif
+      g_ZipManager.ExtractArchive(WEATHER_SOURCE_FILE, WEATHER_BASE_PATH);
       m_imagesOkay = true;
     }
-    LoadWeather(xml);
+
+    SetFromProperties();
+
     // and send a message that we're done
     CGUIMessage msg(GUI_MSG_NOTIFY_ALL,0,0,GUI_MSG_WEATHER_FETCHED);
     g_windowManager.SendThreadMessage(msg);
@@ -160,30 +124,9 @@ const CWeatherInfo &CWeatherJob::GetInfo() const
   return m_info;
 }
 
-void CWeatherJob::GetString(const TiXmlElement* pRootElement, const CStdString& strTagName, CStdString &value, const CStdString& strDefaultValue)
-{
-  value = "";
-  const TiXmlNode *pChild = pRootElement->FirstChild(strTagName.c_str());
-  if (pChild && pChild->FirstChild())
-  {
-    value = pChild->FirstChild()->Value();
-    if (value == "-")
-      value = "";
-  }
-  if (value.IsEmpty())
-    value = strDefaultValue;
-}
-
-void CWeatherJob::GetInteger(const TiXmlElement* pRootElement, const CStdString& strTagName, int& iValue)
-{
-  if (!XMLUtils::GetInt(pRootElement, strTagName.c_str(), iValue))
-    iValue = 0;
-}
-
 void CWeatherJob::LocalizeOverviewToken(CStdString &token)
 {
-  // NOTE: This routine is case-sensitive.  Reason is std::less<CStdString> uses a case-sensitive
-  //       < operator.  Thus, some tokens may have to be duplicated in strings.xml (see drizzle vs Drizzle).
+  // This routine is case-insensitive. 
   CStdString strLocStr = "";
   if (!token.IsEmpty())
   {
@@ -283,159 +226,6 @@ void CWeatherJob::FormatTemperature(CStdString &text, int temp)
   text.Format("%.0f", temperature.ToLocale());
 }
 
-bool CWeatherJob::LoadWeather(const CStdString &weatherXML)
-{
-  CStdString iTmpStr;
-  SYSTEMTIME time;
-
-  GetLocalTime(&time); //used when deciding what weather to grab for today
-
-  // Load in our tokens if necessary
-  if (!m_localizedTokens.size())
-    LoadLocalizedToken();
-
-  // load the xml file
-  TiXmlDocument xmlDoc;
-  if (!xmlDoc.Parse(weatherXML))
-  {
-    CLog::Log(LOGERROR, "WEATHER: Unable to get data - invalid XML");
-    return false;
-  }
-
-  TiXmlElement *pRootElement = xmlDoc.RootElement();
-  if (!pRootElement)
-  {
-    CLog::Log(LOGERROR, "WEATHER: Unable to get data - invalid XML");
-    return false;
-  }
-
-  //if root element is 'error' display the error message
-  if (strcmp(pRootElement->Value(), "error") == 0)
-  {
-    CStdString error;
-    GetString(pRootElement, "err", error, "Unknown Error"); //grab the error string
-    CLog::Log(LOGERROR, "WEATHER: Unable to get data: %s", error.c_str());
-    return false;
-  }
-
-  // location
-  TiXmlElement *pElement = pRootElement->FirstChildElement("loc");
-  if (pElement)
-  {
-    GetString(pElement, "dnam", m_info.location, "");
-  }
-
-  //current weather
-  pElement = pRootElement->FirstChildElement("cc");
-  if (pElement)
-  {
-    // Use the local date/time the file is parsed...
-    CDateTime time=CDateTime::GetCurrentDateTime();
-    m_info.lastUpdateTime = time.GetAsLocalizedDateTime(false, false);
-
-    // ...and not the date/time from weather.com
-    //GetString(pElement, "lsup", m_szLastUpdateTime, "");
-
-    GetString(pElement, "icon", iTmpStr, ""); //string cause i've seen it return N/A
-    if (iTmpStr == "N/A")
-      m_info.currentIcon.Format("%s128x128/na.png", WEATHER_BASE_PATH);
-    else
-      m_info.currentIcon.Format("%s128x128/%s.png", WEATHER_BASE_PATH, iTmpStr.c_str());
-
-    GetString(pElement, "t", m_info.currentConditions, "");   //current condition
-    LocalizeOverview(m_info.currentConditions);
-
-    int iTmpInt;
-    GetInteger(pElement, "tmp", iTmpInt);    //current temp
-    FormatTemperature(m_info.currentTemperature, iTmpInt);
-    GetInteger(pElement, "flik", iTmpInt);    //current 'Feels Like'
-    FormatTemperature(m_info.currentFeelsLike, iTmpInt);
-
-    TiXmlElement *pNestElement = pElement->FirstChildElement("wind"); //current wind
-    if (pNestElement)
-    {
-      GetInteger(pNestElement, "s", iTmpInt);   //current wind strength
-      iTmpInt = ConvertSpeed(iTmpInt);    //convert speed if needed
-      GetString(pNestElement, "t", iTmpStr, "N");  //current wind direction
-
-      CStdString szCalm = g_localizeStrings.Get(1410);
-      if (iTmpStr ==  "CALM") {
-        m_info.currentWind = szCalm;
-      } else {
-        LocalizeOverviewToken(iTmpStr);
-        m_info.currentWind.Format(g_localizeStrings.Get(434).c_str(),
-            iTmpStr, iTmpInt, g_langInfo.GetSpeedUnitString().c_str());
-      }
-    }
-
-    GetInteger(pElement, "hmid", iTmpInt);    //current humidity
-    m_info.currentHumidity.Format("%i%%", iTmpInt);
-
-    pNestElement = pElement->FirstChildElement("uv"); //current UV index
-    if (pNestElement)
-    {
-      GetInteger(pNestElement, "i", iTmpInt);
-      GetString(pNestElement, "t", iTmpStr, "");
-      LocalizeOverviewToken(iTmpStr);
-      m_info.currentUVIndex.Format("%i %s", iTmpInt, iTmpStr);
-    }
-
-    GetInteger(pElement, "dewp", iTmpInt);    //current dew point
-    FormatTemperature(m_info.currentDewPoint, iTmpInt);
-  }
-  //future forcast
-  pElement = pRootElement->FirstChildElement("dayf");
-  if (pElement)
-  {
-    TiXmlElement *pOneDayElement = pElement->FirstChildElement("day");;
-    if (pOneDayElement)
-    {
-      for (int i = 0; i < NUM_DAYS; i++)
-      {
-        const char *attr = pOneDayElement->Attribute("t");
-        if (attr)
-        {
-          m_info.forecast[i].m_day = attr;
-          LocalizeOverviewToken(m_info.forecast[i].m_day);
-        }
-
-        GetString(pOneDayElement, "hi", iTmpStr, ""); //string cause i've seen it return N/A
-        if (iTmpStr == "N/A")
-          m_info.forecast[i].m_high = "";
-        else
-          FormatTemperature(m_info.forecast[i].m_high, atoi(iTmpStr));
-
-        GetString(pOneDayElement, "low", iTmpStr, "");
-        if (iTmpStr == "N/A")
-          m_info.forecast[i].m_low = "";
-        else
-          FormatTemperature(m_info.forecast[i].m_low, atoi(iTmpStr));
-
-        TiXmlElement *pDayTimeElement = pOneDayElement->FirstChildElement("part"); //grab the first day/night part (should be day)
-        if (pDayTimeElement)
-        {
-          if (i == 0 && (time.wHour < 7 || time.wHour >= 19)) //weather.com works on a 7am to 7pm basis so grab night if its late in the day
-            pDayTimeElement = pDayTimeElement->NextSiblingElement("part");
-
-          GetString(pDayTimeElement, "icon", iTmpStr, ""); //string cause i've seen it return N/A
-          if (iTmpStr == "N/A")
-            m_info.forecast[i].m_icon.Format("%s128x128/na.png", WEATHER_BASE_PATH);
-          else
-            m_info.forecast[i].m_icon.Format("%s128x128/%s.png", WEATHER_BASE_PATH, iTmpStr);
-
-          GetString(pDayTimeElement, "t", m_info.forecast[i].m_overview, "");
-          LocalizeOverview(m_info.forecast[i].m_overview);
-        }
-
-        pOneDayElement = pOneDayElement->NextSiblingElement("day");
-        if (!pOneDayElement)
-          break; // No more days, break out
-      }
-    }
-  }
-  return true;
-}
-
 void CWeatherJob::LoadLocalizedToken()
 {
   // We load the english strings in to get our tokens
@@ -485,141 +275,88 @@ void CWeatherJob::LoadLocalizedToken()
   }
 }
 
-
-CWeather::CWeather(void) : CInfoLoader(30 * 60 * 1000) // 30 minutes
+static CStdString ConstructPath(std::string in) // copy intended
 {
-  Reset();
-}
+  if (in.find("/") != std::string::npos || in.find("\\") != std::string::npos)
+    return in;
+  if (in.empty() || in == "N/A")
+    in = "na.png";
 
-CWeather::~CWeather(void)
-{
+  return URIUtils::AddFileToFolder(WEATHER_ICON_PATH,in);
 }
 
-bool CWeather::GetSearchResults(const CStdString &strSearch, CStdString &strResult)
+void CWeatherJob::SetFromProperties()
 {
-  // Check to see if the user entered a weather.com code
-  if (strSearch.size() == 8)
-  {
-    strResult = "";
-    int i = 0;
-    for (i = 0; i < 4; ++i)
-    {
-      strResult += toupper(strSearch[i]);
-      if (!isalpha(strSearch[i]))
-        break;
-    }
-    if (i == 4)
-    {
-      for ( ; i < 8; ++i)
-      {
-        strResult += strSearch[i];
-        if (!isdigit(strSearch[i]))
-          break;
-      }
-      if (i == 8)
-      {
-        return true; // match
-      }
-    }
-    // no match, wipe string
-    strResult = "";
-  }
-
-  CGUIDialogSelect *pDlgSelect = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
-  CGUIDialogProgress *pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS);
-
-  //do the download
-  CStdString strURL;
-  CStdString strXML;
-  XFILE::CFileCurl httpUtil;
-
-  if (pDlgProgress)
-  {
-    pDlgProgress->SetHeading(410);       //"Accessing Weather.com"
-    pDlgProgress->SetLine(0, 194);       //"Searching"
-    pDlgProgress->SetLine(1, strSearch);
-    pDlgProgress->SetLine(2, "");
-    pDlgProgress->StartModal();
-    pDlgProgress->Progress();
-  }
-
-  strURL.Format("http://xoap.weather.com/search/search?where=%s", strSearch);
-
-  if (!httpUtil.Get(strURL, strXML))
-  {
-    if (pDlgProgress)
-      pDlgProgress->Close();
-    return false;
-  }
-
-  //some select dialog init stuff
-  if (!pDlgSelect)
-  {
-    if (pDlgProgress)
-      pDlgProgress->Close();
-    return false;
-  }
-
-  pDlgSelect->SetHeading(396); //"Select Location"
-  pDlgSelect->Reset();
-
-  ///////////////////////////////
-  // load the xml file
-  ///////////////////////////////
-  TiXmlDocument xmlDoc;
-  xmlDoc.Parse(strXML.c_str());
-  if (xmlDoc.Error())
-    return false;
+  // Load in our tokens if necessary
+  if (!m_localizedTokens.size())
+    LoadLocalizedToken();
 
-  TiXmlElement *pRootElement = xmlDoc.RootElement();
-  if (pRootElement)
+  CGUIWindow* window        = g_windowManager.GetWindow(WINDOW_WEATHER);
+  CDateTime time=CDateTime::GetCurrentDateTime();
+  m_info.lastUpdateTime     = time.GetAsLocalizedDateTime(false, false);
+  m_info.currentConditions  = window->GetProperty("Current.Condition").asString();
+  m_info.currentIcon = ConstructPath(window->GetProperty("Current.OutlookIcon").asString());
+  LocalizeOverview(m_info.currentConditions);
+  FormatTemperature(m_info.currentTemperature,
+      strtol(window->GetProperty("Current.Temperature").asString().c_str(),0,10));
+  FormatTemperature(m_info.currentFeelsLike,
+      strtol(window->GetProperty("Current.FeelsLike").asString().c_str(),0,10));
+  m_info.currentUVIndex     = window->GetProperty("Current.UVIndex").asString();
+  LocalizeOverview(m_info.currentUVIndex);
+  int speed = ConvertSpeed(strtol(window->GetProperty("Current.Wind").asString().c_str(),0,10));
+  CStdString direction = window->GetProperty("Current.WindDirection").asString();
+  if (direction ==  "CALM")
+    m_info.currentWind = g_localizeStrings.Get(1410);
+  else
   {
-    CStdString strItemTmp;
-    TiXmlElement *pElement = pRootElement->FirstChildElement("loc");
-    while (pElement)
-    {
-      if (!pElement->NoChildren())
-      {
-        strItemTmp.Format("%s - %s", pElement->Attribute("id"), pElement->FirstChild()->Value());
-        pDlgSelect->Add(strItemTmp);
-      }
-      pElement = pElement->NextSiblingElement("loc");
-    }
+    LocalizeOverviewToken(direction);
+    m_info.currentWind.Format(g_localizeStrings.Get(434).c_str(),
+        direction, speed, g_langInfo.GetSpeedUnitString().c_str());
   }
-
-  if (pDlgProgress)
-    pDlgProgress->Close();
-
-  pDlgSelect->EnableButton(true, 222); //'Cancel' button returns to weather settings
-  pDlgSelect->DoModal();
-
-  if (pDlgSelect->GetSelectedLabel() < 0)
+  CStdString windspeed;
+  windspeed.Format("%i %s",speed,g_langInfo.GetSpeedUnitString().c_str());
+  window->SetProperty("Current.WindSpeed",windspeed);
+  FormatTemperature(m_info.currentDewPoint,
+      strtol(window->GetProperty("Current.DewPoint").asString().c_str(),0,10));
+  if (window->GetProperty("Current.Humidity").asString().empty())
+    m_info.currentHumidity.clear();
+  else
+    m_info.currentHumidity.Format("%s%%",window->GetProperty("Current.Humidity").asString().c_str());
+  m_info.location           = window->GetProperty("Current.Location").asString();
+  for (int i=0;i<NUM_DAYS;++i)
   {
-    if (pDlgSelect->IsButtonPressed())
-    {
-      pDlgSelect->Close(); //close the select dialog and return to weather settings
-      return true;
-    }
+    CStdString strDay;
+    strDay.Format("Day%i.Title",i);
+    m_info.forecast[i].m_day = window->GetProperty(strDay).asString();
+    LocalizeOverviewToken(m_info.forecast[i].m_day);
+    strDay.Format("Day%i.HighTemp",i);
+    FormatTemperature(m_info.forecast[i].m_high,
+                  strtol(window->GetProperty(strDay).asString().c_str(),0,10));
+    strDay.Format("Day%i.LowTemp",i);
+    FormatTemperature(m_info.forecast[i].m_low,
+                  strtol(window->GetProperty(strDay).asString().c_str(),0,10));
+    strDay.Format("Day%i.OutlookIcon",i);
+    m_info.forecast[i].m_icon = ConstructPath(window->GetProperty(strDay).asString());
+    strDay.Format("Day%i.Outlook",i);
+    m_info.forecast[i].m_overview = window->GetProperty(strDay).asString();
+    LocalizeOverview(m_info.forecast[i].m_overview);
   }
+}
 
-  //copy the selected code into the settings
-  if (pDlgSelect->GetSelectedLabel() >= 0)
-    strResult = pDlgSelect->GetSelectedLabelText();
-
-  if (pDlgProgress)
-    pDlgProgress->Close();
+CWeather::CWeather(void) : CInfoLoader(30 * 60 * 1000) // 30 minutes
+{
+  Reset();
+}
 
-  return true;
+CWeather::~CWeather(void)
+{
 }
 
 CStdString CWeather::BusyInfo(int info) const
 {
   if (info == WEATHER_IMAGE_CURRENT_ICON)
-  {
-    CStdString busy;
-    busy.Format("%s128x128/na.png", WEATHER_BASE_PATH);
-    return busy;
-  }
+    return URIUtils::AddFileToFolder(WEATHER_ICON_PATH,"na.png");
+
   return CInfoLoader::BusyInfo(info);
 }
 
@@ -637,24 +374,6 @@ CStdString CWeather::TranslateInfo(int info) const
   return "";
 }
 
-CStdString CWeather::GetAreaCity(const CStdString &codeAndCity)
-{
-  CStdString areaCode(codeAndCity);
-  int pos = areaCode.Find(" - ");
-  if (pos >= 0)
-    areaCode = areaCode.Mid(pos + 3);
-  return areaCode;
-}
-
-CStdString CWeather::GetAreaCode(const CStdString &codeAndCity)
-{
-  CStdString areaCode(codeAndCity);
-  int pos = areaCode.Find(" - ");
-  if (pos >= 0)
-    areaCode = areaCode.Left(pos);
-  return areaCode;
-}
-
 /*!
  \brief Retrieve the city name for the specified location from the settings
  \param iLocation the location index (can be in the range [1..MAXLOCATION])
@@ -662,20 +381,15 @@ CStdString CWeather::GetAreaCode(const CStdString &codeAndCity)
  */
 CStdString CWeather::GetLocation(int iLocation)
 {
-  if (m_location[iLocation - 1].IsEmpty())
-  {
-    CStdString setting;
-    setting.Format("weather.areacode%i", iLocation);
-    m_location[iLocation - 1] = GetAreaCity(g_guiSettings.GetString(setting));
-  }
-  return m_location[iLocation - 1];
+  CGUIWindow* window = g_windowManager.GetWindow(WINDOW_WEATHER);
+  CStdString setting;
+  setting.Format("Location%i", iLocation);
+  return window->GetProperty(setting).asString();
 }
 
 void CWeather::Reset()
 {
   m_info.Reset();
-  for (int i = 0; i < MAX_LOCATION; i++)
-    m_location[i] = "";
 }
 
 bool CWeather::IsFetched()
@@ -712,9 +426,7 @@ int CWeather::GetArea() const
 
 CJob *CWeather::GetJob() const
 {
-  CStdString strSetting;
-  strSetting.Format("weather.areacode%i", GetArea());
-  return new CWeatherJob(GetAreaCode(g_guiSettings.GetString(strSetting)));
+  return new CWeatherJob(GetArea());
 }
 
 void CWeather::OnJobComplete(unsigned int jobID, bool success, CJob *job)
index e12130d..6399590 100644 (file)
@@ -39,8 +39,6 @@ class TiXmlElement;
 #define WEATHER_LABEL_CURRENT_DEWP 27
 #define WEATHER_LABEL_CURRENT_HUMI 28
 
-#define MAX_LOCATION 3
-
 struct day_forecast
 {
   CStdString m_icon;
@@ -50,7 +48,7 @@ struct day_forecast
   CStdString m_low;
 };
 
-#define NUM_DAYS 4
+#define NUM_DAYS 7
 
 class CWeatherInfo
 {
@@ -96,31 +94,47 @@ public:
 class CWeatherJob : public CJob
 {
 public:
-  CWeatherJob(const CStdString &areaCode);
+  CWeatherJob(int location);
 
   virtual bool DoWork();
 
   const CWeatherInfo &GetInfo() const;
 private:
-  bool LoadWeather(const CStdString& strWeatherFile); //parse strWeatherFile
-  void GetString(const TiXmlElement* pRootElement, const CStdString& strTagName, CStdString &value, const CStdString& strDefaultValue);
-  void GetInteger(const TiXmlElement* pRootElement, const CStdString& strTagName, int& iValue);
   void LocalizeOverview(CStdString &str);
   void LocalizeOverviewToken(CStdString &str);
   void LoadLocalizedToken();
   int ConvertSpeed(int speed);
 
+  void SetFromProperties();
+
   /*! \brief Formats a celcius temperature into a string based on the users locale
    \param text the string to format
    \param temp the temperature (in degrees celcius).
    */
   void FormatTemperature(CStdString &text, int temp);
 
-  std::map<CStdString, int> m_localizedTokens;
-  typedef std::map<CStdString, int>::const_iterator ilocalizedTokens;
+  struct ci_less : std::binary_function<std::string, std::string, bool>
+  {
+    // case-independent (ci) compare_less binary function
+    struct nocase_compare : public std::binary_function<unsigned char,unsigned char,bool>
+    {
+      bool operator() (const unsigned char& c1, const unsigned char& c2) const {
+          return tolower (c1) < tolower (c2);
+      }
+    };
+    bool operator() (const std::string & s1, const std::string & s2) const {
+      return std::lexicographical_compare
+        (s1.begin (), s1.end (),
+        s2.begin (), s2.end (),
+        nocase_compare ());
+    }
+  };
+
+  std::map<CStdString, int, ci_less> m_localizedTokens;
+  typedef std::map<CStdString, int, ci_less>::const_iterator ilocalizedTokens;
 
   CWeatherInfo m_info;
-  CStdString m_areaCode;
+  int m_location;
 
   static bool m_imagesOkay;
 };
@@ -140,10 +154,6 @@ public:
 
   void SetArea(int iLocation);
   int GetArea() const;
-
-  static CStdString GetAreaCode(const CStdString &codeAndCity);
-  static CStdString GetAreaCity(const CStdString &codeAndCity);
-
 protected:
   virtual CJob *GetJob() const;
   virtual CStdString TranslateInfo(int info) const;
@@ -152,8 +162,6 @@ protected:
 
 private:
 
-  CStdString m_location[MAX_LOCATION];
-
   CWeatherInfo m_info;
 };
 
index 6adc743..c4085b2 100644 (file)
@@ -21,7 +21,6 @@
 
 #include "XMLUtils.h"
 #include "URL.h"
-#include "filesystem/SpecialProtocol.h"
 #include "StringUtils.h"
 #ifdef _WIN32
 #include "PlatformDefs.h" //for strcasecmp
@@ -133,11 +132,14 @@ bool XMLUtils::GetString(const TiXmlNode* pRootNode, const char* strTag, CStdStr
 }
 
 bool XMLUtils::GetAdditiveString(const TiXmlNode* pRootNode, const char* strTag,
-                                 const CStdString& strSeparator, CStdString& strStringValue)
+                                 const CStdString& strSeparator, CStdString& strStringValue,
+                                 bool clear)
 {
   CStdString strTemp;
   const TiXmlElement* node = pRootNode->FirstChildElement(strTag);
   bool bResult=false;
+  if (node && node->FirstChild() && clear)
+    strStringValue.clear();
   while (node)
   {
     if (node->FirstChild())
@@ -193,8 +195,6 @@ bool XMLUtils::GetPath(const TiXmlNode* pRootNode, const char* strTag, CStdStrin
   const TiXmlElement* pElement = pRootNode->FirstChildElement(strTag);
   if (!pElement) return false;
 
-  int pathVersion = 0;
-  pElement->Attribute("pathversion", &pathVersion);
   const char* encoded = pElement->Attribute("urlencoded");
   const TiXmlNode* pNode = pElement->FirstChild();
   if (pNode != NULL)
@@ -202,7 +202,6 @@ bool XMLUtils::GetPath(const TiXmlNode* pRootNode, const char* strTag, CStdStrin
     strStringValue = pNode->Value();
     if (encoded && strcasecmp(encoded,"yes") == 0)
       CURL::Decode(strStringValue);
-    strStringValue = CSpecialProtocol::ReplaceOldPath(strStringValue, pathVersion);
     return true;
   }
   strStringValue.Empty();
@@ -264,7 +263,7 @@ void XMLUtils::SetHex(TiXmlNode* pRootNode, const char *strTag, uint32_t value)
 void XMLUtils::SetPath(TiXmlNode* pRootNode, const char *strTag, const CStdString& strValue)
 {
   TiXmlElement newElement(strTag);
-  newElement.SetAttribute("pathversion", CSpecialProtocol::path_version);
+  newElement.SetAttribute("pathversion", path_version);
   TiXmlNode *pNewNode = pRootNode->InsertEndChild(newElement);
   if (pNewNode)
   {
index 5ba8b1c..fe02b99 100644 (file)
@@ -38,7 +38,21 @@ public:
   static bool GetInt(const TiXmlNode* pRootNode, const char* strTag, int& iIntValue);
   static bool GetBoolean(const TiXmlNode* pRootNode, const char* strTag, bool& bBoolValue);
   static bool GetString(const TiXmlNode* pRootNode, const char* strTag, CStdString& strStringValue);
-  static bool GetAdditiveString(const TiXmlNode* pRootNode, const char* strTag, const CStdString& strSeparator, CStdString& strStringValue);
+  /*! \brief Get multiple tags, concatenating the values together.
+   Transforms
+     <tag>value1</tag>
+     <tag clear="true">value2</tag>
+     ...
+     <tag>valuen</tag>
+   into value2<sep>...<sep>valuen, appending it to the value string. Note that <value1> is overwritten by the clear="true" tag.
+
+   \param rootNode    the parent containing the <tag>'s.
+   \param tag         the <tag> in question.
+   \param separator   the separator to use when concatenating values.
+   \param value [out] the resulting string. Remains untouched if no <tag> is available, else is appended (or cleared based on the clear parameter).
+   \param clear       if true, clears the string prior to adding tags, if tags are available. Defaults to false.
+   */
+  static bool GetAdditiveString(const TiXmlNode* rootNode, const char* tag, const CStdString& separator, CStdString& value, bool clear = false);
   static bool GetEncoding(const TiXmlDocument* pDoc, CStdString& strEncoding);
   static bool GetPath(const TiXmlNode* pRootNode, const char* strTag, CStdString& strStringValue);
   static bool GetFloat(const TiXmlNode* pRootNode, const char* strTag, float& value, const float min, const float max);
@@ -52,5 +66,7 @@ public:
   static void SetHex(TiXmlNode* pRootNode, const char *strTag, uint32_t value);
   static void SetPath(TiXmlNode* pRootNode, const char *strTag, const CStdString& strValue);
   static void SetLong(TiXmlNode* pRootNode, const char *strTag, long iValue);
+
+  static const int path_version = 1;
 };
 
index bdfa6be..6f660db 100644 (file)
@@ -170,7 +170,7 @@ void CLog::MemDump(char *pData, int length)
       for (int j=0; j < 4 && i + 4*k + j < length; j++)
       {
         CStdString strFormat;
-        strFormat.Format(" %02x", *pData++);
+        strFormat.Format(" %02x", (unsigned char)*pData++);
         strLine += strFormat;
       }
       strLine += " ";
index d47703d..e60770e 100644 (file)
@@ -2846,7 +2846,7 @@ bool Cssrc::InitFilters(void)
   if (UpSampling)
   {
     double aa = AA; // stop band attenuation(dB)
-    double lpf, delta, d, df, alp, iza;
+    double lpf, d, df, alp, iza;
     double guard = 2;
 
     frqgcd = gcd(sfrq, dfrq);
@@ -2862,7 +2862,6 @@ bool Cssrc::InitFilters(void)
     df = (dfrq * osf / 2 - sfrq / 2) * 2 / guard;
     lpf = sfrq / 2 + (dfrq * osf / 2 - sfrq / 2) / guard;
 
-    delta = pow(10.0, -aa / 20);
     if (aa <= 21) d = 0.9222; else d = (aa - 7.95) / 14.36;
 
     n1 = (int)(fs1 / df * d + 1);
@@ -2905,7 +2904,7 @@ bool Cssrc::InitFilters(void)
   else
   {
     double aa = AA; // stop band attenuation(dB)
-    double lpf, delta, d, df, alp, iza;
+    double lpf, d, df, alp, iza;
     int ipsize, wsize;
 
     frqgcd = gcd(sfrq, dfrq);
@@ -2918,7 +2917,6 @@ bool Cssrc::InitFilters(void)
 
     fs1 = sfrq * osf;
 
-    delta = pow(10.0, -aa / 20);
     if (aa <= 21) d = 0.9222; else d = (aa - 7.95) / 14.36;
 
     n1 = filter1len;
@@ -2961,10 +2959,9 @@ bool Cssrc::InitFilters(void)
   if (UpSampling)
   {
     double aa = AA; // stop band attenuation(dB)
-    double lpf, delta, d, df, alp, iza;
+    double lpf, d, df, alp, iza;
     int ipsize, wsize;
 
-    delta = pow(10.0, -aa / 20);
     if (aa <= 21) d = 0.9222; else d = (aa - 7.95) / 14.36;
 
     fs2 = dfrq * osf;
@@ -3020,7 +3017,7 @@ bool Cssrc::InitFilters(void)
     else
     {
       double aa = AA; // stop band attenuation(dB)
-      double lpf, delta, d, df, alp, iza;
+      double lpf, d, df, alp, iza;
       double guard = 2;
 
       fs2 = sfrq / frqgcd * dfrq ;
@@ -3028,7 +3025,6 @@ bool Cssrc::InitFilters(void)
       df = (fs1 / 2 - sfrq / 2) * 2 / guard;
       lpf = sfrq / 2 + (fs1 / 2 - sfrq / 2) / guard;
 
-      delta = pow(10.0, -aa / 20);
       if (aa <= 21) d = 0.9222; else d = (aa - 7.95) / 14.36;
 
       n2 = (int)(fs2 / df * d + 1);
index 0a0ca9b..09ed034 100644 (file)
@@ -268,17 +268,20 @@ CGUIViewStateWindowVideoNav::CGUIViewStateWindowVideoNav(const CFileItemList& it
           else
             AddSortMethod(SORT_METHOD_VIDEO_SORT_TITLE, 551, LABEL_MASKS("%T", "%R"));
 
-          AddSortMethod(SORT_METHOD_VIDEO_RATING, 563, LABEL_MASKS("%T", "%R"));  // Filename, Duration | Foldername, empty
-          AddSortMethod(SORT_METHOD_MPAA_RATING, 20074, LABEL_MASKS("%T", "%O"));
           AddSortMethod(SORT_METHOD_YEAR,562, LABEL_MASKS("%T", "%Y"));
         }
+        AddSortMethod(SORT_METHOD_VIDEO_RATING, 563, LABEL_MASKS("%T", "%R"));  // Filename, Duration | Foldername, empty
+        AddSortMethod(SORT_METHOD_MPAA_RATING, 20074, LABEL_MASKS("%T", "%O"));
         AddSortMethod(SORT_METHOD_VIDEO_RUNTIME,2050, LABEL_MASKS("%T", "%D"));
         AddSortMethod(SORT_METHOD_DATEADDED, 570, LABEL_MASKS("%T", "%R"));
 
         if (g_settings.GetWatchMode(items.GetContent()) == VIDEO_SHOW_ALL)
           AddSortMethod(SORT_METHOD_PLAYCOUNT, 576, LABEL_MASKS("%T", "%V"));
 
-        SetSortMethod(g_settings.m_viewStateVideoNavTitles.m_sortMethod);
+        if (params.GetSetId() > -1)
+          SetSortMethod(SORT_METHOD_YEAR);
+        else
+          SetSortMethod(g_settings.m_viewStateVideoNavTitles.m_sortMethod);
 
         SetViewAsControl(g_settings.m_viewStateVideoNavTitles.m_viewMode);
 
@@ -364,6 +367,8 @@ void CGUIViewStateWindowVideoNav::SaveViewState()
   if (m_items.IsVideoDb())
   {
     NODE_TYPE NodeType = CVideoDatabaseDirectory::GetDirectoryChildType(m_items.GetPath());
+    CQueryParams params;
+    CVideoDatabaseDirectory::GetQueryParams(m_items.GetPath(),params);
     switch (NodeType)
     {
     case NODE_TYPE_ACTOR:
@@ -376,7 +381,7 @@ void CGUIViewStateWindowVideoNav::SaveViewState()
       SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, &g_settings.m_viewStateVideoNavGenres);
       break;
     case NODE_TYPE_TITLE_MOVIES:
-      SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, &g_settings.m_viewStateVideoNavTitles);
+      SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, params.GetSetId() > -1 ? NULL : &g_settings.m_viewStateVideoNavTitles);
       break;
     case NODE_TYPE_EPISODES:
       SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, &g_settings.m_viewStateVideoNavEpisodes);
@@ -437,14 +442,14 @@ VECSOURCES& CGUIViewStateWindowVideoNav::GetSources()
       share.m_iDriveType = CMediaSource::SOURCE_TYPE_LOCAL;
       m_sources.push_back(share);
     }
-    { // Playlists share
-      CMediaSource share;
-      share.strName=g_localizeStrings.Get(136); // Playlists
-      share.strPath = "special://videoplaylists/";
-      share.m_strThumbnailImage = CUtil::GetDefaultFolderThumb("DefaultVideoPlaylists.png");
-      share.m_iDriveType = CMediaSource::SOURCE_TYPE_LOCAL;
-      m_sources.push_back(share);
-    }
+  }
+  { // Playlists share
+    CMediaSource share;
+    share.strName=g_localizeStrings.Get(136); // Playlists
+    share.strPath = "special://videoplaylists/";
+    share.m_strThumbnailImage = CUtil::GetDefaultFolderThumb("DefaultVideoPlaylists.png");
+    share.m_iDriveType = CMediaSource::SOURCE_TYPE_LOCAL;
+    m_sources.push_back(share);
   }
   return CGUIViewStateWindowVideo::GetSources();
 }
index 4d6f381..8ed269c 100644 (file)
@@ -413,7 +413,7 @@ CTeletextDecoder::CTeletextDecoder()
 {
   memset(&m_RenderInfo, 0, sizeof(TextRenderInfo_t));
 
-  m_teletextFont                 = _P(TeletextFont);
+  m_teletextFont                 = CSpecialProtocol::TranslatePath(TeletextFont);
   m_TextureBuffer                = NULL;
   m_txtCache                     = NULL;
   m_Manager                      = NULL;
index 555f23e..d293d97 100644 (file)
@@ -51,6 +51,7 @@
 #include "interfaces/AnnouncementManager.h"
 #include "dbwrappers/dataset.h"
 #include "ThumbnailCache.h"
+#include "utils/LabelFormatter.h"
 
 using namespace std;
 using namespace dbiplus;
@@ -468,7 +469,7 @@ bool CVideoDatabase::GetPaths(set<CStdString> &paths)
   return false;
 }
 
-bool CVideoDatabase::GetPathsForTvShow(int idShow, vector<int>& paths)
+bool CVideoDatabase::GetPathsForTvShow(int idShow, set<int>& paths)
 {
   CStdString strSQL;
   try
@@ -479,7 +480,7 @@ bool CVideoDatabase::GetPathsForTvShow(int idShow, vector<int>& paths)
     m_pDS->query(strSQL.c_str());
     while (!m_pDS->eof())
     {
-      paths.push_back(m_pDS->fv(0).get_asInt());
+      paths.insert(m_pDS->fv(0).get_asInt());
       m_pDS->next();
     }
     m_pDS->close();
@@ -1313,21 +1314,18 @@ void CVideoDatabase::AddCountryToMovie(int idMovie, int idCountry)
 //********************************************************************************************************************************
 bool CVideoDatabase::LoadVideoInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details)
 {
-  if (HasMovieInfo(strFilenameAndPath))
+  if (GetMovieInfo(strFilenameAndPath, details))
   {
-    GetMovieInfo(strFilenameAndPath, details);
     CLog::Log(LOGDEBUG,"%s, got movie info!", __FUNCTION__);
     CLog::Log(LOGDEBUG,"  Title = %s", details.m_strTitle.c_str());
   }
-  else if (HasEpisodeInfo(strFilenameAndPath))
+  else if (GetEpisodeInfo(strFilenameAndPath, details))
   {
-    GetEpisodeInfo(strFilenameAndPath, details);
     CLog::Log(LOGDEBUG,"%s, got episode info!", __FUNCTION__);
     CLog::Log(LOGDEBUG,"  Title = %s", details.m_strTitle.c_str());
   }
-  else if (HasMusicVideoInfo(strFilenameAndPath))
+  else if (GetMusicVideoInfo(strFilenameAndPath, details))
   {
-    GetMusicVideoInfo(strFilenameAndPath, details);
     CLog::Log(LOGDEBUG,"%s, got music video info!", __FUNCTION__);
     CLog::Log(LOGDEBUG,"  Title = %s", details.m_strTitle.c_str());
   }
@@ -1452,30 +1450,30 @@ void CVideoDatabase::DeleteDetailsForTvShow(const CStdString& strPath)
 //********************************************************************************************************************************
 void CVideoDatabase::GetMoviesByActor(const CStdString& strActor, CFileItemList& items)
 {
-  CStdString where = PrepareSQL("JOIN actorlinkmovie ON actorlinkmovie.idMovie=movieview.idMovie "
-                                "JOIN actors a ON a.idActor=actorlinkmovie.idActor "
-                                "JOIN directorlinkmovie ON directorlinkmovie.idMovie=movieview.idMovie "
-                                "JOIN actors d ON d.idActor=directorlinkmovie.idDirector "
+  CStdString where = PrepareSQL("LEFT JOIN actorlinkmovie ON actorlinkmovie.idMovie=movieview.idMovie "
+                                "LEFT JOIN actors a ON a.idActor=actorlinkmovie.idActor "
+                                "LEFT JOIN directorlinkmovie ON directorlinkmovie.idMovie=movieview.idMovie "
+                                "LEFT JOIN actors d ON d.idActor=directorlinkmovie.idDirector "
                                 "WHERE a.strActor='%s' OR d.strActor='%s' GROUP BY movieview.idMovie", strActor.c_str(), strActor.c_str());
   GetMoviesByWhere("videodb://1/2/", where, "", items);
 }
 
 void CVideoDatabase::GetTvShowsByActor(const CStdString& strActor, CFileItemList& items)
 {
-  CStdString where = PrepareSQL("JOIN actorlinktvshow ON actorlinktvshow.idShow=tvshowview.idShow "
-                                "JOIN actors a ON a.idActor=actorlinktvshow.idActor "
-                                "JOIN directorlinktvshow ON directorlinktvshow.idShow=tvshowview.idShow "
-                                "JOIN actors d ON d.idActor=directorlinktvshow.idDirector "
+  CStdString where = PrepareSQL("LEFT JOIN actorlinktvshow ON actorlinktvshow.idShow=tvshowview.idShow "
+                                "LEFT JOIN actors a ON a.idActor=actorlinktvshow.idActor "
+                                "LEFT JOIN directorlinktvshow ON directorlinktvshow.idShow=tvshowview.idShow "
+                                "LEFT JOIN actors d ON d.idActor=directorlinktvshow.idDirector "
                                 "WHERE a.strActor='%s' OR d.strActor='%s' GROUP BY tvshowview.idShow", strActor.c_str(), strActor.c_str());
   GetTvShowsByWhere("videodb://2/2/", where, items);
 }
 
 void CVideoDatabase::GetEpisodesByActor(const CStdString& strActor, CFileItemList& items)
 {
-  CStdString where = PrepareSQL("JOIN actorlinkepisode ON actorlinkepisode.idEpisode=episodeview.idEpisode "
-                                "JOIN actors a ON a.idActor=actorlinkepisode.idActor "
-                                "JOIN directorlinkepisode ON directorlinkepisode.idEpisode=episodeview.idEpisode "
-                                "JOIN actors d ON d.idActor=directorlinkepisode.idDirector "
+  CStdString where = PrepareSQL("LEFT JOIN actorlinkepisode ON actorlinkepisode.idEpisode=episodeview.idEpisode "
+                                "LEFT JOIN actors a ON a.idActor=actorlinkepisode.idActor "
+                                "LEFT JOIN directorlinkepisode ON directorlinkepisode.idEpisode=episodeview.idEpisode "
+                                "LEFT JOIN actors d ON d.idActor=directorlinkepisode.idDirector "
                                 "WHERE a.strActor='%s' OR d.strActor='%s' GROUP BY episodeview.idEpisode", strActor.c_str(), strActor.c_str());
   GetEpisodesByWhere("videodb://2/2/", where, items);
 }
@@ -1512,44 +1510,48 @@ void CVideoDatabase::GetMusicVideosByArtist(const CStdString& strArtist, CFileIt
 }
 
 //********************************************************************************************************************************
-void CVideoDatabase::GetMovieInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMovie /* = -1 */)
+bool CVideoDatabase::GetMovieInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMovie /* = -1 */)
 {
   try
   {
     // TODO: Optimize this - no need for all the queries!
     if (idMovie < 0)
       idMovie = GetMovieId(strFilenameAndPath);
-    if (idMovie < 0) return ;
+    if (idMovie < 0) return false;
 
     CStdString sql = PrepareSQL("select * from movieview where idMovie=%i", idMovie);
     if (!m_pDS->query(sql.c_str()))
-      return;
+      return false;
     details = GetDetailsForMovie(m_pDS, true);
+    return !details.IsEmpty();
   }
   catch (...)
   {
     CLog::Log(LOGERROR, "%s (%s) failed", __FUNCTION__, strFilenameAndPath.c_str());
   }
+  return false;
 }
 
 //********************************************************************************************************************************
-void CVideoDatabase::GetTvShowInfo(const CStdString& strPath, CVideoInfoTag& details, int idTvShow /* = -1 */)
+bool CVideoDatabase::GetTvShowInfo(const CStdString& strPath, CVideoInfoTag& details, int idTvShow /* = -1 */)
 {
   try
   {
     if (idTvShow < 0)
       idTvShow = GetTvShowId(strPath);
-    if (idTvShow < 0) return ;
+    if (idTvShow < 0) return false;
 
     CStdString sql = PrepareSQL("SELECT * FROM tvshowview WHERE idShow=%i", idTvShow);
     if (!m_pDS->query(sql.c_str()))
-      return;
+      return false;
     details = GetDetailsForTvShow(m_pDS, true);
+    return !details.IsEmpty();
   }
   catch (...)
   {
     CLog::Log(LOGERROR, "%s (%s) failed", __FUNCTION__, strPath.c_str());
   }
+  return false;
 }
 
 bool CVideoDatabase::GetEpisodeInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idEpisode /* = -1 */)
@@ -1565,7 +1567,7 @@ bool CVideoDatabase::GetEpisodeInfo(const CStdString& strFilenameAndPath, CVideo
     if (!m_pDS->query(sql.c_str()))
       return false;
     details = GetDetailsForEpisode(m_pDS, true);
-    return true;
+    return !details.IsEmpty();
   }
   catch (...)
   {
@@ -1574,46 +1576,50 @@ bool CVideoDatabase::GetEpisodeInfo(const CStdString& strFilenameAndPath, CVideo
   return false;
 }
 
-void CVideoDatabase::GetMusicVideoInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMVideo /* = -1 */)
+bool CVideoDatabase::GetMusicVideoInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMVideo /* = -1 */)
 {
   try
   {
     // TODO: Optimize this - no need for all the queries!
     if (idMVideo < 0)
       idMVideo = GetMusicVideoId(strFilenameAndPath);
-    if (idMVideo < 0) return ;
+    if (idMVideo < 0) return false;
 
     CStdString sql = PrepareSQL("select * from musicvideoview where idMVideo=%i", idMVideo);
     if (!m_pDS->query(sql.c_str()))
-      return;
+      return false;
     details = GetDetailsForMusicVideo(m_pDS);
+    return !details.IsEmpty();
   }
   catch (...)
   {
     CLog::Log(LOGERROR, "%s (%s) failed", __FUNCTION__, strFilenameAndPath.c_str());
   }
+  return false;
 }
 
-void CVideoDatabase::GetSetInfo(int idSet, CVideoInfoTag& details)
+bool CVideoDatabase::GetSetInfo(int idSet, CVideoInfoTag& details)
 {
   try
   {
     if (idSet < 0)
-      return;
+      return false;
 
     CStdString where = PrepareSQL("WHERE sets.idSet=%d", idSet);
     CFileItemList items;
     if (!GetSetsNav("videodb://1/7/", items, VIDEODB_CONTENT_MOVIES, where) ||
         items.Size() != 1 ||
         !items[0]->HasVideoInfoTag())
-      return;
+      return false;
 
     details = *(items[0]->GetVideoInfoTag());
+    return !details.IsEmpty();
   }
   catch (...)
   {
     CLog::Log(LOGERROR, "%s (%d) failed", __FUNCTION__, idSet);
   }
+  return false;
 }
 
 void CVideoDatabase::AddGenreAndDirectorsAndStudios(const CVideoInfoTag& details, vector<int>& vecDirectors, vector<int>& vecGenres, vector<int>& vecStudios)
@@ -1786,8 +1792,6 @@ int CVideoDatabase::SetDetailsForMovie(const CStdString& strFilenameAndPath, con
     m_pDS->exec(sql.c_str());
     CommitTransaction();
 
-    AnnounceUpdate("movie", idMovie);
-
     return idMovie;
   }
   catch (...)
@@ -1848,8 +1852,6 @@ int CVideoDatabase::SetDetailsForTvShow(const CStdString& strPath, const CVideoI
     m_pDS->exec(sql.c_str());
     CommitTransaction();
 
-    AnnounceUpdate("tvshow", idTvShow);
-
     return idTvShow;
   }
   catch (...)
@@ -1925,8 +1927,6 @@ int CVideoDatabase::SetDetailsForEpisode(const CStdString& strFilenameAndPath, c
     m_pDS->exec(sql.c_str());
     CommitTransaction();
 
-    AnnounceUpdate("episode", idEpisode);
-
     return idEpisode;
   }
   catch (...)
@@ -1999,8 +1999,6 @@ int CVideoDatabase::SetDetailsForMusicVideo(const CStdString& strFilenameAndPath
     m_pDS->exec(sql.c_str());
     CommitTransaction();
 
-    AnnounceUpdate("musicvideo", idMVideo);
-
     return idMVideo;
   }
   catch (...)
@@ -2693,7 +2691,7 @@ bool CVideoDatabase::GetStreamDetails(CVideoInfoTag& tag) const
 
   bool retVal = false;
 
-  dbiplus::Dataset *pDS = m_pDB->CreateDataset();
+  auto_ptr<Dataset> pDS(m_pDB->CreateDataset());
   CStdString strSQL = PrepareSQL("SELECT * FROM streamdetails WHERE idFile = %i", tag.m_iFileId);
   pDS->query(strSQL);
 
@@ -2856,6 +2854,7 @@ CVideoInfoTag CVideoDatabase::GetDetailsForTvShow(auto_ptr<Dataset> &pDS, bool n
   details.m_strPath = pDS->fv(VIDEODB_DETAILS_TVSHOW_PATH).get_asString();
   details.m_iEpisode = m_pDS->fv(VIDEODB_DETAILS_TVSHOW_NUM_EPISODES).get_asInt();
   details.m_playCount = m_pDS->fv(VIDEODB_DETAILS_TVSHOW_NUM_WATCHED).get_asInt();
+  details.m_strShowPath = details.m_strPath;
   details.m_strShowTitle = details.m_strTitle;
 
   movieTime += XbmcThreads::SystemClockMillis() - time; time = XbmcThreads::SystemClockMillis();
@@ -3328,9 +3327,6 @@ bool CVideoDatabase::UpdateOldVersion(int iVersion)
 {
   BeginTransaction();
 
-  // when adding/removing an index or altering the table ensure that you call
-  // CreateViews() after all modifications.
-
   try
   {
     if (iVersion < 43)
@@ -3431,10 +3427,6 @@ bool CVideoDatabase::UpdateOldVersion(int iVersion)
       m_pDS->exec("CREATE INDEX ixEpisodeBasePath ON episode ( c18(255) )");
       m_pDS->exec("CREATE INDEX ixTVShowBasePath ON tvshow ( c16(255) )");
     }
-    if(iVersion < 49)
-    {
-      CreateViews();
-    }
     if (iVersion < 50)
     {
       m_pDS->exec("ALTER TABLE settings ADD ScalingMethod integer");
@@ -3468,10 +3460,6 @@ bool CVideoDatabase::UpdateOldVersion(int iVersion)
       UpdateBasePathID("episode", "idEpisode", VIDEODB_ID_EPISODE_BASEPATH, VIDEODB_ID_EPISODE_PARENTPATHID);
       UpdateBasePathID("tvshow", "idShow", VIDEODB_ID_TV_BASEPATH, VIDEODB_ID_TV_PARENTPATHID);
     }
-    if ( iVersion < 53 )
-    {
-      CreateViews();
-    }
     if (iVersion < 54)
     { // Change INDEX for bookmark table
       m_pDS->dropIndex("bookmark", "ix_bookmark");
@@ -3484,19 +3472,20 @@ bool CVideoDatabase::UpdateOldVersion(int iVersion)
       m_pDS->exec("UPDATE settings SET DeinterlaceMode = 1 WHERE Deinterlace = 1"); // method auto => mode auto
       m_pDS->exec("UPDATE settings SET DeinterlaceMode = 0, Deinterlace = 1 WHERE Deinterlace = 0"); // method none => mode off, method auto
     }
-    if ( iVersion < 56 )
-    {
-      // Add the tv shows basepath to the episodeview
-      m_pDS->exec("DROP VIEW IF EXISTS episodeview");
-      CStdString episodeview = PrepareSQL("create view episodeview as select episode.*,files.strFileName as strFileName,"
-                                          "path.strPath as strPath,files.playCount as playCount,files.lastPlayed as lastPlayed,tvshow.c%02d as strTitle,tvshow.c%02d as strStudio,tvshow.idShow as idShow,"
-                                          "tvshow.c%02d as premiered, tvshow.c%02d as mpaa, tvshow.c%02d as strShowPath from episode "
-                                          "join files on files.idFile=episode.idFile "
-                                          "join tvshowlinkepisode on episode.idEpisode=tvshowlinkepisode.idEpisode "
-                                          "join tvshow on tvshow.idShow=tvshowlinkepisode.idShow "
-                                          "join path on files.idPath=path.idPath",VIDEODB_ID_TV_TITLE, VIDEODB_ID_TV_STUDIOS, VIDEODB_ID_TV_PREMIERED, VIDEODB_ID_TV_MPAA, VIDEODB_ID_TV_BASEPATH);
-      m_pDS->exec(episodeview.c_str());
+
+    if (iVersion < 59)
+    { // base paths for video_ts and bdmv files was wrong (and inconsistent depending on where and when they were scanned)
+      CStdString where = PrepareSQL(" WHERE files.strFileName LIKE 'VIDEO_TS.IFO' or files.strFileName LIKE 'index.BDMV'");
+      UpdateBasePath("movie", "idMovie", VIDEODB_ID_BASEPATH, false, where);
+      UpdateBasePath("musicvideo", "idMVideo", VIDEODB_ID_MUSICVIDEO_BASEPATH, false, where);
+      UpdateBasePath("episode", "idEpisode", VIDEODB_ID_EPISODE_BASEPATH, false, where);
+      UpdateBasePathID("movie", "idMovie", VIDEODB_ID_BASEPATH, VIDEODB_ID_PARENTPATHID);
+      UpdateBasePathID("musicvideo", "idMVideo", VIDEODB_ID_MUSICVIDEO_BASEPATH, VIDEODB_ID_MUSICVIDEO_PARENTPATHID);
+      UpdateBasePathID("episode", "idEpisode", VIDEODB_ID_EPISODE_BASEPATH, VIDEODB_ID_EPISODE_PARENTPATHID);
     }
+
+    // always recreate the view after any table change
+    CreateViews();
   }
   catch (...)
   {
@@ -3518,13 +3507,14 @@ bool CVideoDatabase::LookupByFolders(const CStdString &path, bool shows)
   return settings.parent_name_root; // shows, movies, musicvids
 }
 
-void CVideoDatabase::UpdateBasePath(const char *table, const char *id, int column, bool shows)
+void CVideoDatabase::UpdateBasePath(const char *table, const char *id, int column, bool shows, const CStdString &where)
 {
   CStdString query;
   if (shows)
     query = PrepareSQL("SELECT idShow,path.strPath from tvshowlinkpath join path on tvshowlinkpath.idPath=path.idPath");
   else
     query = PrepareSQL("SELECT %s.%s,path.strPath,files.strFileName from %s join files on %s.idFile=files.idFile join path on files.idPath=path.idPath", table, id, table, table);
+  query += where;
 
   map<CStdString, bool> paths;
   m_pDS2->query(query.c_str());
@@ -3584,8 +3574,14 @@ bool CVideoDatabase::GetPlayCounts(const CStdString &strPath, CFileItemList &ite
 
     return ret;
   }
-
-  int pathID = GetPathId(strPath);
+  int pathID;
+  if (URIUtils::IsPlugin(strPath))
+  {
+    CURL url(strPath);
+    pathID = GetPathId(url.GetWithoutFilename());
+  }
+  else
+    pathID = GetPathId(strPath);
   if (pathID < 0)
     return false; // path (and thus files) aren't in the database
 
@@ -3678,7 +3674,16 @@ void CVideoDatabase::UpdateFanart(const CFileItem &item, VIDEODB_CONTENT_TYPE ty
 
 void CVideoDatabase::SetPlayCount(const CFileItem &item, int count, const CStdString &date)
 {
-  int id = AddFile(item);
+  int id;
+  if (item.HasProperty("original_listitem_url") &&
+      URIUtils::IsPlugin(item.GetProperty("original_listitem_url").asString()))
+  {
+    CFileItem item2(item);
+    item2.SetPath(item.GetProperty("original_listitem_url").asString());
+    id = AddFile(item2);
+  }
+  else
+    id = AddFile(item);
   if (id < 0)
     return;
 
@@ -3879,6 +3884,7 @@ bool CVideoDatabase::GetNavCommon(const CStdString& strBaseDir, CFileItemList& i
       for (it = mapItems.begin(); it != mapItems.end(); ++it)
       {
         CFileItemPtr pItem(new CFileItem(it->second.first));
+        pItem->GetVideoInfoTag()->m_iDbId = it->first;
         CStdString strDir;
         strDir.Format("%ld/", it->first);
         pItem->SetPath(strBaseDir + strDir);
@@ -3897,6 +3903,7 @@ bool CVideoDatabase::GetNavCommon(const CStdString& strBaseDir, CFileItemList& i
       while (!m_pDS->eof())
       {
         CFileItemPtr pItem(new CFileItem(m_pDS->fv(1).get_asString()));
+        pItem->GetVideoInfoTag()->m_iDbId = m_pDS->fv(0).get_asInt();
         CStdString strDir;
         strDir.Format("%ld/", m_pDS->fv(0).get_asInt());
         pItem->SetPath(strBaseDir + strDir);
@@ -4015,6 +4022,7 @@ bool CVideoDatabase::GetSetsNav(const CStdString& strBaseDir, CFileItemList& ite
           // fv(3) is the number of videos watched, fv(2) is the total number.  We set the playcount
           // only if the number of videos watched is equal to the total number (i.e. every video watched)
           pItem->GetVideoInfoTag()->m_playCount = (m_pDS->fv(3).get_asInt() == m_pDS->fv(2).get_asInt()) ? 1 : 0;
+          pItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED, pItem->GetVideoInfoTag()->m_playCount > 0);
           pItem->GetVideoInfoTag()->m_strTitle = pItem->GetLabel();
         }
         bool thumb=false,fanart=false;
@@ -4117,7 +4125,7 @@ bool CVideoDatabase::GetMusicVideoAlbumsNav(const CStdString& strBaseDir, CFileI
           pItem->SetLabelPreformated(true);
           if (!items.Contains(pItem->GetPath()))
           {
-            pItem->GetVideoInfoTag()->m_strArtist = m_pDS->fv(2).get_asString();
+            pItem->GetVideoInfoTag()->m_strArtist = it->second.second;
             CStdString strThumb = CThumbnailCache::GetAlbumThumb(*pItem);
             if (CFile::Exists(strThumb))
               pItem->SetThumbnailImage(strThumb);
@@ -4604,6 +4612,7 @@ bool CVideoDatabase::GetSeasonsNav(const CStdString& strBaseDir, CFileItemList&
         pItem->GetVideoInfoTag()->m_strGenre = it->second.genre;
         pItem->GetVideoInfoTag()->m_strStudio = showStudio;
         pItem->GetVideoInfoTag()->m_strMPAARating = showMPAARating;
+        pItem->GetVideoInfoTag()->m_iIdShow = idShow;
         pItem->GetVideoInfoTag()->m_strShowTitle = showTitle;
         pItem->GetVideoInfoTag()->m_iEpisode = it->second.numEpisodes;
         pItem->SetProperty("totalepisodes", it->second.numEpisodes);
@@ -4639,6 +4648,7 @@ bool CVideoDatabase::GetSeasonsNav(const CStdString& strBaseDir, CFileItemList&
         pItem->GetVideoInfoTag()->m_strGenre = m_pDS->fv(3).get_asString();
         pItem->GetVideoInfoTag()->m_strStudio = showStudio;
         pItem->GetVideoInfoTag()->m_strMPAARating = showMPAARating;
+        pItem->GetVideoInfoTag()->m_iIdShow = idShow;
         pItem->GetVideoInfoTag()->m_strShowTitle = showTitle;
         int totalEpisodes = m_pDS->fv(6).get_asInt();
         int watchedEpisodes = m_pDS->fv(7).get_asInt();
@@ -4700,17 +4710,21 @@ bool CVideoDatabase::GetMoviesByWhere(const CStdString& strBaseDir, const CStdSt
     if (NULL == m_pDS.get()) return false;
 
     CStdString strSQL = "select * from movieview ";
-
-    if (where.size())
-      strSQL += where;
-    else
-    {
-      if (fetchSets && !g_guiSettings.GetBool("videolibrary.flattenmoviesets"))
-      {
-        GetSetsNav("videodb://1/7/", items, VIDEODB_CONTENT_MOVIES, "");
-        strSQL += PrepareSQL("WHERE movieview.idMovie NOT IN (SELECT idMovie FROM setlinkmovie s1 JOIN(SELECT idSet, COUNT(1) AS c FROM setlinkmovie GROUP BY idSet HAVING c>1) s2 ON s2.idSet=s1.idSet)");
-      }
+    if (fetchSets && g_guiSettings.GetBool("videolibrary.groupmoviesets"))
+    {
+      // user wants sets (and we're not fetching a particular set node), so grab all sets that match this where clause first
+      CStdString setsWhere;
+      if (where.size())
+        setsWhere = " where movie.idMovie in (select movieview.idMovie from movieview " + where + ")";
+      GetSetsNav("videodb://1/7/", items, VIDEODB_CONTENT_MOVIES, setsWhere);
+      CStdString movieSetsWhere = "movieview.idMovie NOT IN (SELECT idMovie FROM setlinkmovie s1 JOIN(SELECT idSet, COUNT(1) AS c FROM setlinkmovie GROUP BY idSet HAVING c>1) s2 ON s2.idSet=s1.idSet)";
+      if (where.size())
+        strSQL += where + PrepareSQL(" and " + movieSetsWhere);
+      else
+        strSQL += PrepareSQL(" WHERE " + movieSetsWhere);
     }
+    else
+      strSQL += where;
 
     if (order.size())
       strSQL += " " + order;
@@ -5061,6 +5075,7 @@ bool CVideoDatabase::GetEpisodesByWhere(const CStdString& strBaseDir, const CStd
 
     // get data from returned rows
     items.Reserve(iRowsFound);
+    CLabelFormatter formatter("%H. %T", "");
     while (!m_pDS->eof())
     {
       int idEpisode = m_pDS->fv("idEpisode").get_asInt();
@@ -5072,6 +5087,7 @@ bool CVideoDatabase::GetEpisodesByWhere(const CStdString& strBaseDir, const CStd
           g_passwordManager.IsDatabasePathUnlocked(movie.m_strPath, g_settings.m_videoSources))
       {
         CFileItemPtr pItem(new CFileItem(movie));
+        formatter.FormatLabel(pItem.get());
         CStdString path;
         if (appendFullShowPath)
           path.Format("%s%ld/%ld/%ld",strBaseDir.c_str(), idShow, movie.m_iSeason,idEpisode);
@@ -5450,13 +5466,16 @@ CStdString CVideoDatabase::GetContentForPath(const CStdString& strPath)
   ScraperPtr scraper = GetScraperForPath(strPath, settings, foundDirectly);
   if (scraper)
   {
-    if (scraper->Content() == CONTENT_TVSHOWS && !foundDirectly)
-    { // check for episodes or seasons (ASSUMPTION: no episodes == seasons (i.e. assume show/season/episodes structure)
+    if (scraper->Content() == CONTENT_TVSHOWS)
+    { // check for episodes or seasons.  Assumptions are:
+      // 1. if episodes are in the path then we're in episodes.
+      // 2. if no episodes are found, and content was set directly on this path, then we're in shows.
+      // 3. if no episodes are found, and content was not set directly on this path, we're in seasons (assumes tvshows/seasons/episodes)
       CStdString sql = PrepareSQL("select count(1) from episodeview where strPath = '%s' limit 1", strPath.c_str());
       m_pDS->query( sql.c_str() );
       if (m_pDS->num_rows() && m_pDS->fv(0).get_asInt() > 0)
         return "episodes";
-      return "seasons";
+      return foundDirectly ? "tvshows" : "seasons";
     }
     return TranslateContent(scraper->Content());
   }
@@ -6408,7 +6427,7 @@ void CVideoDatabase::GetMusicVideoDirectorsByName(const CStdString& strSearch, C
   }
 }
 
-void CVideoDatabase::CleanDatabase(IVideoInfoScannerObserver* pObserver, const vector<int>* paths)
+void CVideoDatabase::CleanDatabase(IVideoInfoScannerObserver* pObserver, const set<int>* paths)
 {
   CGUIDialogProgress *progress=NULL;
   try
@@ -6432,8 +6451,8 @@ void CVideoDatabase::CleanDatabase(IVideoInfoScannerObserver* pObserver, const v
       }
 
       CStdString strPaths;
-      for (unsigned int i=0;i<paths->size();++i )
-        strPaths.Format("%s,%i",strPaths.Mid(0).c_str(),paths->at(i));
+      for (std::set<int>::const_iterator i = paths->begin(); i != paths->end(); ++i)
+        strPaths.AppendFormat(",%i",*i);
       sql = PrepareSQL("select * from files,path where files.idPath=path.idPath and path.idPath in (%s)",strPaths.Mid(1).c_str());
     }
     else
@@ -6475,6 +6494,10 @@ void CVideoDatabase::CleanDatabase(IVideoInfoScannerObserver* pObserver, const v
 
     int total = m_pDS->num_rows();
     int current = 0;
+
+    bool bIsSource;
+    VECSOURCES *pShares = g_settings.GetSourcesFromType("video");
+
     while (!m_pDS->eof())
     {
       CStdString path = m_pDS->fv("path.strPath").get_asString();
@@ -6486,10 +6509,6 @@ void CVideoDatabase::CleanDatabase(IVideoInfoScannerObserver* pObserver, const v
       if (URIUtils::IsStack(fullPath))
         fullPath = CStackDirectory::GetFirstStackedFile(fullPath);
 
-      // check for deletion
-      bool bIsSource;
-      VECSOURCES *pShares = g_settings.GetSourcesFromType("video");
-
       // check if we have a internet related file that is part of a media source
       if (URIUtils::IsInternetStream(fullPath, true) && CUtil::GetMatchingSource(fullPath, *pShares, bIsSource) > -1)
       {
@@ -6664,20 +6683,19 @@ void CVideoDatabase::CleanDatabase(IVideoInfoScannerObserver* pObserver, const v
       m_pDS->exec(sql.c_str());
     }
 
-    CLog::Log(LOGDEBUG, "%s: Cleaning paths that don't exist and don't have content set...", __FUNCTION__);
-    sql = "select * from path where strContent not like ''";
+    CLog::Log(LOGDEBUG, "%s: Cleaning paths that don't exist and have content set...", __FUNCTION__);
+    sql = "select * from path where strContent != ''";
     m_pDS->query(sql.c_str());
     CStdString strIds;
     while (!m_pDS->eof())
     {
       if (!CDirectory::Exists(m_pDS->fv("path.strPath").get_asString()))
-        strIds.Format("%s %i,",strIds.Mid(0),m_pDS->fv("path.idPath").get_asInt()); // mid since we cannot format the same string
+        strIds.AppendFormat("%i,", m_pDS->fv("path.idPath").get_asInt());
       m_pDS->next();
     }
     m_pDS->close();
     if (!strIds.IsEmpty())
     {
-      strIds.TrimLeft(" ");
       strIds.TrimRight(",");
       sql = PrepareSQL("delete from path where idPath in (%s)",strIds.c_str());
       m_pDS->exec(sql.c_str());
@@ -7325,7 +7343,7 @@ void CVideoDatabase::ExportToXML(const CStdString &path, bool singleFiles /* = f
 
         if (images && !bSkip)
         {
-          CStdString cachedThumb(GetCachedThumb(item));
+          CStdString cachedThumb(GetCachedThumb(CFileItem(episode)));
           CStdString savedThumb(saveItem.GetTBNFile());
           if (!cachedThumb.IsEmpty() && (overwrite || !CFile::Exists(savedThumb, false)))
             if (!CFile::Cache(cachedThumb, savedThumb))
@@ -7413,6 +7431,10 @@ void CVideoDatabase::ExportActorThumbs(const CStdString &strDir, const CVideoInf
 CStdString CVideoDatabase::GetCachedThumb(const CFileItem& item) const
 {
   CStdString cachedThumb(item.GetCachedVideoThumb());
+  if (item.HasVideoInfoTag() && !item.m_bIsFolder  &&
+      item.GetVideoInfoTag()->m_iEpisode > -1 &&
+      CFile::Exists(item.GetCachedEpisodeThumb()))
+    cachedThumb = item.GetCachedEpisodeThumb();
   if (!CFile::Exists(cachedThumb) && g_advancedSettings.m_bVideoLibraryExportAutoThumbs)
   {
     CStdString strPath, strFileName;
@@ -7533,7 +7555,7 @@ void CVideoDatabase::ImportFromXML(const CStdString &path)
         scanner.AddVideo(&item, CONTENT_MOVIES, useFolders);
         SetPlayCount(item, info.m_playCount, info.m_lastPlayed);
         CStdString strFileName(info.m_strTitle);
-        if (GetExportVersion() >= 1 && info.m_iYear > 0)
+        if (iVersion >= 1 && info.m_iYear > 0)
           strFileName.AppendFormat("_%i", info.m_iYear);
         CStdString file(GetSafeFile(moviesDir, strFileName));
         CFile::Cache(file + ".tbn", item.GetCachedVideoThumb());
@@ -7550,7 +7572,7 @@ void CVideoDatabase::ImportFromXML(const CStdString &path)
         scanner.AddVideo(&item, CONTENT_MUSICVIDEOS, useFolders);
         SetPlayCount(item, info.m_playCount, info.m_lastPlayed);
         CStdString strFileName(info.m_strArtist + "." + info.m_strTitle);
-        if (GetExportVersion() >= 1 && info.m_iYear > 0)
+        if (iVersion >= 1 && info.m_iYear > 0)
           strFileName.AppendFormat("_%i", info.m_iYear);
         CStdString file(GetSafeFile(musicvideosDir, strFileName));
         CFile::Cache(file + ".tbn", item.GetCachedVideoThumb());
@@ -7690,7 +7712,8 @@ bool CVideoDatabase::ArbitraryExec(const CStdString& strExec)
 
 void CVideoDatabase::ConstructPath(CStdString& strDest, const CStdString& strPath, const CStdString& strFileName)
 {
-  if (URIUtils::IsStack(strFileName) || URIUtils::IsInArchive(strFileName))
+  if (URIUtils::IsStack(strFileName) || 
+      URIUtils::IsInArchive(strFileName) || URIUtils::IsPlugin(strPath))
     strDest = strFileName;
   else
     URIUtils::AddFileToFolder(strPath, strFileName, strDest);
@@ -7703,6 +7726,12 @@ void CVideoDatabase::SplitPath(const CStdString& strFileNameAndPath, CStdString&
     URIUtils::GetParentPath(strFileNameAndPath,strPath);
     strFileName = strFileNameAndPath;
   }
+  else if (URIUtils::IsPlugin(strFileNameAndPath))
+  {
+    CURL url(strFileNameAndPath);
+    strPath = url.GetWithoutFilename();
+    strFileName = strFileNameAndPath;
+  }
   else
     URIUtils::Split(strFileNameAndPath,strPath, strFileName);
 }
index 1d6cae4..367d882 100644 (file)
@@ -380,11 +380,11 @@ public:
   int GetTvShowForEpisode(int idEpisode);
 
   bool LoadVideoInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details);
-  void GetMovieInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMovie = -1);
-  void GetTvShowInfo(const CStdString& strPath, CVideoInfoTag& details, int idTvShow = -1);
+  bool GetMovieInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMovie = -1);
+  bool GetTvShowInfo(const CStdString& strPath, CVideoInfoTag& details, int idTvShow = -1);
   bool GetEpisodeInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idEpisode = -1);
-  void GetMusicVideoInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMVideo=-1);
-  void GetSetInfo(int idSet, CVideoInfoTag& details);
+  bool GetMusicVideoInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMVideo=-1);
+  bool GetSetInfo(int idSet, CVideoInfoTag& details);
 
   int GetPathId(const CStdString& strPath);
   int GetTvShowId(const CStdString& strPath);
@@ -471,7 +471,7 @@ public:
   bool SetPathHash(const CStdString &path, const CStdString &hash);
   bool GetPathHash(const CStdString &path, CStdString &hash);
   bool GetPaths(std::set<CStdString> &paths);
-  bool GetPathsForTvShow(int idShow, std::vector<int>& paths);
+  bool GetPathsForTvShow(int idShow, std::set<int>& paths);
 
   /*! \brief retrieve subpaths of a given path.  Assumes a heirarchical folder structure
    \param basepath the root path to retrieve subpaths for
@@ -548,7 +548,7 @@ public:
   bool HasContent(VIDEODB_CONTENT_TYPE type);
   bool HasSets() const;
 
-  void CleanDatabase(VIDEO::IVideoInfoScannerObserver* pObserver=NULL, const std::vector<int>* paths=NULL);
+  void CleanDatabase(VIDEO::IVideoInfoScannerObserver* pObserver=NULL, const std::set<int>* paths=NULL);
 
   /*! \brief Add a file to the database, if necessary
    If the file is already in the database, we simply return its id.
@@ -688,7 +688,7 @@ private:
   /*! \brief (Re)Create the generic database views for movies, tvshows,
      episodes and music videos
    */
-  void CreateViews();
+  virtual void CreateViews();
 
   /*! \brief Run a query on the main dataset and return the number of rows
    If no rows are found we close the dataset and return 0.
@@ -698,16 +698,17 @@ private:
   int RunQuery(const CStdString &sql);
 
   /*! \brief Update routine for base path of videos
-   Only required for videodb version < 44
+   Only required for videodb version < 59
    \param table the table to update
    \param id the primary id in the given table
    \param column the basepath column to update
    \param shows whether we're fetching shows (defaults to false)
+   \param where restrict updating of items that match the where clause
    */
-  void UpdateBasePath(const char *table, const char *id, int column, bool shows = false);
+  void UpdateBasePath(const char *table, const char *id, int column, bool shows = false, const CStdString &where = "");
 
   /*! \brief Update routine for base path id of videos
-   Only required for videodb version < 52
+   Only required for videodb version < 59
    \param table the table to update
    \param id the primary id in the given table
    \param column the column of the basepath
@@ -721,7 +722,7 @@ private:
    */
   bool LookupByFolders(const CStdString &path, bool shows = false);
 
-  virtual int GetMinVersion() const { return 56; };
+  virtual int GetMinVersion() const { return 60; };
   virtual int GetExportVersion() const { return 1; };
   const char *GetBaseDBName() const { return "MyVideos"; };
 
index 89d0503..3185d2b 100644 (file)
@@ -23,7 +23,6 @@
 #include "Util.h"
 #include "utils/XMLUtils.h"
 #include "utils/RegExp.h"
-#include "utils/ScraperParser.h"
 #include "NfoFile.h"
 #include "dialogs/GUIDialogProgress.h"
 #include "dialogs/GUIDialogOK.h"
index 28224c0..6c9320a 100644 (file)
@@ -36,6 +36,7 @@
 #include "dialogs/GUIDialogProgress.h"
 #include "dialogs/GUIDialogYesNo.h"
 #include "dialogs/GUIDialogOK.h"
+#include "interfaces/AnnouncementManager.h"
 #include "settings/AdvancedSettings.h"
 #include "settings/GUISettings.h"
 #include "settings/Settings.h"
@@ -211,7 +212,7 @@ namespace VIDEO
     if (CUtil::ExcludeFileOrFolder(strDirectory, regexps))
       return true;
 
-    bool ignoreFolder = !m_scanAll && settings.noupdate;
+    bool ignoreFolder = m_scanAll && settings.noupdate;
     if (content == CONTENT_NONE || ignoreFolder)
       return true;
 
@@ -246,7 +247,7 @@ namespace VIDEO
           if (hash.IsEmpty() && !dbHash.IsEmpty())
           {
             CLog::Log(LOGDEBUG, "VideoInfoScanner: Skipping dir '%s' as it's empty or doesn't exist - adding to clean list", strDirectory.c_str());
-            m_pathsToClean.push_back(m_database.GetPathId(strDirectory));
+            m_pathsToClean.insert(m_database.GetPathId(strDirectory));
           }
           else
             CLog::Log(LOGDEBUG, "VideoInfoScanner: Skipping dir '%s' due to no change", strDirectory.c_str());
@@ -295,13 +296,13 @@ namespace VIDEO
         if (!m_bStop && (content == CONTENT_MOVIES || content == CONTENT_MUSICVIDEOS))
         {
           m_database.SetPathHash(strDirectory, hash);
-          m_pathsToClean.push_back(m_database.GetPathId(strDirectory));
+          m_pathsToClean.insert(m_database.GetPathId(strDirectory));
           CLog::Log(LOGDEBUG, "VideoInfoScanner: Finished adding information from dir %s", strDirectory.c_str());
         }
       }
       else
       {
-        m_pathsToClean.push_back(m_database.GetPathId(strDirectory));
+        m_pathsToClean.insert(m_database.GetPathId(strDirectory));
         CLog::Log(LOGDEBUG, "VideoInfoScanner: No (new) information was found in dir %s", strDirectory.c_str());
       }
     }
@@ -416,7 +417,7 @@ namespace VIDEO
       for (vector<int>::iterator i = libPaths.begin(); i < libPaths.end(); ++i)
       {
         if (find(seenPaths.begin(), seenPaths.end(), *i) == seenPaths.end())
-          m_pathsToClean.push_back(*i);
+          m_pathsToClean.insert(*i);
       }
     }
     if(pDlgProgress)
@@ -512,7 +513,8 @@ namespace VIDEO
 
   INFO_RET CVideoInfoScanner::RetrieveInfoForMovie(CFileItemPtr pItem, bool bDirNames, ScraperPtr &info2, bool useLocal, CScraperUrl* pURL, CGUIDialogProgress* pDlgProgress)
   {
-    if (pItem->m_bIsFolder || !pItem->IsVideo() || pItem->IsNFO() || pItem->IsPlayList())
+    if (pItem->m_bIsFolder || !pItem->IsVideo() || pItem->IsNFO() ||
+       (pItem->IsPlayList() && !URIUtils::GetExtension(pItem->GetPath()).Equals(".strm")))
       return INFO_NOT_NEEDED;
 
     if (ProgressCancelled(pDlgProgress, 198, pItem->GetLabel()))
@@ -559,7 +561,8 @@ namespace VIDEO
 
   INFO_RET CVideoInfoScanner::RetrieveInfoForMusicVideo(CFileItemPtr pItem, bool bDirNames, ScraperPtr &info2, bool useLocal, CScraperUrl* pURL, CGUIDialogProgress* pDlgProgress)
   {
-    if (pItem->m_bIsFolder || !pItem->IsVideo() || pItem->IsNFO() || pItem->IsPlayList())
+    if (pItem->m_bIsFolder || !pItem->IsVideo() || pItem->IsNFO() ||
+       (pItem->IsPlayList() && !URIUtils::GetExtension(pItem->GetPath()).Equals(".strm")))
       return INFO_NOT_NEEDED;
 
     if (ProgressCancelled(pDlgProgress, 20394, pItem->GetLabel()))
@@ -648,7 +651,7 @@ namespace VIDEO
         }
         return;
       }
-      m_pathsToClean.push_back(m_database.GetPathId(item->GetPath()));
+      m_pathsToClean.insert(m_database.GetPathId(item->GetPath()));
       m_database.GetPathsForTvShow(m_database.GetTvShowId(item->GetPath()), m_pathsToClean);
       item->SetProperty("hash", hash);
     }
@@ -1012,13 +1015,22 @@ namespace VIDEO
     if (!m_database.Open())
       return -1;
 
-    CVideoInfoTag *tag = pItem->GetVideoInfoTag();
-    CStdString strTitle(tag->m_strTitle);
+    CVideoInfoTag &movieDetails = *pItem->GetVideoInfoTag();
+    if (movieDetails.m_basePath.IsEmpty())
+      movieDetails.m_basePath = pItem->GetBaseMoviePath(videoFolder);
+    movieDetails.m_parentPathID = m_database.AddPath(URIUtils::GetParentPath(movieDetails.m_basePath));
+
+    movieDetails.m_strFileNameAndPath = pItem->GetPath();
+
+    if (pItem->m_bIsFolder)
+      movieDetails.m_strPath = pItem->GetPath();
+
+    CStdString strTitle(movieDetails.m_strTitle);
 
     if (idShow > -1 && content == CONTENT_TVSHOWS)
     {
       CStdString strShowTitle = m_database.GetTvShowTitleById(idShow);
-      strTitle.Format("%s - %ix%i - %s", strShowTitle.c_str(), tag->m_iSeason, tag->m_iEpisode, tag->m_strTitle.c_str());
+      strTitle.Format("%s - %ix%i - %s", strShowTitle.c_str(), movieDetails.m_iSeason, movieDetails.m_iEpisode, strTitle.c_str());
     }
 
     if (m_pObserver)
@@ -1027,11 +1039,6 @@ namespace VIDEO
     CLog::Log(LOGDEBUG, "VideoInfoScanner: Adding new item to %s:%s", TranslateContent(content).c_str(), pItem->GetPath().c_str());
     long lResult = -1;
 
-    CVideoInfoTag &movieDetails = *pItem->GetVideoInfoTag();
-    if (movieDetails.m_basePath.IsEmpty())
-      movieDetails.m_basePath = pItem->GetBaseMoviePath(videoFolder);
-    movieDetails.m_parentPathID = m_database.AddPath(URIUtils::GetParentPath(movieDetails.m_basePath));
-
     if (content == CONTENT_MOVIES)
     {
       // find local trailer first
@@ -1156,6 +1163,13 @@ namespace VIDEO
       FetchActorThumbs(movieDetails.m_cast, parentDir);
     if (bApplyToDir)
       ApplyThumbToFolder(parentDir, cachedThumb);
+
+    CFileItemPtr itemCopy = CFileItemPtr(new CFileItem(*pItem));
+    // Hack to make sure CVideoInfoTag::m_strShowTitle is set for tvshows
+    // to make sure CAnnouncementManager provides the correct type for the item
+    if (content == CONTENT_TVSHOWS && !isEpisode && itemCopy->HasVideoInfoTag())
+      itemCopy->GetVideoInfoTag()->m_strShowTitle = itemCopy->GetVideoInfoTag()->m_strTitle;
+    ANNOUNCEMENT::CAnnouncementManager::Announce(ANNOUNCEMENT::VideoLibrary, "xbmc", "OnUpdate", itemCopy);
   }
 
   void CVideoInfoScanner::DownloadImage(const CStdString &url, const CStdString &destination, bool asThumb /*= true */, CGUIDialogProgress *progress /*= NULL */)
@@ -1386,8 +1400,8 @@ namespace VIDEO
       CStdString strPath;
       URIUtils::GetDirectory(item->GetPath(), strPath);
 
-      if (bGrabAny)
-      { // looking up by folder name - movie.nfo takes priority
+      if (bGrabAny && !item->IsStack())
+      { // looking up by folder name - movie.nfo takes priority - but not for stacked items (handled below)
         nfoFile = URIUtils::AddFileToFolder(strPath, "movie.nfo");
         if (CFile::Exists(nfoFile))
           return nfoFile;
@@ -1436,17 +1450,10 @@ namespace VIDEO
         }
       }
 
-      if (!nfoFile.IsEmpty() && item->IsOpticalMediaFile())
+      if (nfoFile.IsEmpty() && item->IsOpticalMediaFile())
       {
-        CStdString parent(URIUtils::GetParentPath(item->GetPath()));
-        CStdString parentFolder(parent);
-        URIUtils::RemoveSlashAtEnd(parentFolder);
-        if (parentFolder == "VIDEO_TS" || parentFolder == "BDMV")
-        { // check for movie.nfo in the parent folder
-          parent = URIUtils::GetParentPath(parent);
-          CFileItem parentDirectory(parent, true);
-          nfoFile = GetnfoFile(&parentDirectory, true);
-        }
+        CFileItem parentDirectory(item->GetLocalMetadataPath(), true);
+        nfoFile = GetnfoFile(&parentDirectory, true);
       }
     }
     // folders (or stacked dvds) can take any nfo file if there's a unique one
@@ -1485,10 +1492,11 @@ namespace VIDEO
   bool CVideoInfoScanner::GetDetails(CFileItem *pItem, CScraperUrl &url, const ScraperPtr& scraper, CNfoFile *nfoFile, CGUIDialogProgress* pDialog /* = NULL */)
   {
     CVideoInfoTag movieDetails;
-    movieDetails.m_strFileNameAndPath = pItem->GetPath();
 
     CVideoInfoDownloader imdb(scraper);
-    if ( imdb.GetDetails(url, movieDetails, pDialog) )
+    bool ret = imdb.GetDetails(url, movieDetails, pDialog);
+
+    if (ret)
     {
       if (nfoFile)
         nfoFile->GetDetails(movieDetails,NULL,true);
index 57e2965..2af3ea5 100644 (file)
@@ -252,7 +252,7 @@ namespace VIDEO
     CVideoDatabase m_database;
     std::set<CStdString> m_pathsToScan;
     std::set<CStdString> m_pathsToCount;
-    std::vector<int> m_pathsToClean;
+    std::set<int> m_pathsToClean;
     CNfoFile m_nfoReader;
   };
 }
index 41bbb9a..216d4fb 100644 (file)
@@ -56,6 +56,7 @@ void CVideoInfoTag::Reset()
   m_strPath.clear();
   m_strIMDBNumber.clear();
   m_strMPAARating.clear();
+  m_strFileNameAndPath.clear();
   m_strPremiered.clear();
   m_strStatus.clear();
   m_strProductionCode.clear();
@@ -249,16 +250,13 @@ bool CVideoInfoTag::Save(TiXmlNode *node, const CStdString &tag, bool savePathIn
   return true;
 }
 
-bool CVideoInfoTag::Load(const TiXmlElement *movie, bool chained /* = false */,
-                         bool prefix /* = false */)
+bool CVideoInfoTag::Load(const TiXmlElement *element, bool append, bool prioritise)
 {
-  if (!movie) return false;
-
-  // reset our details if we aren't chained.
-  if (!chained) Reset();
-
-  ParseNative(movie,prefix);
-
+  if (!element)
+    return false;
+  if (!append)
+    Reset();
+  ParseNative(element, prioritise);
   return true;
 }
 
@@ -473,7 +471,7 @@ void CVideoInfoTag::Serialize(CVariant& value)
   value["album"] = m_strAlbum;
   value["artist"] = m_strArtist;
   value["playcount"] = m_playCount;
-  value["lastPlayed"] = m_lastPlayed;
+  value["lastplayed"] = m_lastPlayed;
   value["top250"] = m_iTop250;
   value["year"] = m_iYear;
   value["season"] = m_iSeason;
@@ -507,7 +505,7 @@ const CStdString CVideoInfoTag::GetCast(bool bIncludeRole /*= false*/) const
   return strLabel.TrimRight("\n");
 }
 
-void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prefix)
+void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
 {
   XMLUtils::GetString(movie, "title", m_strTitle);
   XMLUtils::GetString(movie, "originaltitle", m_strOriginalTitle);
@@ -562,7 +560,7 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prefix)
   while (thumb)
   {
     m_strPictureURL.ParseElement(thumb);
-    if (prefix)
+    if (prioritise)
     {
       CStdString temp;
       temp << *thumb;
@@ -571,8 +569,8 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prefix)
     thumb = thumb->NextSiblingElement("thumb");
   }
 
-  // prefix thumbs from nfos
-  if (prefix && iThumbCount && iThumbCount != m_strPictureURL.m_url.size())
+  // prioritise thumbs from nfos
+  if (prioritise && iThumbCount && iThumbCount != m_strPictureURL.m_url.size())
   {
     rotate(m_strPictureURL.m_url.begin(),
            m_strPictureURL.m_url.begin()+iThumbCount, 
@@ -580,14 +578,16 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prefix)
     m_strPictureURL.m_xml = xmlAdd;
   }
 
-  XMLUtils::GetAdditiveString(movie,"genre",g_advancedSettings.m_videoItemSeparator,m_strGenre);
-  XMLUtils::GetAdditiveString(movie,"country",g_advancedSettings.m_videoItemSeparator,m_strCountry);
-  XMLUtils::GetAdditiveString(movie,"credits",g_advancedSettings.m_videoItemSeparator,m_strWritingCredits);
-  XMLUtils::GetAdditiveString(movie,"director",g_advancedSettings.m_videoItemSeparator,m_strDirector);
-  XMLUtils::GetAdditiveString(movie,"showlink",g_advancedSettings.m_videoItemSeparator,m_strShowLink);
+  XMLUtils::GetAdditiveString(movie, "genre", g_advancedSettings.m_videoItemSeparator, m_strGenre, prioritise);
+  XMLUtils::GetAdditiveString(movie, "country", g_advancedSettings.m_videoItemSeparator, m_strCountry, prioritise);
+  XMLUtils::GetAdditiveString(movie, "credits", g_advancedSettings.m_videoItemSeparator, m_strWritingCredits, prioritise);
+  XMLUtils::GetAdditiveString(movie, "director", g_advancedSettings.m_videoItemSeparator, m_strDirector, prioritise);
+  XMLUtils::GetAdditiveString(movie, "showlink", g_advancedSettings.m_videoItemSeparator, m_strShowLink, prioritise);
 
   // cast
   const TiXmlElement* node = movie->FirstChildElement("actor");
+  if (node && node->FirstChild() && prioritise)
+    m_cast.clear();
   while (node)
   {
     const TiXmlNode *actor = node->FirstChild("name");
@@ -612,9 +612,9 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prefix)
     node = node->NextSiblingElement("actor");
   }
 
-  m_set.clear();
-  m_setId.clear();
   node = movie->FirstChildElement("set");
+  if (node && node->FirstChild() && prioritise)
+    m_set.clear();
   while (node)
   {
     if (node->FirstChild())
@@ -623,9 +623,11 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prefix)
     node = node->NextSiblingElement("set");
   }
 
-  XMLUtils::GetAdditiveString(movie,"studio",g_advancedSettings.m_videoItemSeparator,m_strStudio);
+  XMLUtils::GetAdditiveString(movie, "studio", g_advancedSettings.m_videoItemSeparator, m_strStudio, prioritise);
   // artists
   node = movie->FirstChildElement("artist");
+  if (node && node->FirstChild() && prioritise)
+    m_strArtist.clear();
   while (node)
   {
     const TiXmlNode* pNode = node->FirstChild("name");
@@ -638,14 +640,13 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prefix)
     {
       const char* clear=node->Attribute("clear");
       if (m_strArtist.IsEmpty() || (clear && stricmp(clear,"true")==0))
-        m_strArtist += pValue;
+        m_strArtist = pValue;
       else
         m_strArtist += g_advancedSettings.m_videoItemSeparator + pValue;
     }
     node = node->NextSiblingElement("artist");
   }
 
-  m_streamDetails.Reset();
   node = movie->FirstChildElement("fileinfo");
   if (node)
   {
@@ -706,8 +707,8 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prefix)
   const TiXmlElement *fanart = movie->FirstChildElement("fanart");
   if (fanart)
   {
-    // we prefix to handle mixed-mode nfo's with fanart set
-    if (prefix)
+    // we prioritise mixed-mode nfo's with fanart set
+    if (prioritise)
     {
       CStdString temp;
       temp << *fanart;
index 1e465b9..3ee238b 100644 (file)
@@ -43,7 +43,22 @@ class CVideoInfoTag : public IArchivable, public ISerializable
 public:
   CVideoInfoTag() { Reset(); };
   void Reset();
-  bool Load(const TiXmlElement *movie, bool chained = false, bool prefix=false);
+  /* \brief Load information to a videoinfotag from an XML element
+   There are three types of tags supported:
+    1. Single-value tags, such as <title>.  These are set if available, else are left untouched.
+    2. Additive tags, such as <set> or <genre>.  These are appended to or replaced (if available) based on the value
+       of the prioritise parameter.  In addition, a clear attribute is available in the XML to clear the current value prior
+       to appending.
+    3. Image tags such as <thumb> and <fanart>.  If the prioritise value is specified, any additional values are prepended
+       to the existing values.
+
+   \param element    the root XML element to parse.
+   \param append     whether information should be added to the existing tag, or whether it should be reset first.
+   \param prioritise if appending, whether additive tags should be prioritised (i.e. replace or prepend) over existing values. Defaults to false.
+
+   \sa ParseNative
+   */
+  bool Load(const TiXmlElement *element, bool append = false, bool prioritise = false);
   bool Save(TiXmlNode *node, const CStdString &tag, bool savePathInfo = true);
   virtual void Archive(CArchive& ar);
   virtual void Serialize(CVariant& value);
@@ -114,7 +129,14 @@ public:
   CBookmark m_resumePoint;
 
 private:
-  void ParseNative(const TiXmlElement* movie, bool prefix);
+  /* \brief Parse our native XML format for video info.
+   See Load for a description of the available tag types.
+
+   \param element    the root XML element to parse.
+   \param prioritise whether additive tags should be replaced (or prepended) by the content of the tags, or appended to.
+   \sa Load
+   */
+  void ParseNative(const TiXmlElement* element, bool prioritise);
 };
 
 typedef std::vector<CVideoInfoTag> VECMOVIES;
index 076dc3a..ea72ee8 100644 (file)
@@ -30,6 +30,7 @@
 #if defined(HAS_GLX) && defined(HAS_XRANDR)
   #include <sstream>
   #include <X11/extensions/Xrandr.h>
+  #include "windowing/WindowingFactory.h"
   #define NVSETTINGSCMD "nvidia-settings -nt -q RefreshRate3"
 #elif defined(__APPLE__) && !defined(__arm__)
   #include <QuartzCore/CVDisplayLink.h>
@@ -117,6 +118,7 @@ CVideoReferenceClock::CVideoReferenceClock()
 
 #if defined(HAS_GLX) && defined(HAS_XRANDR)
   m_Dpy = NULL;
+  m_UseNvSettings = true;
 #endif
 }
 
@@ -227,6 +229,8 @@ bool CVideoReferenceClock::SetupGLX()
   m_vInfo = NULL;
   m_Context = NULL;
   m_Window = 0;
+  m_pixmap = None;
+  m_glPixmap = None;
 
   CLog::Log(LOGDEBUG, "CVideoReferenceClock: Setting up GLX");
 
@@ -266,6 +270,14 @@ bool CVideoReferenceClock::SetupGLX()
     return false;
   }
 
+  CStdString Vendor = g_Windowing.GetRenderVendor();
+  Vendor.ToLower();
+  if (Vendor.compare(0, 3, "ati") == 0)
+  {
+    CLog::Log(LOGDEBUG, "CVideoReferenceClock: GL_VENDOR: %s, using ati workaround", Vendor.c_str());
+    m_bIsATI = true;
+  }
+
   m_vInfo = glXChooseVisual(m_Dpy, DefaultScreen(m_Dpy), singleBufferAttributes);
   if (!m_vInfo)
   {
@@ -273,13 +285,26 @@ bool CVideoReferenceClock::SetupGLX()
     return false;
   }
 
-  Swa.border_pixel = 0;
-  Swa.event_mask = StructureNotifyMask;
-  Swa.colormap = XCreateColormap(m_Dpy, RootWindow(m_Dpy, m_vInfo->screen), m_vInfo->visual, AllocNone );
-  SwaMask = CWBorderPixel | CWColormap | CWEventMask;
+  if (!m_bIsATI)
+  {
+    Swa.border_pixel = 0;
+    Swa.event_mask = StructureNotifyMask;
+    Swa.colormap = XCreateColormap(m_Dpy, RootWindow(m_Dpy, m_vInfo->screen), m_vInfo->visual, AllocNone );
+    SwaMask = CWBorderPixel | CWColormap | CWEventMask;
 
-  m_Window = XCreateWindow(m_Dpy, RootWindow(m_Dpy, m_vInfo->screen), 0, 0, 256, 256, 0,
+    m_Window = XCreateWindow(m_Dpy, RootWindow(m_Dpy, m_vInfo->screen), 0, 0, 256, 256, 0,
                            m_vInfo->depth, InputOutput, m_vInfo->visual, SwaMask, &Swa);
+  }
+  else
+  {
+    m_pixmap = XCreatePixmap(m_Dpy, DefaultRootWindow(m_Dpy), 256, 256, m_vInfo->depth);
+    if (!m_pixmap)
+    {
+      CLog::Log(LOGDEBUG, "CVideoReferenceClock: unable to create pixmap");
+      return false;
+    }
+    m_glPixmap = glXCreateGLXPixmap(m_Dpy, m_vInfo, m_pixmap);
+  }
 
   m_Context = glXCreateContext(m_Dpy, m_vInfo, NULL, True);
   if (!m_Context)
@@ -288,25 +313,32 @@ bool CVideoReferenceClock::SetupGLX()
     return false;
   }
 
-  ReturnV = glXMakeCurrent(m_Dpy, m_Window, m_Context);
+  if (!m_bIsATI)
+    ReturnV = glXMakeCurrent(m_Dpy, m_Window, m_Context);
+  else
+    ReturnV = glXMakeCurrent(m_Dpy, m_glPixmap, m_Context);
+
   if (ReturnV != True)
   {
     CLog::Log(LOGDEBUG, "CVideoReferenceClock: glXMakeCurrent returned %i", ReturnV);
     return false;
   }
 
-  m_glXWaitVideoSyncSGI = (int (*)(int, int, unsigned int*))glXGetProcAddress((const GLubyte*)"glXWaitVideoSyncSGI");
-  if (!m_glXWaitVideoSyncSGI)
+  if (!m_bIsATI)
   {
-    CLog::Log(LOGDEBUG, "CVideoReferenceClock: glXWaitVideoSyncSGI not found");
-    return false;
-  }
+    m_glXWaitVideoSyncSGI = (int (*)(int, int, unsigned int*))glXGetProcAddress((const GLubyte*)"glXWaitVideoSyncSGI");
+    if (!m_glXWaitVideoSyncSGI)
+    {
+      CLog::Log(LOGDEBUG, "CVideoReferenceClock: glXWaitVideoSyncSGI not found");
+      return false;
+    }
 
-  ReturnV = m_glXWaitVideoSyncSGI(2, 0, &GlxTest);
-  if (ReturnV)
-  {
-    CLog::Log(LOGDEBUG, "CVideoReferenceClock: glXWaitVideoSyncSGI returned %i", ReturnV);
-    return false;
+    ReturnV = m_glXWaitVideoSyncSGI(2, 0, &GlxTest);
+    if (ReturnV)
+    {
+      CLog::Log(LOGDEBUG, "CVideoReferenceClock: glXWaitVideoSyncSGI returned %i", ReturnV);
+      return false;
+    }
   }
 
   m_glXGetVideoSyncSGI = (int (*)(unsigned int*))glXGetProcAddress((const GLubyte*)"glXGetVideoSyncSGI");
@@ -344,9 +376,12 @@ bool CVideoReferenceClock::ParseNvSettings(int& RefreshRate)
 {
   double fRefreshRate;
   char   Buff[255];
+  int    buffpos;
   int    ReturnV;
   struct lconv *Locale = localeconv();
   FILE*  NvSettings;
+  int    fd;
+  int64_t now;
 
   const char* VendorPtr = (const char*)glGetString(GL_VENDOR);
   if (!VendorPtr)
@@ -370,17 +405,75 @@ bool CVideoReferenceClock::ParseNvSettings(int& RefreshRate)
     return false;
   }
 
-  ReturnV = fscanf(NvSettings, "%254[^\n]", Buff);
-  pclose(NvSettings);
-  if (ReturnV != 1)
+  fd = fileno(NvSettings);
+  if (fd == -1)
+  {
+    CLog::Log(LOGDEBUG, "CVideoReferenceClock: unable to get nvidia-settings file descriptor: %s", strerror(errno));
+    pclose(NvSettings);
+    return false;
+  }
+
+  now = CurrentHostCounter();
+  buffpos = 0;
+  while (CurrentHostCounter() - now < CurrentHostFrequency() * 5)
+  {
+    fd_set set;
+    FD_ZERO(&set);
+    FD_SET(fd, &set);
+    struct timeval timeout = {1, 0};
+    ReturnV = select(fd + 1, &set, NULL, NULL, &timeout);
+    if (ReturnV == -1)
+    {
+      CLog::Log(LOGDEBUG, "CVideoReferenceClock: select failed on %s: %s", NVSETTINGSCMD, strerror(errno));
+      pclose(NvSettings);
+      return false;
+    }
+    else if (FD_ISSET(fd, &set))
+    {
+      ReturnV = read(fd, Buff + buffpos, (int)sizeof(Buff) - buffpos);
+      if (ReturnV == -1)
+      {
+        CLog::Log(LOGDEBUG, "CVideoReferenceClock: read failed on %s: %s", NVSETTINGSCMD, strerror(errno));
+        pclose(NvSettings);
+        return false;
+      }
+      else if (ReturnV > 0)
+      {
+        buffpos += ReturnV;
+        if (buffpos >= (int)sizeof(Buff) - 1)
+          break;
+      }
+      else
+      {
+        break;
+      }
+    }
+  }
+
+  if (buffpos <= 0)
   {
     CLog::Log(LOGDEBUG, "CVideoReferenceClock: %s produced no output", NVSETTINGSCMD);
+    //calling pclose() here might hang
+    //what should be done instead is fork, call nvidia-settings
+    //then kill the process if it hangs
     return false;
   }
+  else if (buffpos > (int)sizeof(Buff) - 1)
+  {
+    buffpos = sizeof(Buff) - 1;
+    pclose(NvSettings);
+  }
+  Buff[buffpos] = 0;
 
   CLog::Log(LOGDEBUG, "CVideoReferenceClock: output of %s: %s", NVSETTINGSCMD, Buff);
 
-  for (int i = 0; i < 255 && Buff[i]; i++)
+  if (!strchr(Buff, '\n'))
+  {
+    CLog::Log(LOGDEBUG, "CVideoReferenceClock: %s incomplete output (no newline)", NVSETTINGSCMD);
+    return false;
+  }
+
+  for (int i = 0; i < buffpos; i++)
   {
       //workaround for locale mismatch
     if (Buff[i] == '.' || Buff[i] == ',')
@@ -417,19 +510,6 @@ void CVideoReferenceClock::CleanupGLX()
 {
   CLog::Log(LOGDEBUG, "CVideoReferenceClock: Cleaning up GLX");
 
-  bool AtiWorkaround = false;
-  const char* VendorPtr = (const char*)glGetString(GL_VENDOR);
-  if (VendorPtr)
-  {
-    CStdString Vendor = VendorPtr;
-    Vendor.ToLower();
-    if (Vendor.compare(0, 3, "ati") == 0)
-    {
-      CLog::Log(LOGDEBUG, "CVideoReferenceClock: GL_VENDOR: %s, using ati dpy workaround", VendorPtr);
-      AtiWorkaround = true;
-    }
-  }
-
   if (m_vInfo)
   {
     XFree(m_vInfo);
@@ -446,9 +526,19 @@ void CVideoReferenceClock::CleanupGLX()
     XDestroyWindow(m_Dpy, m_Window);
     m_Window = 0;
   }
+  if (m_glPixmap)
+  {
+    glXDestroyPixmap(m_Dpy, m_glPixmap);
+    m_glPixmap = None;
+  }
+  if (m_pixmap)
+  {
+    XFreePixmap(m_Dpy, m_pixmap);
+    m_pixmap = None;
+  }
 
   //ati saves the Display* in their libGL, if we close it here, we crash
-  if (m_Dpy && !AtiWorkaround)
+  if (m_Dpy && !m_bIsATI)
   {
     XCloseDisplay(m_Dpy);
     m_Dpy = NULL;
@@ -470,11 +560,59 @@ void CVideoReferenceClock::RunGLX()
   m_glXGetVideoSyncSGI(&VblankCount);
   PrevVblankCount = VblankCount;
 
+  uint64_t lastVblankTime = CurrentHostCounter();
+  int sleepTime, correction;
+  int integral = 0;
+
   while(!m_bStop)
   {
     //wait for the next vblank
-    ReturnV = m_glXWaitVideoSyncSGI(2, (VblankCount + 1) % 2, &VblankCount);
-    m_glXGetVideoSyncSGI(&VblankCount); //the vblank count returned by glXWaitVideoSyncSGI is not always correct
+    if (!m_bIsATI)
+    {
+      ReturnV = m_glXWaitVideoSyncSGI(2, (VblankCount + 1) % 2, &VblankCount);
+      m_glXGetVideoSyncSGI(&VblankCount); //the vblank count returned by glXWaitVideoSyncSGI is not always correct
+    }
+    else
+    {
+      // calculate sleep time in micro secs
+      // we start with 50% of interval
+      sleepTime = 500000LL / m_RefreshRate;
+
+      // correct sleepTime by time used for processing since last vblank
+      correction = (CurrentHostCounter() - lastVblankTime) * 1000000LL / m_SystemFrequency;
+      sleepTime -= correction;
+
+      // correct sleep time by integral term
+      // consider 10 cycles as desired
+      sleepTime += integral;
+
+      // clamp sleepTime to a min value of 30% of interval
+      // integral is already clamped to a max value
+      sleepTime = std::max(int(300000LL/m_RefreshRate), sleepTime);
+
+      unsigned int iterations = 0;
+      while (VblankCount == PrevVblankCount && !m_bStop)
+      {
+        usleep(sleepTime);
+        m_glXGetVideoSyncSGI(&VblankCount);
+        sleepTime = sleepTime > 200 ? sleepTime/2 : 100;
+        iterations++;
+      }
+      if (iterations > 10)
+        integral += 100;
+      else if (iterations < 10)
+        integral -= 100;
+
+      // clamp integral to an absolute value of 20% of interval
+      if (integral > 200000LL/m_RefreshRate)
+        integral = 200000LL/m_RefreshRate;
+      else if (integral < -200000LL/m_RefreshRate)
+        integral = -200000LL/m_RefreshRate;
+
+      lastVblankTime = CurrentHostCounter();
+      ReturnV = 0;
+    }
+
     Now = CurrentHostCounter();         //get the timestamp of this vblank
 
     if(ReturnV)
@@ -492,13 +630,14 @@ void CVideoReferenceClock::RunGLX()
       SingleLock.Leave();
       SendVblankSignal();
       UpdateRefreshrate();
-
       IsReset = false;
     }
-    else
+    else if (!m_bStop)
     {
       CLog::Log(LOGDEBUG, "CVideoReferenceClock: Vblank counter has reset");
 
+      integral = 0;
+
       //only try reattaching once
       if (IsReset)
         return;
@@ -513,7 +652,11 @@ void CVideoReferenceClock::RunGLX()
       }
 
       CLog::Log(LOGDEBUG, "CVideoReferenceClock: Attaching glX context");
-      ReturnV = glXMakeCurrent(m_Dpy, m_Window, m_Context);
+      if (!m_bIsATI)
+        ReturnV = glXMakeCurrent(m_Dpy, m_Window, m_Context);
+      else
+        ReturnV = glXMakeCurrent(m_Dpy, m_glPixmap, m_Context);
+
       if (ReturnV != True)
       {
         CLog::Log(LOGDEBUG, "CVideoReferenceClock: glXMakeCurrent returned %i", ReturnV);
@@ -1040,7 +1183,7 @@ bool CVideoReferenceClock::UpdateRefreshrate(bool Forced /*= false*/)
     return false;
 
   //the refreshrate can be wrong on nvidia drivers, so read it from nvidia-settings when it's available
-  if (m_UseNvSettings || Forced)
+  if (m_UseNvSettings)
   {
     int NvRefreshRate;
     //if this fails we can't get the refreshrate from nvidia-settings
index 9699cd4..465d313 100644 (file)
@@ -119,9 +119,12 @@ class CVideoReferenceClock : public CThread
     XVisualInfo *m_vInfo;
     Window       m_Window;
     GLXContext   m_Context;
+    Pixmap       m_pixmap;
+    GLXPixmap    m_glPixmap;
     int          m_RREventBase;
 
     bool         m_UseNvSettings;
+    bool         m_bIsATI;
 
 #elif defined(_WIN32) && defined(HAS_DX)
     bool   SetupD3D();
index 9202ea0..66eee83 100644 (file)
@@ -77,7 +77,7 @@ void CGUIDialogAudioSubtitleSettings::CreateSettings()
   // create our settings
   m_volume = g_settings.m_nVolumeLevel * 0.01f;
   AddSlider(AUDIO_SETTINGS_VOLUME, 13376, &m_volume, VOLUME_MINIMUM * 0.01f, (VOLUME_MAXIMUM - VOLUME_MINIMUM) * 0.0001f, VOLUME_MAXIMUM * 0.01f, FormatDecibel, false);
-  AddSlider(AUDIO_SETTINGS_VOLUME_AMPLIFICATION, 660, &g_settings.m_currentVideoSettings.m_VolumeAmplification, VOLUME_DRC_MINIMUM * 0.01f, (VOLUME_DRC_MAXIMUM - VOLUME_DRC_MINIMUM) / 3000.0f, VOLUME_DRC_MAXIMUM * 0.01f, FormatDecibel, false);
+  AddSlider(AUDIO_SETTINGS_VOLUME_AMPLIFICATION, 660, &g_settings.m_currentVideoSettings.m_VolumeAmplification, VOLUME_DRC_MINIMUM * 0.01f, (VOLUME_DRC_MAXIMUM - VOLUME_DRC_MINIMUM) / 6000.0f, VOLUME_DRC_MAXIMUM * 0.01f, FormatDecibel, false);
   if (g_application.m_pPlayer && g_application.m_pPlayer->IsPassthrough())
   {
     EnableSettings(AUDIO_SETTINGS_VOLUME,false);
index 61c123c..bfeabd5 100644 (file)
@@ -40,6 +40,7 @@
 #include "utils/URIUtils.h"
 #include "threads/SingleLock.h"
 #include "utils/log.h"
+#include "utils/Variant.h"
 
 using namespace std;
 
@@ -140,13 +141,17 @@ void CGUIDialogVideoBookmarks::Update()
   CBookmark resumemark;
 
   // open the d/b and retrieve the bookmarks for the current movie
+  CStdString path = g_application.CurrentFile();
+  if (g_application.CurrentFileItem().HasProperty("original_listitem_url") && 
+     !URIUtils::IsVideoDb(g_application.CurrentFileItem().GetProperty("original_listitem_url").asString()))
+    path = g_application.CurrentFileItem().GetProperty("original_listitem_url").asString();
   CVideoDatabase videoDatabase;
   videoDatabase.Open();
-  videoDatabase.GetBookMarksForFile(g_application.CurrentFile(), m_bookmarks);
-  videoDatabase.GetBookMarksForFile(g_application.CurrentFile(), m_bookmarks, CBookmark::EPISODE, true);
+  videoDatabase.GetBookMarksForFile(path, m_bookmarks);
+  videoDatabase.GetBookMarksForFile(path, m_bookmarks, CBookmark::EPISODE, true);
   /* push in the resume mark first */
-  if( videoDatabase.GetResumeBookMark(g_application.CurrentFile(), resumemark) )
-    m_bookmarks.insert(m_bookmarks.begin(), resumemark);
+  if( videoDatabase.GetResumeBookMark(path, resumemark) )
+    m_bookmarks.push_back(resumemark);
 
   if (g_application.CurrentFileItem().HasVideoInfoTag() && g_application.CurrentFileItem().GetVideoInfoTag()->m_iEpisode > -1)
   {
@@ -215,9 +220,13 @@ void CGUIDialogVideoBookmarks::ClearBookmarks()
 {
   CVideoDatabase videoDatabase;
   videoDatabase.Open();
-  videoDatabase.ClearBookMarksOfFile(g_application.CurrentFile(), CBookmark::STANDARD);
-  videoDatabase.ClearBookMarksOfFile(g_application.CurrentFile(), CBookmark::RESUME);
-  videoDatabase.ClearBookMarksOfFile(g_application.CurrentFile(), CBookmark::EPISODE);
+  CStdString path = g_application.CurrentFile();
+  if (g_application.CurrentFileItem().HasProperty("original_listitem_url") && 
+     !URIUtils::IsVideoDb(g_application.CurrentFileItem().GetProperty("original_listitem_url").asString()))
+    path = g_application.CurrentFileItem().GetProperty("original_listitem_url").asString();
+  videoDatabase.ClearBookMarksOfFile(path, CBookmark::STANDARD);
+  videoDatabase.ClearBookMarksOfFile(path, CBookmark::RESUME);
+  videoDatabase.ClearBookMarksOfFile(path, CBookmark::EPISODE);
   videoDatabase.Close();
   Update();
 }
@@ -273,7 +282,13 @@ void CGUIDialogVideoBookmarks::AddBookmark(CVideoInfoTag* tag)
   if (tag)
     videoDatabase.AddBookMarkForEpisode(*tag, bookmark);
   else
-    videoDatabase.AddBookMarkToFile(g_application.CurrentFile(), bookmark, CBookmark::STANDARD);
+  {
+    CStdString path = g_application.CurrentFile();
+    if (g_application.CurrentFileItem().HasProperty("original_listitem_url") && 
+       !URIUtils::IsVideoDb(g_application.CurrentFileItem().GetProperty("original_listitem_url").asString()))
+      path = g_application.CurrentFileItem().GetProperty("original_listitem_url").asString();
+    videoDatabase.AddBookMarkToFile(path, bookmark, CBookmark::STANDARD);
+  }
   videoDatabase.Close();
   Update();
 }
index d2e7386..a8daec9 100644 (file)
@@ -301,19 +301,9 @@ void CGUIDialogVideoInfo::SetMovie(const CFileItem *item)
           label.Format(g_localizeStrings.Get(20358), m_movieItem->GetVideoInfoTag()->m_iSeason);
         CFileItem season(label);
         season.m_bIsFolder = true;
-        // grab show path
-        CVideoDatabase db;
-        if (db.Open())
-        {
-          CFileItemList items;
-          CStdString where = db.PrepareSQL("where c%02d='%s'", VIDEODB_ID_TV_TITLE, m_movieItem->GetVideoInfoTag()->m_strShowTitle.c_str());
-          if (db.GetTvShowsByWhere("", where, items) && items.Size())
-            season.GetVideoInfoTag()->m_strPath = items[0]->GetVideoInfoTag()->m_strPath;
-          db.Close();
-        }
-        season.SetCachedSeasonThumb();
-        if (season.HasThumbnail())
-          m_movieItem->SetProperty("seasonthumb", season.GetThumbnailImage());
+        season.GetVideoInfoTag()->m_strPath = item->GetVideoInfoTag()->m_strShowPath;
+        if (CFile::Exists(season.GetCachedSeasonThumb()))
+          m_movieItem->SetProperty("seasonthumb", season.GetCachedSeasonThumb());
       }
     }
     else if (type == VIDEODB_CONTENT_MOVIES)
@@ -328,6 +318,7 @@ void CGUIDialogVideoInfo::SetMovie(const CFileItem *item)
         CStdString localTrailer = m_movieItem->FindTrailer();
         if (!localTrailer.IsEmpty())
         {
+          m_movieItem->GetVideoInfoTag()->m_strTrailer = localTrailer;
           CVideoDatabase database;
           if(database.Open())
           {
@@ -336,7 +327,6 @@ void CGUIDialogVideoInfo::SetMovie(const CFileItem *item)
                                VIDEODB_ID_TRAILER, VIDEODB_CONTENT_MOVIES);
             database.Close();
             CUtil::DeleteVideoDatabaseDirectoryCache();
-            m_movieItem->GetVideoInfoTag()->m_strTrailer = localTrailer;
           }
         }
       }
index e3363ef..402fbb9 100644 (file)
@@ -56,6 +56,11 @@ bool CGUIDialogVideoOSD::OnAction(const CAction &action)
     if (g_application.m_pPlayer != NULL && g_application.m_pPlayer->OnAction(action))
       return true;
   }
+  if (action.GetID() == ACTION_SHOW_OSD)
+  {
+    Close();
+    return true;
+  }
 
   return CGUIDialog::OnAction(action);
 }
index 486ae8a..4d77a03 100644 (file)
@@ -52,6 +52,7 @@
 #include "utils/TimeUtils.h"
 #include "XBDateTime.h"
 #include "input/ButtonTranslator.h"
+#include "windowing/WindowingFactory.h"
 
 #include <stdio.h>
 #ifdef __APPLE__
@@ -394,6 +395,9 @@ bool CGUIWindowFullScreen::OnAction(const CAction &action)
       if (g_application.m_pPlayer->GetAudioStreamCount() == 1)
         return true;
 
+      if(g_settings.m_currentVideoSettings.m_AudioStream < 0)
+        g_settings.m_currentVideoSettings.m_AudioStream = g_application.m_pPlayer->GetAudioStream();
+
       g_settings.m_currentVideoSettings.m_AudioStream++;
       if (g_settings.m_currentVideoSettings.m_AudioStream >= g_application.m_pPlayer->GetAudioStreamCount())
         g_settings.m_currentVideoSettings.m_AudioStream = 0;
@@ -867,7 +871,7 @@ void CGUIWindowFullScreen::FrameMove()
     int iResolution = g_graphicsContext.GetVideoResolution();
     {
       CStdString strStatus;
-      if (g_settings.m_ResInfo[iResolution].bFullScreen)
+      if (g_Windowing.IsFullScreen())
         strStatus.Format("%s %ix%i@%.2fHz - %s",
           g_localizeStrings.Get(13287), g_settings.m_ResInfo[iResolution].iWidth,
           g_settings.m_ResInfo[iResolution].iHeight, g_settings.m_ResInfo[iResolution].fRefreshRate,
index e2beed6..1f44df3 100644 (file)
@@ -46,7 +46,6 @@ public:
   virtual void OnSliderChange(void *data, CGUISliderControl *slider);
 protected:
   virtual EVENT_RESULT OnMouseEvent(const CPoint &point, const CMouseEvent &event);
-  virtual void OnDeinitWindow(int nextWindow) {}; // no out window animation for fullscreen video
 
 private:
   void RenderTTFSubtitles();
index f1559e7..07c0702 100644 (file)
@@ -64,6 +64,8 @@
 #include "utils/URIUtils.h"
 #include "GUIUserMessages.h"
 #include "addons/Skin.h"
+#include "storage/MediaManager.h"
+#include "Autorun.h"
 
 using namespace std;
 using namespace XFILE;
@@ -139,11 +141,13 @@ bool CGUIWindowVideoBase::OnMessage(CGUIMessage& message)
         UpdateButtons();
         Update( m_vecItems->GetPath() );
       }
+#if defined(HAS_DVD_DRIVE)
       else if (iControl == CONTROL_PLAY_DVD)
       {
         // play movie...
-        CUtil::PlayDVD();
+        MEDIA_DETECT::CAutorun::PlayDiscAskResume(g_mediaManager.TranslateDevicePath(""));
       }
+#endif
       else if (iControl == CONTROL_BTNTYPE)
       {
         CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_BTNTYPE);
@@ -258,7 +262,8 @@ void CGUIWindowVideoBase::OnInfo(CFileItem* pItem, const ADDON::ScraperPtr& scra
   if (!pItem)
     return;
 
-  if (pItem->IsParentFolder() || pItem->m_bIsShareOrDrive || pItem->GetPath().Equals("add"))
+  if (pItem->IsParentFolder() || pItem->m_bIsShareOrDrive || pItem->GetPath().Equals("add") ||
+     (pItem->IsPlayList() && !URIUtils::GetExtension(pItem->GetPath()).Equals(".strm")))
     return;
 
   // ShowIMDB can kill the item as this window can be closed while we do it,
@@ -273,7 +278,7 @@ void CGUIWindowVideoBase::OnInfo(CFileItem* pItem, const ADDON::ScraperPtr& scra
     if (item.m_bIsFolder && scraper && scraper->Content() != CONTENT_TVSHOWS)
     {
       CFileItemList items;
-      CDirectory::GetDirectory(item.GetPath(), items,"",true,false,DIR_CACHE_ONCE,true,true);
+      CDirectory::GetDirectory(item.GetPath(), items, g_settings.m_videoExtensions,true,false,DIR_CACHE_ONCE,true,true);
       items.Stack();
 
       // check for media files
@@ -369,21 +374,13 @@ bool CGUIWindowVideoBase::ShowIMDB(CFileItem *item, const ScraperPtr &info2)
 
     if (info->Content() == CONTENT_MOVIES)
     {
-      if (m_database.HasMovieInfo(item->GetPath()))
-      {
-        bHasInfo = true;
-        m_database.GetMovieInfo(item->GetPath(), movieDetails);
-      }
+      bHasInfo = m_database.GetMovieInfo(item->GetPath(), movieDetails);
     }
     if (info->Content() == CONTENT_TVSHOWS)
     {
       if (item->m_bIsFolder)
       {
-        if (m_database.HasTvShowInfo(item->GetPath()))
-        {
-          bHasInfo = true;
-          m_database.GetTvShowInfo(item->GetPath(), movieDetails);
-        }
+        bHasInfo = m_database.GetTvShowInfo(item->GetPath(), movieDetails);
       }
       else
       {
@@ -418,11 +415,7 @@ bool CGUIWindowVideoBase::ShowIMDB(CFileItem *item, const ScraperPtr &info2)
     }
     if (info->Content() == CONTENT_MUSICVIDEOS)
     {
-      if (m_database.HasMusicVideoInfo(item->GetPath()))
-      {
-        bHasInfo = true;
-        m_database.GetMusicVideoInfo(item->GetPath(), movieDetails);
-      }
+      bHasInfo = m_database.GetMusicVideoInfo(item->GetPath(), movieDetails);
     }
     m_database.Close();
   }
@@ -722,6 +715,7 @@ void CGUIWindowVideoBase::OnQueueItem(int iItem)
   }
 
   g_playlistPlayer.Add(PLAYLIST_VIDEO, queuedItems);
+  g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_VIDEO);
   // video does not auto play on queue like music
   m_viewControl.SetSelectedItem(iItem + 1);
 }
@@ -879,7 +873,8 @@ bool CGUIWindowVideoBase::OnSelect(int iItem)
 
   CFileItemPtr item = m_vecItems->Get(iItem);
 
-  if (!item->m_bIsFolder && item->GetPath() != "add")
+  CStdString path = item->GetPath();
+  if (!item->m_bIsFolder && path != "add" && path != "addons://more/video" && path.Left(19) != "newsmartplaylist://" && path.Left(14) != "newplaylist://")
     return OnFileAction(iItem, g_guiSettings.GetInt("myvideos.selectaction"));
 
   return CGUIMediaWindow::OnSelect(iItem);
@@ -888,6 +883,10 @@ bool CGUIWindowVideoBase::OnSelect(int iItem)
 bool CGUIWindowVideoBase::OnFileAction(int iItem, int action)
 {
   CFileItemPtr item = m_vecItems->Get(iItem);
+
+  // Reset the current start offset. The actual resume
+  // option is set in the switch, based on the action passed.
+  item->m_lStartOffset = 0;
   
   switch (action)
   {
@@ -944,7 +943,8 @@ bool CGUIWindowVideoBase::OnInfo(int iItem)
 
   CFileItemPtr item = m_vecItems->Get(iItem);
 
-  if (item->GetPath().Equals("add") || item->IsParentFolder())
+  if (item->GetPath().Equals("add") || item->IsParentFolder() ||
+     (item->IsPlayList() && !URIUtils::GetExtension(item->GetPath()).Equals(".strm")))
     return false;
 
   ADDON::ScraperPtr scraper;
@@ -1127,7 +1127,7 @@ void CGUIWindowVideoBase::GetContextButtons(int itemNumber, CContextButtons &but
       {
         buttons.Add(CONTEXT_BUTTON_RESUME_ITEM, GetResumeString(*(item.get())));     // Resume Video
       }
-      if (item->HasVideoInfoTag() && !item->m_bIsFolder && item->GetVideoInfoTag()->m_iEpisode > -1)
+      if (item->HasVideoInfoTag() && !item->m_bIsFolder && m_vecItems->Size() > 1 && itemNumber < m_vecItems->Size()-1)
       {
         buttons.Add(CONTEXT_BUTTON_PLAY_AND_QUEUE, 13412);
       }
@@ -1153,9 +1153,7 @@ bool CGUIWindowVideoBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
   {
   case CONTEXT_BUTTON_SET_CONTENT:
     {
-      SScanSettings settings;
-      ADDON::ScraperPtr info = m_database.GetScraperForPath(item->HasVideoInfoTag() ? item->GetVideoInfoTag()->m_strPath : item->GetPath(), settings);
-      OnAssignContent(item->GetPath(),0, info, settings);
+      OnAssignContent(item->HasVideoInfoTag() && !item->GetVideoInfoTag()->m_strPath.IsEmpty() ? item->GetVideoInfoTag()->m_strPath : item->GetPath());
       return true;
     }
   case CONTEXT_BUTTON_PLAY_PART:
@@ -1350,6 +1348,7 @@ bool CGUIWindowVideoBase::OnPlayMedia(int iItem)
     item.SetPath(pItem->GetVideoInfoTag()->m_strFileNameAndPath);
     item.SetProperty("original_listitem_url", pItem->GetPath());
   }
+  CLog::Log(LOGDEBUG, "%s %s", __FUNCTION__, item.GetPath().c_str());
 
   PlayMovie(&item);
 
@@ -1467,6 +1466,7 @@ void CGUIWindowVideoBase::OnDeleteItem(int iItem)
 
   OnDeleteItem(m_vecItems->Get(iItem));
 
+  m_vecItems->RemoveDiscCache(GetID());
   Update(m_vecItems->GetPath());
   m_viewControl.SetSelectedItem(iItem);
 }
@@ -1696,9 +1696,7 @@ bool CGUIWindowVideoBase::GetDirectory(const CStdString &strDirectory, CFileItem
     items.Add(newPlaylist);
   }
 
-  m_stackingAvailable = !(items.IsTuxBox() || items.IsPlugin() ||
-                          items.IsAddonsPath() || items.IsRSS() ||
-                          items.IsInternetStream() || items.IsVideoDb());
+  m_stackingAvailable = StackingAvailable(items);
   // we may also be in a tvshow files listing
   // (ideally this should be removed, and our stack regexps tidied up if necessary
   // No "normal" episodes should stack, and multi-parts should be supported)
@@ -1712,6 +1710,13 @@ bool CGUIWindowVideoBase::GetDirectory(const CStdString &strDirectory, CFileItem
   return bResult;
 }
 
+bool CGUIWindowVideoBase::StackingAvailable(const CFileItemList &items) const
+{
+  return !(items.IsTuxBox()         || items.IsPlugin()  ||
+           items.IsAddonsPath()     || items.IsRSS()     ||
+           items.IsInternetStream() || items.IsVideoDb());
+}
+
 void CGUIWindowVideoBase::OnPrepareFileItems(CFileItemList &items)
 {
   if (!items.GetPath().Equals("plugin://video/"))
@@ -1923,7 +1928,7 @@ int CGUIWindowVideoBase::GetScraperForItem(CFileItem *item, ADDON::ScraperPtr &i
   }
 
   bool foundDirectly = false;
-  info = m_database.GetScraperForPath(item->HasVideoInfoTag() ? item->GetVideoInfoTag()->m_strPath : item->GetPath(), settings, foundDirectly);
+  info = m_database.GetScraperForPath(item->HasVideoInfoTag() && !item->GetVideoInfoTag()->m_strPath.IsEmpty() ? item->GetVideoInfoTag()->m_strPath : item->GetPath(), settings, foundDirectly);
   return foundDirectly ? 1 : 0;
 }
 
@@ -1983,16 +1988,15 @@ bool CGUIWindowVideoBase::OnUnAssignContent(const CStdString &path, int label1,
   return false;
 }
 
-void CGUIWindowVideoBase::OnAssignContent(const CStdString &path, int iFound, ADDON::ScraperPtr& info, SScanSettings& settings)
+void CGUIWindowVideoBase::OnAssignContent(const CStdString &path)
 {
   bool bScan=false;
   CVideoDatabase db;
   db.Open();
-  if (iFound == 0)
-  {
-    info = db.GetScraperForPath(path, settings);
-  }
-  
+
+  SScanSettings settings;
+  ADDON::ScraperPtr info = db.GetScraperForPath(path, settings);
+
   ADDON::ScraperPtr info2(info);
   
   if (CGUIDialogContentSettings::Show(info, settings, bScan))
@@ -2006,14 +2010,14 @@ void CGUIWindowVideoBase::OnAssignContent(const CStdString &path, int iFound, AD
       if (OnUnAssignContent(path,20442,20443,20444))
         bScan = true;
     }
-    
-    db.SetScraperForPath(path,info,settings);
-    
-    if (bScan)
-    {
-      CGUIDialogVideoScan* pDialog = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
-      if (pDialog)
-        pDialog->StartScanning(path, true);
-    }
+  }
+
+  db.SetScraperForPath(path,info,settings);
+
+  if (bScan)
+  {
+    CGUIDialogVideoScan* pDialog = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
+    if (pDialog)
+      pDialog->StartScanning(path, true);
   }
 }
index 348d169..01cda2c 100644 (file)
@@ -60,7 +60,12 @@ public:
    */
   static void AppendAndClearSearchItems(CFileItemList &searchItems, const CStdString &prependLabel, CFileItemList &results);
 
-  static void OnAssignContent(const CStdString &path, int iFound, ADDON::ScraperPtr& scraper, VIDEO::SScanSettings& settings);
+  /*! \brief Prompt the user for assigning content to a path.
+   Based on changes, we then call OnUnassignContent, update or refresh scraper information in the database
+   and optionally start a scan
+   \param path the path to assign content for
+   */
+  static void OnAssignContent(const CStdString &path);
 
   /*! \brief checks the database for a resume position and puts together a string
    \param item selected item
@@ -117,6 +122,8 @@ protected:
 
   static bool OnUnAssignContent(const CStdString &path, int label1, int label2, int label3);
 
+  bool StackingAvailable(const CFileItemList &items) const;
+
   CGUIDialogProgress* m_dlgProgress;
   CVideoDatabase m_database;
 
index 724ac20..a43b689 100644 (file)
@@ -115,6 +115,11 @@ bool CGUIWindowVideoNav::OnMessage(CGUIMessage& message)
       m_rootDir.AllowNonLocalSources(false);
 
       SetProperty("flattened", g_settings.m_bMyVideoNavFlatten);
+      if (message.GetNumStringParams() && message.GetStringParam(0).Equals("Files") &&
+          g_settings.GetSourcesFromType("video")->empty())
+      {
+        message.SetStringParam("");
+      }
       
       if (!CGUIWindowVideoBase::OnMessage(message))
         return false;
@@ -297,14 +302,13 @@ bool CGUIWindowVideoNav::GetDirectory(const CStdString &strDirectory, CFileItemL
       {
         CLog::Log(LOGDEBUG, "WindowVideoNav::GetDirectory");
         // grab the show thumb
-        CStdString path;
-        m_database.GetFilePathById(params.GetTvShowId(),path,VIDEODB_CONTENT_TVSHOWS);
-        CFileItem showItem(path, true);
-        showItem.SetVideoThumb();
-        items.SetProperty("tvshowthumb", showItem.GetThumbnailImage());
-        // Grab fanart data
         CVideoInfoTag details;
-        m_database.GetTvShowInfo(showItem.GetPath(), details, params.GetTvShowId());
+        m_database.GetTvShowInfo("", details, params.GetTvShowId());
+        CFileItem showItem(details.m_strShowPath, true);
+        if (showItem.GetCachedVideoThumb())
+          items.SetProperty("tvshowthumb", showItem.GetCachedVideoThumb());
+
+        // Grab fanart data
         items.SetProperty("fanart_color1", details.m_fanart.GetColor(0));
         items.SetProperty("fanart_color2", details.m_fanart.GetColor(1));
         items.SetProperty("fanart_color3", details.m_fanart.GetColor(2));
@@ -335,7 +339,7 @@ bool CGUIWindowVideoNav::GetDirectory(const CStdString &strDirectory, CFileItemL
           // grab the season thumb as the folder thumb
           CStdString strLabel;
           CStdString strPath;
-          if (params.GetSeason() == -1 && items.Size() > 0)
+          if (params.GetSeason() <= -1 && items.Size() > 0)
           {
             CQueryParams params2;
             dir.GetQueryParams(items[0]->GetPath(),params2);
@@ -366,6 +370,7 @@ bool CGUIWindowVideoNav::GetDirectory(const CStdString &strDirectory, CFileItemL
         }
       }
       else if (node == NODE_TYPE_TITLE_MOVIES ||
+               node == NODE_TYPE_SETS ||
                node == NODE_TYPE_RECENTLY_ADDED_MOVIES)
         items.SetContent("movies");
       else if (node == NODE_TYPE_TITLE_TVSHOWS)
@@ -395,12 +400,13 @@ bool CGUIWindowVideoNav::GetDirectory(const CStdString &strDirectory, CFileItemL
       else
         items.SetContent("");
     }
-    else
+    else if (!items.IsVirtualDirectoryRoot())
     { // load info from the database
       CStdString label;
       if (items.GetLabel().IsEmpty() && m_rootDir.IsSource(items.GetPath(), g_settings.GetSourcesFromType("video"), &label)) 
         items.SetLabel(label);
-      LoadVideoInfo(items);
+      if (!items.IsSourcesPath())
+        LoadVideoInfo(items);
     }
   }
   return bResult;
@@ -416,9 +422,19 @@ void CGUIWindowVideoNav::LoadVideoInfo(CFileItemList &items)
   CStdString content = m_database.GetContentForPath(items.GetPath());
   items.SetContent(content.IsEmpty() ? "files" : content);
 
-  bool fileMetaData = (g_guiSettings.GetBool("myvideos.filemetadata") &&
-                      !content.IsEmpty() &&
-                       m_stackingAvailable);
+  /*
+    If we have a matching item in the library, so we can assign the metadata to it. In addition, we can choose
+    * whether the item is stacked down (eg in the case of folders representing a single item)
+    * whether or not we assign the library's labels to the item, or leave the item as is.
+
+    As certain users (read: certain developers) don't want either of these to occur, we compromise by stacking
+    items down only if stacking is available and enabled.
+
+    Similarly, we assign the "clean" library labels to the item only if the "Replace filenames with library titles"
+    setting is enabled.
+    */
+  bool stackItems    = items.GetProperty("isstacked").asBoolean() || (StackingAvailable(items) && g_settings.m_videoStacking);
+  bool replaceLabels = g_guiSettings.GetBool("myvideos.replacelabels");
 
   CFileItemList dbItems;
   /* NOTE: In the future when GetItemsForPath returns all items regardless of whether they're "in the library"
@@ -434,15 +450,13 @@ void CGUIWindowVideoNav::LoadVideoInfo(CFileItemList &items)
   {
     CFileItemPtr pItem = items[i];
     CFileItemPtr match;
-    if (!content.IsEmpty())
-      match = dbItems.Get(pItem->GetPath());
+    if (!content.IsEmpty()) /* optical media will be stacked down, so it's path won't match the base path */
+      match = dbItems.Get(pItem->IsOpticalMediaFile() ? pItem->GetLocalMetadataPath() : pItem->GetPath());
     if (match)
     {
-      CStdString label (pItem->GetLabel ());
-      CStdString label2(pItem->GetLabel2());
-      pItem->UpdateInfo(*match);
-      
-      if (fileMetaData)
+      pItem->UpdateInfo(*match, replaceLabels);
+
+      if (stackItems)
       {
         if (match->m_bIsFolder)
           pItem->SetPath(match->GetVideoInfoTag()->m_strPath);
@@ -456,14 +470,6 @@ void CGUIWindowVideoNav::LoadVideoInfo(CFileItemList &items)
           pItem->m_bIsFolder = match->m_bIsFolder;
         }
       }
-      else
-      {
-        if (CFile::Exists(match->GetCachedFanart()))
-          pItem->SetProperty("fanart_image", match->GetCachedFanart());
-
-        pItem->SetLabel (label);
-        pItem->SetLabel2(label2);
-      }
     }
     else
     {
@@ -477,12 +483,8 @@ void CGUIWindowVideoNav::LoadVideoInfo(CFileItemList &items)
       }
       
       // set the watched overlay
-      if (pItem->HasVideoInfoTag())
-        pItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED, pItem->GetVideoInfoTag()->m_playCount > 0);
-
-      // Since the item is not in our db, as an alternative clean its name
-      if (fileMetaData)
-        pItem->CleanString();
+      if (pItem->IsVideo())
+        pItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED, pItem->HasVideoInfoTag() && pItem->GetVideoInfoTag()->m_playCount > 0);
     }
   }
 }
@@ -650,7 +652,7 @@ bool CGUIWindowVideoNav::CanDelete(const CStdString& strPath)
   if (params.GetMovieId()   != -1 ||
       params.GetEpisodeId() != -1 ||
       params.GetMVideoId()  != -1 ||
-      (params.GetTvShowId() != -1 && params.GetSeason() == -1
+      (params.GetTvShowId() != -1 && params.GetSeason() <= -1
               && !CVideoDatabaseDirectory::IsAllItem(strPath)))
     return true;
 
@@ -831,6 +833,7 @@ void CGUIWindowVideoNav::OnPrepareFileItems(CFileItemList &items)
   bool filterWatched=false;
   if (node == NODE_TYPE_EPISODES
   ||  node == NODE_TYPE_SEASONS
+  ||  node == NODE_TYPE_SETS
   ||  node == NODE_TYPE_TITLE_MOVIES
   ||  node == NODE_TYPE_TITLE_TVSHOWS
   ||  node == NODE_TYPE_TITLE_MUSICVIDEOS
@@ -1069,7 +1072,11 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt
           if (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning()))
           {
             if (info && info->Content() != CONTENT_NONE)
+            {
               buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20442);
+              if (info && (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning())))
+                buttons.Add(CONTEXT_BUTTON_SCAN, 13349);
+            }
             else
               buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20333);
           }
@@ -1315,7 +1322,7 @@ bool CGUIWindowVideoNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
     }
   case CONTEXT_BUTTON_UPDATE_LIBRARY:
     {
-      OnScan("");
+      OnScan("",true);
       return true;
     }
   case CONTEXT_BUTTON_UNLINK_MOVIE:
@@ -1440,6 +1447,7 @@ bool CGUIWindowVideoNav::OnClick(int iItem)
   CFileItemPtr item = m_vecItems->Get(iItem);
   if (!item->m_bIsFolder && item->IsVideoDb() && !item->Exists())
   {
+    CLog::Log(LOGDEBUG, "%s called on '%s' but file doesn't exist", __FUNCTION__, item->GetPath().c_str());
     if (!DeleteItem(item.get(), true))
       return true;
 
@@ -1493,10 +1501,12 @@ CStdString CGUIWindowVideoNav::GetStartFolder(const CStdString &dir)
     return "videodb://3/3/";
   else if (dir.Equals("MusicVideoArtists"))
     return "videodb://3/4/";
-  else if (dir.Equals("MusicVideoDirectors"))
+  else if (dir.Equals("MusicVideoAlbums"))
     return "videodb://3/5/";
-  else if (dir.Equals("MusicVideoStudios"))
+  else if (dir.Equals("MusicVideoDirectors"))
     return "videodb://3/6/";
+  else if (dir.Equals("MusicVideoStudios"))
+    return "videodb://3/7/";
   else if (dir.Equals("MusicVideos"))
     return "videodb://3/";
   else if (dir.Equals("RecentlyAddedMovies"))
diff --git a/xbmc/visualizations/Goom/goom2k4-0/INSTALL b/xbmc/visualizations/Goom/goom2k4-0/INSTALL
deleted file mode 100644 (file)
index 7d1c323..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-
-   Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.  This file is offered as-is,
-without warranty of any kind.
-
-Basic Installation
-==================
-
-   Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package.  The following
-more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.  Some packages provide this
-`INSTALL' file but do not implement all of the features documented
-below.  The lack of an optional feature in a given package is not
-necessarily a bug.  More recommendations for GNU packages can be found
-in *note Makefile Conventions: (standards)Makefile Conventions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-   The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package, generally using the just-built uninstalled binaries.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.  When installing into a prefix owned by root, it is
-     recommended that the package be configured and built as a regular
-     user, and only the `make install' phase executed with root
-     privileges.
-
-  5. Optionally, type `make installcheck' to repeat any self-tests, but
-     this time using the binaries in their final installed location.
-     This target does not install anything.  Running this target as a
-     regular user, particularly if the prior `make install' required
-     root privileges, verifies that the installation completed
-     correctly.
-
-  6. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-  7. Often, you can also type `make uninstall' to remove the installed
-     files again.  In practice, not all packages have tested that
-     uninstallation works correctly, even though it is required by the
-     GNU Coding Standards.
-
-  8. Some packages, particularly those that use Automake, provide `make
-     distcheck', which can by used by developers to test that all other
-     targets like `make install' and `make uninstall' work correctly.
-     This target is generally not run by end users.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  Run `./configure --help'
-for details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you can use GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.  This
-is known as a "VPATH" build.
-
-   With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory.  After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-   On MacOS X 10.5 and later systems, you can create libraries and
-executables that work on multiple system types--known as "fat" or
-"universal" binaries--by specifying multiple `-arch' options to the
-compiler but only a single `-arch' option to the preprocessor.  Like
-this:
-
-     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CPP="gcc -E" CXXCPP="g++ -E"
-
-   This is not guaranteed to produce working output in all cases, you
-may have to build one architecture at a time and combine the results
-using the `lipo' tool if you have problems.
-
-Installation Names
-==================
-
-   By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX', where PREFIX must be an
-absolute file name.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.  In general, the
-default for these options is expressed in terms of `${prefix}', so that
-specifying just `--prefix' will affect all of the other directory
-specifications that were not explicitly provided.
-
-   The most portable way to affect installation locations is to pass the
-correct locations to `configure'; however, many packages provide one or
-both of the following shortcuts of passing variable assignments to the
-`make install' command line to change installation locations without
-having to reconfigure or recompile.
-
-   The first method involves providing an override variable for each
-affected directory.  For example, `make install
-prefix=/alternate/directory' will choose an alternate location for all
-directory configuration variables that were expressed in terms of
-`${prefix}'.  Any directories that were specified during `configure',
-but not in terms of `${prefix}', must each be overridden at install
-time for the entire installation to be relocated.  The approach of
-makefile variable overrides for each directory variable is required by
-the GNU Coding Standards, and ideally causes no recompilation.
-However, some platforms have known limitations with the semantics of
-shared libraries that end up requiring recompilation when using this
-method, particularly noticeable in packages that use GNU Libtool.
-
-   The second method involves providing the `DESTDIR' variable.  For
-example, `make install DESTDIR=/alternate/directory' will prepend
-`/alternate/directory' before all installation names.  The approach of
-`DESTDIR' overrides is not required by the GNU Coding Standards, and
-does not work on platforms that have drive letters.  On the other hand,
-it does better at avoiding recompilation issues, and works well even
-when some directory options were not specified in terms of `${prefix}'
-at `configure' time.
-
-Optional Features
-=================
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-   Some packages offer the ability to configure how verbose the
-execution of `make' will be.  For these packages, running `./configure
---enable-silent-rules' sets the default to minimal output, which can be
-overridden with `make V=1'; while running `./configure
---disable-silent-rules' sets the default to verbose, which can be
-overridden with `make V=0'.
-
-Particular systems
-==================
-
-   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
-CC is not installed, it is recommended to use the following options in
-order to use an ANSI C compiler:
-
-     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
-
-and if that doesn't work, install pre-built binaries of GCC for HP-UX.
-
-   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
-parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
-a workaround.  If GNU CC is not installed, it is therefore recommended
-to try
-
-     ./configure CC="cc"
-
-and if that doesn't work, try
-
-     ./configure CC="cc -nodtk"
-
-   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
-directory contains several dysfunctional programs; working variants of
-these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
-in your `PATH', put it _after_ `/usr/bin'.
-
-   On Haiku, software installed for all users goes in `/boot/common',
-not `/usr/local'.  It is recommended to use the following options:
-
-     ./configure --prefix=/boot/common
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on.  Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS
-     KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-   Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
-
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
-     Print a summary of all of the options to `configure', and exit.
-
-`--help=short'
-`--help=recursive'
-     Print a summary of the options unique to this package's
-     `configure', and exit.  The `short' variant lists options used
-     only in the top level, while the `recursive' variant lists options
-     also present in any nested packages.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--prefix=DIR'
-     Use DIR as the installation prefix.  *note Installation Names::
-     for more details, including other options available for fine-tuning
-     the installation locations.
-
-`--no-create'
-`-n'
-     Run the configure checks, but stop before creating any output
-     files.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
diff --git a/xbmc/visualizations/Goom/goom2k4-0/Makefile.in b/xbmc/visualizations/Goom/goom2k4-0/Makefile.in
deleted file mode 100644 (file)
index 96d0793..0000000
+++ /dev/null
@@ -1,760 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in $(srcdir)/libgoom2.pc.in \
-       $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
-       config.guess config.sub depcomp install-sh ltmain.sh missing \
-       mkinstalldirs ylwrap
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_CLEAN_FILES = libgoom2.pc
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
-DATA = $(pkgconfig_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-       distdir dist dist-all distcheck
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MACFOLDER = @MACFOLDER@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = src xmms-goom sdl-goom @MACFOLDER@
-
-#.pc file
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = libgoom2.pc
-DISTCLEANFILES = libgoom2.pc
-all: all-recursive
-
-.SUFFIXES:
-am--refresh:
-       @:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
-             $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
-               && exit 0; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           echo ' $(SHELL) ./config.status'; \
-           $(SHELL) ./config.status;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       $(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       $(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-libgoom2.pc: $(top_builddir)/config.status $(srcdir)/libgoom2.pc.in
-       cd $(top_builddir) && $(SHELL) ./config.status $@
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-distclean-libtool:
-       -rm -f libtool config.lt
-install-pkgconfigDATA: $(pkgconfig_DATA)
-       @$(NORMAL_INSTALL)
-       test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
-       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
-       for p in $$list; do \
-         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         echo "$$d$$p"; \
-       done | $(am__base_list) | \
-       while read files; do \
-         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
-         $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
-       done
-
-uninstall-pkgconfigDATA:
-       @$(NORMAL_UNINSTALL)
-       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
-       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           dot_seen=yes; \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done; \
-       if test "$$dot_seen" = "no"; then \
-         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-       fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       set x; \
-       here=`pwd`; \
-       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-         include_option=--etags-include; \
-         empty_fix=.; \
-       else \
-         include_option=--include; \
-         empty_fix=; \
-       fi; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           test ! -f $$subdir/TAGS || \
-             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-         fi; \
-       done; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       $(am__remove_distdir)
-       test -d "$(distdir)" || mkdir "$(distdir)"
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-           $(am__relativize); \
-           new_distdir=$$reldir; \
-           dir1=$$subdir; dir2="$(top_distdir)"; \
-           $(am__relativize); \
-           new_top_distdir=$$reldir; \
-           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-           ($(am__cd) $$subdir && \
-             $(MAKE) $(AM_MAKEFLAGS) \
-               top_distdir="$$new_top_distdir" \
-               distdir="$$new_distdir" \
-               am__remove_distdir=: \
-               am__skip_length_check=: \
-               am__skip_mode_fix=: \
-               distdir) \
-             || exit 1; \
-         fi; \
-       done
-       -test -n "$(am__skip_mode_fix)" \
-       || find "$(distdir)" -type d ! -perm -755 \
-               -exec chmod u+rwx,go+rx {} \; -o \
-         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-       || chmod -R a+r "$(distdir)"
-dist-gzip: distdir
-       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-       $(am__remove_distdir)
-
-dist-bzip2: distdir
-       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-       $(am__remove_distdir)
-
-dist-lzma: distdir
-       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
-       $(am__remove_distdir)
-
-dist-xz: distdir
-       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
-       $(am__remove_distdir)
-
-dist-tarZ: distdir
-       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-       $(am__remove_distdir)
-
-dist-shar: distdir
-       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-       $(am__remove_distdir)
-
-dist-zip: distdir
-       -rm -f $(distdir).zip
-       zip -rq $(distdir).zip $(distdir)
-       $(am__remove_distdir)
-
-dist dist-all: distdir
-       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-       $(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-       case '$(DIST_ARCHIVES)' in \
-       *.tar.gz*) \
-         GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
-       *.tar.bz2*) \
-         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-       *.tar.lzma*) \
-         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
-       *.tar.xz*) \
-         xz -dc $(distdir).tar.xz | $(am__untar) ;;\
-       *.tar.Z*) \
-         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-       *.shar.gz*) \
-         GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
-       *.zip*) \
-         unzip $(distdir).zip ;;\
-       esac
-       chmod -R a-w $(distdir); chmod a+w $(distdir)
-       mkdir $(distdir)/_build
-       mkdir $(distdir)/_inst
-       chmod a-w $(distdir)
-       test -d $(distdir)/_build || exit 0; \
-       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-         && am__cwd=`pwd` \
-         && $(am__cd) $(distdir)/_build \
-         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-           $(DISTCHECK_CONFIGURE_FLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) dvi \
-         && $(MAKE) $(AM_MAKEFLAGS) check \
-         && $(MAKE) $(AM_MAKEFLAGS) install \
-         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-               distuninstallcheck \
-         && chmod -R a-w "$$dc_install_base" \
-         && ({ \
-              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-             } || { rm -rf "$$dc_destdir"; exit 1; }) \
-         && rm -rf "$$dc_destdir" \
-         && $(MAKE) $(AM_MAKEFLAGS) dist \
-         && rm -rf $(DIST_ARCHIVES) \
-         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
-         && cd "$$am__cwd" \
-         || exit 1
-       $(am__remove_distdir)
-       @(echo "$(distdir) archives ready for distribution: "; \
-         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
-       @$(am__cd) '$(distuninstallcheck_dir)' \
-       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
-          || { echo "ERROR: files left after uninstall:" ; \
-               if test -n "$(DESTDIR)"; then \
-                 echo "  (check DESTDIR support)"; \
-               fi ; \
-               $(distuninstallcheck_listfiles) ; \
-               exit 1; } >&2
-distcleancheck: distclean
-       @if test '$(srcdir)' = . ; then \
-         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-         exit 1 ; \
-       fi
-       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-         || { echo "ERROR: files left in build directory after distclean:" ; \
-              $(distcleancheck_listfiles) ; \
-              exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA)
-installdirs: installdirs-recursive
-installdirs-am:
-       for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
-         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-       done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-       -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-libtool \
-       distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-pkgconfigDATA
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-       -rm -rf $(top_srcdir)/autom4te.cache
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-pkgconfigDATA
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-       install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am am--refresh check check-am clean clean-generic \
-       clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
-       dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
-       distcheck distclean distclean-generic distclean-libtool \
-       distclean-tags distcleancheck distdir distuninstallcheck dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-dvi install-dvi-am \
-       install-exec install-exec-am install-html install-html-am \
-       install-info install-info-am install-man install-pdf \
-       install-pdf-am install-pkgconfigDATA install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       installdirs-am maintainer-clean maintainer-clean-generic \
-       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-       ps ps-am tags tags-recursive uninstall uninstall-am \
-       uninstall-pkgconfigDATA
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/xbmc/visualizations/Goom/goom2k4-0/aclocal.m4 b/xbmc/visualizations/Goom/goom2k4-0/aclocal.m4
deleted file mode 100644 (file)
index 245cacf..0000000
+++ /dev/null
@@ -1,8938 +0,0 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
-[m4_warning([this file was generated for autoconf 2.65.
-You have another version of autoconf.  It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
-
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 56 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-                  [m4_fatal([Libtool version $1 or higher is required],
-                            63)])],
-       [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
-  *\ * | *\    *)
-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    _LT_PATH_MAGIC
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME.  Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
-       [m4_ifval([$1], [$1], [$2])])
-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
-    m4_ifval([$4],
-       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
-    lt_dict_add_subkey([lt_decl_dict], [$2],
-       [tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
-  [0], [m4_fatal([$0: too few arguments: $#])],
-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[m4_assert([$# <= 2])dnl
-_$0(m4_quote(m4_default([$1], [[, ]])),
-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
-m4_define([_lt_decl_varnames_tagged],
-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
-     m4_if([$2], [],
-          m4_quote(lt_decl_varnames),
-       m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
-                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly.  In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-#    # Some comment about what VAR is for.
-#    visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
-                                          [description])))[]dnl
-m4_pushdef([_libtool_name],
-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
-    [0], [_libtool_name=[$]$1],
-    [1], [_libtool_name=$lt_[]$1],
-    [2], [_libtool_name=$lt_[]$1],
-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
-       dnl If the libtool generation code has been placed in $CONFIG_LT,
-       dnl instead of duplicating it all over again into config.status,
-       dnl then we will have config.status run $CONFIG_LT later, so it
-       dnl needs to know what name is stored there:
-        [AC_CONFIG_COMMANDS([libtool],
-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
-    dnl If the libtool generation code is destined for config.status,
-    dnl expand the accumulated commands and init code now:
-    [AC_CONFIG_COMMANDS([libtool],
-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
-exec AS_MESSAGE_LOG_FD>>config.log
-{
-  echo
-  AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
-  -h, --help      print this help, then exit
-  -V, --version   print version number, then exit
-  -q, --quiet     do not print progress messages
-  -d, --debug     don't remove temporary files
-
-Report bugs to <bug-libtool@gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
-  case $[1] in
-    --version | --v* | -V )
-      echo "$lt_cl_version"; exit 0 ;;
-    --help | --h* | -h )
-      echo "$lt_cl_help"; exit 0 ;;
-    --debug | --d* | -d )
-      debug=: ;;
-    --quiet | --q* | --silent | --s* | -q )
-      lt_cl_silent=: ;;
-
-    -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
-    *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
-  esac
-  shift
-done
-
-if $lt_cl_silent; then
-  exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure.  Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars.  Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
-  m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-  _LT_PROG_LTMAIN
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
-  [C],                 [_LT_LANG(C)],
-  [C++],               [_LT_LANG(CXX)],
-  [Java],              [_LT_LANG(GCJ)],
-  [Fortran 77],                [_LT_LANG(F77)],
-  [Fortran],           [_LT_LANG(FC)],
-  [Windows Resource],  [_LT_LANG(RC)],
-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
-    [_LT_LANG($1)],
-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
-  [LT_SUPPORTED_TAG([$1])dnl
-  m4_append([_LT_TAGS], [$1 ])dnl
-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
-  _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
-  [LT_LANG(CXX)],
-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
-  [LT_LANG(F77)],
-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
-  [LT_LANG(FC)],
-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-  [LT_LANG(GCJ)],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-    [LT_LANG(GCJ)],
-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
-      [LT_LANG(GCJ)],
-      [m4_ifdef([AC_PROG_GCJ],
-       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([A][M_PROG_GCJ],
-       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([LT_PROG_GCJ],
-       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
-  [LT_LANG(RC)],
-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-    AC_CHECK_TOOL([LIPO], [lipo], [:])
-    AC_CHECK_TOOL([OTOOL], [otool], [:])
-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
-    _LT_DECL([], [DSYMUTIL], [1],
-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
-    _LT_DECL([], [NMEDIT], [1],
-      [Tool to change global to local symbols on Mac OS X])
-    _LT_DECL([], [LIPO], [1],
-      [Tool to manipulate fat objects and archives on Mac OS X])
-    _LT_DECL([], [OTOOL], [1],
-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
-    _LT_DECL([], [OTOOL64], [1],
-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
-      [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-       # By default we will add the -single_module flag. You can override
-       # by either setting the environment variable LT_MULTI_MODULE
-       # non-empty at configure time, or by adding -multi_module to the
-       # link flags.
-       rm -rf libconftest.dylib*
-       echo "int foo(void){return 1;}" > conftest.c
-       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
-       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-         lt_cv_apple_cc_single_mod=yes
-       else
-         cat conftest.err >&AS_MESSAGE_LOG_FD
-       fi
-       rm -rf libconftest.dylib*
-       rm -f conftest.*
-      fi])
-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
-      [lt_cv_ld_exported_symbols_list],
-      [lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-       [lt_cv_ld_exported_symbols_list=yes],
-       [lt_cv_ld_exported_symbols_list=no])
-       LDFLAGS="$save_LDFLAGS"
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-       10.[[012]]*)
-         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-       10.*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_automatic, $1)=yes
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
-  _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-    m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-],[])
-  else
-  _LT_TAGVAR(ld_shlibs, $1)=no
-  fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-        [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-          test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-         # Cool, printf works
-         :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-            test "X$echo_testing_string" = 'X\t' &&
-            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-            test "X$echo_testing_string" = "X$echo_test_string"; then
-         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-         export CONFIG_SHELL
-         SHELL="$CONFIG_SHELL"
-         export SHELL
-         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-            test "X$echo_testing_string" = 'X\t' &&
-            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-            test "X$echo_testing_string" = "X$echo_test_string"; then
-         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-         # maybe with a smaller string...
-         prev=:
-
-         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-           then
-             break
-           fi
-           prev="$cmd"
-         done
-
-         if test "$prev" != 'sed 50q "[$]0"'; then
-           echo_test_string=`eval $prev`
-           export echo_test_string
-           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-         else
-           # Oops.  We lost completely, so just stick with echo.
-           ECHO=echo
-         fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(lt_ECHO)
-])
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-  [AS_HELP_STRING([--disable-libtool-lock],
-    [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-       HPUX_IA64_MODE="32"
-       ;;
-      *ELF-64*)
-       HPUX_IA64_MODE="64"
-       ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-       *32-bit*)
-         LD="${LD-ld} -melf32bsmip"
-         ;;
-       *N32*)
-         LD="${LD-ld} -melf32bmipn32"
-         ;;
-       *64-bit*)
-         LD="${LD-ld} -melf64bmip"
-       ;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-       *32-bit*)
-         LD="${LD-ld} -32"
-         ;;
-       *N32*)
-         LD="${LD-ld} -n32"
-         ;;
-       *64-bit*)
-         LD="${LD-ld} -64"
-         ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-       case $host in
-         x86_64-*kfreebsd*-gnu)
-           LD="${LD-ld} -m elf_i386_fbsd"
-           ;;
-         x86_64-*linux*)
-           LD="${LD-ld} -m elf_i386"
-           ;;
-         ppc64-*linux*|powerpc64-*linux*)
-           LD="${LD-ld} -m elf32ppclinux"
-           ;;
-         s390x-*linux*)
-           LD="${LD-ld} -m elf_s390"
-           ;;
-         sparc64-*linux*)
-           LD="${LD-ld} -m elf32_sparc"
-           ;;
-       esac
-       ;;
-      *64-bit*)
-       case $host in
-         x86_64-*kfreebsd*-gnu)
-           LD="${LD-ld} -m elf_x86_64_fbsd"
-           ;;
-         x86_64-*linux*)
-           LD="${LD-ld} -m elf_x86_64"
-           ;;
-         ppc*-*linux*|powerpc*-*linux*)
-           LD="${LD-ld} -m elf64ppc"
-           ;;
-         s390*-*linux*|s390*-*tpf*)
-           LD="${LD-ld} -m elf64_s390"
-           ;;
-         sparc*-*linux*)
-           LD="${LD-ld} -m elf64_sparc"
-           ;;
-       esac
-       ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-         LD="${LD-ld} -64"
-       fi
-       ;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
-    [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
-    [Commands used to build an old-style archive])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$5], , :, [$5])
-else
-    m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$4], , :, [$4])
-else
-    m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-             test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
-    [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL          RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL                DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL                0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW         DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW       RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW     DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW     0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}]
-_LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_dlunknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-    ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-         [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
-       [AC_CHECK_FUNC([dlopen],
-             [lt_cv_dlopen="dlopen"],
-         [AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-           [AC_CHECK_LIB([svld], [dlopen],
-                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-             [AC_CHECK_LIB([dld], [dld_link],
-                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
-             ])
-           ])
-         ])
-       ])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-         lt_cv_dlopen_self, [dnl
-         _LT_TRY_DLOPEN_SELF(
-           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-         lt_cv_dlopen_self_static, [dnl
-         _LT_TRY_DLOPEN_SELF(
-           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
-        [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
-        [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
-        [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
-       [Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
-         [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
-    [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      AC_MSG_RESULT([yes])
-    else
-      AC_MSG_RESULT([no])
-    fi
-    ;;
-  *)
-    AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_OBJDUMP])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
-       [], [
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[[4-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-          echo ' yes '
-          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-       :
-      else
-       can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[[3-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       else
-               version_type=irix
-       fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-       ;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
-    [Variables whose values should be saved in libtool wrapper scripts and
-    restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
-    [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
-    [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
-    [[List of archive names.  First name is the real one, the rest are links.
-    The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
-    [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [postinstall_cmds], [2],
-    [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
-    [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
-    [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
-    [[As "finish_cmds", except a single script fragment to be evaled but
-    not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
-    [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
-    [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="m4_if([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-       case $deplibs_check_method in
-       "file_magic "*)
-         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-           $EGREP "$file_magic_regex" > /dev/null; then
-           :
-         else
-           cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
-         fi ;;
-       esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
-        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_ARG_WITH([gnu-ld],
-    [AS_HELP_STRING([--with-gnu-ld],
-       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break
-       ;;
-      *)
-       test "$with_gnu_ld" != yes && break
-       ;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[[45]]*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[[3-9]]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd* | netbsdelf*-gnu)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
-    [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-       # Check to see if the nm accepts a BSD-compat flag.
-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-       #   nm: unknown option "B" ignored
-       # Tru64's nm complains that /dev/null is an invalid object file
-       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-       */dev/null* | *'Invalid file or object type'*)
-         lt_cv_path_NM="$tmp_nm -B"
-         break
-         ;;
-       *)
-         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-         */dev/null*)
-           lt_cv_path_NM="$tmp_nm -p"
-           break
-           ;;
-         *)
-           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-           continue # so that we can try to find one that supports BSD flags
-           ;;
-         esac
-         ;;
-       esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
-  AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
-  [lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
-  cat conftest.out >&AS_MESSAGE_LOG_FD
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
-       [Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris*)
-  symcode='[[BDRT]]'
-  ;;
-sco3.2v5*)
-  symcode='[[DT]]'
-  ;;
-sysv4.2uw2*)
-  symcode='[[DT]]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[[ABDT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx]"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-       mv -f "$nlist"T "$nlist"
-      else
-       rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-         cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-         # Now generate the symbol file.
-         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-         cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-         cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-         # Now try linking the two files.
-         mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
-         LIBS="conftstm.$ac_objext"
-         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-           pipe_works=yes
-         fi
-         LIBS="$lt_save_LIBS"
-         CFLAGS="$lt_save_CFLAGS"
-       else
-         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-       fi
-      else
-       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
-    [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-    [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
-    [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
-    [Transform the output of nm in a C name address pair when lib prefix is needed])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-m4_if([$1], [CXX], [
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-       ;;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       ;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-       # All AIX code is PIC.
-       if test "$host_cpu" = ia64; then
-         # AIX 5 now supports IA64 processor
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-       else
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-       fi
-       ;;
-      chorus*)
-       case $cc_basename in
-       cxch68*)
-         # Green Hills C++ Compiler
-         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-         ;;
-       esac
-       ;;
-      dgux*)
-       case $cc_basename in
-         ec++*)
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           ;;
-         ghcx*)
-           # Green Hills C++ Compiler
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      freebsd* | dragonfly*)
-       # FreeBSD uses GNU C++
-       ;;
-      hpux9* | hpux10* | hpux11*)
-       case $cc_basename in
-         CC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-           if test "$host_cpu" != ia64; then
-             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-           fi
-           ;;
-         aCC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-           case $host_cpu in
-           hppa*64*|ia64*)
-             # +Z the default
-             ;;
-           *)
-             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-             ;;
-           esac
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      interix*)
-       # This is c89, which is MS Visual C++ (no shared libs)
-       # Anyone wants to do a port?
-       ;;
-      irix5* | irix6* | nonstopux*)
-       case $cc_basename in
-         CC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           # CC pic flag -KPIC is the default.
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-       case $cc_basename in
-         KCC*)
-           # KAI C++ Compiler
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-           ;;
-         ecpc* )
-           # old Intel C++ for x86_64 which still supported -KPIC.
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-           ;;
-         icpc* )
-           # Intel C++, used to be incompatible with GCC.
-           # ICC 10 doesn't accept -KPIC any more.
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-           ;;
-         pgCC* | pgcpp*)
-           # Portland Group C++ compiler
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-         cxx*)
-           # Compaq C++
-           # Make sure the PIC flag is empty.  It appears that all Alpha
-           # Linux and Compaq Tru64 Unix objects are PIC.
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           ;;
-         xlc* | xlC*)
-           # IBM XL 8.0 on PPC
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-           ;;
-         *)
-           case `$CC -V 2>&1 | sed 5q` in
-           *Sun\ C*)
-             # Sun C++ 5.9
-             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-             ;;
-           esac
-           ;;
-       esac
-       ;;
-      lynxos*)
-       ;;
-      m88k*)
-       ;;
-      mvs*)
-       case $cc_basename in
-         cxx*)
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      netbsd* | netbsdelf*-gnu)
-       ;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-       case $cc_basename in
-         KCC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-           ;;
-         RCC*)
-           # Rational C++ 2.4.1
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         cxx*)
-           # Digital/Compaq C++
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           # Make sure the PIC flag is empty.  It appears that all Alpha
-           # Linux and Compaq Tru64 Unix objects are PIC.
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      psos*)
-       ;;
-      solaris*)
-       case $cc_basename in
-         CC*)
-           # Sun C++ 4.2, 5.x and Centerline C++
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-           ;;
-         gcx*)
-           # Green Hills C++ Compiler
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      sunos4*)
-       case $cc_basename in
-         CC*)
-           # Sun C++ 4.x
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-         lcc*)
-           # Lucid
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-       case $cc_basename in
-         CC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-       esac
-       ;;
-      tandem*)
-       case $cc_basename in
-         NCC*)
-           # NonStop-UX NCC 3.20
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      vxworks*)
-       ;;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-       ;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-       # +Z the default
-       ;;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       ;;
-      esac
-      ;;
-
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      m4_if([$1], [GCJ], [],
-       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-       # +Z the default
-       ;;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-       ;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
-       ;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-       # which looks to be a dead project)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      xl*)
-       # IBM XL C 8.0/Fortran 10.1 on PPC
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-       ;;
-      *)
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)
-         # Sun C 5.9
-         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-         ;;
-       *Sun\ F*)
-         # Sun Fortran 8.3 passes all unrecognized flags to the linker
-         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
-         ;;
-       esac
-       ;;
-      esac
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-       [How to pass a linker flag through the compiler])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
-       [Additional compiler flags for building library objects])
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
-       [Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[[4-9]]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-  ;;
-  *)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-], [
-  runpath_var=
-  _LT_TAGVAR(allow_undefined_flag, $1)=
-  _LT_TAGVAR(always_export_symbols, $1)=no
-  _LT_TAGVAR(archive_cmds, $1)=
-  _LT_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_TAGVAR(compiler_needs_object, $1)=no
-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(hardcode_automatic, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(inherit_rpath, $1)=no
-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_TAGVAR(module_cmds, $1)=
-  _LT_TAGVAR(module_expsym_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
-  esac
-
-  _LT_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[[3-9]]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=no
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-       # If the export-symbols file already is a .def file (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-         cp $export_symbols $output_objdir/$soname.def;
-       else
-         echo EXPORTS > $output_objdir/$soname.def;
-         cat $export_symbols >> $output_objdir/$soname.def;
-       fi~
-       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    interix[[3-9]]*)
-      _LT_TAGVAR(hardcode_direct, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-       case $cc_basename in
-         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
-       esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-        && test "$tmp_diet" = no
-      then
-       tmp_addflag=
-       tmp_sharedflag='-shared'
-       case $cc_basename,$host_cpu in
-        pgcc*)                         # Portland Group C compiler
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag'
-         ;;
-       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag -Mnomain' ;;
-       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
-         tmp_addflag=' -i_dynamic' ;;
-       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
-         tmp_addflag=' -i_dynamic -nofor_main' ;;
-       ifc* | ifort*)                  # Intel Fortran compiler
-         tmp_addflag=' -nofor_main' ;;
-       lf95*)                          # Lahey Fortran 8.1
-         _LT_TAGVAR(whole_archive_flag_spec, $1)=
-         tmp_sharedflag='--shared' ;;
-       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
-         tmp_sharedflag='-qmkshrobj'
-         tmp_addflag= ;;
-       esac
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)                       # Sun C 5.9
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         _LT_TAGVAR(compiler_needs_object, $1)=yes
-         tmp_sharedflag='-G' ;;
-       *Sun\ F*)                       # Sun Fortran 8.3
-         tmp_sharedflag='-G' ;;
-       esac
-       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-           echo "local: *; };" >> $output_objdir/$libname.ver~
-           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-       case $cc_basename in
-       xlf*)
-         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-         if test "x$supports_anon_versioning" = xyes; then
-           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-             echo "local: *; };" >> $output_objdir/$libname.ver~
-             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-         fi
-         ;;
-       esac
-      else
-        _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-       wlarc=
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-       ;;
-       *)
-         # For security reasons, it is highly recommended that you always
-         # use absolute paths for naming shared libraries, and exclude the
-         # DT_RUNPATH tag from executables and libraries.  But doing so
-         # requires that you compile everything twice, which is a pain.
-         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-         else
-           _LT_TAGVAR(ld_shlibs, $1)=no
-         fi
-       ;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       _LT_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
-       # On IA64, the linker does run time linking by default, so we don't
-       # have to do anything special.
-       aix_use_runtimelinking=no
-       exp_sym_flag='-Bexport'
-       no_entry_flag=""
-      else
-       # If we're using GNU nm, then we don't want the "-C" option.
-       # -C means demangle to AIX nm, but means don't demangle with GNU nm
-       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-       else
-         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-       fi
-       aix_use_runtimelinking=no
-
-       # Test if we are trying to use run time linking or normal
-       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-       # need to do runtime linking.
-       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-         for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-           aix_use_runtimelinking=yes
-           break
-         fi
-         done
-         ;;
-       esac
-
-       exp_sym_flag='-bexport'
-       no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_TAGVAR(archive_cmds, $1)=''
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-      if test "$GCC" = yes; then
-       case $host_os in aix4.[[012]]|aix4.[[012]].*)
-       # We only want to do this on AIX 4.2 and lower, the check
-       # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
-         if test -f "$collect2name" &&
-          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-         then
-         # We have reworked collect2
-         :
-         else
-         # We have old collect2
-         _LT_TAGVAR(hardcode_direct, $1)=unsupported
-         # It fails to find uninstalled libraries when the uninstalled
-         # path is not listed in the libpath.  Setting hardcode_minus_L
-         # to unsupported forces relinking
-         _LT_TAGVAR(hardcode_minus_L, $1)=yes
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-         _LT_TAGVAR(hardcode_libdir_separator, $1)=
-         fi
-         ;;
-       esac
-       shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
-       fi
-       _LT_TAGVAR(link_all_deplibs, $1)=no
-      else
-       # not using gcc
-       if test "$host_cpu" = ia64; then
-       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-       # chokes on -Wl,-G. The following line is correct:
-         shared_flag='-G'
-       else
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
-         else
-           shared_flag='${wl}-bM:SRE'
-         fi
-       fi
-      fi
-
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-       # Warning - without using the other runtime loading flags (-brtl),
-       # -berok will link without error, but may produce a broken library.
-       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-       if test "$host_cpu" = ia64; then
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-       else
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-         # Warning - without using the other run time loading flags,
-         # -berok will link without error, but may produce a broken library.
-         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-         # Exported symbols can be pulled into shared objects from archives
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-         # This is similar to how AIX traditionally builds its shared libraries.
-         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-       fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[[45]]*)
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      _LT_DARWIN_LINKER_FEATURES($1)
-      ;;
-
-    dgux*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-       _LT_TAGVAR(hardcode_direct, $1)=yes
-       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-       # hardcode_minus_L: Not really in the search PATH,
-       # but as the default location of the library.
-       _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       case $host_cpu in
-       hppa*64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      else
-       case $host_cpu in
-       hppa*64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      fi
-      if test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       case $host_cpu in
-       hppa*64*|ia64*)
-         _LT_TAGVAR(hardcode_direct, $1)=no
-         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-         ;;
-       *)
-         _LT_TAGVAR(hardcode_direct, $1)=yes
-         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-         # hardcode_minus_L: Not really in the search PATH,
-         # but as the default location of the library.
-         _LT_TAGVAR(hardcode_minus_L, $1)=yes
-         ;;
-       esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       # Try to use the -exported_symbol ld option, if it does not
-       # work, assume that -exports_file does not work either and
-       # implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(inherit_rpath, $1)=yes
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-       _LT_TAGVAR(hardcode_direct, $1)=yes
-       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-       else
-         case $host_os in
-          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-            ;;
-          *)
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-            ;;
-         esac
-       fi
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-       # Both c and cxx compiler support -rpath directly
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-       case `$CC -V 2>&1` in
-       *"Compilers 5.0"*)
-         wlarc=''
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-         ;;
-       *)
-         wlarc='${wl}'
-         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-         ;;
-       esac
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
-       # The compiler driver will combine and reorder linker options,
-       # but understands `-z linker_flag'.  GCC discards it without `$wl',
-       # but is careful enough not to reorder.
-       # Supported since Solaris 2.6 (maybe 2.5.1?)
-       if test "$GCC" = yes; then
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-       else
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-       fi
-       ;;
-      esac
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-       # Use $CC to link under sequent, because it throws in some extra .o
-       # files that make .init and .fini sections work.
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-       sni)
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-       ;;
-       siemens)
-         ## LD is ld it makes a PLAMLIB
-         ## CC just makes a GrossModule.
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-         _LT_TAGVAR(hardcode_direct, $1)=no
-        ;;
-       motorola)
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-       ;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       _LT_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
-       ;;
-      esac
-    fi
-  fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
-    [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
-    [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
-    [enable_shared_with_static_runtimes], [0],
-    [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
-    [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
-    [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
-    [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
-    [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
-    [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
-    [Commands used to build a loadable module if different from building
-    a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
-    [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
-    [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
-    [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
-    [Flag to hardcode $libdir into a binary during linking.
-    This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
-    [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
-    library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
-    [Set to "yes" if building a shared library automatically hardcodes DIR
-    into the library and all subsequent libraries and executables linked
-    against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
-    [Set to yes if linker adds runtime paths of dependent libraries
-    to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
-    [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
-_LT_TAGDECL([], [always_export_symbols], [0],
-    [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
-    [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
-    [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
-    [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
-    [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [file_list_spec], [1],
-    [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl    [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_SYS_DYNAMIC_LINKER($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-  LT_SYS_DLOPEN_SELF
-  _LT_CMD_STRIPLIB
-
-  # Report which library types will actually be built
-  AC_MSG_CHECKING([if libtool supports shared libraries])
-  AC_MSG_RESULT([$can_build_shared])
-
-  AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  AC_MSG_RESULT([$enable_shared])
-
-  AC_MSG_CHECKING([whether to build static libraries])
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  AC_MSG_RESULT([$enable_static])
-
-  _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-    else
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-      LT_PATH_LD
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-         $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-    _LT_TAGVAR(ld_shlibs, $1)=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-      aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-           for ld_flag in $LDFLAGS; do
-             case $ld_flag in
-             *-brtl*)
-               aix_use_runtimelinking=yes
-               break
-               ;;
-             esac
-           done
-           ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        _LT_TAGVAR(archive_cmds, $1)=''
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
-         if test -f "$collect2name" &&
-            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-         then
-           # We have reworked collect2
-           :
-         else
-           # We have old collect2
-           _LT_TAGVAR(hardcode_direct, $1)=unsupported
-           # It fails to find uninstalled libraries when the uninstalled
-           # path is not listed in the libpath.  Setting hardcode_minus_L
-           # to unsupported forces relinking
-           _LT_TAGVAR(hardcode_minus_L, $1)=yes
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-           _LT_TAGVAR(hardcode_libdir_separator, $1)=
-         fi
-          esac
-          shared_flag='-shared'
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag="$shared_flag "'${wl}-G'
-         fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-         # chokes on -Wl,-G. The following line is correct:
-         shared_flag='-G'
-          else
-           if test "$aix_use_runtimelinking" = yes; then
-             shared_flag='${wl}-G'
-           else
-             shared_flag='${wl}-bM:SRE'
-           fi
-          fi
-        fi
-
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-       # export.
-        _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          _LT_SYS_MODULE_PATH_AIX
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-           # Determine the default libpath from the value encoded in an
-           # empty executable.
-           _LT_SYS_MODULE_PATH_AIX
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-           # Warning - without using the other run time loading flags,
-           # -berok will link without error, but may produce a broken library.
-           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-           # Exported symbols can be pulled into shared objects from archives
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-           # This is similar to how AIX traditionally builds its shared
-           # libraries.
-           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-         # support --undefined.  This deserves some investigation.  FIXME
-         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       else
-         _LT_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-         # FIXME: insert proper C++ library support
-         _LT_TAGVAR(ld_shlibs, $1)=no
-         ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-           cp $export_symbols $output_objdir/$soname.def;
-          else
-           echo EXPORTS > $output_objdir/$soname.def;
-           cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-        _LT_DARWIN_LINKER_FEATURES($1)
-       ;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          ghcx*)
-           # Green Hills C++ Compiler
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          *)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-        esac
-        ;;
-
-      freebsd[[12]]*)
-        # C++ shared libraries reported to be fairly broken before
-       # switch to ELF
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      freebsd-elf*)
-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-                                            # but as the default
-                                            # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            _LT_TAGVAR(ld_shlibs, $1)=no
-            ;;
-          aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              _LT_TAGVAR(ld_shlibs, $1)=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            _LT_TAGVAR(hardcode_direct, $1)=no
-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-            ;;
-          *)
-            _LT_TAGVAR(hardcode_direct, $1)=yes
-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-                                                # but as the default
-                                                # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          aCC*)
-           case $host_cpu in
-             hppa*64*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-               ;;
-             ia64*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-               ;;
-             *)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-               ;;
-           esac
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           #
-           # There doesn't appear to be a way to prevent this compiler from
-           # explicitly linking system object files so we need to strip them
-           # from the output so that they don't get included in the library
-           # dependencies.
-           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-           ;;
-          *)
-           if test "$GXX" = yes; then
-             if test $with_gnu_ld = no; then
-               case $host_cpu in
-                 hppa*64*)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-                   ;;
-                 ia64*)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-                   ;;
-                 *)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-                   ;;
-               esac
-             fi
-           else
-             # FIXME: insert proper C++ library support
-             _LT_TAGVAR(ld_shlibs, $1)=no
-           fi
-           ;;
-        esac
-        ;;
-
-      interix[[3-9]]*)
-       _LT_TAGVAR(hardcode_direct, $1)=no
-       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-       # Instead, shared libraries are loaded at an image base (0x10000000 by
-       # default) and relocated if they conflict, which is a slow very memory
-       # consuming and fragmenting process.  To avoid this, we pick a random,
-       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-       ;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-           # SGI C++
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-           # Archives containing C++ object files must be created using
-           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-           # necessary to make sure instantiated templates are included
-           # in the archive.
-           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-           ;;
-          *)
-           if test "$GXX" = yes; then
-             if test "$with_gnu_ld" = no; then
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-             else
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-             fi
-           fi
-           _LT_TAGVAR(link_all_deplibs, $1)=yes
-           ;;
-        esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(inherit_rpath, $1)=yes
-        ;;
-
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-        case $cc_basename in
-          KCC*)
-           # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-           # KCC will only create a shared library if the output file
-           # ends with ".so" (or ".sl" for HP-UX), so rename the library
-           # to its proper name (with version) after linking.
-           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           #
-           # There doesn't appear to be a way to prevent this compiler from
-           # explicitly linking system object files so we need to strip them
-           # from the output so that they don't get included in the library
-           # dependencies.
-           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-           # Archives containing C++ object files must be created using
-           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-           ;;
-         icpc* | ecpc* )
-           # Intel C++
-           with_gnu_ld=yes
-           # version 8.0 and above of icpc choke on multiply defined symbols
-           # if we add $predep_objects and $postdep_objects, however 7.1 and
-           # earlier do not add the objects themselves.
-           case `$CC -V 2>&1` in
-             *"Version 7."*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-               ;;
-             *)  # Version 8.0 or newer
-               tmp_idyn=
-               case $host_cpu in
-                 ia64*) tmp_idyn=' -i_dynamic';;
-               esac
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-               ;;
-           esac
-           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-           ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-           case `$CC -V` in
-           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
-             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-               $RANLIB $oldlib'
-             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-             ;;
-           *) # Version 6 will use weak symbols
-             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-             ;;
-           esac
-
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-         cxx*)
-           # Compaq C++
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-           runpath_var=LD_RUN_PATH
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           #
-           # There doesn't appear to be a way to prevent this compiler from
-           # explicitly linking system object files so we need to strip them
-           # from the output so that they don't get included in the library
-           # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-           ;;
-         xl*)
-           # IBM XL 8.0 on PPC, with GNU ld
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           if test "x$supports_anon_versioning" = xyes; then
-             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-               echo "local: *; };" >> $output_objdir/$libname.ver~
-               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-           fi
-           ;;
-         *)
-           case `$CC -V 2>&1 | sed 5q` in
-           *Sun\ C*)
-             # Sun C++ 5.9
-             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-             _LT_TAGVAR(compiler_needs_object, $1)=yes
-
-             # Not sure whether something based on
-             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-             # would be better.
-             output_verbose_link_cmd='echo'
-
-             # Archives containing C++ object files must be created using
-             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-             # necessary to make sure instantiated templates are included
-             # in the archive.
-             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-             ;;
-           esac
-           ;;
-       esac
-       ;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       ;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-       ;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-         *)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-       esac
-       ;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-         wlarc=
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-         _LT_TAGVAR(hardcode_direct, $1)=yes
-         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       fi
-       # Workaround some broken pre-1.5 toolchains
-       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-       ;;
-
-      *nto* | *qnx*)
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-       ;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       ;;
-
-      openbsd*)
-       if test -f /usr/libexec/ld.so; then
-         _LT_TAGVAR(hardcode_direct, $1)=yes
-         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-         fi
-         output_verbose_link_cmd=echo
-       else
-         _LT_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-           # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-           # KCC will only create a shared library if the output file
-           # ends with ".so" (or ".sl" for HP-UX), so rename the library
-           # to its proper name (with version) after linking.
-           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-           # Archives containing C++ object files must be created using
-           # the KAI C++ compiler.
-           case $host in
-             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
-             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
-           esac
-           ;;
-          RCC*)
-           # Rational C++ 2.4.1
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          cxx*)
-           case $host in
-             osf3*)
-               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-               ;;
-             *)
-               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-                 echo "-hidden">> $lib.exp~
-                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-                 $RM $lib.exp'
-               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-               ;;
-           esac
-
-           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           #
-           # There doesn't appear to be a way to prevent this compiler from
-           # explicitly linking system object files so we need to strip them
-           # from the output so that they don't get included in the library
-           # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-           ;;
-         *)
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-             case $host in
-               osf3*)
-                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-                 ;;
-               *)
-                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-                 ;;
-             esac
-
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-             # Commands to make compiler produce verbose output that lists
-             # what "hidden" libraries, object files and flags are used when
-             # linking a shared library.
-             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-           else
-             # FIXME: insert proper C++ library support
-             _LT_TAGVAR(ld_shlibs, $1)=no
-           fi
-           ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-           # Sun C++ 4.x
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          lcc*)
-           # Lucid
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          *)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-           # Sun C++ 4.2, 5.x and Centerline C++
-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
-           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-           case $host_os in
-             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-             *)
-               # The compiler driver will combine and reorder linker options,
-               # but understands `-z linker_flag'.
-               # Supported since Solaris 2.6 (maybe 2.5.1?)
-               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-               ;;
-           esac
-           _LT_TAGVAR(link_all_deplibs, $1)=yes
-
-           output_verbose_link_cmd='echo'
-
-           # Archives containing C++ object files must be created using
-           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-           # necessary to make sure instantiated templates are included
-           # in the archive.
-           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-           ;;
-          gcx*)
-           # Green Hills C++ Compiler
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-           # The C++ compiler must be used to create the archive.
-           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-           ;;
-          *)
-           # GNU C++ compiler with Solaris linker
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-               # Commands to make compiler produce verbose output that lists
-               # what "hidden" libraries, object files and flags are used when
-               # linking a shared library.
-               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-             else
-               # g++ 2.7 appears to require `-G' NOT `-shared' on this
-               # platform.
-               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-               # Commands to make compiler produce verbose output that lists
-               # what "hidden" libraries, object files and flags are used when
-               # linking a shared library.
-               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-             fi
-
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-             case $host_os in
-               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-               *)
-                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-                 ;;
-             esac
-           fi
-           ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-       # Note: We can NOT use -z defs as we might desire, because we do not
-       # link with -lc, and that would cause any symbols used from libc to
-       # always be unresolved, which means just about no library would
-       # ever link correctly.  If we're not using GNU ld we use -z text
-       # though, which does catch some bad symbols but isn't as heavy-handed
-       # as -z defs.
-       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-       _LT_TAGVAR(link_all_deplibs, $1)=yes
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-       runpath_var='LD_RUN_PATH'
-
-       case $cc_basename in
-          CC*)
-           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           ;;
-         *)
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           ;;
-       esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-           # NonStop-UX NCC 3.20
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          *)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-    esac
-
-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-_LT_EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-        prev=$p
-        continue
-       else
-        prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-        case $p in
-        -L* | -R*)
-          # Internal compiler library paths should come after those
-          # provided the user.  The postdeps already come after the
-          # user supplied libs so there is no need to process them.
-          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-          else
-            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-          fi
-          ;;
-        # The "-l" case would never come before the object being
-        # linked, so don't bother handling this case.
-        esac
-       else
-        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
-        else
-          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
-        fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-        pre_test_object_deps_done=yes
-        continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-          _LT_TAGVAR(predep_objects, $1)="$p"
-        else
-          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
-        fi
-       else
-        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-          _LT_TAGVAR(postdep_objects, $1)="$p"
-        else
-          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
-        fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  _LT_TAGVAR(predep_objects,$1)=
-  _LT_TAGVAR(postdep_objects,$1)=
-  _LT_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
-    [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
-    [Dependencies to place before and after the objects being linked to
-    create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
-    [The library search path used internally by the compiler when linking
-    a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${F77-"f77"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-  GCC=$G77
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-         test "$enable_shared" = yes && enable_static=no
-       fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${FC-"f95"}
-  compiler=$CC
-  GCC=$ac_cv_fc_compiler_gnu
-
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-         test "$enable_shared" = yes && enable_static=no
-       fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC="$lt_save_CC"
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
-  :
-  _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
-    [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-      AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_OBJDUMP
-# --------------
-# If we don't have a new enough Autoconf to choose the best objdump
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_OBJDUMP],
-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
-AC_SUBST([OBJDUMP])
-])
-
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
-    ;;
-  esac
-])
-
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-                     [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-                  [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_shared=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-       [Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_static=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-       [Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_fast_install=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-        [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
-       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-                [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-                [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-                [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-                [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-                [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-            [m4_foreach([_Lt_suffix],
-               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-                [lt_append([$1], [$2], [$3])$4],
-                [$5])],
-         [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-       [$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers                      -*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 3017 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
-      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too.  Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL                                            -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 9
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-m4_define([_AM_COND_VALUE_$1], [$2])dnl
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 10
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
-               [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_$1_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-  fi
-  am__universal=false
-  m4_case([$1], [CC],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac],
-    [CXX],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac])
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-       continue
-      else
-       break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-#serial 5
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`AS_DIRNAME("$mf")`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`AS_DIRNAME(["$file"])`
-      AS_MKDIR_P([$dirpart/$fdir])
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 16
-
-# This macro actually does too much.  Some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
-dnl Autoconf wants to disallow AM_ names.  We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
-  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-             [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-                            [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-                 [_AM_DEPENDENCIES(CC)],
-                 [define([AC_PROG_CC],
-                         defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                 [_AM_DEPENDENCIES(CXX)],
-                 [define([AC_PROG_CXX],
-                         defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-                 [_AM_DEPENDENCIES(OBJC)],
-                 [define([AC_PROG_OBJC],
-                         defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
-])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
-AC_CONFIG_COMMANDS_PRE(dnl
-[m4_provide_if([_AM_COMPILER_EXEEXT],
-  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
-
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
-dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
-dnl mangled by Autoconf and run in a shell conditional statement.
-m4_define([_AC_COMPILER_EXEEXT],
-m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-AC_SUBST(install_sh)])
-
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_PROG_LEX
-# -----------
-# Autoconf leaves LEX=: if lex or flex can't be found.  Change that to a
-# "missing" invocation, for better error output.
-AC_DEFUN([AM_PROG_LEX],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
-AC_REQUIRE([AC_PROG_LEX])dnl
-if test "$LEX" = :; then
-  LEX=${am_missing_run}flex
-fi])
-
-# Check to see how 'make' treats includes.                 -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-       @echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[[\\\"\#\$\&\'\`$am_lf]]*)
-    AC_MSG_ERROR([unsafe absolute working directory name]);;
-esac
-case $srcdir in
-  *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Public sister of _AM_SUBST_NOTMAKE.
-AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-#     tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-#     $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
-
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
-
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-  rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
diff --git a/xbmc/visualizations/Goom/goom2k4-0/config.guess b/xbmc/visualizations/Goom/goom2k4-0/config.guess
deleted file mode 100755 (executable)
index c2246a4..0000000
+++ /dev/null
@@ -1,1502 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-#   Free Software Foundation, Inc.
-
-timestamp='2009-12-30'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches@gnu.org> and include a ChangeLog
-# entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-       PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-       # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-       # switched to ELF, *-*-netbsd* would select the old
-       # object file format.  This provides both forward
-       # compatibility and a consistent mechanism for selecting the
-       # object file format.
-       #
-       # Note: NetBSD doesn't particularly care about the vendor
-       # portion of the name.  We always set it to "unknown".
-       sysctl="sysctl -n hw.machine_arch"
-       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-       case "${UNAME_MACHINE_ARCH}" in
-           armeb) machine=armeb-unknown ;;
-           arm*) machine=arm-unknown ;;
-           sh3el) machine=shl-unknown ;;
-           sh3eb) machine=sh-unknown ;;
-           sh5el) machine=sh5le-unknown ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-       esac
-       # The Operating System including object format, if it has switched
-       # to ELF recently, or will in the future.
-       case "${UNAME_MACHINE_ARCH}" in
-           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval $set_cc_for_build
-               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-                       | grep -q __ELF__
-               then
-                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-                   # Return netbsd for either.  FIX?
-                   os=netbsd
-               else
-                   os=netbsdelf
-               fi
-               ;;
-           *)
-               os=netbsd
-               ;;
-       esac
-       # The OS release
-       # Debian GNU/NetBSD machines have a different userland, and
-       # thus, need a distinct triplet. However, they do not need
-       # kernel version information, so it can be replaced with a
-       # suitable tag, in the style of linux-gnu.
-       case "${UNAME_VERSION}" in
-           Debian*)
-               release='-gnu'
-               ;;
-           *)
-               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-               ;;
-       esac
-       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-       # contains redundant information, the shorter form:
-       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}"
-       exit ;;
-    *:OpenBSD:*:*)
-       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-       exit ;;
-    *:ekkoBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-       exit ;;
-    *:SolidBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-       exit ;;
-    macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    *:MirBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    alpha:OSF1:*:*)
-       case $UNAME_RELEASE in
-       *4.0)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-               ;;
-       *5.*)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-               ;;
-       esac
-       # According to Compaq, /usr/sbin/psrinfo has been available on
-       # OSF/1 and Tru64 systems produced since 1995.  I hope that
-       # covers most systems running today.  This code pipes the CPU
-       # types through head -n 1, so we only detect the type of CPU 0.
-       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-       case "$ALPHA_CPU_TYPE" in
-           "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
-           "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
-           "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
-           "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
-           "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
-           "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
-           "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
-           "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
-           "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
-           "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
-       esac
-       # A Pn.n version is a patched version.
-       # A Vn.n version is a released version.
-       # A Tn.n version is a released field test version.
-       # A Xn.n version is an unreleased experimental baselevel.
-       # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       exit ;;
-    Alpha\ *:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # Should we change UNAME_MACHINE based on the output of uname instead
-       # of the specific Alpha model?
-       echo alpha-pc-interix
-       exit ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-       echo m68k-unknown-sysv4
-       exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-amigaos
-       exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-morphos
-       exit ;;
-    *:OS/390:*:*)
-       echo i370-ibm-openedition
-       exit ;;
-    *:z/VM:*:*)
-       echo s390-ibm-zvmoe
-       exit ;;
-    *:OS400:*:*)
-        echo powerpc-ibm-os400
-       exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix${UNAME_RELEASE}
-       exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
-       echo arm-unknown-riscos
-       exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-       echo hppa1.1-hitachi-hiuxmpp
-       exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-       if test "`(/bin/universe) 2>/dev/null`" = att ; then
-               echo pyramid-pyramid-sysv3
-       else
-               echo pyramid-pyramid-bsd
-       fi
-       exit ;;
-    NILE*:*:*:dcosx)
-       echo pyramid-pyramid-svr4
-       exit ;;
-    DRS?6000:unix:4.0:6*)
-       echo sparc-icl-nx6
-       exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-       case `/usr/bin/uname -p` in
-           sparc) echo sparc-icl-nx7; exit ;;
-       esac ;;
-    s390x:SunOS:*:*)
-       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-       echo i386-pc-auroraux${UNAME_RELEASE}
-       exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       eval $set_cc_for_build
-       SUN_ARCH="i386"
-       # If there is a compiler, see if it is configured for 64-bit objects.
-       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-       # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-               grep IS_64BIT_ARCH >/dev/null
-           then
-               SUN_ARCH="x86_64"
-           fi
-       fi
-       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:6*:*)
-       # According to config.sub, this is the proper way to canonicalize
-       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-       # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:*:*)
-       case "`/usr/bin/arch -k`" in
-           Series*|S4*)
-               UNAME_RELEASE=`uname -v`
-               ;;
-       esac
-       # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-       exit ;;
-    sun3*:SunOS:*:*)
-       echo m68k-sun-sunos${UNAME_RELEASE}
-       exit ;;
-    sun*:*:4.2BSD:*)
-       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-       case "`/bin/arch`" in
-           sun3)
-               echo m68k-sun-sunos${UNAME_RELEASE}
-               ;;
-           sun4)
-               echo sparc-sun-sunos${UNAME_RELEASE}
-               ;;
-       esac
-       exit ;;
-    aushp:SunOS:*:*)
-       echo sparc-auspex-sunos${UNAME_RELEASE}
-       exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
-    m68k:machten:*:*)
-       echo m68k-apple-machten${UNAME_RELEASE}
-       exit ;;
-    powerpc:machten:*:*)
-       echo powerpc-apple-machten${UNAME_RELEASE}
-       exit ;;
-    RISC*:Mach:*:*)
-       echo mips-dec-mach_bsd4.3
-       exit ;;
-    RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix${UNAME_RELEASE}
-       exit ;;
-    VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix${UNAME_RELEASE}
-       exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix${UNAME_RELEASE}
-       exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-       int main (int argc, char *argv[]) {
-#else
-       int main (argc, argv) int argc; char *argv[]; {
-#endif
-       #if defined (host_mips) && defined (MIPSEB)
-       #if defined (SYSTYPE_SYSV)
-         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_SVR4)
-         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-       #endif
-       #endif
-         exit (-1);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c &&
-         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-         SYSTEM_NAME=`$dummy $dummyarg` &&
-           { echo "$SYSTEM_NAME"; exit; }
-       echo mips-mips-riscos${UNAME_RELEASE}
-       exit ;;
-    Motorola:PowerMAX_OS:*:*)
-       echo powerpc-motorola-powermax
-       exit ;;
-    Motorola:*:4.3:PL8-*)
-       echo powerpc-harris-powermax
-       exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-       echo powerpc-harris-powermax
-       exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-       echo powerpc-harris-powerunix
-       exit ;;
-    m88k:CX/UX:7*:*)
-       echo m88k-harris-cxux7
-       exit ;;
-    m88k:*:4*:R4*)
-       echo m88k-motorola-sysv4
-       exit ;;
-    m88k:*:3*:R3*)
-       echo m88k-motorola-sysv3
-       exit ;;
-    AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-       then
-           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-              [ ${TARGET_BINARY_INTERFACE}x = x ]
-           then
-               echo m88k-dg-dgux${UNAME_RELEASE}
-           else
-               echo m88k-dg-dguxbcs${UNAME_RELEASE}
-           fi
-       else
-           echo i586-dg-dgux${UNAME_RELEASE}
-       fi
-       exit ;;
-    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
-       echo m88k-dolphin-sysv3
-       exit ;;
-    M88*:*:R3*:*)
-       # Delta 88k system running SVR3
-       echo m88k-motorola-sysv3
-       exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-       echo m88k-tektronix-sysv3
-       exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-       echo m68k-tektronix-bsd
-       exit ;;
-    *:IRIX*:*:*)
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-       echo i386-ibm-aix
-       exit ;;
-    ia64:AIX:*:*)
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:2:3)
-       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               eval $set_cc_for_build
-               sed 's/^                //' << EOF >$dummy.c
-               #include <sys/systemcfg.h>
-
-               main()
-                       {
-                       if (!__power_pc())
-                               exit(1);
-                       puts("powerpc-ibm-aix3.2.5");
-                       exit(0);
-                       }
-EOF
-               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-               then
-                       echo "$SYSTEM_NAME"
-               else
-                       echo rs6000-ibm-aix3.2.5
-               fi
-       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-               echo rs6000-ibm-aix3.2.4
-       else
-               echo rs6000-ibm-aix3.2
-       fi
-       exit ;;
-    *:AIX:*:[456])
-       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-               IBM_ARCH=rs6000
-       else
-               IBM_ARCH=powerpc
-       fi
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-       echo romp-ibm-bsd4.4
-       exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-       exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit ;;
-    DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit ;;
-    9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-           9000/[678][0-9][0-9])
-               if [ -x /usr/bin/getconf ]; then
-                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
-               fi
-               if [ "${HP_ARCH}" = "" ]; then
-                   eval $set_cc_for_build
-                   sed 's/^              //' << EOF >$dummy.c
-
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
-
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
-
-                  switch (cpu)
-               {
-               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-                   switch (bits)
-                       {
-                       case 64: puts ("hppa2.0w"); break;
-                       case 32: puts ("hppa2.0n"); break;
-                       default: puts ("hppa2.0"); break;
-                       } break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-                   puts ("hppa2.0"); break;
-              #endif
-               default: puts ("hppa1.0"); break;
-               }
-                  exit (0);
-              }
-EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-                   test -z "$HP_ARCH" && HP_ARCH=hppa
-               fi ;;
-       esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
-       then
-           eval $set_cc_for_build
-
-           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-           # generating 64-bit code.  GNU and HP use different nomenclature:
-           #
-           # $ CC_FOR_BUILD=cc ./config.guess
-           # => hppa2.0w-hp-hpux11.23
-           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-           # => hppa64-hp-hpux11.23
-
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-               grep -q __LP64__
-           then
-               HP_ARCH="hppa2.0w"
-           else
-               HP_ARCH="hppa64"
-           fi
-       fi
-       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-       exit ;;
-    ia64:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux${HPUX_REV}
-       exit ;;
-    3050*:HI-UX:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <unistd.h>
-       int
-       main ()
-       {
-         long cpu = sysconf (_SC_CPU_VERSION);
-         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-            results, however.  */
-         if (CPU_IS_PA_RISC (cpu))
-           {
-             switch (cpu)
-               {
-                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-                 default: puts ("hppa-hitachi-hiuxwe2"); break;
-               }
-           }
-         else if (CPU_IS_HP_MC68K (cpu))
-           puts ("m68k-hitachi-hiuxwe2");
-         else puts ("unknown-hitachi-hiuxwe2");
-         exit (0);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-               { echo "$SYSTEM_NAME"; exit; }
-       echo unknown-hitachi-hiuxwe2
-       exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-       echo hppa1.1-hp-bsd
-       exit ;;
-    9000/8??:4.3bsd:*:*)
-       echo hppa1.0-hp-bsd
-       exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-       echo hppa1.0-hp-mpeix
-       exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-       echo hppa1.1-hp-osf
-       exit ;;
-    hp8??:OSF1:*:*)
-       echo hppa1.0-hp-osf
-       exit ;;
-    i*86:OSF1:*:*)
-       if [ -x /usr/sbin/sysversion ] ; then
-           echo ${UNAME_MACHINE}-unknown-osf1mk
-       else
-           echo ${UNAME_MACHINE}-unknown-osf1
-       fi
-       exit ;;
-    parisc*:Lites*:*:*)
-       echo hppa1.1-hp-lites
-       exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-       echo c1-convex-bsd
-        exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-        exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-       echo c34-convex-bsd
-        exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-       echo c38-convex-bsd
-        exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-       echo c4-convex-bsd
-        exit ;;
-    CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*[A-Z]90:*:*:*)
-       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-             -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*TS:*:*:*)
-       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    *:UNICOS/mp:*:*)
-       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
-    5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-       exit ;;
-    sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi${UNAME_RELEASE}
-       exit ;;
-    *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit ;;
-    *:FreeBSD:*:*)
-       case ${UNAME_MACHINE} in
-           pc98)
-               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           amd64)
-               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           *)
-               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-       esac
-       exit ;;
-    i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
-       exit ;;
-    *:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
-       exit ;;
-    i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
-       exit ;;
-    i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
-       exit ;;
-    *:Interix*:*)
-       case ${UNAME_MACHINE} in
-           x86)
-               echo i586-pc-interix${UNAME_RELEASE}
-               exit ;;
-           authenticamd | genuineintel | EM64T)
-               echo x86_64-unknown-interix${UNAME_RELEASE}
-               exit ;;
-           IA64)
-               echo ia64-unknown-interix${UNAME_RELEASE}
-               exit ;;
-       esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-       echo i${UNAME_MACHINE}-pc-mks
-       exit ;;
-    8664:Windows_NT:*)
-       echo x86_64-pc-mks
-       exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit ;;
-    i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
-       exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-       echo x86_64-unknown-cygwin
-       exit ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit ;;
-    prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    *:GNU:*:*)
-       # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit ;;
-    *:GNU/*:*:*)
-       # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-       exit ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
-       exit ;;
-    alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-         EV5)   UNAME_MACHINE=alphaev5 ;;
-         EV56)  UNAME_MACHINE=alphaev56 ;;
-         PCA56) UNAME_MACHINE=alphapca56 ;;
-         PCA57) UNAME_MACHINE=alphapca56 ;;
-         EV6)   UNAME_MACHINE=alphaev6 ;;
-         EV67)  UNAME_MACHINE=alphaev67 ;;
-         EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-       objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-       exit ;;
-    arm*:Linux:*:*)
-       eval $set_cc_for_build
-       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-           | grep -q __ARM_EABI__
-       then
-           echo ${UNAME_MACHINE}-unknown-linux-gnu
-       else
-           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
-       fi
-       exit ;;
-    avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    cris:Linux:*:*)
-       echo cris-axis-linux-gnu
-       exit ;;
-    crisv32:Linux:*:*)
-       echo crisv32-axis-linux-gnu
-       exit ;;
-    frv:Linux:*:*)
-       echo frv-unknown-linux-gnu
-       exit ;;
-    i*86:Linux:*:*)
-       LIBC=gnu
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #ifdef __dietlibc__
-       LIBC=dietlibc
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-       exit ;;
-    ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef ${UNAME_MACHINE}
-       #undef ${UNAME_MACHINE}el
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=${UNAME_MACHINE}el
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=${UNAME_MACHINE}
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-       ;;
-    or32:Linux:*:*)
-       echo or32-unknown-linux-gnu
-       exit ;;
-    padre:Linux:*:*)
-       echo sparc-unknown-linux-gnu
-       exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
-       exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-       # Look for CPU level
-       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-gnu ;;
-         PA8*) echo hppa2.0-unknown-linux-gnu ;;
-         *)    echo hppa-unknown-linux-gnu ;;
-       esac
-       exit ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
-       exit ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
-       exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux
-       exit ;;
-    sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-gnu
-       exit ;;
-    x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
-       exit ;;
-    xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    i*86:DYNIX/ptx:4*:*)
-       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-       # earlier versions are messed up and put the nodename in both
-       # sysname and nodename.
-       echo i386-sequent-sysv4
-       exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
-       # I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
-       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-       exit ;;
-    i*86:OS/2:*:*)
-       # If we were able to find `uname', then EMX Unix compatibility
-       # is probably installed.
-       echo ${UNAME_MACHINE}-pc-os2-emx
-       exit ;;
-    i*86:XTS-300:*:STOP)
-       echo ${UNAME_MACHINE}-unknown-stop
-       exit ;;
-    i*86:atheos:*:*)
-       echo ${UNAME_MACHINE}-unknown-atheos
-       exit ;;
-    i*86:syllable:*:*)
-       echo ${UNAME_MACHINE}-pc-syllable
-       exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-       echo i386-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    i*86:*DOS:*:*)
-       echo ${UNAME_MACHINE}-pc-msdosdjgpp
-       exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-       else
-               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-       fi
-       exit ;;
-    i*86:*:5:[678]*)
-       # UnixWare 7.x, OpenUNIX and OpenServer 6.
-       case `/bin/uname -X | grep "^Machine"` in
-           *486*)           UNAME_MACHINE=i486 ;;
-           *Pentium)        UNAME_MACHINE=i586 ;;
-           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-       esac
-       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-       exit ;;
-    i*86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-       elif /bin/uname -X 2>/dev/null >/dev/null ; then
-               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-                       && UNAME_MACHINE=i586
-               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-       else
-               echo ${UNAME_MACHINE}-pc-sysv32
-       fi
-       exit ;;
-    pc:*:*:*)
-       # Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
-       # Note: whatever this is, it MUST be the same as what config.sub
-       # prints for the "djgpp" host, or else GDB configury will decide that
-       # this is a cross-build.
-       echo i586-pc-msdosdjgpp
-        exit ;;
-    Intel:Mach:3*:*)
-       echo i386-pc-mach3
-       exit ;;
-    paragon:*:*:*)
-       echo i860-intel-osf1
-       exit ;;
-    i860:*:4.*:*) # i860-SVR4
-       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-       else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-       fi
-       exit ;;
-    mini*:CTIX:SYS*5:*)
-       # "miniframe"
-       echo m68010-convergent-sysv
-       exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-       echo m68k-convergent-sysv
-       exit ;;
-    M680?0:D-NIX:5.3:*)
-       echo m68k-diab-dnix
-       exit ;;
-    M68*:*:R3V[5678]*:*)
-       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-       OS_REL=''
-       test -r /etc/.relid \
-       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-       OS_REL='.3'
-       test -r /etc/.relid \
-           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-       echo m68k-atari-sysv4
-       exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-       echo powerpc-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv${UNAME_RELEASE}
-       exit ;;
-    RM*:ReliantUNIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
-    RM*:SINIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
-    *:SINIX-*:*:*)
-       if uname -p 2>/dev/null >/dev/null ; then
-               UNAME_MACHINE=`(uname -p) 2>/dev/null`
-               echo ${UNAME_MACHINE}-sni-sysv4
-       else
-               echo ns32k-sni-sysv
-       fi
-       exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
-    *:UNIX_System_V:4*:FTX*)
-       # From Gerald Hewes <hewes@openmarket.com>.
-       # How about differentiating between stratus architectures? -djm
-       echo hppa1.1-stratus-sysv4
-       exit ;;
-    *:*:*:FTX*)
-       # From seanf@swdc.stratus.com.
-       echo i860-stratus-sysv4
-       exit ;;
-    i*86:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo ${UNAME_MACHINE}-stratus-vos
-       exit ;;
-    *:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo hppa1.1-stratus-vos
-       exit ;;
-    mc68*:A/UX:*:*)
-       echo m68k-apple-aux${UNAME_RELEASE}
-       exit ;;
-    news*:NEWS-OS:6*:*)
-       echo mips-sony-newsos6
-       exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-       if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
-       else
-               echo mips-unknown-sysv${UNAME_RELEASE}
-       fi
-        exit ;;
-    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
-       echo powerpc-be-beos
-       exit ;;
-    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
-       echo powerpc-apple-beos
-       exit ;;
-    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
-       echo i586-pc-beos
-       exit ;;
-    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
-       echo i586-pc-haiku
-       exit ;;
-    SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux${UNAME_RELEASE}
-       exit ;;
-    Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Darwin:*:*)
-       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       case $UNAME_PROCESSOR in
-           i386)
-               eval $set_cc_for_build
-               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-                     grep IS_64BIT_ARCH >/dev/null
-                 then
-                     UNAME_PROCESSOR="x86_64"
-                 fi
-               fi ;;
-           unknown) UNAME_PROCESSOR=powerpc ;;
-       esac
-       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-       exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-       UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
-               UNAME_PROCESSOR=i386
-               UNAME_MACHINE=pc
-       fi
-       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-       exit ;;
-    *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
-       echo nse-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    *:NonStop-UX:*:*)
-       echo mips-compaq-nonstopux
-       exit ;;
-    BS2000:POSIX*:*:*)
-       echo bs2000-siemens-sysv
-       exit ;;
-    DS/*:UNIX_System_V:*:*)
-       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-       exit ;;
-    *:Plan9:*:*)
-       # "uname -m" is not consistent, so use $cputype instead. 386
-       # is converted to i386 for consistency with other x86
-       # operating systems.
-       if test "$cputype" = "386"; then
-           UNAME_MACHINE=i386
-       else
-           UNAME_MACHINE="$cputype"
-       fi
-       echo ${UNAME_MACHINE}-unknown-plan9
-       exit ;;
-    *:TOPS-10:*:*)
-       echo pdp10-unknown-tops10
-       exit ;;
-    *:TENEX:*:*)
-       echo pdp10-unknown-tenex
-       exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-       echo pdp10-dec-tops20
-       exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-       echo pdp10-xkl-tops20
-       exit ;;
-    *:TOPS-20:*:*)
-       echo pdp10-unknown-tops20
-       exit ;;
-    *:ITS:*:*)
-       echo pdp10-unknown-its
-       exit ;;
-    SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
-       exit ;;
-    *:DragonFly:*:*)
-       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-       exit ;;
-    *:*VMS:*:*)
-       UNAME_MACHINE=`(uname -p) 2>/dev/null`
-       case "${UNAME_MACHINE}" in
-           A*) echo alpha-dec-vms ; exit ;;
-           I*) echo ia64-dec-vms ; exit ;;
-           V*) echo vax-dec-vms ; exit ;;
-       esac ;;
-    *:XENIX:*:SysV)
-       echo i386-pc-xenix
-       exit ;;
-    i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-       exit ;;
-    i*86:rdos:*:*)
-       echo ${UNAME_MACHINE}-pc-rdos
-       exit ;;
-    i*86:AROS:*:*)
-       echo ${UNAME_MACHINE}-pc-aros
-       exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-         ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-       printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-       printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-       { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-       echo c1-convex-bsd
-       exit ;;
-    c2*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-       exit ;;
-    c34*)
-       echo c34-convex-bsd
-       exit ;;
-    c38*)
-       echo c38-convex-bsd
-       exit ;;
-    c4*)
-       echo c4-convex-bsd
-       exit ;;
-    esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/xbmc/visualizations/Goom/goom2k4-0/config.sub b/xbmc/visualizations/Goom/goom2k4-0/config.sub
deleted file mode 100755 (executable)
index c2d1257..0000000
+++ /dev/null
@@ -1,1714 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-#   Free Software Foundation, Inc.
-
-timestamp='2010-01-22'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-       -sun*os*)
-               # Prevent following clause from handling this invalid input.
-               ;;
-       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze)
-               os=
-               basic_machine=$1
-               ;;
-        -bluegene*)
-               os=-cnk
-               ;;
-       -sim | -cisco | -oki | -wec | -winbond)
-               os=
-               basic_machine=$1
-               ;;
-       -scout)
-               ;;
-       -wrs)
-               os=-vxworks
-               basic_machine=$1
-               ;;
-       -chorusos*)
-               os=-chorusos
-               basic_machine=$1
-               ;;
-       -chorusrdb)
-               os=-chorusrdb
-               basic_machine=$1
-               ;;
-       -hiux*)
-               os=-hiuxwe2
-               ;;
-       -sco6)
-               os=-sco5v6
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5)
-               os=-sco3.2v5
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco4)
-               os=-sco3.2v4
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2.[4-9]*)
-               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2v[4-9]*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5v6*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco*)
-               os=-sco3.2v2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -udk*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -isc)
-               os=-isc2.2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -clix*)
-               basic_machine=clipper-intergraph
-               ;;
-       -isc*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -lynx*)
-               os=-lynxos
-               ;;
-       -ptx*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-               ;;
-       -windowsnt*)
-               os=`echo $os | sed -e 's/windowsnt/winnt/'`
-               ;;
-       -psos*)
-               os=-psos
-               ;;
-       -mint | -mint[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-       1750a | 580 \
-       | a29k \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-       | bfin \
-       | c4x | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | fido | fr30 | frv \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | i370 | i860 | i960 | ia64 \
-       | ip2k | iq2000 \
-       | lm32 \
-       | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | mcore | mep | metag \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64octeon | mips64octeonel \
-       | mips64orion | mips64orionel \
-       | mips64r5900 | mips64r5900el \
-       | mips64vr | mips64vrel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mips64vr5900 | mips64vr5900el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | moxie \
-       | mt \
-       | msp430 \
-       | nios | nios2 \
-       | ns16k | ns32k \
-       | or32 \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-       | pyramid \
-       | rx \
-       | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu | strongarm \
-       | tahoe | thumb | tic4x | tic80 | tron \
-       | ubicom32 \
-       | v850 | v850e \
-       | we32k \
-       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
-       | z8k | z80)
-               basic_machine=$basic_machine-unknown
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-               # Motorola 68HC11/12.
-               basic_machine=$basic_machine-unknown
-               os=-none
-               ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-               ;;
-       ms1)
-               basic_machine=mt-unknown
-               ;;
-
-       # We use `pc' rather than `unknown'
-       # because (1) that's what they normally are, and
-       # (2) the word "unknown" tends to confuse beginning users.
-       i*86 | x86_64)
-         basic_machine=$basic_machine-pc
-         ;;
-       # Object if more than one company name word.
-       *-*-*)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-       # Recognize the basic CPU types with company name.
-       580-* \
-       | a29k-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* | avr32-* \
-       | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-       | clipper-* | craynv-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | lm32-* \
-       | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64octeon-* | mips64octeonel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64r5900-* | mips64r5900el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mips64vr5900-* | mips64vr5900el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipstx39-* | mipstx39el-* \
-       | mmix-* \
-       | mt-* \
-       | msp430-* \
-       | nios-* | nios2-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-       | pyramid-* \
-       | romp-* | rs6000-* | rx-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-       | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-       | tahoe-* | thumb-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile-* | tilegx-* \
-       | tron-* \
-       | ubicom32-* \
-       | v850-* | v850e-* | vax-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
-       | xstormy16-* | xtensa*-* \
-       | ymp-* \
-       | z8k-* | z80-*)
-               ;;
-       # Recognize the basic CPU types without company name, with glob match.
-       xtensa*)
-               basic_machine=$basic_machine-unknown
-               ;;
-       # Recognize the various machine names and aliases which stand
-       # for a CPU type and a company and sometimes even an OS.
-       386bsd)
-               basic_machine=i386-unknown
-               os=-bsd
-               ;;
-       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-               basic_machine=m68000-att
-               ;;
-       3b*)
-               basic_machine=we32k-att
-               ;;
-       a29khif)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       abacus)
-               basic_machine=abacus-unknown
-               ;;
-       adobe68k)
-               basic_machine=m68010-adobe
-               os=-scout
-               ;;
-       alliant | fx80)
-               basic_machine=fx80-alliant
-               ;;
-       altos | altos3068)
-               basic_machine=m68k-altos
-               ;;
-       am29k)
-               basic_machine=a29k-none
-               os=-bsd
-               ;;
-       amd64)
-               basic_machine=x86_64-pc
-               ;;
-       amd64-*)
-               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       amdahl)
-               basic_machine=580-amdahl
-               os=-sysv
-               ;;
-       amiga | amiga-*)
-               basic_machine=m68k-unknown
-               ;;
-       amigaos | amigados)
-               basic_machine=m68k-unknown
-               os=-amigaos
-               ;;
-       amigaunix | amix)
-               basic_machine=m68k-unknown
-               os=-sysv4
-               ;;
-       apollo68)
-               basic_machine=m68k-apollo
-               os=-sysv
-               ;;
-       apollo68bsd)
-               basic_machine=m68k-apollo
-               os=-bsd
-               ;;
-       aros)
-               basic_machine=i386-pc
-               os=-aros
-               ;;
-       aux)
-               basic_machine=m68k-apple
-               os=-aux
-               ;;
-       balance)
-               basic_machine=ns32k-sequent
-               os=-dynix
-               ;;
-       blackfin)
-               basic_machine=bfin-unknown
-               os=-linux
-               ;;
-       blackfin-*)
-               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       bluegene*)
-               basic_machine=powerpc-ibm
-               os=-cnk
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-        cegcc)
-               basic_machine=arm-unknown
-               os=-cegcc
-               ;;
-       convex-c1)
-               basic_machine=c1-convex
-               os=-bsd
-               ;;
-       convex-c2)
-               basic_machine=c2-convex
-               os=-bsd
-               ;;
-       convex-c32)
-               basic_machine=c32-convex
-               os=-bsd
-               ;;
-       convex-c34)
-               basic_machine=c34-convex
-               os=-bsd
-               ;;
-       convex-c38)
-               basic_machine=c38-convex
-               os=-bsd
-               ;;
-       cray | j90)
-               basic_machine=j90-cray
-               os=-unicos
-               ;;
-       craynv)
-               basic_machine=craynv-cray
-               os=-unicosmp
-               ;;
-       cr16)
-               basic_machine=cr16-unknown
-               os=-elf
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       crisv32 | crisv32-* | etraxfs*)
-               basic_machine=crisv32-axis
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       crx)
-               basic_machine=crx-unknown
-               os=-elf
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
-               ;;
-       decsystem10* | dec10*)
-               basic_machine=pdp10-dec
-               os=-tops10
-               ;;
-       decsystem20* | dec20*)
-               basic_machine=pdp10-dec
-               os=-tops20
-               ;;
-       delta | 3300 | motorola-3300 | motorola-delta \
-             | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       dicos)
-               basic_machine=i686-pc
-               os=-dicos
-               ;;
-       djgpp)
-               basic_machine=i586-pc
-               os=-msdosdjgpp
-               ;;
-       dpx20 | dpx20-*)
-               basic_machine=rs6000-bull
-               os=-bosx
-               ;;
-       dpx2* | dpx2*-bull)
-               basic_machine=m68k-bull
-               os=-sysv3
-               ;;
-       ebmon29k)
-               basic_machine=a29k-amd
-               os=-ebmon
-               ;;
-       elxsi)
-               basic_machine=elxsi-elxsi
-               os=-bsd
-               ;;
-       encore | umax | mmax)
-               basic_machine=ns32k-encore
-               ;;
-       es1800 | OSE68k | ose68k | ose | OSE)
-               basic_machine=m68k-ericsson
-               os=-ose
-               ;;
-       fx2800)
-               basic_machine=i860-alliant
-               ;;
-       genix)
-               basic_machine=ns32k-ns
-               ;;
-       gmicro)
-               basic_machine=tron-gmicro
-               os=-sysv
-               ;;
-       go32)
-               basic_machine=i386-pc
-               os=-go32
-               ;;
-       h3050r* | hiux*)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       h8300hms)
-               basic_machine=h8300-hitachi
-               os=-hms
-               ;;
-       h8300xray)
-               basic_machine=h8300-hitachi
-               os=-xray
-               ;;
-       h8500hms)
-               basic_machine=h8500-hitachi
-               os=-hms
-               ;;
-       harris)
-               basic_machine=m88k-harris
-               os=-sysv3
-               ;;
-       hp300-*)
-               basic_machine=m68k-hp
-               ;;
-       hp300bsd)
-               basic_machine=m68k-hp
-               os=-bsd
-               ;;
-       hp300hpux)
-               basic_machine=m68k-hp
-               os=-hpux
-               ;;
-       hp3k9[0-9][0-9] | hp9[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k2[0-9][0-9] | hp9k31[0-9])
-               basic_machine=m68000-hp
-               ;;
-       hp9k3[2-9][0-9])
-               basic_machine=m68k-hp
-               ;;
-       hp9k6[0-9][0-9] | hp6[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k7[0-79][0-9] | hp7[0-79][0-9])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k78[0-9] | hp78[0-9])
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][13679] | hp8[0-9][13679])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][0-9] | hp8[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hppa-next)
-               os=-nextstep3
-               ;;
-       hppaosf)
-               basic_machine=hppa1.1-hp
-               os=-osf
-               ;;
-       hppro)
-               basic_machine=hppa1.1-hp
-               os=-proelf
-               ;;
-       i370-ibm* | ibm*)
-               basic_machine=i370-ibm
-               ;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-       i*86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
-               ;;
-       i*86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
-               ;;
-       i*86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv
-               ;;
-       i*86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
-               ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
-               ;;
-       i386-vsta | vsta)
-               basic_machine=i386-unknown
-               os=-vsta
-               ;;
-       iris | iris4d)
-               basic_machine=mips-sgi
-               case $os in
-                   -irix*)
-                       ;;
-                   *)
-                       os=-irix4
-                       ;;
-               esac
-               ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       m68knommu)
-               basic_machine=m68k-unknown
-               os=-linux
-               ;;
-       m68knommu-*)
-               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       m88k-omron*)
-               basic_machine=m88k-omron
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-        microblaze)
-               basic_machine=microblaze-xilinx
-               ;;
-       mingw32)
-               basic_machine=i386-pc
-               os=-mingw32
-               ;;
-       mingw32ce)
-               basic_machine=arm-unknown
-               os=-mingw32ce
-               ;;
-       miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       ms1-*)
-               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
-               ;;
-       ncr3000)
-               basic_machine=i486-ncr
-               os=-sysv4
-               ;;
-       netbsd386)
-               basic_machine=i386-unknown
-               os=-netbsd
-               ;;
-       netwinder)
-               basic_machine=armv4l-rebel
-               os=-linux
-               ;;
-       news | news700 | news800 | news900)
-               basic_machine=m68k-sony
-               os=-newsos
-               ;;
-       news1000)
-               basic_machine=m68030-sony
-               os=-newsos
-               ;;
-       news-3600 | risc-news)
-               basic_machine=mips-sony
-               os=-newsos
-               ;;
-       necv70)
-               basic_machine=v70-nec
-               os=-sysv
-               ;;
-       next | m*-next )
-               basic_machine=m68k-next
-               case $os in
-                   -nextstep* )
-                       ;;
-                   -ns2*)
-                     os=-nextstep2
-                       ;;
-                   *)
-                     os=-nextstep3
-                       ;;
-               esac
-               ;;
-       nh3000)
-               basic_machine=m68k-harris
-               os=-cxux
-               ;;
-       nh[45]000)
-               basic_machine=m88k-harris
-               os=-cxux
-               ;;
-       nindy960)
-               basic_machine=i960-intel
-               os=-nindy
-               ;;
-       mon960)
-               basic_machine=i960-intel
-               os=-mon960
-               ;;
-       nonstopux)
-               basic_machine=mips-compaq
-               os=-nonstopux
-               ;;
-       np1)
-               basic_machine=np1-gould
-               ;;
-       nsr-tandem)
-               basic_machine=nsr-tandem
-               ;;
-       op50n-* | op60c-*)
-               basic_machine=hppa1.1-oki
-               os=-proelf
-               ;;
-       openrisc | openrisc-*)
-               basic_machine=or32-unknown
-               ;;
-       os400)
-               basic_machine=powerpc-ibm
-               os=-os400
-               ;;
-       OSE68000 | ose68000)
-               basic_machine=m68000-ericsson
-               os=-ose
-               ;;
-       os68k)
-               basic_machine=m68k-none
-               os=-os68k
-               ;;
-       pa-hitachi)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       paragon)
-               basic_machine=i860-intel
-               os=-osf
-               ;;
-       parisc)
-               basic_machine=hppa-unknown
-               os=-linux
-               ;;
-       parisc-*)
-               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       pbd)
-               basic_machine=sparc-tti
-               ;;
-       pbb)
-               basic_machine=m68k-tti
-               ;;
-       pc532 | pc532-*)
-               basic_machine=ns32k-pc532
-               ;;
-       pc98)
-               basic_machine=i386-pc
-               ;;
-       pc98-*)
-               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon | athlon_*)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2 | pentiumiii | pentium3)
-               basic_machine=i686-pc
-               ;;
-       pentium4)
-               basic_machine=i786-pc
-               ;;
-       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumpro-* | p6-* | 6x86-* | athlon-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium4-*)
-               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pn)
-               basic_machine=pn-gould
-               ;;
-       power)  basic_machine=power-ibm
-               ;;
-       ppc)    basic_machine=powerpc-unknown
-               ;;
-       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle | ppc-le | powerpc-little)
-               basic_machine=powerpcle-unknown
-               ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64)  basic_machine=powerpc64-unknown
-               ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-               basic_machine=powerpc64le-unknown
-               ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ps2)
-               basic_machine=i386-ibm
-               ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
-               ;;
-       rdos)
-               basic_machine=i386-pc
-               os=-rdos
-               ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       rm[46]00)
-               basic_machine=mips-siemens
-               ;;
-       rtpc | rtpc-*)
-               basic_machine=romp-ibm
-               ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
-               ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
-               ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
-               ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
-               ;;
-       sde)
-               basic_machine=mipsisa32-sde
-               os=-elf
-               ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
-               ;;
-       sequent)
-               basic_machine=i386-sequent
-               ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
-               ;;
-       sh5el)
-               basic_machine=sh5le-unknown
-               ;;
-       sh64)
-               basic_machine=sh64-unknown
-               ;;
-       sparclite-wrs | simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
-               ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
-               ;;
-       spur)
-               basic_machine=spur-unknown
-               ;;
-       st2000)
-               basic_machine=m68k-tandem
-               ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
-               ;;
-       sun2)
-               basic_machine=m68000-sun
-               ;;
-       sun2os3)
-               basic_machine=m68000-sun
-               os=-sunos3
-               ;;
-       sun2os4)
-               basic_machine=m68000-sun
-               os=-sunos4
-               ;;
-       sun3os3)
-               basic_machine=m68k-sun
-               os=-sunos3
-               ;;
-       sun3os4)
-               basic_machine=m68k-sun
-               os=-sunos4
-               ;;
-       sun4os3)
-               basic_machine=sparc-sun
-               os=-sunos3
-               ;;
-       sun4os4)
-               basic_machine=sparc-sun
-               os=-sunos4
-               ;;
-       sun4sol2)
-               basic_machine=sparc-sun
-               os=-solaris2
-               ;;
-       sun3 | sun3-*)
-               basic_machine=m68k-sun
-               ;;
-       sun4)
-               basic_machine=sparc-sun
-               ;;
-       sun386 | sun386i | roadrunner)
-               basic_machine=i386-sun
-               ;;
-       sv1)
-               basic_machine=sv1-cray
-               os=-unicos
-               ;;
-       symmetry)
-               basic_machine=i386-sequent
-               os=-dynix
-               ;;
-       t3e)
-               basic_machine=alphaev5-cray
-               os=-unicos
-               ;;
-       t90)
-               basic_machine=t90-cray
-               os=-unicos
-               ;;
-       tic54x | c54x*)
-               basic_machine=tic54x-unknown
-               os=-coff
-               ;;
-       tic55x | c55x*)
-               basic_machine=tic55x-unknown
-               os=-coff
-               ;;
-       tic6x | c6x*)
-               basic_machine=tic6x-unknown
-               os=-coff
-               ;;
-        # This must be matched before tile*.
-        tilegx*)
-               basic_machine=tilegx-unknown
-               os=-linux-gnu
-               ;;
-       tile*)
-               basic_machine=tile-unknown
-               os=-linux-gnu
-               ;;
-       tx39)
-               basic_machine=mipstx39-unknown
-               ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
-               ;;
-       toad1)
-               basic_machine=pdp10-xkl
-               os=-tops20
-               ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
-               ;;
-       tpf)
-               basic_machine=s390x-ibm
-               os=-tpf
-               ;;
-       udi29k)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       ultra3)
-               basic_machine=a29k-nyu
-               os=-sym1
-               ;;
-       v810 | necv810)
-               basic_machine=v810-nec
-               os=-none
-               ;;
-       vaxv)
-               basic_machine=vax-dec
-               os=-sysv
-               ;;
-       vms)
-               basic_machine=vax-dec
-               os=-vms
-               ;;
-       vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
-               ;;
-       vxworks960)
-               basic_machine=i960-wrs
-               os=-vxworks
-               ;;
-       vxworks68)
-               basic_machine=m68k-wrs
-               os=-vxworks
-               ;;
-       vxworks29k)
-               basic_machine=a29k-wrs
-               os=-vxworks
-               ;;
-       w65*)
-               basic_machine=w65-wdc
-               os=-none
-               ;;
-       w89k-*)
-               basic_machine=hppa1.1-winbond
-               os=-proelf
-               ;;
-       xbox)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       xps | xps100)
-               basic_machine=xps100-honeywell
-               ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
-               ;;
-       z8k-*-coff)
-               basic_machine=z8k-unknown
-               os=-sim
-               ;;
-       z80-*-coff)
-               basic_machine=z80-unknown
-               os=-sim
-               ;;
-       none)
-               basic_machine=none-none
-               os=-none
-               ;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-       w89k)
-               basic_machine=hppa1.1-winbond
-               ;;
-       op50n)
-               basic_machine=hppa1.1-oki
-               ;;
-       op60c)
-               basic_machine=hppa1.1-oki
-               ;;
-       romp)
-               basic_machine=romp-ibm
-               ;;
-       mmix)
-               basic_machine=mmix-knuth
-               ;;
-       rs6000)
-               basic_machine=rs6000-ibm
-               ;;
-       vax)
-               basic_machine=vax-dec
-               ;;
-       pdp10)
-               # there are many clones, so DEC is not a safe bet
-               basic_machine=pdp10-unknown
-               ;;
-       pdp11)
-               basic_machine=pdp11-dec
-               ;;
-       we32k)
-               basic_machine=we32k-att
-               ;;
-       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-               basic_machine=sh-unknown
-               ;;
-       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-               basic_machine=sparc-sun
-               ;;
-       cydra)
-               basic_machine=cydra-cydrome
-               ;;
-       orion)
-               basic_machine=orion-highlevel
-               ;;
-       orion105)
-               basic_machine=clipper-highlevel
-               ;;
-       mac | mpw | mac-mpw)
-               basic_machine=m68k-apple
-               ;;
-       pmac | pmac-mpw)
-               basic_machine=powerpc-apple
-               ;;
-       *-unknown)
-               # Make sure to match an already-canonicalized machine name.
-               ;;
-       *)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-       *-digital*)
-               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-               ;;
-       *-commodore*)
-               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-               ;;
-       *)
-               ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
-       # -solaris* is a basic system type, with this one exception.
-        -auroraux)
-               os=-auroraux
-               ;;
-       -solaris1 | -solaris1.*)
-               os=`echo $os | sed -e 's|solaris1|sunos4|'`
-               ;;
-       -solaris)
-               os=-solaris2
-               ;;
-       -svr4*)
-               os=-sysv4
-               ;;
-       -unixware*)
-               os=-sysv4.2uw
-               ;;
-       -gnu/linux*)
-               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-               ;;
-       # First accept the basic system types.
-       # The portable systems comes first.
-       # Each alternative MUST END IN A *, to match a version number.
-       # -sysv* is not here because it comes later, after sysvr4.
-       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -openbsd* | -solidbsd* \
-             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* | -cegcc* \
-             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
-             | -uxpv* | -beos* | -mpeix* | -udk* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
-       # Remember, each alternative MUST END IN *, to match a version number.
-               ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
-                       ;;
-                   *)
-                       os=-nto$os
-                       ;;
-               esac
-               ;;
-       -nto-qnx*)
-               ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
-               ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-               ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
-               ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
-               ;;
-       -linux*)
-               os=`echo $os | sed -e 's|linux|linux-gnu|'`
-               ;;
-       -sunos5*)
-               os=`echo $os | sed -e 's|sunos5|solaris2|'`
-               ;;
-       -sunos6*)
-               os=`echo $os | sed -e 's|sunos6|solaris3|'`
-               ;;
-       -opened*)
-               os=-openedition
-               ;;
-        -os400*)
-               os=-os400
-               ;;
-       -wince*)
-               os=-wince
-               ;;
-       -osfrose*)
-               os=-osfrose
-               ;;
-       -osf*)
-               os=-osf
-               ;;
-       -utek*)
-               os=-bsd
-               ;;
-       -dynix*)
-               os=-bsd
-               ;;
-       -acis*)
-               os=-aos
-               ;;
-       -atheos*)
-               os=-atheos
-               ;;
-       -syllable*)
-               os=-syllable
-               ;;
-       -386bsd)
-               os=-bsd
-               ;;
-       -ctix* | -uts*)
-               os=-sysv
-               ;;
-       -nova*)
-               os=-rtmk-nova
-               ;;
-       -ns2 )
-               os=-nextstep2
-               ;;
-       -nsk*)
-               os=-nsk
-               ;;
-       # Preserve the version number of sinix5.
-       -sinix5.*)
-               os=`echo $os | sed -e 's|sinix|sysv|'`
-               ;;
-       -sinix*)
-               os=-sysv4
-               ;;
-        -tpf*)
-               os=-tpf
-               ;;
-       -triton*)
-               os=-sysv3
-               ;;
-       -oss*)
-               os=-sysv3
-               ;;
-       -svr4)
-               os=-sysv4
-               ;;
-       -svr3)
-               os=-sysv3
-               ;;
-       -sysvr4)
-               os=-sysv4
-               ;;
-       # This must come after -sysvr4.
-       -sysv*)
-               ;;
-       -ose*)
-               os=-ose
-               ;;
-       -es1800*)
-               os=-ose
-               ;;
-       -xenix)
-               os=-xenix
-               ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
-               ;;
-       -aros*)
-               os=-aros
-               ;;
-       -kaos*)
-               os=-kaos
-               ;;
-       -zvmoe)
-               os=-zvmoe
-               ;;
-       -dicos*)
-               os=-dicos
-               ;;
-        -nacl*)
-               ;;
-       -none)
-               ;;
-       *)
-               # Get rid of the `-' at the beginning of $os.
-               os=`echo $os | sed 's/[^-]*-//'`
-               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-        score-*)
-               os=-elf
-               ;;
-        spu-*)
-               os=-elf
-               ;;
-       *-acorn)
-               os=-riscix1.2
-               ;;
-       arm*-rebel)
-               os=-linux
-               ;;
-       arm*-semi)
-               os=-aout
-               ;;
-        c4x-* | tic4x-*)
-               os=-coff
-               ;;
-       # This must come before the *-dec entry.
-       pdp10-*)
-               os=-tops20
-               ;;
-       pdp11-*)
-               os=-none
-               ;;
-       *-dec | vax-*)
-               os=-ultrix4.2
-               ;;
-       m68*-apollo)
-               os=-domain
-               ;;
-       i386-sun)
-               os=-sunos4.0.2
-               ;;
-       m68000-sun)
-               os=-sunos3
-               # This also exists in the configure program, but was not the
-               # default.
-               # os=-sunos4
-               ;;
-       m68*-cisco)
-               os=-aout
-               ;;
-        mep-*)
-               os=-elf
-               ;;
-       mips*-cisco)
-               os=-elf
-               ;;
-       mips*-*)
-               os=-elf
-               ;;
-       or32-*)
-               os=-coff
-               ;;
-       *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
-               ;;
-       sparc-* | *-sun)
-               os=-sunos4.1.1
-               ;;
-       *-be)
-               os=-beos
-               ;;
-       *-haiku)
-               os=-haiku
-               ;;
-       *-ibm)
-               os=-aix
-               ;;
-       *-knuth)
-               os=-mmixware
-               ;;
-       *-wec)
-               os=-proelf
-               ;;
-       *-winbond)
-               os=-proelf
-               ;;
-       *-oki)
-               os=-proelf
-               ;;
-       *-hp)
-               os=-hpux
-               ;;
-       *-hitachi)
-               os=-hiux
-               ;;
-       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-               os=-sysv
-               ;;
-       *-cbm)
-               os=-amigaos
-               ;;
-       *-dg)
-               os=-dgux
-               ;;
-       *-dolphin)
-               os=-sysv3
-               ;;
-       m68k-ccur)
-               os=-rtu
-               ;;
-       m88k-omron*)
-               os=-luna
-               ;;
-       *-next )
-               os=-nextstep
-               ;;
-       *-sequent)
-               os=-ptx
-               ;;
-       *-crds)
-               os=-unos
-               ;;
-       *-ns)
-               os=-genix
-               ;;
-       i370-*)
-               os=-mvs
-               ;;
-       *-next)
-               os=-nextstep3
-               ;;
-       *-gould)
-               os=-sysv
-               ;;
-       *-highlevel)
-               os=-bsd
-               ;;
-       *-encore)
-               os=-bsd
-               ;;
-       *-sgi)
-               os=-irix
-               ;;
-       *-siemens)
-               os=-sysv4
-               ;;
-       *-masscomp)
-               os=-rtu
-               ;;
-       f30[01]-fujitsu | f700-fujitsu)
-               os=-uxpv
-               ;;
-       *-rom68k)
-               os=-coff
-               ;;
-       *-*bug)
-               os=-coff
-               ;;
-       *-apple)
-               os=-macos
-               ;;
-       *-atari*)
-               os=-mint
-               ;;
-       *)
-               os=-none
-               ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-       *-unknown)
-               case $os in
-                       -riscix*)
-                               vendor=acorn
-                               ;;
-                       -sunos*)
-                               vendor=sun
-                               ;;
-                       -cnk*|-aix*)
-                               vendor=ibm
-                               ;;
-                       -beos*)
-                               vendor=be
-                               ;;
-                       -hpux*)
-                               vendor=hp
-                               ;;
-                       -mpeix*)
-                               vendor=hp
-                               ;;
-                       -hiux*)
-                               vendor=hitachi
-                               ;;
-                       -unos*)
-                               vendor=crds
-                               ;;
-                       -dgux*)
-                               vendor=dg
-                               ;;
-                       -luna*)
-                               vendor=omron
-                               ;;
-                       -genix*)
-                               vendor=ns
-                               ;;
-                       -mvs* | -opened*)
-                               vendor=ibm
-                               ;;
-                       -os400*)
-                               vendor=ibm
-                               ;;
-                       -ptx*)
-                               vendor=sequent
-                               ;;
-                       -tpf*)
-                               vendor=ibm
-                               ;;
-                       -vxsim* | -vxworks* | -windiss*)
-                               vendor=wrs
-                               ;;
-                       -aux*)
-                               vendor=apple
-                               ;;
-                       -hms*)
-                               vendor=hitachi
-                               ;;
-                       -mpw* | -macos*)
-                               vendor=apple
-                               ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-                               vendor=atari
-                               ;;
-                       -vos*)
-                               vendor=stratus
-                               ;;
-               esac
-               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-               ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/xbmc/visualizations/Goom/goom2k4-0/configure b/xbmc/visualizations/Goom/goom2k4-0/configure
deleted file mode 100755 (executable)
index 556f460..0000000
+++ /dev/null
@@ -1,14022 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65.
-#
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-        /*)
-          for as_base in sh bash ksh sh5; do
-            # Try only shells that exist, to save several forks.
-            as_shell=$as_dir/$as_base
-            if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-                  if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-          done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_dir" : 'X\(//\)[^/]' \| \
-        X"$as_dir" : 'X\(//\)$' \| \
-        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
-  fi
-  $as_echo "$as_me: error: $1" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='        ';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -p'
-  fi
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-$*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-          test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-         # Cool, printf works
-         :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-            test "X$echo_testing_string" = 'X\t' &&
-            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-            test "X$echo_testing_string" = "X$echo_test_string"; then
-         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-         export CONFIG_SHELL
-         SHELL="$CONFIG_SHELL"
-         export SHELL
-         ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-            test "X$echo_testing_string" = 'X\t' &&
-            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-            test "X$echo_testing_string" = "X$echo_test_string"; then
-         ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        else
-         # maybe with a smaller string...
-         prev=:
-
-         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-           then
-             break
-           fi
-           prev="$cmd"
-         done
-
-         if test "$prev" != 'sed 50q "$0"'; then
-           echo_test_string=`eval $prev`
-           export echo_test_string
-           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-         else
-           # Oops.  We lost completely, so just stick with echo.
-           ECHO=echo
-         fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="README"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='am__EXEEXT_FALSE
-am__EXEEXT_TRUE
-LTLIBOBJS
-LIBOBJS
-PTHREAD_LIBS
-MACTARGET_FALSE
-MACTARGET_TRUE
-HAVE_PPC_FALSE
-HAVE_PPC_TRUE
-HAVE_MMX_FALSE
-HAVE_MMX_TRUE
-CCASFLAGS
-CCAS
-MACFOLDER
-HAVE_SDL_FALSE
-HAVE_SDL_TRUE
-HAVE_XMMS_FALSE
-HAVE_XMMS_TRUE
-YFLAGS
-YACC
-LEXLIB
-LEX_OUTPUT_ROOT
-LEX
-CPP
-OTOOL64
-OTOOL
-LIPO
-NMEDIT
-DSYMUTIL
-lt_ECHO
-RANLIB
-AR
-OBJDUMP
-LN_S
-NM
-ac_ct_DUMPBIN
-DUMPBIN
-LD
-FGREP
-EGREP
-GREP
-SED
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-CCDEPMODE
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-DEPDIR
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-LIBTOOL
-am__untar
-am__tar
-AMTAR
-am__leading_dot
-SET_MAKE
-AWK
-mkdir_p
-MKDIR_P
-INSTALL_STRIP_PROGRAM
-STRIP
-install_sh
-MAKEINFO
-AUTOHEADER
-AUTOMAKE
-AUTOCONF
-ACLOCAL
-VERSION
-PACKAGE
-CYGPATH_W
-am__isrc
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_static
-enable_shared
-with_pic
-enable_fast_install
-enable_dependency_tracking
-with_gnu_ld
-enable_libtool_lock
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-YACC
-YFLAGS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)   ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
-               datadir sysconfdir sharedstatedir localstatedir includedir \
-               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-               libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_myself" : 'X\(//\)[^/]' \| \
-        X"$as_myself" : 'X\(//\)$' \| \
-        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-       cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
-       pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-
-Program names:
-  --program-prefix=PREFIX            prepend PREFIX to installed program names
-  --program-suffix=SUFFIX            append SUFFIX to installed program names
-  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-static[=PKGS]  build static libraries [default=no]
-  --enable-shared[=PKGS]  build shared libraries [default=yes]
-  --enable-fast-install[=PKGS]
-                          optimize for fast installation [default=yes]
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
-  --disable-libtool-lock  avoid locking (might break parallel builds)
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
-                          both]
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-  YACC        The `Yet Another C Compiler' implementation to use. Defaults to
-              the first program found out of: `bison -y', `byacc', `yacc'.
-  YFLAGS      The list of arguments that will be passed by default to $YACC.
-              This script will default YFLAGS to the empty string to avoid a
-              default value of `-d' given by some make applications.
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.65
-
-Copyright (C) 2009 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=1
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-        test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_header_mongrel
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-       ac_must_keep_next=false # Got value, back to normal.
-      else
-       case $ac_arg in
-         *=* | --config-cache | -C | -disable-* | --disable-* \
-         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-         | -with-* | --with-* | -without-* | --without-* | --x)
-           case "$ac_configure_args0 " in
-             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-           esac
-           ;;
-         -* ) ac_must_keep_next=true ;;
-       esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-       "s/'\''/'\''\\\\'\'''\''/g;
-         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-       eval ac_val=\$$ac_var
-       case $ac_val in
-       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-       esac
-       $as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-       # differences in whitespace do not lead to failure.
-       ac_old_val_w=`echo x $ac_old_val`
-       ac_new_val_w=`echo x $ac_new_val`
-       if test "$ac_old_val_w" != "$ac_new_val_w"; then
-         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-         ac_cache_corrupted=:
-       else
-         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-         eval $ac_var=\$ac_old_val
-       fi
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-# Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then :
-  enableval=$enable_static; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_static=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_static=no
-fi
-
-
-
-
-
-
-
-
-
-am__api_version='1.11'
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-         if test $ac_prog = install &&
-           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # AIX install.  It has an incompatible calling convention.
-           :
-         elif test $ac_prog = install &&
-           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # program-specific install script used by HP pwplus--don't use.
-           :
-         else
-           rm -rf conftest.one conftest.two conftest.dir
-           echo one > conftest.one
-           echo two > conftest.two
-           mkdir conftest.dir
-           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-             test -s conftest.one && test -s conftest.two &&
-             test -s conftest.dir/conftest.one &&
-             test -s conftest.dir/conftest.two
-           then
-             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-             break 3
-           fi
-         fi
-       fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
-esac
-case $srcdir in
-  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
-   fi
-
-   test "$2" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   as_fn_error "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-fi
-
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in mkdir gmkdir; do
-        for ac_exec_ext in '' $ac_executable_extensions; do
-          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
-          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-            'mkdir (GNU coreutils) '* | \
-            'mkdir (coreutils) '* | \
-            'mkdir (fileutils) '4.1*)
-              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
-              break 3;;
-          esac
-        done
-       done
-  done
-IFS=$as_save_IFS
-
-fi
-
-  test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
-    MKDIR_P="$ac_cv_path_mkdir -p"
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for MKDIR_P within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    MKDIR_P="$ac_install_sh -d"
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-       @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  am__isrc=' -I$(srcdir)'
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-
-
-# Define the identity of the package.
- PACKAGE=SDL_Goom
- VERSION=2k4
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-# Some tools Automake needs.
-
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-
-
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-
-
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-
-
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-
-
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-
-
-
-
-
-
-ACLOCAL="$ACLOCAL -I m4"
-
-case `pwd` in
-  *\ * | *\    *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
-esac
-
-
-
-macro_version='2.2.6b'
-macro_revision='1.3017'
-
-
-
-
-
-
-
-
-
-
-
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-       @echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
-fi
-
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
- if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-       ;;
-    [ab].out )
-       # We found the default executable, but exeext='' is most
-       # certainly right.
-       break;;
-    *.* )
-       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-       then :; else
-          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-       fi
-       # We set ac_cv_exeext here because the later test for it is not
-       # safe: cross compilers may not add the suffix if given an `-o'
-       # argument, so we may need to know it at that point already.
-       # Even if this section looks crufty: it has the advantage of
-       # actually working.
-       break;;
-    * )
-       break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-         break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-       cross_compiling=yes
-    else
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-        CFLAGS="-g"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CC"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-       continue
-      else
-       break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_SED_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
-  fi
-else
-  ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
-  rm -f conftest.sed
-
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
-   then ac_cv_path_FGREP="$GREP -F"
-   else
-     if test -z "$FGREP"; then
-  ac_path_FGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in fgrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
-# Check for GNU ac_path_FGREP and select it if it is found.
-  # Check for GNU $ac_path_FGREP
-case `"$ac_path_FGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'FGREP' >> "conftest.nl"
-    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_FGREP="$ac_path_FGREP"
-      ac_path_FGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_FGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_FGREP=$FGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
- FGREP="$ac_cv_path_FGREP"
-
-
-test -z "$GREP" && GREP=grep
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | ?:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break
-       ;;
-      *)
-       test "$with_gnu_ld" != yes && break
-       ;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
-$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-       # Check to see if the nm accepts a BSD-compat flag.
-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-       #   nm: unknown option "B" ignored
-       # Tru64's nm complains that /dev/null is an invalid object file
-       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-       */dev/null* | *'Invalid file or object type'*)
-         lt_cv_path_NM="$tmp_nm -B"
-         break
-         ;;
-       *)
-         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-         */dev/null*)
-           lt_cv_path_NM="$tmp_nm -p"
-           break
-           ;;
-         *)
-           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-           continue # so that we can try to find one that supports BSD flags
-           ;;
-         esac
-         ;;
-       esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$DUMPBIN"; then
-  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-DUMPBIN=$ac_cv_prog_DUMPBIN
-if test -n "$DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$DUMPBIN" && break
-  done
-fi
-if test -z "$DUMPBIN"; then
-  ac_ct_DUMPBIN=$DUMPBIN
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_DUMPBIN"; then
-  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
-if test -n "$ac_ct_DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_DUMPBIN" && break
-done
-
-  if test "x$ac_ct_DUMPBIN" = x; then
-    DUMPBIN=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    DUMPBIN=$ac_ct_DUMPBIN
-  fi
-fi
-
-
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:4514: $ac_compile\"" >&5)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&5
-  (eval echo "\"\$as_me:4517: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&5
-  (eval echo "\"\$as_me:4520: output\"" >&5)
-  cat conftest.out >&5
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-# find the maximum length of command line arguments
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-    i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-             test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-
-fi
-
-if test -n $lt_cv_sys_max_cmd_len ; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-
-
-
-
-
-: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
-$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
-$as_echo "$xsi_shell" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
-$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
-$as_echo "$lt_shell_append" >&6; }
-
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-
-
-
-
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OBJDUMP"; then
-  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
-  ac_ct_OBJDUMP=$OBJDUMP
-  # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OBJDUMP"; then
-  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OBJDUMP" = x; then
-    OBJDUMP="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OBJDUMP=$ac_ct_OBJDUMP
-  fi
-else
-  OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[4-9]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[45]*)
-  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[3-9]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd* | netbsdelf*-gnu)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_AR" = x; then
-    AR="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AR=$ac_ct_AR
-  fi
-else
-  AR="$ac_cv_prog_AR"
-fi
-
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-test -z "$STRIP" && STRIP=:
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-test -z "$RANLIB" && RANLIB=:
-
-
-
-
-
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[ABCDEGRST]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[BCDEGRST]'
-  ;;
-osf*)
-  symcode='[BCDEGQRST]'
-  ;;
-solaris*)
-  symcode='[BDRT]'
-  ;;
-sco3.2v5*)
-  symcode='[DT]'
-  ;;
-sysv4.2uw2*)
-  symcode='[DT]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[ABDT]'
-  ;;
-sysv4)
-  symcode='[DFNSTU]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[ABCDGIRSTW]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK '"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-       mv -f "$nlist"T "$nlist"
-      else
-       rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-         cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-         # Now generate the symbol file.
-         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-         cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-         cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-         # Now try linking the two files.
-         mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
-         LIBS="conftstm.$ac_objext"
-         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
-           pipe_works=yes
-         fi
-         LIBS="$lt_save_LIBS"
-         CFLAGS="$lt_save_CFLAGS"
-       else
-         echo "cannot find nm_test_func in $nlist" >&5
-       fi
-      else
-       echo "cannot find nm_test_var in $nlist" >&5
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
-    fi
-  else
-    echo "$progname: failed program was:" >&5
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-
-fi
-
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
-  enableval=$enable_libtool_lock;
-fi
-
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-       HPUX_IA64_MODE="32"
-       ;;
-      *ELF-64*)
-       HPUX_IA64_MODE="64"
-       ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '#line 5726 "configure"' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-       *32-bit*)
-         LD="${LD-ld} -melf32bsmip"
-         ;;
-       *N32*)
-         LD="${LD-ld} -melf32bmipn32"
-         ;;
-       *64-bit*)
-         LD="${LD-ld} -melf64bmip"
-       ;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-       *32-bit*)
-         LD="${LD-ld} -32"
-         ;;
-       *N32*)
-         LD="${LD-ld} -n32"
-         ;;
-       *64-bit*)
-         LD="${LD-ld} -64"
-         ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-       case $host in
-         x86_64-*kfreebsd*-gnu)
-           LD="${LD-ld} -m elf_i386_fbsd"
-           ;;
-         x86_64-*linux*)
-           LD="${LD-ld} -m elf_i386"
-           ;;
-         ppc64-*linux*|powerpc64-*linux*)
-           LD="${LD-ld} -m elf32ppclinux"
-           ;;
-         s390x-*linux*)
-           LD="${LD-ld} -m elf_s390"
-           ;;
-         sparc64-*linux*)
-           LD="${LD-ld} -m elf32_sparc"
-           ;;
-       esac
-       ;;
-      *64-bit*)
-       case $host in
-         x86_64-*kfreebsd*-gnu)
-           LD="${LD-ld} -m elf_x86_64_fbsd"
-           ;;
-         x86_64-*linux*)
-           LD="${LD-ld} -m elf_x86_64"
-           ;;
-         ppc*-*linux*|powerpc*-*linux*)
-           LD="${LD-ld} -m elf64ppc"
-           ;;
-         s390*-*linux*|s390*-*tpf*)
-           LD="${LD-ld} -m elf64_s390"
-           ;;
-         sparc*-*linux*)
-           LD="${LD-ld} -m elf64_sparc"
-           ;;
-       esac
-       ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  lt_cv_cc_needs_belf=yes
-else
-  lt_cv_cc_needs_belf=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-         LD="${LD-ld} -64"
-       fi
-       ;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-
-
-  case $host_os in
-    rhapsody* | darwin*)
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$DSYMUTIL"; then
-  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
-  ac_ct_DSYMUTIL=$DSYMUTIL
-  # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_DSYMUTIL"; then
-  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_DSYMUTIL" = x; then
-    DSYMUTIL=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    DSYMUTIL=$ac_ct_DSYMUTIL
-  fi
-else
-  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$NMEDIT"; then
-  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NMEDIT"; then
-  ac_ct_NMEDIT=$NMEDIT
-  # Extract the first word of "nmedit", so it can be a program name with args.
-set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_NMEDIT"; then
-  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_NMEDIT="nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
-if test -n "$ac_ct_NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_NMEDIT" = x; then
-    NMEDIT=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    NMEDIT=$ac_ct_NMEDIT
-  fi
-else
-  NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
-set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LIPO+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$LIPO"; then
-  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-LIPO=$ac_cv_prog_LIPO
-if test -n "$LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_LIPO"; then
-  ac_ct_LIPO=$LIPO
-  # Extract the first word of "lipo", so it can be a program name with args.
-set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_LIPO"; then
-  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_LIPO="lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
-if test -n "$ac_ct_LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_LIPO" = x; then
-    LIPO=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    LIPO=$ac_ct_LIPO
-  fi
-else
-  LIPO="$ac_cv_prog_LIPO"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OTOOL"; then
-  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL=$ac_cv_prog_OTOOL
-if test -n "$OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL"; then
-  ac_ct_OTOOL=$OTOOL
-  # Extract the first word of "otool", so it can be a program name with args.
-set dummy otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OTOOL"; then
-  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_OTOOL="otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
-if test -n "$ac_ct_OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OTOOL" = x; then
-    OTOOL=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OTOOL=$ac_ct_OTOOL
-  fi
-else
-  OTOOL="$ac_cv_prog_OTOOL"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL64+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OTOOL64"; then
-  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL64=$ac_cv_prog_OTOOL64
-if test -n "$OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL64"; then
-  ac_ct_OTOOL64=$OTOOL64
-  # Extract the first word of "otool64", so it can be a program name with args.
-set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OTOOL64"; then
-  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_OTOOL64="otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
-if test -n "$ac_ct_OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OTOOL64" = x; then
-    OTOOL64=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OTOOL64=$ac_ct_OTOOL64
-  fi
-else
-  OTOOL64="$ac_cv_prog_OTOOL64"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-       # By default we will add the -single_module flag. You can override
-       # by either setting the environment variable LT_MULTI_MODULE
-       # non-empty at configure time, or by adding -multi_module to the
-       # link flags.
-       rm -rf libconftest.dylib*
-       echo "int foo(void){return 1;}" > conftest.c
-       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&5
-       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-         lt_cv_apple_cc_single_mod=yes
-       else
-         cat conftest.err >&5
-       fi
-       rm -rf libconftest.dylib*
-       rm -f conftest.*
-      fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  lt_cv_ld_exported_symbols_list=yes
-else
-  lt_cv_ld_exported_symbols_list=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-       LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-    case $host_os in
-    rhapsody* | darwin1.[012])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-       10.[012]*)
-         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-       10.*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-                  (('a' <= (c) && (c) <= 'i') \
-                    || ('j' <= (c) && (c) <= 'r') \
-                    || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-       || toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                 inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in dlfcn.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-# Set options
-
-
-
-        enable_dlopen=no
-
-
-  enable_win32_dll=no
-
-
-            # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
-  enableval=$enable_shared; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_shared=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_shared=yes
-fi
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
-  withval=$with_pic; pic_mode="$withval"
-else
-  pic_mode=default
-fi
-
-
-test -z "$pic_mode" && pic_mode=default
-
-
-
-
-
-
-
-  # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then :
-  enableval=$enable_fast_install; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_fast_install=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_fast_install=yes
-fi
-
-
-
-
-
-
-
-
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-test -z "$LN_S" && LN_S="ln -s"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
-objdir=$lt_cv_objdir
-
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
-_ACEOF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $MAGIC_CMD in
-[\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/${ac_tool_prefix}file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
-      if test -n "$file_magic_test_file"; then
-       case $deplibs_check_method in
-       "file_magic "*)
-         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-           $EGREP "$file_magic_regex" > /dev/null; then
-           :
-         else
-           cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
-         fi ;;
-       esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $MAGIC_CMD in
-[\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/file"
-      if test -n "$file_magic_test_file"; then
-       case $deplibs_check_method in
-       "file_magic "*)
-         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-           $EGREP "$file_magic_regex" > /dev/null; then
-           :
-         else
-           cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
-         fi ;;
-       esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  else
-    MAGIC_CMD=:
-  fi
-fi
-
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-
-lt_save_CC="$CC"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-objext=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-
-
-if test -n "$compiler"; then
-
-lt_prog_compiler_no_builtin_flag=
-
-if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_rtti_exceptions=no
-   ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="-fno-rtti -fno-exceptions"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7222: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:7226: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_rtti_exceptions=yes
-     fi
-   fi
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
-    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-else
-    :
-fi
-
-fi
-
-
-
-
-
-
-  lt_prog_compiler_wl=
-lt_prog_compiler_pic=
-lt_prog_compiler_static=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
-  if test "$GCC" = yes; then
-    lt_prog_compiler_wl='-Wl,'
-    lt_prog_compiler_static='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            lt_prog_compiler_pic='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      lt_prog_compiler_pic='-DDLL_EXPORT'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-       # +Z the default
-       ;;
-      *)
-       lt_prog_compiler_pic='-fPIC'
-       ;;
-      esac
-      ;;
-
-    interix[3-9]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      lt_prog_compiler_can_build_shared=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      lt_prog_compiler_pic='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       lt_prog_compiler_pic=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      lt_prog_compiler_pic='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      lt_prog_compiler_wl='-Wl,'
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static='-Bstatic'
-      else
-       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      lt_prog_compiler_pic='-DDLL_EXPORT'
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      lt_prog_compiler_wl='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-       # +Z the default
-       ;;
-      *)
-       lt_prog_compiler_pic='+Z'
-       ;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      lt_prog_compiler_wl='-Wl,'
-      # PIC (with -KPIC) is the default.
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-       lt_prog_compiler_wl='-Wl,'
-       lt_prog_compiler_pic='-KPIC'
-       lt_prog_compiler_static='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-       lt_prog_compiler_wl='-Wl,'
-       lt_prog_compiler_pic='-fPIC'
-       lt_prog_compiler_static='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-       lt_prog_compiler_wl='-Wl,'
-       lt_prog_compiler_pic='--shared'
-       lt_prog_compiler_static='--static'
-       ;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-       # which looks to be a dead project)
-       lt_prog_compiler_wl='-Wl,'
-       lt_prog_compiler_pic='-fpic'
-       lt_prog_compiler_static='-Bstatic'
-        ;;
-      ccc*)
-        lt_prog_compiler_wl='-Wl,'
-        # All Alpha code is PIC.
-        lt_prog_compiler_static='-non_shared'
-        ;;
-      xl*)
-       # IBM XL C 8.0/Fortran 10.1 on PPC
-       lt_prog_compiler_wl='-Wl,'
-       lt_prog_compiler_pic='-qpic'
-       lt_prog_compiler_static='-qstaticlink'
-       ;;
-      *)
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)
-         # Sun C 5.9
-         lt_prog_compiler_pic='-KPIC'
-         lt_prog_compiler_static='-Bstatic'
-         lt_prog_compiler_wl='-Wl,'
-         ;;
-       *Sun\ F*)
-         # Sun Fortran 8.3 passes all unrecognized flags to the linker
-         lt_prog_compiler_pic='-KPIC'
-         lt_prog_compiler_static='-Bstatic'
-         lt_prog_compiler_wl=''
-         ;;
-       esac
-       ;;
-      esac
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      lt_prog_compiler_pic='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      lt_prog_compiler_wl='-Wl,'
-      # All OSF/1 code is PIC.
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    rdos*)
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    solaris*)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-       lt_prog_compiler_wl='-Qoption ld ';;
-      *)
-       lt_prog_compiler_wl='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      lt_prog_compiler_wl='-Qoption ld '
-      lt_prog_compiler_pic='-PIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-       lt_prog_compiler_pic='-Kconform_pic'
-       lt_prog_compiler_static='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    unicos*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_can_build_shared=no
-      ;;
-
-    uts4*)
-      lt_prog_compiler_pic='-pic'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    *)
-      lt_prog_compiler_can_build_shared=no
-      ;;
-    esac
-  fi
-
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic=
-    ;;
-  *)
-    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
-    ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
-
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_pic_works=no
-   ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7561: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:7565: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_pic_works=yes
-     fi
-   fi
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
-    case $lt_prog_compiler_pic in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
-     esac
-else
-    lt_prog_compiler_pic=
-     lt_prog_compiler_can_build_shared=no
-fi
-
-fi
-
-
-
-
-
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_static_works=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         lt_cv_prog_compiler_static_works=yes
-       fi
-     else
-       lt_cv_prog_compiler_static_works=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
-    :
-else
-    lt_prog_compiler_static=
-fi
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7666: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:7670: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7721: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:7725: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
-  runpath_var=
-  allow_undefined_flag=
-  always_export_symbols=no
-  archive_cmds=
-  archive_expsym_cmds=
-  compiler_needs_object=no
-  enable_shared_with_static_runtimes=no
-  export_dynamic_flag_spec=
-  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  hardcode_automatic=no
-  hardcode_direct=no
-  hardcode_direct_absolute=no
-  hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
-  hardcode_libdir_separator=
-  hardcode_minus_L=no
-  hardcode_shlibpath_var=unsupported
-  inherit_rpath=no
-  link_all_deplibs=unknown
-  module_cmds=
-  module_expsym_cmds=
-  old_archive_from_new_cmds=
-  old_archive_from_expsyms_cmds=
-  thread_safe_flag_spec=
-  whole_archive_flag_spec=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  include_expsyms=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  linux* | k*bsd*-gnu)
-    link_all_deplibs=no
-    ;;
-  esac
-
-  ld_shlibs=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      whole_archive_flag_spec=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
-      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[3-9]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-       ld_shlibs=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            archive_expsym_cmds=''
-        ;;
-      m68k)
-            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_minus_L=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       allow_undefined_flag=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-       ld_shlibs=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec='-L$libdir'
-      allow_undefined_flag=unsupported
-      always_export_symbols=no
-      enable_shared_with_static_runtimes=yes
-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-       # If the export-symbols file already is a .def file (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-         cp $export_symbols $output_objdir/$soname.def;
-       else
-         echo EXPORTS > $output_objdir/$soname.def;
-         cat $export_symbols >> $output_objdir/$soname.def;
-       fi~
-       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-       ld_shlibs=no
-      fi
-      ;;
-
-    interix[3-9]*)
-      hardcode_direct=no
-      hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-       case $cc_basename in
-         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
-       esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-        && test "$tmp_diet" = no
-      then
-       tmp_addflag=
-       tmp_sharedflag='-shared'
-       case $cc_basename,$host_cpu in
-        pgcc*)                         # Portland Group C compiler
-         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag'
-         ;;
-       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
-         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag -Mnomain' ;;
-       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
-         tmp_addflag=' -i_dynamic' ;;
-       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
-         tmp_addflag=' -i_dynamic -nofor_main' ;;
-       ifc* | ifort*)                  # Intel Fortran compiler
-         tmp_addflag=' -nofor_main' ;;
-       lf95*)                          # Lahey Fortran 8.1
-         whole_archive_flag_spec=
-         tmp_sharedflag='--shared' ;;
-       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
-         tmp_sharedflag='-qmkshrobj'
-         tmp_addflag= ;;
-       esac
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)                       # Sun C 5.9
-         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         compiler_needs_object=yes
-         tmp_sharedflag='-G' ;;
-       *Sun\ F*)                       # Sun Fortran 8.3
-         tmp_sharedflag='-G' ;;
-       esac
-       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-           echo "local: *; };" >> $output_objdir/$libname.ver~
-           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-       case $cc_basename in
-       xlf*)
-         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-         hardcode_libdir_flag_spec=
-         hardcode_libdir_flag_spec_ld='-rpath $libdir'
-         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-         if test "x$supports_anon_versioning" = xyes; then
-           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-             echo "local: *; };" >> $output_objdir/$libname.ver~
-             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-         fi
-         ;;
-       esac
-      else
-        ld_shlibs=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-       wlarc=
-      else
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-       ld_shlibs=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       ld_shlibs=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-       ld_shlibs=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-       ;;
-       *)
-         # For security reasons, it is highly recommended that you always
-         # use absolute paths for naming shared libraries, and exclude the
-         # DT_RUNPATH tag from executables and libraries.  But doing so
-         # requires that you compile everything twice, which is a pain.
-         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-         else
-           ld_shlibs=no
-         fi
-       ;;
-      esac
-      ;;
-
-    sunos4*)
-      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       ld_shlibs=no
-      fi
-      ;;
-    esac
-
-    if test "$ld_shlibs" = no; then
-      runpath_var=
-      hardcode_libdir_flag_spec=
-      export_dynamic_flag_spec=
-      whole_archive_flag_spec=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      allow_undefined_flag=unsupported
-      always_export_symbols=yes
-      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      hardcode_minus_L=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       hardcode_direct=unsupported
-      fi
-      ;;
-
-    aix[4-9]*)
-      if test "$host_cpu" = ia64; then
-       # On IA64, the linker does run time linking by default, so we don't
-       # have to do anything special.
-       aix_use_runtimelinking=no
-       exp_sym_flag='-Bexport'
-       no_entry_flag=""
-      else
-       # If we're using GNU nm, then we don't want the "-C" option.
-       # -C means demangle to AIX nm, but means don't demangle with GNU nm
-       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-       else
-         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-       fi
-       aix_use_runtimelinking=no
-
-       # Test if we are trying to use run time linking or normal
-       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-       # need to do runtime linking.
-       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-         for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-           aix_use_runtimelinking=yes
-           break
-         fi
-         done
-         ;;
-       esac
-
-       exp_sym_flag='-bexport'
-       no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      archive_cmds=''
-      hardcode_direct=yes
-      hardcode_direct_absolute=yes
-      hardcode_libdir_separator=':'
-      link_all_deplibs=yes
-      file_list_spec='${wl}-f,'
-
-      if test "$GCC" = yes; then
-       case $host_os in aix4.[012]|aix4.[012].*)
-       # We only want to do this on AIX 4.2 and lower, the check
-       # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
-         if test -f "$collect2name" &&
-          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-         then
-         # We have reworked collect2
-         :
-         else
-         # We have old collect2
-         hardcode_direct=unsupported
-         # It fails to find uninstalled libraries when the uninstalled
-         # path is not listed in the libpath.  Setting hardcode_minus_L
-         # to unsupported forces relinking
-         hardcode_minus_L=yes
-         hardcode_libdir_flag_spec='-L$libdir'
-         hardcode_libdir_separator=
-         fi
-         ;;
-       esac
-       shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
-       fi
-       link_all_deplibs=no
-      else
-       # not using gcc
-       if test "$host_cpu" = ia64; then
-       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-       # chokes on -Wl,-G. The following line is correct:
-         shared_flag='-G'
-       else
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
-         else
-           shared_flag='${wl}-bM:SRE'
-         fi
-       fi
-      fi
-
-      export_dynamic_flag_spec='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      always_export_symbols=yes
-      if test "$aix_use_runtimelinking" = yes; then
-       # Warning - without using the other runtime loading flags (-brtl),
-       # -berok will link without error, but may produce a broken library.
-       allow_undefined_flag='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-       if test "$host_cpu" = ia64; then
-         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-         allow_undefined_flag="-z nodefs"
-         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-       else
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-         # Warning - without using the other run time loading flags,
-         # -berok will link without error, but may produce a broken library.
-         no_undefined_flag=' ${wl}-bernotok'
-         allow_undefined_flag=' ${wl}-berok'
-         # Exported symbols can be pulled into shared objects from archives
-         whole_archive_flag_spec='$convenience'
-         archive_cmds_need_lc=yes
-         # This is similar to how AIX traditionally builds its shared libraries.
-         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-       fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            archive_expsym_cmds=''
-        ;;
-      m68k)
-            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_minus_L=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      allow_undefined_flag=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_from_new_cmds='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
-      ;;
-
-    darwin* | rhapsody*)
-
-
-  archive_cmds_need_lc=no
-  hardcode_direct=no
-  hardcode_automatic=yes
-  hardcode_shlibpath_var=unsupported
-  whole_archive_flag_spec=''
-  link_all_deplibs=yes
-  allow_undefined_flag="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
-  else
-  ld_shlibs=no
-  fi
-
-      ;;
-
-    dgux*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_shlibpath_var=no
-      ;;
-
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_direct=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L=yes
-      export_dynamic_flag_spec='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-       hardcode_libdir_flag_spec_ld='+b $libdir'
-       hardcode_libdir_separator=:
-       hardcode_direct=yes
-       hardcode_direct_absolute=yes
-       export_dynamic_flag_spec='${wl}-E'
-       # hardcode_minus_L: Not really in the search PATH,
-       # but as the default location of the library.
-       hardcode_minus_L=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       case $host_cpu in
-       hppa*64*)
-         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      else
-       case $host_cpu in
-       hppa*64*)
-         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-       hardcode_libdir_separator=:
-
-       case $host_cpu in
-       hppa*64*|ia64*)
-         hardcode_direct=no
-         hardcode_shlibpath_var=no
-         ;;
-       *)
-         hardcode_direct=yes
-         hardcode_direct_absolute=yes
-         export_dynamic_flag_spec='${wl}-E'
-
-         # hardcode_minus_L: Not really in the search PATH,
-         # but as the default location of the library.
-         hardcode_minus_L=yes
-         ;;
-       esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       # Try to use the -exported_symbol ld option, if it does not
-       # work, assume that -exports_file does not work either and
-       # implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int foo(void) {}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        LDFLAGS="$save_LDFLAGS"
-      else
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      inherit_rpath=yes
-      link_all_deplibs=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    newsos6)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct=yes
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_shlibpath_var=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-       hardcode_direct=yes
-       hardcode_shlibpath_var=no
-       hardcode_direct_absolute=yes
-       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-         export_dynamic_flag_spec='${wl}-E'
-       else
-         case $host_os in
-          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            hardcode_libdir_flag_spec='-R$libdir'
-            ;;
-          *)
-            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-            ;;
-         esac
-       fi
-      else
-       ld_shlibs=no
-      fi
-      ;;
-
-    os2*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-
-    osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      else
-       allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-       # Both c and cxx compiler support -rpath directly
-       hardcode_libdir_flag_spec='-rpath $libdir'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_separator=:
-      ;;
-
-    solaris*)
-      no_undefined_flag=' -z defs'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-       case `$CC -V 2>&1` in
-       *"Compilers 5.0"*)
-         wlarc=''
-         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-         ;;
-       *)
-         wlarc='${wl}'
-         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-         ;;
-       esac
-      fi
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_shlibpath_var=no
-      case $host_os in
-      solaris2.[0-5] | solaris2.[0-5].*) ;;
-      *)
-       # The compiler driver will combine and reorder linker options,
-       # but understands `-z linker_flag'.  GCC discards it without `$wl',
-       # but is careful enough not to reorder.
-       # Supported since Solaris 2.6 (maybe 2.5.1?)
-       if test "$GCC" = yes; then
-         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-       else
-         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
-       fi
-       ;;
-      esac
-      link_all_deplibs=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-       # Use $CC to link under sequent, because it throws in some extra .o
-       # files that make .init and .fini sections work.
-       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-       sni)
-         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         hardcode_direct=yes # is this really true???
-       ;;
-       siemens)
-         ## LD is ld it makes a PLAMLIB
-         ## CC just makes a GrossModule.
-         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-         reload_cmds='$CC -r -o $output$reload_objs'
-         hardcode_direct=no
-        ;;
-       motorola)
-         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-       ;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var=no
-      ;;
-
-    sysv4.3*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var=no
-      export_dynamic_flag_spec='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       hardcode_shlibpath_var=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       ld_shlibs=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag='${wl}-z,text'
-      archive_cmds_need_lc=no
-      hardcode_shlibpath_var=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      no_undefined_flag='${wl}-z,text'
-      allow_undefined_flag='${wl}-z,nodefs'
-      archive_cmds_need_lc=no
-      hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-R,$libdir'
-      hardcode_libdir_separator=':'
-      link_all_deplibs=yes
-      export_dynamic_flag_spec='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_shlibpath_var=no
-      ;;
-
-    *)
-      ld_shlibs=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-       export_dynamic_flag_spec='${wl}-Blargedynsym'
-       ;;
-      esac
-    fi
-  fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
-
-with_gnu_ld=$with_gnu_ld
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl
-       pic_flag=$lt_prog_compiler_pic
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag
-        allow_undefined_flag=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
-  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-        then
-         archive_cmds_need_lc=no
-        else
-         archive_cmds_need_lc=yes
-        fi
-        allow_undefined_flag=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[lt_foo]++; }
-  if (lt_freq[lt_foo] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[4-9]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[01] | aix4.[01].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-          echo ' yes '
-          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-       :
-      else
-       can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[123]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[3-9]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       else
-               version_type=irix
-       fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-       ;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" ||
-   test -n "$runpath_var" ||
-   test "X$hardcode_automatic" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$hardcode_direct" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
-     test "$hardcode_minus_L" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action=unsupported
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test "$hardcode_action" = relink ||
-   test "$inherit_rpath" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-
-
-
-
-
-  if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dl_dlopen=yes
-else
-  ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-
-fi
-
-    ;;
-
-  *)
-    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
-  lt_cv_dlopen="shl_load"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dld_shl_load=yes
-else
-  ac_cv_lib_dld_shl_load=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
-  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = x""yes; then :
-  lt_cv_dlopen="dlopen"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dl_dlopen=yes
-else
-  ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_svld_dlopen=yes
-else
-  ac_cv_lib_svld_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link ();
-int
-main ()
-{
-return dld_link ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dld_dld_link=yes
-else
-  ac_cv_lib_dld_dld_link=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-         if test "$cross_compiling" = yes; then :
-  lt_cv_dlopen_self=cross
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-#line 10105 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL          RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL                DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL                0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW         DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW       RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW     DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW     0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}
-_LT_EOF
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&5 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
-      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
-      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-         if test "$cross_compiling" = yes; then :
-  lt_cv_dlopen_self_static=cross
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-#line 10201 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL          RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL                DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL                0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW         DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW       RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW     DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW     0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}
-_LT_EOF
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&5 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
-      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
-      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self_static=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-striplib=
-old_striplib=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    fi
-    ;;
-  *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    ;;
-  esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-  # Report which library types will actually be built
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[4-9]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
-
-
-
-
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC="$lt_save_CC"
-
-
-
-
-
-
-
-
-
-
-
-
-
-        ac_config_commands="$ac_config_commands libtool"
-
-
-
-
-# Only expand once:
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-        CFLAGS="-g"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CC"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-       continue
-      else
-       break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-for ac_prog in flex lex
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LEX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$LEX"; then
-  ac_cv_prog_LEX="$LEX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_LEX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-LEX=$ac_cv_prog_LEX
-if test -n "$LEX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
-$as_echo "$LEX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$LEX" && break
-done
-test -n "$LEX" || LEX=":"
-
-if test "x$LEX" != "x:"; then
-  cat >conftest.l <<_ACEOF
-%%
-a { ECHO; }
-b { REJECT; }
-c { yymore (); }
-d { yyless (1); }
-e { yyless (input () != 0); }
-f { unput (yytext[0]); }
-. { BEGIN INITIAL; }
-%%
-#ifdef YYTEXT_POINTER
-extern char *yytext;
-#endif
-int
-main (void)
-{
-  return ! yylex () + ! yywrap ();
-}
-_ACEOF
-{ { ac_try="$LEX conftest.l"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$LEX conftest.l") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
-$as_echo_n "checking lex output file root... " >&6; }
-if test "${ac_cv_prog_lex_root+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-
-if test -f lex.yy.c; then
-  ac_cv_prog_lex_root=lex.yy
-elif test -f lexyy.c; then
-  ac_cv_prog_lex_root=lexyy
-else
-  as_fn_error "cannot find output from $LEX; giving up" "$LINENO" 5
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
-$as_echo "$ac_cv_prog_lex_root" >&6; }
-LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
-
-if test -z "${LEXLIB+set}"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
-$as_echo_n "checking lex library... " >&6; }
-if test "${ac_cv_lib_lex+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-
-    ac_save_LIBS=$LIBS
-    ac_cv_lib_lex='none needed'
-    for ac_lib in '' -lfl -ll; do
-      LIBS="$ac_lib $ac_save_LIBS"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-`cat $LEX_OUTPUT_ROOT.c`
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_lex=$ac_lib
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-      test "$ac_cv_lib_lex" != 'none needed' && break
-    done
-    LIBS=$ac_save_LIBS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
-$as_echo "$ac_cv_lib_lex" >&6; }
-  test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
-$as_echo_n "checking whether yytext is a pointer... " >&6; }
-if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  # POSIX says lex can declare yytext either as a pointer or an array; the
-# default is implementation-dependent.  Figure out which it is, since
-# not all implementations provide the %pointer and %array declarations.
-ac_cv_prog_lex_yytext_pointer=no
-ac_save_LIBS=$LIBS
-LIBS="$LEXLIB $ac_save_LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define YYTEXT_POINTER 1
-`cat $LEX_OUTPUT_ROOT.c`
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_prog_lex_yytext_pointer=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_save_LIBS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
-$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
-if test $ac_cv_prog_lex_yytext_pointer = yes; then
-
-$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h
-
-fi
-rm -f conftest.l $LEX_OUTPUT_ROOT.c
-
-fi
-if test "$LEX" = :; then
-  LEX=${am_missing_run}flex
-fi
-for ac_prog in 'bison -y' byacc
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_YACC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$YACC"; then
-  ac_cv_prog_YACC="$YACC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_YACC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-YACC=$ac_cv_prog_YACC
-if test -n "$YACC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
-$as_echo "$YACC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$YACC" && break
-done
-test -n "$YACC" || YACC="yacc"
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_bigendian=unknown
-    # See if we're dealing with a universal compiler.
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __APPLE_CC__
-              not a universal capable compiler
-            #endif
-            typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-       # Check for potential -arch flags.  It is not universal unless
-       # there are at least two -arch flags with different values.
-       ac_arch=
-       ac_prev=
-       for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
-        if test -n "$ac_prev"; then
-          case $ac_word in
-            i?86 | x86_64 | ppc | ppc64)
-              if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
-                ac_arch=$ac_word
-              else
-                ac_cv_c_bigendian=universal
-                break
-              fi
-              ;;
-          esac
-          ac_prev=
-        elif test "x$ac_word" = "x-arch"; then
-          ac_prev=arch
-        fi
-       done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if sys/param.h defines the BYTE_ORDER macro.
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-            #include <sys/param.h>
-
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
-                    && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
-                    && LITTLE_ENDIAN)
-             bogus endian macros
-            #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to BIG_ENDIAN or not.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-               #include <sys/param.h>
-
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
-                not big endian
-               #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
-             bogus endian macros
-            #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to _BIG_ENDIAN or not.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
-                not big endian
-               #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # Compile a test program.
-      if test "$cross_compiling" = yes; then :
-  # Try to guess by grepping values from an object file.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-short int ascii_mm[] =
-                 { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-               short int ascii_ii[] =
-                 { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-               int use_ascii (int i) {
-                 return ascii_mm[i] + ascii_ii[i];
-               }
-               short int ebcdic_ii[] =
-                 { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-               short int ebcdic_mm[] =
-                 { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-               int use_ebcdic (int i) {
-                 return ebcdic_mm[i] + ebcdic_ii[i];
-               }
-               extern int foo;
-
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
-             ac_cv_c_bigendian=yes
-           fi
-           if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-             if test "$ac_cv_c_bigendian" = unknown; then
-               ac_cv_c_bigendian=no
-             else
-               # finding both strings is unlikely to happen, but who knows?
-               ac_cv_c_bigendian=unknown
-             fi
-           fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-
-            /* Are we little or big endian?  From Harbison&Steele.  */
-            union
-            {
-              long int l;
-              char c[sizeof (long int)];
-            } u;
-            u.l = 1;
-            return u.c[sizeof (long int) - 1] == 1;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_c_bigendian=no
-else
-  ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-    fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
-   yes)
-     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
-   no)
-      ;; #(
-   universal)
-
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
-     ;; #(
-   *)
-     as_fn_error "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
-
-
-CFLAGS="${CFLAGS}"
-LDFLAGS="${LDFLAGS}"
-
-
-HAVE_XMMS="no"
- if test "x$HAVE_XMMS" = "xyes"; then
-  HAVE_XMMS_TRUE=
-  HAVE_XMMS_FALSE='#'
-else
-  HAVE_XMMS_TRUE='#'
-  HAVE_XMMS_FALSE=
-fi
-
-
-
-
-HAVE_SDL="no"
- if test "x$HAVE_SDL" = "xyes"; then
-  HAVE_SDL_TRUE=
-  HAVE_SDL_FALSE='#'
-else
-  HAVE_SDL_TRUE='#'
-  HAVE_SDL_FALSE=
-fi
-
-
-
-
-HAVE_MMX="no"
-HAVE_PPC="no"
-MACTARGET="no"
-
-case "$host" in
-*-apple-darwin*)
-       MACTARGET="no"
-       MACFOLDER=""
-
-       CCAS='$(CC)'
-
-       ;;
-*-*-cygwin*)
-       CFLAGS="$CFLAGS -mno-cygwin -mwindows"
-       LDFLAGS="$LDFLAGS -lmingw32"
-       ;;
-esac
-
-case "$host" in
-i*86-*-*)
-       $as_echo "#define HAVE_MMX 1" >>confdefs.h
-
-       $as_echo "#define CPU_X86 1" >>confdefs.h
-
-       HAVE_MMX="yes"
-       ;;
-
-powerpc-*-*)
-       CCASFLAGS=-force_cpusubtype_ALL
-
-       $as_echo "#define CPU_POWERPC 1" >>confdefs.h
-
-       HAVE_PPC="yes"
-       ;;
-
-esac
- if test "x$HAVE_MMX" = "xyes"; then
-  HAVE_MMX_TRUE=
-  HAVE_MMX_FALSE='#'
-else
-  HAVE_MMX_TRUE='#'
-  HAVE_MMX_FALSE=
-fi
-
- if test "x$HAVE_PPC" = "xyes"; then
-  HAVE_PPC_TRUE=
-  HAVE_PPC_FALSE='#'
-else
-  HAVE_PPC_TRUE='#'
-  HAVE_PPC_FALSE=
-fi
-
- if test "x$MACTARGET" = "xyes"; then
-  MACTARGET_TRUE=
-  MACTARGET_FALSE='#'
-else
-  MACTARGET_TRUE='#'
-  MACTARGET_FALSE=
-fi
-
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = x""yes; then :
-
-else
-  as_fn_error "*** POSIX thread support not installed - please install first ***" "$LINENO" 5
-fi
-
-
-
-PTHREAD_LIBS=error
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_attr_init in -lpthread" >&5
-$as_echo_n "checking for pthread_attr_init in -lpthread... " >&6; }
-if test "${ac_cv_lib_pthread_pthread_attr_init+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_attr_init ();
-int
-main ()
-{
-return pthread_attr_init ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_pthread_pthread_attr_init=yes
-else
-  ac_cv_lib_pthread_pthread_attr_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_attr_init" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_attr_init" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_attr_init" = x""yes; then :
-  PTHREAD_LIBS="-lpthread"
-fi
-
-
-if test "x$PTHREAD_LIBS" = xerror; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_attr_init in -lpthreads" >&5
-$as_echo_n "checking for pthread_attr_init in -lpthreads... " >&6; }
-if test "${ac_cv_lib_pthreads_pthread_attr_init+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthreads  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_attr_init ();
-int
-main ()
-{
-return pthread_attr_init ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_pthreads_pthread_attr_init=yes
-else
-  ac_cv_lib_pthreads_pthread_attr_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_attr_init" >&5
-$as_echo "$ac_cv_lib_pthreads_pthread_attr_init" >&6; }
-if test "x$ac_cv_lib_pthreads_pthread_attr_init" = x""yes; then :
-  PTHREAD_LIBS="-lpthreads"
-fi
-
-fi
-
-if test "x$PTHREAD_LIBS" = xerror; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_attr_init in -lc_r" >&5
-$as_echo_n "checking for pthread_attr_init in -lc_r... " >&6; }
-if test "${ac_cv_lib_c_r_pthread_attr_init+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc_r  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_attr_init ();
-int
-main ()
-{
-return pthread_attr_init ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_c_r_pthread_attr_init=yes
-else
-  ac_cv_lib_c_r_pthread_attr_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_attr_init" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_attr_init" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_attr_init" = x""yes; then :
-  PTHREAD_LIBS="-lc_r"
-fi
-
-fi
-
-if test "x$PTHREAD_LIBS" = xerror; then
-    ac_fn_c_check_func "$LINENO" "pthread_attr_init" "ac_cv_func_pthread_attr_init"
-if test "x$ac_cv_func_pthread_attr_init" = x""yes; then :
-  PTHREAD_LIBS=""
-fi
-
-fi
-
-
-
-
-
-
-
-
-ac_config_files="$ac_config_files Makefile src/Makefile xmms-goom/Makefile sdl-goom/Makefile libgoom2.pc"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-       "s/'/'\\\\''/g;
-         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section.  Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[    ]*#[    ]*define[       ][      ]*\([^  (][^    (]*([^)]*)\)[   ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[    ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[     `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
-       g
-       s/^\n//
-       s/\n/ /g
-       p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
- if test -n "$EXEEXT"; then
-  am__EXEEXT_TRUE=
-  am__EXEEXT_FALSE='#'
-else
-  am__EXEEXT_TRUE='#'
-  am__EXEEXT_FALSE=
-fi
-
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-
-if test -z "${HAVE_XMMS_TRUE}" && test -z "${HAVE_XMMS_FALSE}"; then
-  as_fn_error "conditional \"HAVE_XMMS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_SDL_TRUE}" && test -z "${HAVE_SDL_FALSE}"; then
-  as_fn_error "conditional \"HAVE_SDL\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_MMX_TRUE}" && test -z "${HAVE_MMX_FALSE}"; then
-  as_fn_error "conditional \"HAVE_MMX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_PPC_TRUE}" && test -z "${HAVE_PPC_FALSE}"; then
-  as_fn_error "conditional \"HAVE_PPC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${MACTARGET_TRUE}" && test -z "${MACTARGET_FALSE}"; then
-  as_fn_error "conditional \"MACTARGET\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-
-: ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
-  fi
-  $as_echo "$as_me: error: $1" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='        ';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -p'
-  fi
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_dir" : 'X\(//\)[^/]' \| \
-        X"$as_dir" : 'X\(//\)$' \| \
-        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Configuration commands:
-$config_commands
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.65,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2009 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h |  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in SED \
-GREP \
-EGREP \
-FGREP \
-LD \
-NM \
-LN_S \
-lt_SP2NL \
-lt_NL2SP \
-reload_flag \
-OBJDUMP \
-deplibs_check_method \
-file_magic_cmd \
-AR \
-AR_FLAGS \
-STRIP \
-RANLIB \
-CC \
-CFLAGS \
-compiler \
-lt_cv_sys_global_symbol_pipe \
-lt_cv_sys_global_symbol_to_cdecl \
-lt_cv_sys_global_symbol_to_c_name_address \
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-SHELL \
-ECHO \
-lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
-lt_prog_compiler_pic \
-lt_prog_compiler_static \
-lt_cv_prog_compiler_c_o \
-need_locks \
-DSYMUTIL \
-NMEDIT \
-LIPO \
-OTOOL \
-OTOOL64 \
-shrext_cmds \
-export_dynamic_flag_spec \
-whole_archive_flag_spec \
-compiler_needs_object \
-with_gnu_ld \
-allow_undefined_flag \
-no_undefined_flag \
-hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
-hardcode_libdir_separator \
-fix_srcfile_path \
-exclude_expsyms \
-include_expsyms \
-file_list_spec \
-variables_saved_for_relink \
-libname_spec \
-library_names_spec \
-soname_spec \
-finish_eval \
-old_striplib \
-striplib; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in reload_cmds \
-old_postinstall_cmds \
-old_postuninstall_cmds \
-old_archive_cmds \
-extract_expsyms_cmds \
-old_archive_from_new_cmds \
-old_archive_from_expsyms_cmds \
-archive_cmds \
-archive_expsym_cmds \
-module_cmds \
-module_expsym_cmds \
-export_symbols_cmds \
-prelink_cmds \
-postinstall_cmds \
-postuninstall_cmds \
-finish_cmds \
-sys_lib_search_path_spec \
-sys_lib_dlsearch_path_spec; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
-  ;;
-esac
-
-ac_aux_dir='$ac_aux_dir'
-xsi_shell='$xsi_shell'
-lt_shell_append='$lt_shell_append'
-
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'
-
-
-
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-    "xmms-goom/Makefile") CONFIG_FILES="$CONFIG_FILES xmms-goom/Makefile" ;;
-    "sdl-goom/Makefile") CONFIG_FILES="$CONFIG_FILES sdl-goom/Makefile" ;;
-    "libgoom2.pc") CONFIG_FILES="$CONFIG_FILES libgoom2.pc" ;;
-
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp=
-  trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = "\a"
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[         ]*VPATH[        ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[    ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[      ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X "  :F $CONFIG_FILES      :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-        # (if the path is not absolute).  The absolute path cannot be DOS-style,
-        # because $ac_f cannot contain `:'.
-        test -f "$ac_f" ||
-          case $ac_f in
-          [\\/$]*) false;;
-          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-          esac ||
-          as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-       `' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$ac_file" : 'X\(//\)[^/]' \| \
-        X"$ac_file" : 'X\(//\)$' \| \
-        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-  ac_MKDIR_P=$MKDIR_P
-  case $MKDIR_P in
-  [\\/$]* | ?:[\\/]* ) ;;
-  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&2;}
-
-  rm -f "$tmp/stdin"
-  case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-  esac
-
-
-  case $ac_file$ac_mode in
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$mf" : 'X\(//\)[^/]' \| \
-        X"$mf" : 'X\(//\)$' \| \
-        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$file" : 'X\(//\)[^/]' \| \
-        X"$file" : 'X\(//\)$' \| \
-        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
- ;;
-    "libtool":C)
-
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-# The names of the tagged configurations supported by this script.
-available_tags=""
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Which release of libtool.m4 was used?
-macro_version=$macro_version
-macro_revision=$macro_revision
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# What type of objects to build.
-pic_mode=$pic_mode
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="\$SED -e 1s/^X//"
-
-# A grep program that handles long lines.
-GREP=$lt_GREP
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# A literal string matcher.
-FGREP=$lt_FGREP
-
-# A BSD- or MS-compatible name lister.
-NM=$lt_NM
-
-# Whether we need soft or hard links.
-LN_S=$lt_LN_S
-
-# What is the maximum length of a command?
-max_cmd_len=$max_cmd_len
-
-# Object file suffix (normally "o").
-objext=$ac_objext
-
-# Executable file suffix (normally "").
-exeext=$exeext
-
-# whether the shell understands "unset".
-lt_unset=$lt_unset
-
-# turn spaces into newlines.
-SP2NL=$lt_lt_SP2NL
-
-# turn newlines into spaces.
-NL2SP=$lt_lt_NL2SP
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# An object symbol dumper.
-OBJDUMP=$lt_OBJDUMP
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == "file_magic".
-file_magic_cmd=$lt_file_magic_cmd
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A symbol stripping program.
-STRIP=$lt_STRIP
-
-# Commands used to install an old-style archive.
-RANLIB=$lt_RANLIB
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# A C compiler.
-LTCC=$lt_CC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_CFLAGS
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration.
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair.
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# Transform the output of nm in a C name address pair when lib prefix is needed.
-global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
-
-# Used to examine libraries when file_magic_cmd begins with "file".
-MAGIC_CMD=$MAGIC_CMD
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
-DSYMUTIL=$lt_DSYMUTIL
-
-# Tool to change global to local symbols on Mac OS X.
-NMEDIT=$lt_NMEDIT
-
-# Tool to manipulate fat objects and archives on Mac OS X.
-LIPO=$lt_LIPO
-
-# ldd/readelf like tool for Mach-O binaries on Mac OS X.
-OTOOL=$lt_OTOOL
-
-# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
-OTOOL64=$lt_OTOOL64
-
-# Old archive suffix (normally "a").
-libext=$libext
-
-# Shared library suffix (normally ".so").
-shrext_cmds=$lt_shrext_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at link time.
-variables_saved_for_relink=$lt_variables_saved_for_relink
-
-# Do we need the "lib" prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Library versioning type.
-version_type=$version_type
-
-# Shared library runtime path variable.
-runpath_var=$runpath_var
-
-# Shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names.  First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Command to use after installation of a shared archive.
-postinstall_cmds=$lt_postinstall_cmds
-
-# Command to use after uninstallation of a shared archive.
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# As "finish_cmds", except a single script fragment to be evaled but
-# not shown.
-finish_eval=$lt_finish_eval
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Compile-time system search path for libraries.
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Commands used to build an old-style archive.
-old_archive_cmds=$lt_old_archive_cmds
-
-# A language specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU compiler?
-with_gcc=$GCC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc
-
-# Whether or not to disallow shared libs when runtime libs are static.
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Whether the compiler copes with passing no objects directly.
-compiler_needs_object=$lt_compiler_needs_object
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-
-# Commands used to build a loadable module if different from building
-# a shared archive.
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Whether we are building with GNU ld or not.
-with_gnu_ld=$lt_with_gnu_ld
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that enforces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
-# Whether we need a single "-rpath" flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
-# library is relocated.
-hardcode_direct_absolute=$hardcode_direct_absolute
-
-# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-# into the resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-# into the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Set to "yes" if building a shared library automatically hardcodes DIR
-# into the library and all subsequent libraries and executables linked
-# against it.
-hardcode_automatic=$hardcode_automatic
-
-# Set to yes if linker adds runtime paths of dependent libraries
-# to runtime path list.
-inherit_rpath=$inherit_rpath
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to "yes" if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
-
-# Commands necessary for linking programs (against libraries) with templates.
-prelink_cmds=$lt_prelink_cmds
-
-# Specify filename containing input files.
-file_list_spec=$lt_file_list_spec
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1+=\$2"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1=\$$1\$2"
-}
-
-_LT_EOF
-    ;;
-  esac
-
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-
- ;;
-
-  esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit $?
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: goom2k4 was configured with the following options:" >&5
-$as_echo "$as_me: goom2k4 was configured with the following options:" >&6;}
-if test "x$HAVE_PPC" = "xyes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}:  ** PPC support enabled" >&5
-$as_echo "$as_me:  ** PPC support enabled" >&6;}
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}:     PPC support disabled" >&5
-$as_echo "$as_me:     PPC support disabled" >&6;}
-fi
-if test "x$HAVE_MMX" = "xyes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}:  ** MMX support enabled" >&5
-$as_echo "$as_me:  ** MMX support enabled" >&6;}
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}:     MMX support disabled" >&5
-$as_echo "$as_me:     MMX support disabled" >&6;}
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}:  ** goom lib will be built" >&5
-$as_echo "$as_me:  ** goom lib will be built" >&6;}
-if test "x$HAVE_XMMS" = "xyes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}:  ** XMMS plugin will be built" >&5
-$as_echo "$as_me:  ** XMMS plugin will be built" >&6;}
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}:     XMMS plugin will not be built" >&5
-$as_echo "$as_me:     XMMS plugin will not be built" >&6;}
-fi
-if test "x$MACTARGET" = "xyes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}:  ** goom mac application will be built" >&5
-$as_echo "$as_me:  ** goom mac application will be built" >&6;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}:  ** goom mac iTunes plugin will be built" >&5
-$as_echo "$as_me:  ** goom mac iTunes plugin will be built" >&6;}
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}:     goom mac application will not be built" >&5
-$as_echo "$as_me:     goom mac application will not be built" >&6;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}:     goom mac iTunes plugin will not be built" >&5
-$as_echo "$as_me:     goom mac iTunes plugin will not be built" >&6;}
-fi
-if test "x$HAVE_SDL" = "xyes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}:  ** goom sdl application will be built" >&5
-$as_echo "$as_me:  ** goom sdl application will be built" >&6;}
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}:     goom sdl application will not be built" >&5
-$as_echo "$as_me:     goom sdl application will not be built" >&6;}
-fi
diff --git a/xbmc/visualizations/Goom/goom2k4-0/sdl-goom/Makefile.in b/xbmc/visualizations/Goom/goom2k4-0/sdl-goom/Makefile.in
deleted file mode 100644 (file)
index d92dff0..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# the goom2 stand alone program
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@HAVE_SDL_TRUE@bin_PROGRAMS = goom2$(EXEEXT)
-subdir = sdl-goom
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
-PROGRAMS = $(bin_PROGRAMS)
-am__goom2_SOURCES_DIST = frame_rate_tester.c gmtimer.c gtk-callbacks.c \
-       gtk-interface.c gtk-support.c pixeldoubler.c readme.c \
-       sdl_goom.c sdl_pixeldoubler.c surface.c
-@HAVE_SDL_TRUE@am_goom2_OBJECTS = frame_rate_tester.$(OBJEXT) \
-@HAVE_SDL_TRUE@        gmtimer.$(OBJEXT) gtk-callbacks.$(OBJEXT) \
-@HAVE_SDL_TRUE@        gtk-interface.$(OBJEXT) gtk-support.$(OBJEXT) \
-@HAVE_SDL_TRUE@        pixeldoubler.$(OBJEXT) readme.$(OBJEXT) \
-@HAVE_SDL_TRUE@        sdl_goom.$(OBJEXT) sdl_pixeldoubler.$(OBJEXT) \
-@HAVE_SDL_TRUE@        surface.$(OBJEXT)
-goom2_OBJECTS = $(am_goom2_OBJECTS)
-@HAVE_SDL_TRUE@goom2_DEPENDENCIES = $(top_builddir)/src/libgoom2.la
-goom2_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(goom2_LDFLAGS) \
-       $(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I.@am__isrc@
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-       $(LDFLAGS) -o $@
-SOURCES = $(goom2_SOURCES)
-DIST_SOURCES = $(am__goom2_SOURCES_DIST)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MACFOLDER = @MACFOLDER@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@HAVE_SDL_TRUE@goom2_LDADD = $(top_builddir)/src/libgoom2.la
-@HAVE_SDL_TRUE@goom2_LDFLAGS = $(SDL_LIBS) `gtk-config --libs`
-@HAVE_SDL_TRUE@goom2_SOURCES = frame_rate_tester.c gmtimer.c gtk-callbacks.c gtk-interface.c gtk-support.c pixeldoubler.c readme.c sdl_goom.c sdl_pixeldoubler.c surface.c
-@HAVE_SDL_TRUE@INCLUDES = $(SDL_CFLAGS) `gtk-config --cflags` -I../src/
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-               && { if test -f $@; then exit 0; else break; fi; }; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sdl-goom/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu sdl-goom/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-binPROGRAMS: $(bin_PROGRAMS)
-       @$(NORMAL_INSTALL)
-       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
-       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
-       for p in $$list; do echo "$$p $$p"; done | \
-       sed 's/$(EXEEXT)$$//' | \
-       while read p p1; do if test -f $$p || test -f $$p1; \
-         then echo "$$p"; echo "$$p"; else :; fi; \
-       done | \
-       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
-           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
-       sed 'N;N;N;s,\n, ,g' | \
-       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
-         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-           if ($$2 == $$4) files[d] = files[d] " " $$1; \
-           else { print "f", $$3 "/" $$4, $$1; } } \
-         END { for (d in files) print "f", d, files[d] }' | \
-       while read type dir files; do \
-           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-           test -z "$$files" || { \
-           echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
-           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
-           } \
-       ; done
-
-uninstall-binPROGRAMS:
-       @$(NORMAL_UNINSTALL)
-       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
-       files=`for p in $$list; do echo "$$p"; done | \
-         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-             -e 's/$$/$(EXEEXT)/' `; \
-       test -n "$$list" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(bindir)" && rm -f $$files
-
-clean-binPROGRAMS:
-       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
-       echo " rm -f" $$list; \
-       rm -f $$list || exit $$?; \
-       test -n "$(EXEEXT)" || exit 0; \
-       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-       echo " rm -f" $$list; \
-       rm -f $$list
-goom2$(EXEEXT): $(goom2_OBJECTS) $(goom2_DEPENDENCIES) 
-       @rm -f goom2$(EXEEXT)
-       $(goom2_LINK) $(goom2_OBJECTS) $(goom2_LDADD) $(LIBS)
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frame_rate_tester.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gmtimer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk-callbacks.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk-interface.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk-support.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixeldoubler.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readme.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl_goom.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl_pixeldoubler.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/surface.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       set x; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-       for dir in "$(DESTDIR)$(bindir)"; do \
-         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-       done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-binPROGRAMS
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-       clean-generic clean-libtool ctags distclean distclean-compile \
-       distclean-generic distclean-libtool distclean-tags distdir dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-binPROGRAMS install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-       pdf pdf-am ps ps-am tags uninstall uninstall-am \
-       uninstall-binPROGRAMS
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/xbmc/visualizations/Goom/goom2k4-0/src/Makefile.in b/xbmc/visualizations/Goom/goom2k4-0/src/Makefile.in
deleted file mode 100644 (file)
index bed507f..0000000
+++ /dev/null
@@ -1,647 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# libgoom2
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = src
-DIST_COMMON = $(goom2_library_include_HEADERS) $(noinst_HEADERS) \
-       $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO goomsl_lex.c \
-       goomsl_yacc.c goomsl_yacc.h
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(goom2_libdir)" \
-       "$(DESTDIR)$(goom2_library_includedir)"
-LTLIBRARIES = $(goom2_lib_LTLIBRARIES)
-libgoom2_la_LIBADD =
-am__libgoom2_la_SOURCES_DIST = goomsl_yacc.y goomsl_lex.l goomsl.c \
-       goomsl_hash.c goomsl_heap.c goom_tools.c mmx.c xmmx.c \
-       ppc_zoom_ultimate.s ppc_drawings.s config_param.c \
-       convolve_fx.c filters.c flying_stars_fx.c gfontlib.c \
-       gfontrle.c goom_core.c graphic.c ifs.c lines.c mathtools.c \
-       sound_tester.c surf3d.c tentacle3d.c plugin_info.c v3d.c \
-       drawmethods.c cpu_info.c
-@HAVE_MMX_TRUE@am__objects_1 = mmx.lo xmmx.lo
-@HAVE_PPC_TRUE@am__objects_2 = ppc_zoom_ultimate.lo ppc_drawings.lo
-am_libgoom2_la_OBJECTS = goomsl_yacc.lo goomsl_lex.lo goomsl.lo \
-       goomsl_hash.lo goomsl_heap.lo goom_tools.lo $(am__objects_1) \
-       $(am__objects_2) config_param.lo convolve_fx.lo filters.lo \
-       flying_stars_fx.lo gfontlib.lo gfontrle.lo goom_core.lo \
-       graphic.lo ifs.lo lines.lo mathtools.lo sound_tester.lo \
-       surf3d.lo tentacle3d.lo plugin_info.lo v3d.lo drawmethods.lo \
-       cpu_info.lo
-libgoom2_la_OBJECTS = $(am_libgoom2_la_OBJECTS)
-libgoom2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(libgoom2_la_LDFLAGS) $(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I.@am__isrc@
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-       $(LDFLAGS) -o $@
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
-LTLEXCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
-YLWRAP = $(top_srcdir)/ylwrap
-CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
-LTCCASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=compile $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
-LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
-SOURCES = $(libgoom2_la_SOURCES)
-DIST_SOURCES = $(am__libgoom2_la_SOURCES_DIST)
-HEADERS = $(goom2_library_include_HEADERS) $(noinst_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MACFOLDER = @MACFOLDER@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@HAVE_MMX_FALSE@MMX_FILES = 
-@HAVE_MMX_TRUE@MMX_FILES = mmx.c xmmx.c 
-@HAVE_PPC_FALSE@PPC_FILES = 
-@HAVE_PPC_TRUE@PPC_FILES = ppc_zoom_ultimate.s ppc_drawings.s
-goom2_lib_LTLIBRARIES = libgoom2.la
-goom2_libdir = $(libdir)
-goom2_library_includedir = $(includedir)/goom
-goom2_library_include_HEADERS = goom.h goom_plugin_info.h goom_typedefs.h goom_graphic.h goom_config_param.h goom_visual_fx.h goom_filters.h goom_tools.h goomsl.h goomsl_hash.h goomsl_heap.h goom_tools.h goom_config.h
-libgoom2_la_LDFLAGS = -export-dynamic -export-symbols-regex "goom.*" 
-libgoom2_la_SOURCES = \
-       goomsl_yacc.y goomsl_lex.l goomsl.c goomsl_hash.c goomsl_heap.c \
-       goom_tools.c $(MMX_FILES) $(PPC_FILES) \
-       config_param.c convolve_fx.c filters.c \
-       flying_stars_fx.c gfontlib.c gfontrle.c \
-       goom_core.c graphic.c ifs.c lines.c \
-       mathtools.c sound_tester.c surf3d.c \
-       tentacle3d.c plugin_info.c \
-       v3d.c drawmethods.c \
-       cpu_info.c
-
-AM_YFLAGS = -d
-noinst_HEADERS = mmx.h
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .l .lo .o .obj .s .y
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-               && { if test -f $@; then exit 0; else break; fi; }; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu src/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-goom2_libLTLIBRARIES: $(goom2_lib_LTLIBRARIES)
-       @$(NORMAL_INSTALL)
-       test -z "$(goom2_libdir)" || $(MKDIR_P) "$(DESTDIR)$(goom2_libdir)"
-       @list='$(goom2_lib_LTLIBRARIES)'; test -n "$(goom2_libdir)" || list=; \
-       list2=; for p in $$list; do \
-         if test -f $$p; then \
-           list2="$$list2 $$p"; \
-         else :; fi; \
-       done; \
-       test -z "$$list2" || { \
-         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(goom2_libdir)'"; \
-         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(goom2_libdir)"; \
-       }
-
-uninstall-goom2_libLTLIBRARIES:
-       @$(NORMAL_UNINSTALL)
-       @list='$(goom2_lib_LTLIBRARIES)'; test -n "$(goom2_libdir)" || list=; \
-       for p in $$list; do \
-         $(am__strip_dir) \
-         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(goom2_libdir)/$$f'"; \
-         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(goom2_libdir)/$$f"; \
-       done
-
-clean-goom2_libLTLIBRARIES:
-       -test -z "$(goom2_lib_LTLIBRARIES)" || rm -f $(goom2_lib_LTLIBRARIES)
-       @list='$(goom2_lib_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
-goomsl_yacc.h: goomsl_yacc.c
-       @if test ! -f $@; then \
-         rm -f goomsl_yacc.c; \
-         $(MAKE) $(AM_MAKEFLAGS) goomsl_yacc.c; \
-       else :; fi
-libgoom2.la: $(libgoom2_la_OBJECTS) $(libgoom2_la_DEPENDENCIES) 
-       $(libgoom2_la_LINK) -rpath $(goom2_libdir) $(libgoom2_la_OBJECTS) $(libgoom2_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config_param.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolve_fx.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu_info.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawmethods.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filters.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flying_stars_fx.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfontlib.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfontrle.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/goom_core.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/goom_tools.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/goomsl.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/goomsl_hash.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/goomsl_heap.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/goomsl_lex.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/goomsl_yacc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graphic.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ifs.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lines.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mathtools.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmx.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_info.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound_tester.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/surf3d.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tentacle3d.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/v3d.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmmx.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
-
-.l.c:
-       $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
-
-.s.o:
-       $(CCASCOMPILE) -c -o $@ $<
-
-.s.obj:
-       $(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.s.lo:
-       $(LTCCASCOMPILE) -c -o $@ $<
-
-.y.c:
-       $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-install-goom2_library_includeHEADERS: $(goom2_library_include_HEADERS)
-       @$(NORMAL_INSTALL)
-       test -z "$(goom2_library_includedir)" || $(MKDIR_P) "$(DESTDIR)$(goom2_library_includedir)"
-       @list='$(goom2_library_include_HEADERS)'; test -n "$(goom2_library_includedir)" || list=; \
-       for p in $$list; do \
-         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         echo "$$d$$p"; \
-       done | $(am__base_list) | \
-       while read files; do \
-         echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(goom2_library_includedir)'"; \
-         $(INSTALL_HEADER) $$files "$(DESTDIR)$(goom2_library_includedir)" || exit $$?; \
-       done
-
-uninstall-goom2_library_includeHEADERS:
-       @$(NORMAL_UNINSTALL)
-       @list='$(goom2_library_include_HEADERS)'; test -n "$(goom2_library_includedir)" || list=; \
-       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(goom2_library_includedir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(goom2_library_includedir)" && rm -f $$files
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       set x; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
-installdirs:
-       for dir in "$(DESTDIR)$(goom2_libdir)" "$(DESTDIR)$(goom2_library_includedir)"; do \
-         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-       done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-       -rm -f goomsl_lex.c
-       -rm -f goomsl_yacc.c
-       -rm -f goomsl_yacc.h
-clean: clean-am
-
-clean-am: clean-generic clean-goom2_libLTLIBRARIES clean-libtool \
-       mostlyclean-am
-
-distclean: distclean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-goom2_libLTLIBRARIES \
-       install-goom2_library_includeHEADERS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-goom2_libLTLIBRARIES \
-       uninstall-goom2_library_includeHEADERS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-goom2_libLTLIBRARIES clean-libtool ctags distclean \
-       distclean-compile distclean-generic distclean-libtool \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am \
-       install-goom2_libLTLIBRARIES \
-       install-goom2_library_includeHEADERS install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-       pdf pdf-am ps ps-am tags uninstall uninstall-am \
-       uninstall-goom2_libLTLIBRARIES \
-       uninstall-goom2_library_includeHEADERS
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/xbmc/visualizations/Goom/goom2k4-0/xmms-goom/Makefile.in b/xbmc/visualizations/Goom/goom2k4-0/xmms-goom/Makefile.in
deleted file mode 100644 (file)
index 702845d..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# the xmms plugin
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = xmms-goom
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(xmms_libdir)"
-LTLIBRARIES = $(xmms_lib_LTLIBRARIES)
-@HAVE_XMMS_TRUE@libxmmsgoom2_la_DEPENDENCIES =  \
-@HAVE_XMMS_TRUE@       $(top_builddir)/src/libgoom2.la
-am__libxmmsgoom2_la_SOURCES_DIST = xmms_goom.c
-@HAVE_XMMS_TRUE@am_libxmmsgoom2_la_OBJECTS = xmms_goom.lo
-libxmmsgoom2_la_OBJECTS = $(am_libxmmsgoom2_la_OBJECTS)
-libxmmsgoom2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(libxmmsgoom2_la_LDFLAGS) $(LDFLAGS) -o $@
-@HAVE_XMMS_TRUE@am_libxmmsgoom2_la_rpath = -rpath $(xmms_libdir)
-DEFAULT_INCLUDES = -I.@am__isrc@
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-       $(LDFLAGS) -o $@
-SOURCES = $(libxmmsgoom2_la_SOURCES)
-DIST_SOURCES = $(am__libxmmsgoom2_la_SOURCES_DIST)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MACFOLDER = @MACFOLDER@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@HAVE_XMMS_TRUE@xmms_lib_LTLIBRARIES = libxmmsgoom2.la
-@HAVE_XMMS_TRUE@xmms_libdir = $(XMMS_VISUALIZATION_PLUGIN_DIR)
-@HAVE_XMMS_TRUE@libxmmsgoom2_la_LIBADD = $(top_builddir)/src/libgoom2.la $(XMMS_LIBS)
-@HAVE_XMMS_TRUE@libxmmsgoom2_la_SOURCES = xmms_goom.c
-@HAVE_XMMS_TRUE@INCLUDES = -DDATADIR=\"@XMMS_DATA_DIR@\" @XMMS_CFLAGS@ -Wall -I../src/
-libxmmsgoom2_la_LDFLAGS = -module -avoid-version
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-               && { if test -f $@; then exit 0; else break; fi; }; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu xmms-goom/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu xmms-goom/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-xmms_libLTLIBRARIES: $(xmms_lib_LTLIBRARIES)
-       @$(NORMAL_INSTALL)
-       test -z "$(xmms_libdir)" || $(MKDIR_P) "$(DESTDIR)$(xmms_libdir)"
-       @list='$(xmms_lib_LTLIBRARIES)'; test -n "$(xmms_libdir)" || list=; \
-       list2=; for p in $$list; do \
-         if test -f $$p; then \
-           list2="$$list2 $$p"; \
-         else :; fi; \
-       done; \
-       test -z "$$list2" || { \
-         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(xmms_libdir)'"; \
-         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(xmms_libdir)"; \
-       }
-
-uninstall-xmms_libLTLIBRARIES:
-       @$(NORMAL_UNINSTALL)
-       @list='$(xmms_lib_LTLIBRARIES)'; test -n "$(xmms_libdir)" || list=; \
-       for p in $$list; do \
-         $(am__strip_dir) \
-         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(xmms_libdir)/$$f'"; \
-         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(xmms_libdir)/$$f"; \
-       done
-
-clean-xmms_libLTLIBRARIES:
-       -test -z "$(xmms_lib_LTLIBRARIES)" || rm -f $(xmms_lib_LTLIBRARIES)
-       @list='$(xmms_lib_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
-libxmmsgoom2.la: $(libxmmsgoom2_la_OBJECTS) $(libxmmsgoom2_la_DEPENDENCIES) 
-       $(libxmmsgoom2_la_LINK) $(am_libxmmsgoom2_la_rpath) $(libxmmsgoom2_la_OBJECTS) $(libxmmsgoom2_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmms_goom.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       set x; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-       for dir in "$(DESTDIR)$(xmms_libdir)"; do \
-         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-       done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-xmms_libLTLIBRARIES \
-       mostlyclean-am
-
-distclean: distclean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-xmms_libLTLIBRARIES
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-xmms_libLTLIBRARIES
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-libtool clean-xmms_libLTLIBRARIES ctags distclean \
-       distclean-compile distclean-generic distclean-libtool \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip install-xmms_libLTLIBRARIES installcheck \
-       installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-compile \
-       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       tags uninstall uninstall-am uninstall-xmms_libLTLIBRARIES
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/xbmc/visualizations/Goom/goom2k4-0/ylwrap b/xbmc/visualizations/Goom/goom2k4-0/ylwrap
deleted file mode 100755 (executable)
index 84d5634..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-#! /bin/sh
-# ylwrap - wrapper for lex/yacc invocations.
-
-scriptversion=2009-04-28.21; # UTC
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
-# 2007, 2009 Free Software Foundation, Inc.
-#
-# Written by Tom Tromey <tromey@cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-case "$1" in
-  '')
-    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
-    exit 1
-    ;;
-  --basedir)
-    basedir=$2
-    shift 2
-    ;;
-  -h|--h*)
-    cat <<\EOF
-Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
-
-Wrapper for lex/yacc invocations, renaming files as desired.
-
-  INPUT is the input file
-  OUTPUT is one file PROG generates
-  DESIRED is the file we actually want instead of OUTPUT
-  PROGRAM is program to run
-  ARGS are passed to PROG
-
-Any number of OUTPUT,DESIRED pairs may be used.
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v|--v*)
-    echo "ylwrap $scriptversion"
-    exit $?
-    ;;
-esac
-
-
-# The input.
-input="$1"
-shift
-case "$input" in
-  [\\/]* | ?:[\\/]*)
-    # Absolute path; do nothing.
-    ;;
-  *)
-    # Relative path.  Make it absolute.
-    input="`pwd`/$input"
-    ;;
-esac
-
-pairlist=
-while test "$#" -ne 0; do
-  if test "$1" = "--"; then
-    shift
-    break
-  fi
-  pairlist="$pairlist $1"
-  shift
-done
-
-# The program to run.
-prog="$1"
-shift
-# Make any relative path in $prog absolute.
-case "$prog" in
-  [\\/]* | ?:[\\/]*) ;;
-  *[\\/]*) prog="`pwd`/$prog" ;;
-esac
-
-# FIXME: add hostname here for parallel makes that run commands on
-# other machines.  But that might take us over the 14-char limit.
-dirname=ylwrap$$
-trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
-mkdir $dirname || exit 1
-
-cd $dirname
-
-case $# in
-  0) "$prog" "$input" ;;
-  *) "$prog" "$@" "$input" ;;
-esac
-ret=$?
-
-if test $ret -eq 0; then
-  set X $pairlist
-  shift
-  first=yes
-  # Since DOS filename conventions don't allow two dots,
-  # the DOS version of Bison writes out y_tab.c instead of y.tab.c
-  # and y_tab.h instead of y.tab.h. Test to see if this is the case.
-  y_tab_nodot="no"
-  if test -f y_tab.c || test -f y_tab.h; then
-    y_tab_nodot="yes"
-  fi
-
-  # The directory holding the input.
-  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
-  # Quote $INPUT_DIR so we can use it in a regexp.
-  # FIXME: really we should care about more than `.' and `\'.
-  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
-
-  while test "$#" -ne 0; do
-    from="$1"
-    # Handle y_tab.c and y_tab.h output by DOS
-    if test $y_tab_nodot = "yes"; then
-      if test $from = "y.tab.c"; then
-       from="y_tab.c"
-      else
-       if test $from = "y.tab.h"; then
-         from="y_tab.h"
-       fi
-      fi
-    fi
-    if test -f "$from"; then
-      # If $2 is an absolute path name, then just use that,
-      # otherwise prepend `../'.
-      case "$2" in
-       [\\/]* | ?:[\\/]*) target="$2";;
-       *) target="../$2";;
-      esac
-
-      # We do not want to overwrite a header file if it hasn't
-      # changed.  This avoid useless recompilations.  However the
-      # parser itself (the first file) should always be updated,
-      # because it is the destination of the .y.c rule in the
-      # Makefile.  Divert the output of all other files to a temporary
-      # file so we can compare them to existing versions.
-      if test $first = no; then
-       realtarget="$target"
-       target="tmp-`echo $target | sed s/.*[\\/]//g`"
-      fi
-      # Edit out `#line' or `#' directives.
-      #
-      # We don't want the resulting debug information to point at
-      # an absolute srcdir; it is better for it to just mention the
-      # .y file with no path.
-      #
-      # We want to use the real output file name, not yy.lex.c for
-      # instance.
-      #
-      # We want the include guards to be adjusted too.
-      FROM=`echo "$from" | sed \
-            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
-            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
-      TARGET=`echo "$2" | sed \
-            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
-            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
-
-      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
-          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
-
-      # Check whether header files must be updated.
-      if test $first = no; then
-       if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
-         echo "$2" is unchanged
-         rm -f "$target"
-       else
-          echo updating "$2"
-          mv -f "$target" "$realtarget"
-        fi
-      fi
-    else
-      # A missing file is only an error for the first file.  This
-      # is a blatant hack to let us support using "yacc -d".  If -d
-      # is not specified, we don't want an error when the header
-      # file is "missing".
-      if test $first = yes; then
-        ret=1
-      fi
-    fi
-    shift
-    shift
-    first=no
-  done
-else
-  ret=$?
-fi
-
-# Remove the directory.
-cd ..
-rm -rf $dirname
-
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
index b715b3c..4e6d20a 100644 (file)
@@ -7,4 +7,9 @@
   <extension
     point="xbmc.player.musicviz"
     library_linux="Goom.vis" />
+  <extension point="xbmc.addon.metadata">
+    <summary lang="en">Goom 2k4 Visualization</summary>
+    <description lang="en">The Goom 2k4 visualization supports effects like Tentacles, Flash, Stars, Fireworks, Waves, Blurs and Glows and includes a large number of trippy hypnotic effects that dance, swirl and pop with the music</description>
+  <platform>linux</platform>
+  </extension>
 </addon>
diff --git a/xbmc/visualizations/Goom/visualization.goom/default.tbn b/xbmc/visualizations/Goom/visualization.goom/default.tbn
deleted file mode 100644 (file)
index e4e4fa1..0000000
Binary files a/xbmc/visualizations/Goom/visualization.goom/default.tbn and /dev/null differ
diff --git a/xbmc/visualizations/Goom/visualization.goom/description.xml b/xbmc/visualizations/Goom/visualization.goom/description.xml
deleted file mode 100644 (file)
index 8a51d68..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addoninfo>
-  <id>visualization.goom</id>
-  <type>visualization</type>
-  <title>Goom</title>
-  <library>Goom.vis</library>
-  <librarywin32>Goom_win32.vis</librarywin32>
-  <version>1.0.0</version>
-  <platforms>
-    <platform>windows</platform>
-    <platform>linux</platform>
-  </platforms>
-  <minversion>
-    <xbmc>28344</xbmc>
-  </minversion>
-  <summary>Visualization</summary>
-  <description>Goom visual effects generator</description>
-  <author>TEAMXBMC</author>
-</addoninfo>
diff --git a/xbmc/visualizations/Goom/visualization.goom/icon.png b/xbmc/visualizations/Goom/visualization.goom/icon.png
new file mode 100644 (file)
index 0000000..f535698
Binary files /dev/null and b/xbmc/visualizations/Goom/visualization.goom/icon.png differ
index d4e5019..8b2299b 100644 (file)
@@ -59,6 +59,7 @@ d4rk@xbmc.org
 #include <GL/glew.h>
 #include "libprojectM/projectM.hpp"
 #include <string>
+#include <utils/log.h>
 
 projectM *globalPM = NULL;
 
@@ -77,6 +78,7 @@ bool g_UserPackFolder;
 char lastPresetDir[1024];
 bool lastLockStatus;
 int lastPresetIdx;
+int lastLoggedPresetIdx;
 
 //-- Create -------------------------------------------------------------------
 // Called once when the visualisation is created by XBMC. Do any setup here.
@@ -99,6 +101,7 @@ extern "C" ADDON_STATUS ADDON_Create(void* hdl, void* props)
   g_configPM.easterEgg = 0.0;
   g_configPM.windowLeft = visprops->x;
   g_configPM.windowBottom = visprops->y;
+  lastLoggedPresetIdx = lastPresetIdx;
 
   return ADDON_STATUS_NEED_SAVEDSETTINGS;
 }
@@ -126,7 +129,13 @@ extern "C" void AudioData(const short* pAudioData, int iAudioDataLength, float *
 extern "C" void Render()
 {
   if (globalPM)
+  {
     globalPM->renderFrame();
+    unsigned preset;
+    globalPM->selectedPresetIndex(preset);
+    if (lastLoggedPresetIdx != preset) CLog::Log(LOGDEBUG,"PROJECTM - Changed preset to: %s",g_presets[preset]);
+    lastLoggedPresetIdx = preset;
+  }
 }
 
 //-- GetInfo ------------------------------------------------------------------
index 7fc164b..31077de 100644 (file)
@@ -58,7 +58,7 @@ endif(BUILD_PROJECTM_STATIC)
 SET_TARGET_PROPERTIES(projectM PROPERTIES VERSION 2.00 SOVERSION 2)
 
 if (APPLE)
-ADD_DEFINITIONS(-DMACOS -DSTBI_NO_DDS -DUSE_THREADS)
+ADD_DEFINITIONS(-DMACOS -DSTBI_NO_DDS)
 set(RESOURCE_PREFIX "Resources" )
 FIND_LIBRARY(CORE_FOUNDATION_LIBRARY CoreFoundation )
 MARK_AS_ADVANCED (CORE_FOUNDATION_LIBRARY)
@@ -68,10 +68,10 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.4 -L/opt/local/l
 else (APPLE)
 if (WIN32)
 set (RESOURCE_PREFIX "Resources")
-ADD_DEFINITIONS(-DWIN32 -DSTBI_NO_DDS -DUSE_THREADS)
+ADD_DEFINITIONS(-DWIN32 -DSTBI_NO_DDS)
 else(WIN32)
 set (RESOURCE_PREFIX "share/projectM")
-ADD_DEFINITIONS(-DLINUX -DSTBI_NO_DDS -DUSE_THREADS)
+ADD_DEFINITIONS(-DLINUX -DSTBI_NO_DDS)
 endif(WIN32)
 endif(APPLE)
 
index 571e7d0..a7bf064 100644 (file)
@@ -40,6 +40,7 @@
 #include "utils/StringUtils.h"
 #include "DllPaths_win32.h"
 #include "FileSystem/File.h"
+#include "utils/URIUtils.h"
 
 // default Broadcom registy bits (setup when installing a CrystalHD card)
 #define BC_REG_PATH       "Software\\Broadcom\\MediaPC"
@@ -438,10 +439,20 @@ CStdString CWIN32Util::GetSystemPath()
 
 CStdString CWIN32Util::GetProfilePath()
 {
-  CStdString strProfilePath = GetSpecialFolder(CSIDL_APPDATA|CSIDL_FLAG_CREATE);
+  CStdString strProfilePath;
+  CStdString strHomePath;
+
+  CUtil::GetHomePath(strHomePath);
+  
+  if(g_application.PlatformDirectoriesEnabled())
+    strProfilePath = URIUtils::AddFileToFolder(GetSpecialFolder(CSIDL_APPDATA|CSIDL_FLAG_CREATE), "XBMC");
+  else
+    strProfilePath = URIUtils::AddFileToFolder(strHomePath , "portable_data");
   
   if (strProfilePath.length() == 0)
-    CUtil::GetHomePath(strProfilePath);
+    strProfilePath = strHomePath;
+
+  URIUtils::AddSlashAtEnd(strProfilePath);
 
   return strProfilePath;
 }
@@ -511,7 +522,10 @@ HRESULT CWIN32Util::ToggleTray(const char cDriveLetter)
   if(dwReq == IOCTL_STORAGE_EJECT_MEDIA && bRet == 1)
   {
     strRootFormat.Format( _T("%c:"), cDL);
-    g_application.getApplicationMessenger().OpticalUnMount(strRootFormat);
+    CMediaSource share;
+    share.strPath = strRootFormat;
+    share.strName = share.strPath;
+    g_mediaManager.RemoveAutoSource(share);
   }
   return bRet? S_OK : S_FALSE;
 }
@@ -787,6 +801,15 @@ void CWIN32Util::GetDrivesByType(VECSOURCES &localDrives, Drive_Types eDriveType
         iPos += (wcslen( pcBuffer + iPos) + 1 );
         continue;
       }
+
+      // usb hard drives are reported as DRIVE_FIXED and won't be returned by queries with REMOVABLE_DRIVES set
+      // so test for usb hard drives
+      /*if(uDriveType == DRIVE_FIXED)
+      {
+        if(IsUsbDevice(strWdrive))
+          uDriveType = DRIVE_REMOVABLE;
+      }*/
+
       share.strPath= share.strName= "";
 
       bool bUseDCD= false;
@@ -1421,6 +1444,48 @@ bool CWIN32Util::GetFocussedProcess(CStdString &strProcessFile)
   return true;
 }
 
+// Adjust the src rectangle so that the dst is always contained in the target rectangle.
+void CWIN32Util::CropSource(CRect& src, CRect& dst, CRect target)
+{
+  if(dst.x1 < target.x1)
+  {
+    src.x1 -= (dst.x1 - target.x1)
+            * (src.x2 - src.x1)
+            / (dst.x2 - dst.x1);
+    dst.x1  = target.x1;
+  }
+  if(dst.y1 < target.y1)
+  {
+    src.y1 -= (dst.y1 - target.y1)
+            * (src.y2 - src.y1)
+            / (dst.y2 - dst.y1);
+    dst.y1  = target.y1;
+  }
+  if(dst.x2 > target.x2)
+  {
+    src.x2 -= (dst.x2 - target.x2)
+            * (src.x2 - src.x1)
+            / (dst.x2 - dst.x1);
+    dst.x2  = target.x2;
+  }
+  if(dst.y2 > target.y2)
+  {
+    src.y2 -= (dst.y2 - target.y2)
+            * (src.y2 - src.y1)
+            / (dst.y2 - dst.y1);
+    dst.y2  = target.y2;
+  }
+  // Callers expect integer coordinates.
+  src.x1 = floor(src.x1);
+  src.y1 = floor(src.y1);
+  src.x2 = ceil(src.x2);
+  src.y2 = ceil(src.y2);
+  dst.x1 = floor(dst.x1);
+  dst.y1 = floor(dst.y1);
+  dst.x2 = ceil(dst.x2);
+  dst.y2 = ceil(dst.y2);
+}
+
 void CWinIdleTimer::StartZero()
 {
   SetThreadExecutionState(ES_SYSTEM_REQUIRED);
@@ -1452,3 +1517,49 @@ extern "C"
     return NULL;
   }
 }
+
+// detect if a drive is a usb device
+// code taken from http://banderlogi.blogspot.com/2011/06/enum-drive-letters-attached-for-usb.html
+
+bool CWIN32Util::IsUsbDevice(const CStdStringW &strWdrive)
+{
+  CStdStringW strWDevicePath;
+  strWDevicePath.Format(L"\\\\.\\%s",strWdrive.Left(2));
+  HANDLE deviceHandle = CreateFileW(
+    strWDevicePath.c_str(),
+   0,                // no access to the drive
+   FILE_SHARE_READ | // share mode
+   FILE_SHARE_WRITE,
+   NULL,             // default security attributes
+   OPEN_EXISTING,    // disposition
+   0,                // file attributes
+   NULL);            // do not copy file attributes
+
+  if(deviceHandle == INVALID_HANDLE_VALUE)
+    return false;
+  // setup query
+  STORAGE_PROPERTY_QUERY query;
+  memset(&query, 0, sizeof(query));
+  query.PropertyId = StorageDeviceProperty;
+  query.QueryType = PropertyStandardQuery;
+   
+  // issue query
+  DWORD bytes;
+  STORAGE_DEVICE_DESCRIPTOR devd;
+  STORAGE_BUS_TYPE busType = BusTypeUnknown;
+  if (DeviceIoControl(deviceHandle,
+   IOCTL_STORAGE_QUERY_PROPERTY,
+   &query, sizeof(query),
+   &devd, sizeof(devd),
+   &bytes, NULL))
+  {
+   busType = devd.BusType;
+  }
+   
+  CloseHandle(deviceHandle);
+  return BusTypeUsb == busType;
+ }
\ No newline at end of file
index 4c39f62..7d53429 100644 (file)
@@ -28,6 +28,7 @@
 #endif
 #include "MediaSource.h"
 #include "utils/Stopwatch.h"
+#include "guilib/Geometry.h"
 
 enum Drive_Types
 {
@@ -80,6 +81,9 @@ public:
   static bool GetCrystalHDLibraryPath(CStdString &strPath);
   
   static bool GetFocussedProcess(CStdString &strProcessFile);
+  static void CropSource(CRect& src, CRect& dst, CRect target);
+
+  static bool IsUsbDevice(const CStdStringW &strWdrive);
 
 private:
 #if _MSC_VER > 1400
diff --git a/xbmc/win32/WINFileSMB.cpp b/xbmc/win32/WINFileSMB.cpp
deleted file mode 100644 (file)
index 9c59c5d..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-
-/*
- * XBMC Media Center
- * Copyright (c) 2002 Frodo
- * Portions Copyright (c) by the authors of ffmpeg and xvid
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-#include "WINFileSMB.h"
-#include "URL.h"
-#include "settings/GUISettings.h"
-
-#include <sys/stat.h>
-#include <io.h>
-#include "utils/log.h"
-#include "utils/CharsetConverter.h"
-#include "utils/URIUtils.h"
-#include "WINSMBDirectory.h"
-
-using namespace XFILE;
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-//*********************************************************************************************
-CWINFileSMB::CWINFileSMB()
-    : m_hFile(INVALID_HANDLE_VALUE)
-{}
-
-//*********************************************************************************************
-CWINFileSMB::~CWINFileSMB()
-{
-  if (m_hFile != INVALID_HANDLE_VALUE) Close();
-}
-//*********************************************************************************************
-CStdString CWINFileSMB::GetLocal(const CURL &url)
-{
-  CStdString path( url.GetFileName() );
-
-  if( url.GetProtocol().Equals("smb", false) )
-  {
-    CStdString host( url.GetHostName() );
-
-    if(host.size() > 0)
-    {
-      path = "//" + host + "/" + path;
-    }
-  }
-
-  path.Replace('/', '\\');
-
-  return path;
-}
-
-//*********************************************************************************************
-bool CWINFileSMB::Open(const CURL& url)
-{
-  CStdString strFile = GetLocal(url);
-
-  CStdStringW strWFile;
-  g_charsetConverter.utf8ToW(strFile, strWFile, false);
-  m_hFile.attach(CreateFileW(strWFile.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL));
-
-  if (!m_hFile.isValid())
-  {
-    if(GetLastError() == ERROR_FILE_NOT_FOUND)
-      return false;
-
-    XFILE::CWINSMBDirectory smb;
-    smb.ConnectToShare(url);
-    m_hFile.attach(CreateFileW(strWFile.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL));
-    if (!m_hFile.isValid())
-    {
-      CLog::Log(LOGERROR,"CWINFileSMB: Unable to open file '%s' Error '%d%",strWFile.c_str(), GetLastError());
-      return false;
-    }
-  }
-
-  m_i64FilePos = 0;
-  Seek(0, SEEK_SET);
-
-  return true;
-}
-
-bool CWINFileSMB::Exists(const CURL& url)
-{
-  struct __stat64 buffer;
-  if(url.GetFileName() == url.GetShareName())
-    return false;
-  CStdString strFile = GetLocal(url);
-  URIUtils::RemoveSlashAtEnd(strFile);
-  CStdStringW strWFile;
-  g_charsetConverter.utf8ToW(strFile, strWFile, false);
-  if(_wstat64(strWFile.c_str(), &buffer) == 0)
-    return true;
-
-  if(errno == ENOENT)
-    return false;
-
-  XFILE::CWINSMBDirectory smb;
-  if(smb.ConnectToShare(url) == false)
-    return false;
-
-  return (_wstat64(strWFile.c_str(), &buffer) == 0);
-}
-
-int CWINFileSMB::Stat(struct __stat64* buffer)
-{
-  int fd;
-  HANDLE hFileDup;
-  if (0 == DuplicateHandle(GetCurrentProcess(), (HANDLE)m_hFile, GetCurrentProcess(), &hFileDup, 0, FALSE, DUPLICATE_SAME_ACCESS))
-  {
-    CLog::Log(LOGERROR, __FUNCTION__" - DuplicateHandle()");
-    return -1;
-  }
-
-  fd = _open_osfhandle((intptr_t)((HANDLE)hFileDup), 0);
-  if (fd == -1)
-  {
-    CLog::Log(LOGERROR, "CWINFileSMB Stat: fd == -1");
-    return -1;
-  }
-
-  int result = _fstat64(fd, buffer);
-  _close(fd);
-  return result;
-}
-
-int CWINFileSMB::Stat(const CURL& url, struct __stat64* buffer)
-{
-  CStdString strFile = GetLocal(url);
-  /* _wstat64 calls FindFirstFileEx. According to MSDN, the path should not end in a trailing backslash.
-    Remove it before calling _wstat64 */
-  if (strFile.length() > 3 && URIUtils::HasSlashAtEnd(strFile))
-    URIUtils::RemoveSlashAtEnd(strFile);
-  CStdStringW strWFile;
-  g_charsetConverter.utf8ToW(strFile, strWFile, false);
-  if(_wstat64(strWFile.c_str(), buffer) == 0)
-    return 0;
-
-  if(errno == ENOENT)
-    return -1;
-
-  XFILE::CWINSMBDirectory smb;
-  if(smb.ConnectToShare(url) == false)
-    return -1;
-
-  return _wstat64(strWFile.c_str(), buffer);
-}
-
-
-//*********************************************************************************************
-bool CWINFileSMB::OpenForWrite(const CURL& url, bool bOverWrite)
-{
-  CStdString strPath = GetLocal(url);
-
-  CStdStringW strWPath;
-  g_charsetConverter.utf8ToW(strPath, strWPath, false);
-  m_hFile.attach(CreateFileW(strWPath.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, bOverWrite ? CREATE_ALWAYS : OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL));
-
-  if (!m_hFile.isValid())
-  {
-    if(GetLastError() == ERROR_FILE_NOT_FOUND)
-      return false;
-
-    XFILE::CWINSMBDirectory smb;
-    smb.ConnectToShare(url);
-    m_hFile.attach(CreateFileW(strWPath.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, bOverWrite ? CREATE_ALWAYS : OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL));
-    if (!m_hFile.isValid())
-    {
-      CLog::Log(LOGERROR,"CWINFileSMB: Unable to open file for writing '%s' Error '%d%",strWPath.c_str(), GetLastError());
-      return false;
-    }
-  }
-
-  m_i64FilePos = 0;
-  Seek(0, SEEK_SET);
-
-  return true;
-}
-
-//*********************************************************************************************
-unsigned int CWINFileSMB::Read(void *lpBuf, int64_t uiBufSize)
-{
-  if (!m_hFile.isValid()) return 0;
-  DWORD nBytesRead;
-  if ( ReadFile((HANDLE)m_hFile, lpBuf, (DWORD)uiBufSize, &nBytesRead, NULL) )
-  {
-    m_i64FilePos += nBytesRead;
-    return nBytesRead;
-  }
-  return 0;
-}
-
-//*********************************************************************************************
-int CWINFileSMB::Write(const void *lpBuf, int64_t uiBufSize)
-{
-  if (!m_hFile.isValid())
-    return 0;
-  
-  DWORD nBytesWriten;
-  if ( WriteFile((HANDLE)m_hFile, (void*) lpBuf, (DWORD)uiBufSize, &nBytesWriten, NULL) )
-    return nBytesWriten;
-  
-  return 0;
-}
-
-//*********************************************************************************************
-void CWINFileSMB::Close()
-{
-  m_hFile.reset();
-}
-
-//*********************************************************************************************
-int64_t CWINFileSMB::Seek(int64_t iFilePosition, int iWhence)
-{
-  LARGE_INTEGER lPos, lNewPos;
-  lPos.QuadPart = iFilePosition;
-  int bSuccess;
-
-  int64_t length = GetLength();
-
-  switch (iWhence)
-  {
-  case SEEK_SET:
-    if (iFilePosition <= length || length == 0)
-      bSuccess = SetFilePointerEx((HANDLE)m_hFile, lPos, &lNewPos, FILE_BEGIN);
-    else
-      bSuccess = false;
-    break;
-
-  case SEEK_CUR:
-    if ((GetPosition()+iFilePosition) <= length || length == 0)
-      bSuccess = SetFilePointerEx((HANDLE)m_hFile, lPos, &lNewPos, FILE_CURRENT);
-    else
-      bSuccess = false;
-    break;
-
-  case SEEK_END:
-    bSuccess = SetFilePointerEx((HANDLE)m_hFile, lPos, &lNewPos, FILE_END);
-    break;
-
-  default:
-    return -1;
-  }
-  if (bSuccess)
-  {
-    m_i64FilePos = lNewPos.QuadPart;
-    return m_i64FilePos;
-  }
-  else
-    return -1;
-}
-
-//*********************************************************************************************
-int64_t CWINFileSMB::GetLength()
-{
-  LARGE_INTEGER i64Size;
-  GetFileSizeEx((HANDLE)m_hFile, &i64Size);
-  return i64Size.QuadPart;
-}
-
-//*********************************************************************************************
-int64_t CWINFileSMB::GetPosition()
-{
-  return m_i64FilePos;
-}
-
-bool CWINFileSMB::Delete(const CURL& url)
-{
-  CStdString strFile=GetLocal(url);
-
-  CStdStringW strWFile;
-  g_charsetConverter.utf8ToW(strFile, strWFile, false);
-  return ::DeleteFileW(strWFile.c_str()) ? true : false;
-}
-
-bool CWINFileSMB::Rename(const CURL& url, const CURL& urlnew)
-{
-  CStdString strFile=GetLocal(url);
-  CStdString strNewFile=GetLocal(urlnew);
-
-  CStdStringW strWFile;
-  CStdStringW strWNewFile;
-  g_charsetConverter.utf8ToW(strFile, strWFile, false);
-  g_charsetConverter.utf8ToW(strNewFile, strWNewFile, false);
-  return ::MoveFileW(strWFile.c_str(), strWNewFile.c_str()) ? true : false;
-}
-
-bool CWINFileSMB::SetHidden(const CURL &url, bool hidden)
-{
-  CStdStringW path;
-  g_charsetConverter.utf8ToW(GetLocal(url), path, false);
-  DWORD attributes = hidden ? FILE_ATTRIBUTE_HIDDEN : FILE_ATTRIBUTE_NORMAL;
-  if (SetFileAttributesW(path.c_str(), attributes))
-    return true;
-  return false;
-}
-
-void CWINFileSMB::Flush()
-{
-  ::FlushFileBuffers(m_hFile);
-}
-
-int CWINFileSMB::IoControl(EIoControl request, void* param)
-{ 
-  return -1;
-}
diff --git a/xbmc/win32/WINFileSMB.h b/xbmc/win32/WINFileSMB.h
deleted file mode 100644 (file)
index 3f89fb3..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * XBMC Media Center
- * Copyright (c) 2002 Frodo
- * Portions Copyright (c) by the authors of ffmpeg and xvid
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-// WINFileSMB.h: interface for the CWINFileSMB class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include "filesystem/IFile.h"
-#include "utils/AutoPtrHandle.h"
-
-namespace XFILE
-{
-class CWINFileSMB : public IFile
-{
-public:
-  CWINFileSMB();
-  virtual ~CWINFileSMB();
-  virtual int64_t GetPosition();
-  virtual int64_t GetLength();
-  virtual bool Open(const CURL& url);
-  virtual bool Exists(const CURL& url);
-  virtual int Stat(const CURL& url, struct __stat64* buffer);
-  virtual int Stat(struct __stat64* buffer);
-  virtual unsigned int Read(void* lpBuf, int64_t uiBufSize);
-  virtual int Write(const void* lpBuf, int64_t uiBufSize);
-  virtual int64_t Seek(int64_t iFilePosition, int iWhence = SEEK_SET);
-  virtual void Close();
-  virtual void Flush();
-
-  virtual bool OpenForWrite(const CURL& url, bool bOverWrite = false);
-
-  virtual bool Delete(const CURL& url);
-  virtual bool Rename(const CURL& url, const CURL& urlnew);
-  virtual bool SetHidden(const CURL& url, bool hidden);
-
-  virtual int IoControl(EIoControl request, void* param);
-protected:
-  CStdString GetLocal(const CURL &url); /* crate a properly format path from an url */
-  AUTOPTR::CAutoPtrHandle m_hFile;
-  int64_t m_i64FilePos;
-};
-
-}
diff --git a/xbmc/win32/WINSMBDirectory.cpp b/xbmc/win32/WINSMBDirectory.cpp
deleted file mode 100644 (file)
index 5e2c2de..0000000
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- *      Copyright (C) 2005-2008 Team XBMC
- *      http://www.xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, write to
- *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *  http://www.gnu.org/copyleft/gpl.html
- *
- */
-
-
-#include "WINSMBDirectory.h"
-#include "URL.h"
-#include "utils/URIUtils.h"
-#include "settings/GUISettings.h"
-#include "FileItem.h"
-#include "WIN32Util.h"
-#include "utils/AutoPtrHandle.h"
-#include "utils/log.h"
-#include "utils/CharsetConverter.h"
-#include "PasswordManager.h"
-#include "Util.h"
-
-#ifndef INVALID_FILE_ATTRIBUTES
-#define INVALID_FILE_ATTRIBUTES ((DWORD) -1)
-#endif
-
-
-using namespace AUTOPTR;
-using namespace XFILE;
-
-CWINSMBDirectory::CWINSMBDirectory(void)
-{
-  m_bHost=false;
-}
-
-CWINSMBDirectory::~CWINSMBDirectory(void)
-{
-}
-
-CStdString CWINSMBDirectory::GetLocal(const CStdString& strPath)
-{
-  CURL url(strPath);
-  CStdString path( url.GetFileName() );
-  if( url.GetProtocol().Equals("smb", false) )
-  {
-    CStdString host( url.GetHostName() );
-
-    if(host.size() > 0)
-    {
-      path = "//" + host + "/" + path;
-    }
-  }
-  path.Replace('/', '\\');
-  return path;
-}
-
-bool CWINSMBDirectory::GetDirectory(const CStdString& strPath1, CFileItemList &items)
-{
-  WIN32_FIND_DATAW wfd;
-
-  CStdString strPath=strPath1;
-
-  CURL url(strPath);
-
-  if(url.GetShareName().empty())
-  {
-    LPNETRESOURCEW lpnr = NULL;
-    bool ret;
-    if(!url.GetHostName().empty())
-    {
-      lpnr = (LPNETRESOURCEW) GlobalAlloc(GPTR, 16384);
-      if(lpnr == NULL)
-        return false;
-
-      ConnectToShare(url);
-      CStdString strHost = "\\\\" + url.GetHostName();
-      CStdStringW strHostW;
-      g_charsetConverter.utf8ToW(strHost,strHostW);
-      lpnr->lpRemoteName = (LPWSTR)strHostW.c_str();
-      m_bHost = true;
-      ret = EnumerateFunc(lpnr, items);
-      GlobalFree((HGLOBAL) lpnr);
-      m_bHost = false;
-    }
-    else
-      ret = EnumerateFunc(lpnr, items);  
-    return ret; 
-  }
-
-  memset(&wfd, 0, sizeof(wfd));
-  //rebuild the URL
-  CStdString strUNCShare = "\\\\" + url.GetHostName() + "\\" + url.GetFileName();
-  strUNCShare.Replace("/", "\\");
-  if(!URIUtils::HasSlashAtEnd(strUNCShare))
-    strUNCShare.append("\\");
-
-  CStdStringW strSearchMask;
-  g_charsetConverter.utf8ToW(strUNCShare, strSearchMask, false); 
-  strSearchMask += "*";
-
-  FILETIME localTime;
-  CAutoPtrFind hFind ( FindFirstFileW(strSearchMask.c_str(), &wfd));
-  
-  // on error, check if path exists at all, this will return true if empty folder
-  if (!hFind.isValid()) 
-  {
-    DWORD ret = GetLastError();
-    if(ret == ERROR_INVALID_PASSWORD || ret == ERROR_LOGON_FAILURE || ret == ERROR_ACCESS_DENIED || ret == ERROR_INVALID_HANDLE)
-    {
-      if(ConnectToShare(url) == false)
-        return false;
-      hFind.attach(FindFirstFileW(strSearchMask.c_str(), &wfd));
-    }
-    else
-      return Exists(strPath1);
-  }
-
-  if (hFind.isValid())
-  {
-    do
-    {
-      if (wfd.cFileName[0] != 0)
-      {
-        CStdString strLabel;
-        g_charsetConverter.wToUTF8(wfd.cFileName,strLabel);
-        if ( (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
-        {
-          if (strLabel != "." && strLabel != "..")
-          {
-            CFileItemPtr pItem(new CFileItem(strLabel));
-            CStdString path = URIUtils::AddFileToFolder(strPath, strLabel);
-            URIUtils::AddSlashAtEnd(path);
-            pItem->SetPath(path);
-            pItem->m_bIsFolder = true;
-            FileTimeToLocalFileTime(&wfd.ftLastWriteTime, &localTime);
-            pItem->m_dateTime=localTime;
-
-            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
-              pItem->SetProperty("file:hidden", true);
-
-            items.Add(pItem);
-          }
-        }
-        else
-        {
-          CFileItemPtr pItem(new CFileItem(strLabel));
-          pItem->SetPath(URIUtils::AddFileToFolder(strPath, strLabel));
-          pItem->m_bIsFolder = false;
-          pItem->m_dwSize = CUtil::ToInt64(wfd.nFileSizeHigh, wfd.nFileSizeLow);
-          FileTimeToLocalFileTime(&wfd.ftLastWriteTime, &localTime);
-          pItem->m_dateTime=localTime;
-
-          if (wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
-            pItem->SetProperty("file:hidden", true);
-          items.Add(pItem);
-        }
-      }
-    }
-    while (FindNextFileW((HANDLE)hFind, &wfd));
-  }
-  return true;
-}
-
-bool CWINSMBDirectory::Create(const char* strPath)
-{
-  CStdString strPath1 = GetLocal(strPath);
-  CStdStringW strWPath1;
-  g_charsetConverter.utf8ToW(strPath1, strWPath1, false);
-  if(::CreateDirectoryW(strWPath1, NULL))
-    return true;
-  else if(GetLastError() == ERROR_ALREADY_EXISTS)
-    return true;
-
-  return false;
-}
-
-bool CWINSMBDirectory::Remove(const char* strPath)
-{
-  CStdStringW strWPath;
-  CStdString strPath1 = GetLocal(strPath);
-  g_charsetConverter.utf8ToW(strPath1, strWPath, false);
-  return ::RemoveDirectoryW(strWPath) ? true : false;
-}
-
-bool CWINSMBDirectory::Exists(const char* strPath)
-{
-  CStdString strReplaced=GetLocal(strPath);
-  CStdStringW strWReplaced;
-  g_charsetConverter.utf8ToW(strReplaced, strWReplaced, false);
-  // this will fail on shares, needs a subdirectory inside a share
-  DWORD attributes = GetFileAttributesW(strWReplaced);
-  if(attributes == INVALID_FILE_ATTRIBUTES)
-    return false;
-  if (FILE_ATTRIBUTE_DIRECTORY & attributes) 
-    return true;
-  return false;
-}
-
-bool CWINSMBDirectory::EnumerateFunc(LPNETRESOURCEW lpnr, CFileItemList &items)
-{
-  DWORD dwResult, dwResultEnum;
-  HANDLE hEnum;
-  DWORD cbBuffer = 16384;     // 16K is a good size
-  LPNETRESOURCEW lpnrLocal;   // pointer to enumerated structures
-  DWORD cEntries = -1;        // enumerate all possible entries
-  //
-  // Call the WNetOpenEnum function to begin the enumeration.
-  //
-  dwResult = WNetOpenEnumW( RESOURCE_GLOBALNET,  // all network resources
-                            RESOURCETYPE_DISK,   // all disk resources
-                            0,                   // enumerate all resources
-                            lpnr,                // NULL first time the function is called
-                            &hEnum);             // handle to the resource
-
-  if (dwResult != NO_ERROR) 
-  {
-    CLog::Log(LOGERROR,"WnetOpenEnum failed with error %d", dwResult);
-    if(dwResult == ERROR_EXTENDED_ERROR)
-    {
-      DWORD dwWNetResult, dwLastError;   
-      CHAR szDescription[256]; 
-      CHAR szProvider[256]; 
-      dwWNetResult = WNetGetLastError(&dwLastError, // error code
-                            (LPSTR) szDescription,  // buffer for error description 
-                            sizeof(szDescription),  // size of error buffer
-                            (LPSTR) szProvider,     // buffer for provider name 
-                            sizeof(szProvider));    // size of name buffer
-      if(dwWNetResult == NO_ERROR) 
-        CLog::Log(LOGERROR,"%s failed with code %ld; %s", szProvider, dwLastError, szDescription);
-    }
-    return false;
-  }
-  //
-  // Call the GlobalAlloc function to allocate resources.
-  //
-  lpnrLocal = (LPNETRESOURCEW) GlobalAlloc(GPTR, cbBuffer);
-  if (lpnrLocal == NULL) 
-  {
-    CLog::Log(LOGERROR,"Can't allocate buffer %d", cbBuffer);
-    return false;
-  }
-
-  do 
-  {
-    //
-    // Initialize the buffer.
-    //
-    ZeroMemory(lpnrLocal, cbBuffer);
-    //
-    // Call the WNetEnumResource function to continue
-    //  the enumeration.
-    //
-    dwResultEnum = WNetEnumResourceW( hEnum,          // resource handle
-                                      &cEntries,      // defined locally as -1
-                                      lpnrLocal,      // LPNETRESOURCE
-                                      &cbBuffer);     // buffer size
-    //
-    // If the call succeeds, loop through the structures.
-    //
-    if (dwResultEnum == NO_ERROR) 
-    {
-      for (DWORD i = 0; i < cEntries; i++) 
-      {
-        DWORD dwDisplayType = lpnrLocal[i].dwDisplayType;
-        DWORD dwType = lpnrLocal[i].dwType;
-
-        if((((dwDisplayType == RESOURCEDISPLAYTYPE_SERVER) && (m_bHost == false)) || 
-           ((dwDisplayType == RESOURCEDISPLAYTYPE_SHARE) && m_bHost)) &&
-           (dwType != RESOURCETYPE_PRINT))
-        {
-          CStdString strurl = "smb:";
-          CStdStringW strRemoteNameW = lpnrLocal[i].lpRemoteName;
-          CStdString  strName,strRemoteName;
-
-          g_charsetConverter.wToUTF8(strRemoteNameW,strRemoteName);
-          CLog::Log(LOGDEBUG,"Found Server/Share: %s", strRemoteName.c_str());
-
-          strurl.append(strRemoteName);
-          strurl.Replace("\\","/");
-          CURL rooturl(strurl);
-          rooturl.SetFileName("");
-
-          if(!rooturl.GetShareName().empty())
-            strName = rooturl.GetShareName();
-          else
-            strName = rooturl.GetHostName();
-
-          strName.Replace("\\","");
-
-          URIUtils::AddSlashAtEnd(strurl);
-          CFileItemPtr pItem(new CFileItem(strName));
-          pItem->SetPath(strurl);
-          pItem->m_bIsFolder = true;
-          items.Add(pItem);
-        }
-
-        // If the NETRESOURCE structure represents a container resource, 
-        //  call the EnumerateFunc function recursively.
-        if (RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER))
-          EnumerateFunc(&lpnrLocal[i], items);
-      }
-    }
-    // Process errors.
-    //
-    else if (dwResultEnum != ERROR_NO_MORE_ITEMS) 
-    {
-      CLog::Log(LOGERROR,"WNetEnumResource failed with error %d", dwResultEnum);
-      break;
-    }
-  }
-  //
-  // End do.
-  //
-  while (dwResultEnum != ERROR_NO_MORE_ITEMS);
-  //
-  // Call the GlobalFree function to free the memory.
-  //
-  GlobalFree((HGLOBAL) lpnrLocal);
-  //
-  // Call WNetCloseEnum to end the enumeration.
-  //
-  dwResult = WNetCloseEnum(hEnum);
-
-  if (dwResult != NO_ERROR) 
-  {
-      //
-      // Process errors.
-      //
-      CLog::Log(LOGERROR,"WNetCloseEnum failed with error %d", dwResult);
-      return false;
-  }
-
-  return true;
-}
-
-bool CWINSMBDirectory::ConnectToShare(const CURL& url)
-{
-  NETRESOURCE nr;
-  CURL urlIn(url);
-  DWORD dwRet=-1;
-  CStdString strUNC("\\\\"+url.GetHostName());
-  if(!url.GetShareName().empty())
-    strUNC.append("\\"+url.GetShareName());
-
-  CStdString strPath;
-  memset(&nr,0,sizeof(nr));
-  nr.dwType = RESOURCETYPE_ANY;
-  nr.lpRemoteName = (char*)strUNC.c_str();
-
-  // in general we shouldn't need the password manager as we won't disconnect from shares yet
-  CPasswordManager::GetInstance().AuthenticateURL(urlIn);
-
-  CStdString strAuth = URLEncode(urlIn);
-
-  while(dwRet != NO_ERROR)
-  {
-    strPath = URLEncode(urlIn);
-    LPCTSTR pUser = urlIn.GetUserNameA().empty() ? NULL : (LPCTSTR)urlIn.GetUserNameA().c_str();
-    LPCTSTR pPass = urlIn.GetPassWord().empty() ? NULL : (LPCTSTR)urlIn.GetPassWord().c_str();
-    dwRet = WNetAddConnection2(&nr, pPass, pUser, CONNECT_TEMPORARY);
-#ifdef _DEBUG
-    CLog::Log(LOGDEBUG,"Trying to connect to %s with username(%s) and password(%s)", strUNC.c_str(), urlIn.GetUserNameA().c_str(), urlIn.GetPassWord().c_str());
-#else
-    CLog::Log(LOGDEBUG,"Trying to connect to %s with username(%s) and password(%s)", strUNC.c_str(), urlIn.GetUserNameA().c_str(), "XXXX");
-#endif
-    if(dwRet == ERROR_ACCESS_DENIED || dwRet == ERROR_INVALID_PASSWORD || dwRet == ERROR_LOGON_FAILURE)
-    {
-      CLog::Log(LOGERROR,"Couldn't connect to %s, access denied", strUNC.c_str());
-      if (m_allowPrompting)
-        RequireAuthentication(urlIn.Get());
-      break;
-    }
-    else if(dwRet == ERROR_SESSION_CREDENTIAL_CONFLICT)
-    {
-      DWORD dwRet2=-1;
-      CStdString strRN = nr.lpRemoteName;
-      do
-      {
-        dwRet2 = WNetCancelConnection2((LPCSTR)strRN.c_str(), 0, false);
-        strRN.erase(strRN.find_last_of("\\"),CStdString::npos);
-      } 
-      while(dwRet2 == ERROR_NOT_CONNECTED && !strRN.Equals("\\\\"));
-    }
-    else if(dwRet != NO_ERROR)
-    {
-      break;
-    }
-  }
-
-  if(dwRet != NO_ERROR)
-  {
-    CLog::Log(LOGERROR,"Couldn't connect to %s, error code %d", strUNC.c_str(), dwRet);
-    return false;
-  }
-  return true;
-}
-
-CStdString CWINSMBDirectory::URLEncode(const CURL &url)
-{
-  /* due to smb wanting encoded urls we have to build it manually */
-
-  CStdString flat = "smb://";
-
-  /* samba messes up of password is set but no username is set. don't know why yet */
-  /* probably the url parser that goes crazy */
-  if(url.GetUserName().length() > 0 /* || url.GetPassWord().length() > 0 */)
-  {
-    flat += url.GetUserName();
-    flat += ":";
-    flat += url.GetPassWord();
-    flat += "@";
-  }
-  flat += url.GetHostName();
-
-  /* okey sadly since a slash is an invalid name we have to tokenize */
-  std::vector<CStdString> parts;
-  std::vector<CStdString>::iterator it;
-  CUtil::Tokenize(url.GetFileName(), parts, "/");
-  for( it = parts.begin(); it != parts.end(); it++ )
-  {
-    flat += "/";
-    flat += (*it);
-  }
-
-  /* okey options should go here, thou current samba doesn't support any */
-
-  return flat;
-}
diff --git a/xbmc/win32/WINSMBDirectory.h b/xbmc/win32/WINSMBDirectory.h
deleted file mode 100644 (file)
index f7811be..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2005-2008 Team XBMC
- *      http://www.xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, write to
- *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *  http://www.gnu.org/copyleft/gpl.html
- *
- */
-
-
-#include "filesystem/IDirectory.h"
-#include "URL.h"
-
-namespace XFILE
-{
-
-class CWINSMBDirectory : public IDirectory
-{
-public:
-  CWINSMBDirectory(void);
-  virtual ~CWINSMBDirectory(void);
-  virtual bool GetDirectory(const CStdString& strPath, CFileItemList &items);
-  virtual DIR_CACHE_TYPE GetCacheType(const CStdString &strPath) const { return DIR_CACHE_ONCE; };
-  virtual bool Create(const char* strPath);
-  virtual bool Exists(const char* strPath);
-  virtual bool Remove(const char* strPath);
-
-  bool ConnectToShare(const CURL& url);
-private:
-  bool m_bHost;
-  bool EnumerateFunc(LPNETRESOURCEW lpnr, CFileItemList &items);
-  CStdString GetLocal(const CStdString& strPath);
-  CStdString URLEncode(const CURL &url);
-};
-}
index 274ce08..7c7c35d 100644 (file)
@@ -43,7 +43,7 @@ LONG WINAPI CreateMiniDump( EXCEPTION_POINTERS* pEp )
   CStdString errorMsg;
   CStdString dumpFile;
   CDateTime now(CDateTime::GetCurrentDateTime());
-  dumpFile.Format("%s\\XBMC\\xbmc_crashlog-%04i%02i%02i-%02i%02i%02i.dmp", CWIN32Util::GetProfilePath().c_str(), now.GetYear(), now.GetMonth(), now.GetDay(), now.GetHour(), now.GetMinute(), now.GetSecond());
+  dumpFile.Format("%s\\xbmc_crashlog-%04i%02i%02i-%02i%02i%02i.dmp", CWIN32Util::GetProfilePath().c_str(), now.GetYear(), now.GetMonth(), now.GetDay(), now.GetHour(), now.GetMinute(), now.GetSecond());
   HANDLE hFile = CreateFile(dumpFile.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); 
 
   // Call MiniDumpWriteDump api with the dump file
index 450e9f9..188955c 100644 (file)
 //#include "windows.h"
 
 int
-pgwin32_putenv(const char *envval)
+pgwin32_wputenv(const wchar_t *envval)
 {
-       char       *envcpy;
-       char       *cp;
+       wchar_t    *envcpy;
+       wchar_t    *cp;
 
        /*
         * Each version of MSVCRT has its own _putenv() call in the runtime
@@ -37,7 +37,7 @@ pgwin32_putenv(const char *envval)
         * subprocesses.
         */
 #ifdef _MSC_VER
-       typedef int (_cdecl * PUTENVPROC) (const char *name);
+       typedef int (_cdecl * PUTENVPROC) (const wchar_t *name);
        static struct
        {
                char       *modulename;
@@ -85,7 +85,7 @@ pgwin32_putenv(const char *envval)
                                }
                                else
                                {
-                                       rtmodules[i].putenvFunc = (PUTENVPROC) GetProcAddress(rtmodules[i].hmodule, "_putenv");
+                                       rtmodules[i].putenvFunc = (PUTENVPROC) GetProcAddress(rtmodules[i].hmodule, "_wputenv");
                                        if (rtmodules[i].putenvFunc == NULL)
                                        {
                                                CloseHandle(rtmodules[i].hmodule);
@@ -114,10 +114,10 @@ pgwin32_putenv(const char *envval)
         *
         * Need a copy of the string so we can modify it.
         */
-       envcpy = strdup(envval);
+       envcpy = wcsdup(envval);
        if (!envcpy)
                return -1;
-       cp = strchr(envcpy, '=');
+       cp = wcschr(envcpy, '=');
        if (cp == NULL)
        {
                free(envcpy);
@@ -125,14 +125,14 @@ pgwin32_putenv(const char *envval)
        }
        *cp = '\0';
        cp++;
-       if (strlen(cp))
+       if (wcslen(cp))
        {
                /*
                 * Only call SetEnvironmentVariable() when we are adding a variable,
                 * not when removing it. Calling it on both crashes on at least
                 * certain versions of MingW.
                 */
-               if (!SetEnvironmentVariable(envcpy, cp))
+               if (!SetEnvironmentVariableW(envcpy, cp))
                {
                        free(envcpy);
                        return -1;
@@ -141,19 +141,28 @@ pgwin32_putenv(const char *envval)
        free(envcpy);
 
        /* Finally, update our "own" cache */
-       return _putenv(envval);
+       return _wputenv(envval);
+}
+
+/*takes utf8 encoding*/
+int pgwin32_putenv(const char *envval)
+{
+  int size_needed = MultiByteToWideChar(CP_UTF8, 0, envval, strlen(envval), NULL, 0);
+  std::wstring strTo(size_needed, 0);
+  MultiByteToWideChar(CP_UTF8, 0, envval, strlen(envval), &strTo[0], size_needed);
+  return pgwin32_wputenv(strTo.c_str());
 }
 
 void
-pgwin32_unsetenv(const char *name)
+pgwin32_unsetenv(const wchar_t *name)
 {
-       char       *envbuf;
+       wchar_t    *envbuf;
 
-       envbuf = (char *) malloc(strlen(name) + 2);
+       envbuf = (wchar_t *) malloc(wcslen(name) + 2);
        if (!envbuf)
                return;
 
-       sprintf(envbuf, "%s=", name);
-       pgwin32_putenv(envbuf);
+       wsprintfW(envbuf, L"%s=", name);
+       pgwin32_wputenv(envbuf);
        free(envbuf);
 }
index afff390..f8b9806 100644 (file)
@@ -65,8 +65,8 @@ static uint16_t SymMappingsEvdev[][2] =
 , { 127, XBMCK_SPACE }               // Pause
 , { 135, XBMCK_MENU }                // Right click
 , { 136, XBMCK_MEDIA_STOP }          // Stop
-, { 138, 0x49 /* 'I' */}             // Info
-, { 147, 0x4d /* 'M' */}             // Menu
+, { 138, 0x69 /* 'i' */}             // Info
+, { 147, 0x6d /* 'm' */}             // Menu
 , { 148, XBMCK_LAUNCH_APP2 }         // Launch app 2
 , { 150, 0x9f }                      // Sleep
 , { 152, XBMCK_LAUNCH_APP1 }         // Launch app 1
@@ -78,13 +78,13 @@ static uint16_t SymMappingsEvdev[][2] =
 , { 172, XBMCK_MEDIA_PLAY_PAUSE }    // Play_Pause
 , { 173, XBMCK_MEDIA_PREV_TRACK }    // Prev track
 , { 174, XBMCK_MEDIA_STOP }          // Stop
-, { 176, 0x52 /* 'R' */}             // Rewind
+, { 176, 0x72 /* 'r' */}             // Rewind
 , { 179, XBMCK_LAUNCH_MEDIA_SELECT } // Launch media select
 , { 180, XBMCK_BROWSER_HOME }        // Browser home
 , { 181, XBMCK_BROWSER_REFRESH }     // Browser refresh
 , { 214, XBMCK_ESCAPE }              // Close
 , { 215, XBMCK_MEDIA_PLAY_PAUSE }    // Play_Pause
-, { 216, 0x46 /* 'F' */}             // Forward
+, { 216, 0x66 /* 'f' */}             // Forward
 //, {167, 0xb3 } // Record
 };
 
@@ -359,8 +359,8 @@ bool CWinEventsSDL::MessagePump()
         newEvent.type = XBMC_VIDEORESIZE;
         newEvent.resize.w = event.resize.w;
         newEvent.resize.h = event.resize.h;
-        newEvent.resize.type = event.resize.type;
         ret |= g_application.OnEvent(newEvent);
+        g_windowManager.MarkDirty();
         break;
       }
       case SDL_USEREVENT:
index 99671ae..30c24e7 100644 (file)
@@ -74,6 +74,7 @@ void CWinSystemBase::UpdateResolutions()
 {
   // add the window res - defaults are fine.
   RESOLUTION_INFO& window = g_settings.m_ResInfo[RES_WINDOW];
+  window.bFullScreen = false;
   if (window.iWidth == 0)
     window.iWidth = 720;
   if (window.iHeight == 0)
index b408c69..1af91c6 100644 (file)
@@ -79,6 +79,9 @@ public:
   virtual bool Hide() { return false; }
   virtual bool Show(bool raise = true) { return false; }
 
+  // notifications
+  virtual void OnMove(int x, int y) {}
+
   // OS System screensaver
   virtual void EnableSystemScreenSaver(bool bEnable) {};
   virtual bool IsSystemScreenSaverEnabled() {return false;}
@@ -88,6 +91,7 @@ public:
   unsigned int GetWidth() { return m_nWidth; }
   unsigned int GetHeight() { return m_nHeight; }
   virtual int GetNumScreens() { return 0; }
+  virtual int GetCurrentScreen() { return 0; }
   bool IsFullScreen() { return m_bFullScreen; }
   virtual void UpdateResolutions();
   void SetWindowResolution(int width, int height);
index 4287a04..201b0ad 100644 (file)
 #include "WinSystemX11.h"
 #include "settings/Settings.h"
 #include "guilib/Texture.h"
+#include "guilib/DispResource.h"
 #include "utils/log.h"
 #include "XRandR.h"
 #include <vector>
+#include "threads/SingleLock.h"
+#include <X11/Xlib.h>
+#include "cores/VideoRenderers/RenderManager.h"
+#include "utils/TimeUtils.h"
+
+#if defined(HAS_XRANDR)
+#include <X11/extensions/Xrandr.h>
+#endif
 
 using namespace std;
 
@@ -42,6 +51,9 @@ CWinSystemX11::CWinSystemX11() : CWinSystemBase()
   m_glWindow = 0;
   m_wmWindow = 0;
   m_bWasFullScreenBeforeMinimize = false;
+  m_dpyLostTime = 0;
+
+  XSetErrorHandler(XErrorHandler);
 }
 
 CWinSystemX11::~CWinSystemX11()
@@ -126,6 +138,13 @@ bool CWinSystemX11::CreateNewWindow(const CStdString& name, bool fullScreen, RES
   SDL_WM_SetIcon(SDL_CreateRGBSurfaceFrom(iconTexture.GetPixels(), iconTexture.GetWidth(), iconTexture.GetHeight(), 32, iconTexture.GetPitch(), 0xff0000, 0x00ff00, 0x0000ff, 0xff000000L), NULL);
   SDL_WM_SetCaption("XBMC Media Center", NULL);
 
+  // register XRandR Events
+#if defined(HAS_XRANDR)
+  int iReturn;
+  XRRQueryExtension(m_dpy, &m_RREventBase, &iReturn);
+  XRRSelectInput(m_dpy, m_wmWindow, RRScreenChangeNotifyMask);
+#endif
+
   m_bWindowCreated = true;
   return true;
 }
@@ -175,7 +194,10 @@ bool CWinSystemX11::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
   mode.id  = res.strId;
  
   if(m_bFullScreen)
+  {
+    OnLostDevice();
     g_xrandr.SetMode(out, mode);
+  }
   else
     g_xrandr.RestoreState();
 #endif
@@ -444,4 +466,84 @@ bool CWinSystemX11::Show(bool raise)
   XSync(m_dpy, False);
   return true;
 }
+
+void CWinSystemX11::CheckDisplayEvents()
+{
+#if defined(HAS_XRANDR)
+  bool bGotEvent(false);
+  bool bTimeout(false);
+  XEvent Event;
+  while (XCheckTypedEvent(m_dpy, m_RREventBase + RRScreenChangeNotify, &Event))
+  {
+    if (Event.type == m_RREventBase + RRScreenChangeNotify)
+    {
+      CLog::Log(LOGDEBUG, "%s: Received RandR event %i", __FUNCTION__, Event.type);
+      bGotEvent = true;
+    }
+    XRRUpdateConfiguration(&Event);
+  }
+
+  // check fail safe timer
+  if (m_dpyLostTime && CurrentHostCounter() - m_dpyLostTime > (uint64_t)3 * CurrentHostFrequency())
+  {
+    CLog::Log(LOGERROR, "%s - no display event after 3 seconds", __FUNCTION__);
+    bTimeout = true;
+  }
+
+  if (bGotEvent || bTimeout)
+  {
+    CLog::Log(LOGDEBUG, "%s - notify display reset event", __FUNCTION__);
+
+    CSingleLock lock(m_resourceSection);
+
+    // tell any shared resources
+    for (vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); i++)
+      (*i)->OnResetDevice();
+
+    // reset fail safe timer
+    m_dpyLostTime = 0;
+  }
+#endif
+}
+
+void CWinSystemX11::OnLostDevice()
+{
+  CLog::Log(LOGDEBUG, "%s - notify display change event", __FUNCTION__);
+
+  // make sure renderer has no invalid references
+  g_renderManager.Flush();
+
+  { CSingleLock lock(m_resourceSection);
+    for (vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); i++)
+      (*i)->OnLostDevice();
+  }
+
+  // fail safe timer
+  m_dpyLostTime = CurrentHostCounter();
+}
+
+void CWinSystemX11::Register(IDispResource *resource)
+{
+  CSingleLock lock(m_resourceSection);
+  m_resources.push_back(resource);
+}
+
+void CWinSystemX11::Unregister(IDispResource* resource)
+{
+  CSingleLock lock(m_resourceSection);
+  vector<IDispResource*>::iterator i = find(m_resources.begin(), m_resources.end(), resource);
+  if (i != m_resources.end())
+    m_resources.erase(i);
+}
+
+int CWinSystemX11::XErrorHandler(Display* dpy, XErrorEvent* error)
+{
+  char buf[1024];
+  XGetErrorText(error->display, error->error_code, buf, sizeof(buf));
+  CLog::Log(LOGERROR, "CWinSystemX11::XErrorHandler: %s, type:%i, serial:%lu, error_code:%i, request_code:%i minor_code:%i",
+            buf, error->type, error->serial, (int)error->error_code, (int)error->request_code, (int)error->minor_code);
+
+  return 0;
+}
+
 #endif
index da6accf..a77c4d5 100644 (file)
@@ -26,6 +26,9 @@
 #include "windowing/WinSystem.h"
 #include "utils/Stopwatch.h"
 #include <GL/glx.h>
+#include "threads/CriticalSection.h"
+
+class IDispResource;
 
 class CWinSystemX11 : public CWinSystemBase
 {
@@ -51,6 +54,8 @@ public:
   virtual bool Restore() ;
   virtual bool Hide();
   virtual bool Show(bool raise = true);
+  virtual void Register(IDispResource *resource);
+  virtual void Unregister(IDispResource *resource);
 
   // Local to WinSystemX11 only
   Display*  GetDisplay() { return m_dpy; }
@@ -58,6 +63,8 @@ public:
 
 protected:
   bool RefreshGlxContext();
+  void CheckDisplayEvents();
+  void OnLostDevice();
 
   SDL_Surface* m_SDLSurface;
   GLXContext   m_glContext;
@@ -65,9 +72,14 @@ protected:
   Window       m_wmWindow;
   Display*     m_dpy;
   bool         m_bWasFullScreenBeforeMinimize;
+  int          m_RREventBase;
+  CCriticalSection             m_resourceSection;
+  std::vector<IDispResource*>  m_resources;
+  uint64_t                     m_dpyLostTime;
 
 private:
   bool IsSuitableVisual(XVisualInfo *vInfo);
+  static int XErrorHandler(Display* dpy, XErrorEvent* error);
 
   CStopWatch m_screensaverReset;
 };
index 94f369e..ec02b10 100644 (file)
@@ -43,6 +43,8 @@ CWinSystemX11GL::~CWinSystemX11GL()
 
 bool CWinSystemX11GL::PresentRenderImpl(const CDirtyRegionList& dirty)
 {
+  CheckDisplayEvents();
+
   if(m_iVSyncMode == 3)
   {
     glFinish();
@@ -147,8 +149,10 @@ void CWinSystemX11GL::SetVSyncImpl(bool enable)
       CLog::Log(LOGWARNING, "%s - glXSwapIntervalMESA failed", __FUNCTION__);
   }
 
-  if(m_glXGetSyncValuesOML && m_glXSwapBuffersMscOML && !m_iVSyncMode)
+  if(m_glXGetSyncValuesOML && m_glXSwapBuffersMscOML && m_glXSwapIntervalMESA && !m_iVSyncMode)
   {
+    m_glXSwapIntervalMESA(1);
+
     int64_t ust, msc, sbc;
     if(m_glXGetSyncValuesOML(m_dpy, m_glWindow, &ust, &msc, &sbc))
       m_iVSyncMode = 5;
index 7d7626f..8ab1928 100644 (file)
 
 /* Event enumerations */
 typedef enum {
-       XBMC_NOEVENT = 0,                       /* Unused (do not remove) */
-       XBMC_ACTIVEEVENT,                       /* Application loses/gains visibility */
-       XBMC_KEYDOWN,                   /* Keys pressed */
-       XBMC_KEYUP,                     /* Keys released */
-       XBMC_MOUSEMOTION,                       /* Mouse moved */
-       XBMC_MOUSEBUTTONDOWN,           /* Mouse button pressed */
-       XBMC_MOUSEBUTTONUP,             /* Mouse button released */
-       XBMC_JOYAXISMOTION,             /* Joystick axis motion */
-       XBMC_JOYBALLMOTION,             /* Joystick trackball motion */
-       XBMC_JOYHATMOTION,              /* Joystick hat position change */
-       XBMC_JOYBUTTONDOWN,             /* Joystick button pressed */
-       XBMC_JOYBUTTONUP,                       /* Joystick button released */
-       XBMC_QUIT,                      /* User-requested quit */
-       XBMC_SYSWMEVENT,                        /* System specific event */
-       XBMC_EVENT_RESERVEDA,           /* Reserved for future use.. */
-       XBMC_EVENT_RESERVEDB,           /* Reserved for future use.. */
-       XBMC_VIDEORESIZE,                       /* User resized video mode */
-       XBMC_VIDEOEXPOSE,                       /* Screen needs to be redrawn */
-       XBMC_APPCOMMAND,            /* Media commands, such as WM_APPCOMMAND on Windows for media keys. */
-       XBMC_EVENT_RESERVED3,           /* Reserved for future use.. */
-       XBMC_EVENT_RESERVED4,           /* Reserved for future use.. */
-       XBMC_EVENT_RESERVED5,           /* Reserved for future use.. */
-       XBMC_EVENT_RESERVED6,           /* Reserved for future use.. */
-       XBMC_EVENT_RESERVED7,           /* Reserved for future use.. */
-       /* Events XBMC_USEREVENT through XBMC_MAXEVENTS-1 are for your use */
-       XBMC_USEREVENT = 24,
-       /* This last event is only for bounding internal arrays
-         It is the number of bits in the event mask datatype -- uint32_t
-        */
-       XBMC_NUMEVENTS = 32
+       XBMC_NOEVENT = 0,        /* Unused (do not remove) */
+       XBMC_ACTIVEEVENT,        /* Application loses/gains visibility */
+       XBMC_KEYDOWN,            /* Keys pressed */
+       XBMC_KEYUP,              /* Keys released */
+       XBMC_MOUSEMOTION,        /* Mouse moved */
+       XBMC_MOUSEBUTTONDOWN,    /* Mouse button pressed */
+       XBMC_MOUSEBUTTONUP,      /* Mouse button released */
+       XBMC_JOYAXISMOTION,      /* Joystick axis motion */
+       XBMC_JOYBALLMOTION,      /* Joystick trackball motion */
+       XBMC_JOYHATMOTION,       /* Joystick hat position change */
+       XBMC_JOYBUTTONDOWN,      /* Joystick button pressed */
+       XBMC_JOYBUTTONUP,        /* Joystick button released */
+       XBMC_QUIT,               /* User-requested quit */
+       XBMC_SYSWMEVENT,         /* System specific event */
+       XBMC_VIDEORESIZE,        /* User resized video mode */
+       XBMC_VIDEOMOVE,          /* User moved the window */
+       XBMC_VIDEOEXPOSE,        /* Screen needs to be redrawn */
+       XBMC_APPCOMMAND,         /* Media commands, such as WM_APPCOMMAND on Windows for media keys. */
+       XBMC_USEREVENT,
+
+       XBMC_MAXEVENT = 256      /* XBMC_EventType is represented as uchar */
 } XBMC_EventType;
 
-/* Predefined event masks */
-#define XBMC_EVENTMASK(X)      (1<<(X))
-typedef enum {
-       XBMC_ACTIVEEVENTMASK    = XBMC_EVENTMASK(XBMC_ACTIVEEVENT),
-       XBMC_KEYDOWNMASK                = XBMC_EVENTMASK(XBMC_KEYDOWN),
-       XBMC_KEYUPMASK          = XBMC_EVENTMASK(XBMC_KEYUP),
-       XBMC_KEYEVENTMASK       = XBMC_EVENTMASK(XBMC_KEYDOWN)|
-                                 XBMC_EVENTMASK(XBMC_KEYUP),
-       XBMC_MOUSEMOTIONMASK    = XBMC_EVENTMASK(XBMC_MOUSEMOTION),
-       XBMC_MOUSEBUTTONDOWNMASK        = XBMC_EVENTMASK(XBMC_MOUSEBUTTONDOWN),
-       XBMC_MOUSEBUTTONUPMASK  = XBMC_EVENTMASK(XBMC_MOUSEBUTTONUP),
-       XBMC_MOUSEEVENTMASK     = XBMC_EVENTMASK(XBMC_MOUSEMOTION)|
-                                 XBMC_EVENTMASK(XBMC_MOUSEBUTTONDOWN)|
-                                 XBMC_EVENTMASK(XBMC_MOUSEBUTTONUP),
-       XBMC_JOYAXISMOTIONMASK  = XBMC_EVENTMASK(XBMC_JOYAXISMOTION),
-       XBMC_JOYBALLMOTIONMASK  = XBMC_EVENTMASK(XBMC_JOYBALLMOTION),
-       XBMC_JOYHATMOTIONMASK   = XBMC_EVENTMASK(XBMC_JOYHATMOTION),
-       XBMC_JOYBUTTONDOWNMASK  = XBMC_EVENTMASK(XBMC_JOYBUTTONDOWN),
-       XBMC_JOYBUTTONUPMASK    = XBMC_EVENTMASK(XBMC_JOYBUTTONUP),
-       XBMC_JOYEVENTMASK       = XBMC_EVENTMASK(XBMC_JOYAXISMOTION)|
-                                 XBMC_EVENTMASK(XBMC_JOYBALLMOTION)|
-                                 XBMC_EVENTMASK(XBMC_JOYHATMOTION)|
-                                 XBMC_EVENTMASK(XBMC_JOYBUTTONDOWN)|
-                                 XBMC_EVENTMASK(XBMC_JOYBUTTONUP),
-       XBMC_VIDEORESIZEMASK    = XBMC_EVENTMASK(XBMC_VIDEORESIZE),
-       XBMC_VIDEOEXPOSEMASK    = XBMC_EVENTMASK(XBMC_VIDEOEXPOSE),
-       XBMC_QUITMASK           = XBMC_EVENTMASK(XBMC_QUIT),
-       XBMC_SYSWMEVENTMASK     = XBMC_EVENTMASK(XBMC_SYSWMEVENT)
-} XBMC_EventMask ;
-#define XBMC_ALLEVENTS         0xFFFFFFFF
-
 /* Application visibility event structure */
 typedef struct XBMC_ActiveEvent {
        unsigned char type;     /* XBMC_ACTIVEEVENT */
@@ -168,6 +128,7 @@ typedef struct XBMC_JoyButtonEvent {
        unsigned char which;    /* The joystick device index */
        unsigned char button;   /* The joystick button index */
        unsigned char state;    /* XBMC_PRESSED or XBMC_RELEASED */
+  uint32_t      holdTime; /*holdTime of the pressed button*/
 } XBMC_JoyButtonEvent;
 
 /* The "window resized" event
@@ -180,6 +141,12 @@ typedef struct XBMC_ResizeEvent {
        int h;          /* New height */
 } XBMC_ResizeEvent;
 
+typedef struct XBMC_MoveEvent {
+       unsigned char type;     /* XBMC_VIDEOMOVE */
+       int x;          /* New x position */
+       int y;          /* New y position */
+} XBMC_MoveEvent;
+
 /* The "screen redraw" event */
 typedef struct XBMC_ExposeEvent {
        unsigned char type;     /* XBMC_VIDEOEXPOSE */
@@ -192,7 +159,7 @@ typedef struct XBMC_QuitEvent {
 
 /* A user-defined event type */
 typedef struct XBMC_UserEvent {
-       unsigned char type;     /* XBMC_USEREVENT through XBMC_NUMEVENTS-1 */
+       unsigned char type;     /* XBMC_USEREVENT */
        int code;       /* User defined event code */
        void *data1;    /* User defined data pointer */
        void *data2;    /* User defined data pointer */
@@ -214,20 +181,21 @@ typedef struct XBMC_AppCommandEvent {
 
 /* General event structure */
 typedef union XBMC_Event {
-       unsigned char type;
-       XBMC_ActiveEvent active;
-       XBMC_KeyboardEvent key;
-       XBMC_MouseMotionEvent motion;
-       XBMC_MouseButtonEvent button;
-       XBMC_JoyAxisEvent jaxis;
-       XBMC_JoyBallEvent jball;
-       XBMC_JoyHatEvent jhat;
-       XBMC_JoyButtonEvent jbutton;
-       XBMC_ResizeEvent resize;
-       XBMC_ExposeEvent expose;
-       XBMC_QuitEvent quit;
-       XBMC_UserEvent user;
-       XBMC_SysWMEvent syswm;
+  unsigned char type;
+  XBMC_ActiveEvent active;
+  XBMC_KeyboardEvent key;
+  XBMC_MouseMotionEvent motion;
+  XBMC_MouseButtonEvent button;
+  XBMC_JoyAxisEvent jaxis;
+  XBMC_JoyBallEvent jball;
+  XBMC_JoyHatEvent jhat;
+  XBMC_JoyButtonEvent jbutton;
+  XBMC_ResizeEvent resize;
+  XBMC_MoveEvent move;
+  XBMC_ExposeEvent expose;
+  XBMC_QuitEvent quit;
+  XBMC_UserEvent user;
+  XBMC_SysWMEvent syswm;
   XBMC_AppCommandEvent appcommand;
 } XBMC_Event;
 
index 4add43b..4796905 100644 (file)
@@ -1,5 +1,5 @@
 /*
-*      Copyright (C) 2010 Team XBMC
+*      Copyright (C) 2012 Team XBMC
 *      http://www.xbmc.org
 *
 *  This Program is free software; you can redistribute it and/or modify
@@ -33,8 +33,10 @@ public:
   static void DeInit();
   static void MessagePush(XBMC_Event *newEvent);
   static bool MessagePump();
+  static int  GetQueueSize();
 
 protected:
 };
 
 #endif // WINDOW_EVENTS_IOS_H
+
index 9d56719..38126b4 100644 (file)
@@ -1,5 +1,5 @@
 /*
-*      Copyright (C) 2010 Team XBMC
+*      Copyright (C) 2012 Team XBMC
 *      http://www.xbmc.org
 *
 *  This Program is free software; you can redistribute it and/or modify
@@ -26,6 +26,7 @@
 #include "Application.h"
 #include "WindowingFactory.h"
 #include "threads/CriticalSection.h"
+#include "utils/log.h"
 
 static CCriticalSection g_inputCond;
 
@@ -69,13 +70,16 @@ bool CWinEventsIOS::MessagePump()
     if (pumpEvent.type == XBMC_USEREVENT)
     {
       // On ATV2, we push in events as a XBMC_USEREVENT,
-      // the user.code will be the keyID to translate using joystick.AppleRemote.xml
+      // the jbutton.which will be the keyID to translate using joystick.AppleRemote.xml
+      // jbutton.holdTime is the time the button is hold in ms (for repeated keypresses)
       std::string joystickName = "AppleRemote";
       bool isAxis = false;
-      float fAmount = 0.0;
-      unsigned short wKeyID = pumpEvent.user.code;
+      float fAmount = 1.0;
+      unsigned char wKeyID = pumpEvent.jbutton.which;
+      unsigned int holdTime = pumpEvent.jbutton.holdTime;
 
-      ret |= g_application.ProcessJoystickEvent(joystickName, wKeyID, isAxis, fAmount);
+      CLog::Log(LOGDEBUG,"CWinEventsIOS: Button press keyID = %i", wKeyID);
+      ret |= g_application.ProcessJoystickEvent(joystickName, wKeyID, isAxis, fAmount, holdTime);
     }
     else
       ret |= g_application.OnEvent(pumpEvent);
@@ -83,3 +87,9 @@ bool CWinEventsIOS::MessagePump()
 
   return ret;
 }
+
+int CWinEventsIOS::GetQueueSize()
+{
+  CSingleLock lock(g_inputCond);
+  return events.size();
+}
index 422cb1d..8d1cfae 100644 (file)
 #define WINDOW_SYSTEM_OSX_H
 
 #include "windowing/WinSystem.h"
+#include "threads/CriticalSection.h"
 #include <SDL/SDL_video.h>
 
+typedef struct _CGDirectDisplayID *CGDirectDisplayID;
+typedef u_int32_t CGDisplayChangeSummaryFlags;
+
+class IDispResource;
+
 class CWinEventsOSX;
 class CWinSystemOSX : public CWinSystemBase
 {
@@ -47,26 +53,39 @@ public:
   virtual bool Restore();
   virtual bool Hide();
   virtual bool Show(bool raise = true);
+  virtual void OnMove(int x, int y);
+
+  virtual void Register(IDispResource *resource);
+  virtual void Unregister(IDispResource *resource);
 
   virtual void EnableSystemScreenSaver(bool bEnable);
   virtual bool IsSystemScreenSaverEnabled();
   
   virtual int GetNumScreens();
 
-
+  void CheckDisplayChanging(u_int32_t flags);
 protected:
   void* CreateWindowedContext(void* shareCtx);
   void* CreateFullScreenContext(int screen_index, void* shareCtx);
-  void  GetScreenResolution(int* w, int* h, double* fps);
-  void  EnableVSync(bool enable);
-  bool  SwitchToVideoMode(int width, int height, double refreshrate);
-  void  GetVideoModes(void);
+  void  GetScreenResolution(int* w, int* h, double* fps, int screenIdx);
+  void  EnableVSync(bool enable); 
+  bool  SwitchToVideoMode(int width, int height, double refreshrate, int screenIdx);
+  void  FillInVideoModes();
   bool  FlushBuffer(void);
 
+  static void DisplayReconfigured(CGDirectDisplayID display, 
+    CGDisplayChangeSummaryFlags flags, void *userData);
+  
   void* m_glContext;
   static void* m_lastOwnedContext;
   SDL_Surface* m_SDLSurface;
   CWinEventsOSX *m_osx_events;
+  bool                         m_can_display_switch;
+  void                        *m_windowDidMove;
+  void                        *m_windowDidReSize;
+
+  CCriticalSection             m_resourceSection;
+  std::vector<IDispResource*>  m_resources;
 };
 
 #endif // WINDOW_SYSTEM_H
index e4e23be..13373db 100644 (file)
  *
  */
 
-#if defined(__APPLE__) && !defined(__arm__)
+#if defined(TARGET_DARWIN_OSX)
 
 //hack around problem with xbmc's typedef int BOOL
 // and obj-c's typedef unsigned char BOOL
 #define BOOL XBMC_BOOL 
 #include "WinSystemOSX.h"
 #include "WinEventsOSX.h"
+#include "Application.h"
+#include "guilib/DispResource.h"
+#include "guilib/GUIWindowManager.h"
 #include "settings/Settings.h"
 #include "settings/GUISettings.h"
 #include "input/KeyboardStat.h"
+#include "threads/SingleLock.h"
 #include "utils/log.h"
 #include "XBMCHelper.h"
 #include "utils/SystemInfo.h"
+#include "CocoaInterface.h"
 #undef BOOL
 
 #include <SDL/SDL_events.h>
 
 #import <Cocoa/Cocoa.h>
 #import <QuartzCore/QuartzCore.h>
+#import <IOKit/graphics/IOGraphicsLib.h>
 #import <Carbon/Carbon.h>   // ShowMenuBar, HideMenuBar
 
+//------------------------------------------------------------------------------------------
+// special object-c class for handling the NSWindowDidMoveNotification callback.
+@interface windowDidMoveNoteClass : NSObject
+{
+  void *m_userdata;
+}
++ initWith: (void*) userdata;
+-  (void) windowDidMoveNotification:(NSNotification*) note;
+@end
+
+@implementation windowDidMoveNoteClass
++ initWith: (void*) userdata;
+{
+    windowDidMoveNoteClass *windowDidMove = [windowDidMoveNoteClass new];
+    windowDidMove->m_userdata = userdata;
+    return [windowDidMove autorelease];
+}
+-  (void) windowDidMoveNotification:(NSNotification*) note;
+{
+  CWinSystemOSX *winsys = (CWinSystemOSX*)m_userdata;
+       if (!winsys)
+    return;
+
+  NSOpenGLContext* context = [NSOpenGLContext currentContext];
+  if (context)
+  {
+    if ([context view])
+    {
+      NSPoint window_origin = [[[context view] window] frame].origin;
+      XBMC_Event newEvent;
+      memset(&newEvent, 0, sizeof(newEvent));
+      newEvent.type = XBMC_VIDEOMOVE;
+      newEvent.move.x = window_origin.x;
+      newEvent.move.y = window_origin.y;
+      g_application.OnEvent(newEvent);
+    }
+  }
+}
+@end
+//------------------------------------------------------------------------------------------
+// special object-c class for handling the NSWindowDidReSizeNotification callback.
+@interface windowDidReSizeNoteClass : NSObject
+{
+  void *m_userdata;
+}
++ initWith: (void*) userdata;
+- (void) windowDidReSizeNotification:(NSNotification*) note;
+@end
+@implementation windowDidReSizeNoteClass
++ initWith: (void*) userdata;
+{
+    windowDidReSizeNoteClass *windowDidReSize = [windowDidReSizeNoteClass new];
+    windowDidReSize->m_userdata = userdata;
+    return [windowDidReSize autorelease];
+}
+- (void) windowDidReSizeNotification:(NSNotification*) note;
+{
+  CWinSystemOSX *winsys = (CWinSystemOSX*)m_userdata;
+       if (!winsys)
+    return;
+  /* placeholder, do not uncomment or you will SDL recurse into death
+  NSOpenGLContext* context = [NSOpenGLContext currentContext];
+  if (context)
+  {
+    if ([context view])
+    {
+      NSSize view_size = [[context view] frame].size;
+      XBMC_Event newEvent;
+      memset(&newEvent, 0, sizeof(newEvent));
+      newEvent.type = XBMC_VIDEORESIZE;
+      newEvent.resize.w = view_size.width;
+      newEvent.resize.h = view_size.height;
+      if (newEvent.resize.w * newEvent.resize.h)
+      {
+        g_application.OnEvent(newEvent);
+        g_windowManager.MarkDirty();
+      }
+    }
+  }
+  */
+}
+@end
+//------------------------------------------------------------------------------------------
+
 
 #define MAX_DISPLAYS 32
 static NSWindow* blankingWindows[MAX_DISPLAYS];
@@ -182,31 +272,167 @@ void UnblankDisplays(void)
     {
       // Get rid of the blanking windows we created.
       [blankingWindows[i] close];
-      [blankingWindows[i] release];
+      if ([blankingWindows[i] isReleasedWhenClosed] == NO)
+        [blankingWindows[i] release];
       blankingWindows[i] = 0;
     }
   }
 }
 
-CGDisplayFadeReservationToken DisplayFadeToBlack(void)
+CGDisplayFadeReservationToken DisplayFadeToBlack(bool fade)
 {
   // Fade to black to hide resolution-switching flicker and garbage.
   CGDisplayFadeReservationToken fade_token = kCGDisplayFadeReservationInvalidToken;
-  if (CGAcquireDisplayFadeReservation (5, &fade_token) == kCGErrorSuccess )
+  if (CGAcquireDisplayFadeReservation (5, &fade_token) == kCGErrorSuccess && fade)
     CGDisplayFade(fade_token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0.0, 0.0, 0.0, TRUE);
 
   return(fade_token);
 }
 
-void DisplayFadeFromBlack(CGDisplayFadeReservationToken fade_token)
+void DisplayFadeFromBlack(CGDisplayFadeReservationToken fade_token, bool fade)
 {
   if (fade_token != kCGDisplayFadeReservationInvalidToken) 
   {
-    CGDisplayFade(fade_token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0.0, 0.0, 0.0, FALSE);
+    if (fade)
+      CGDisplayFade(fade_token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0.0, 0.0, 0.0, FALSE);
     CGReleaseDisplayFadeReservation(fade_token);
   }
 }
 
+NSString* screenNameForDisplay(CGDirectDisplayID displayID)
+{
+    NSString *screenName = nil;
+    
+    NSDictionary *deviceInfo = (NSDictionary *)IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), kIODisplayOnlyPreferredName);
+    NSDictionary *localizedNames = [deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]];
+    
+    if ([localizedNames count] > 0) {
+        screenName = [[localizedNames objectForKey:[[localizedNames allKeys] objectAtIndex:0]] retain];
+    }
+    
+    [deviceInfo release];
+    return [screenName autorelease];
+}
+
+void ShowHideNSWindow(NSWindow *wind, bool show)
+{
+  if (show)
+    [wind orderFront:nil];
+  else
+    [wind orderOut:nil];
+}
+
+static NSWindow *curtainWindow;
+void fadeInDisplay(NSScreen *theScreen, double fadeTime)
+{
+  int     fadeSteps     = 100;
+  double  fadeInterval  = (fadeTime / (double) fadeSteps);
+
+  if (curtainWindow != nil)
+  {
+    for (int step = 0; step < fadeSteps; step++)
+    {
+      double fade = 1.0 - (step * fadeInterval);
+      [curtainWindow setAlphaValue:fade];
+
+      NSDate *nextDate = [NSDate dateWithTimeIntervalSinceNow:fadeInterval];
+      [[NSRunLoop currentRunLoop] runUntilDate:nextDate];
+    }
+  }
+  [curtainWindow close];
+  curtainWindow = nil;
+
+  [NSCursor unhide];
+}
+
+void fadeOutDisplay(NSScreen *theScreen, double fadeTime)
+{
+  int     fadeSteps     = 100;
+  double  fadeInterval  = (fadeTime / (double) fadeSteps);
+
+  [NSCursor hide];
+
+  curtainWindow = [[NSWindow alloc]
+    initWithContentRect:[theScreen frame]
+    styleMask:NSBorderlessWindowMask
+    backing:NSBackingStoreBuffered
+    defer:YES
+    screen:theScreen];
+
+  [curtainWindow setAlphaValue:0.0];
+  [curtainWindow setBackgroundColor:[NSColor blackColor]];
+  [curtainWindow setLevel:NSScreenSaverWindowLevel];
+
+  [curtainWindow makeKeyAndOrderFront:nil];
+  [curtainWindow setFrame:[curtainWindow
+    frameRectForContentRect:[theScreen frame]]
+    display:YES
+    animate:NO];
+
+  for (int step = 0; step < fadeSteps; step++)
+  {
+    double fade = step * fadeInterval;
+    [curtainWindow setAlphaValue:fade];
+
+    NSDate *nextDate = [NSDate dateWithTimeIntervalSinceNow:fadeInterval];
+    [[NSRunLoop currentRunLoop] runUntilDate:nextDate];
+  }
+}
+
+// try to find mode that matches the desired size, refreshrate
+// non interlaced, nonstretched, safe for hardware
+CFDictionaryRef GetMode(int width, int height, double refreshrate, int screenIdx)
+{
+  if( screenIdx >= (signed)[[NSScreen screens] count])
+    return NULL;
+    
+  Boolean stretched;
+  Boolean interlaced;
+  Boolean safeForHardware;
+  Boolean televisionoutput;
+  int w, h, bitsperpixel;
+  double rate;
+  RESOLUTION_INFO res;   
+  
+  CLog::Log(LOGDEBUG, "GetMode looking for suitable mode with %d x %d @ %f Hz on display %d\n", width, height, refreshrate, screenIdx);
+
+  CFArrayRef displayModes = CGDisplayAvailableModes(GetDisplayID(screenIdx));
+  
+  if (NULL == displayModes)
+  {
+    CLog::Log(LOGERROR, "GetMode - no displaymodes found!");
+    return NULL;
+  }
+
+  for (int i=0; i < CFArrayGetCount(displayModes); ++i)
+  {
+    CFDictionaryRef displayMode = (CFDictionaryRef)CFArrayGetValueAtIndex(displayModes, i);
+
+    stretched = GetDictionaryBoolean(displayMode, kCGDisplayModeIsStretched);
+    interlaced = GetDictionaryBoolean(displayMode, kCGDisplayModeIsInterlaced);
+    bitsperpixel = GetDictionaryInt(displayMode, kCGDisplayBitsPerPixel);
+    safeForHardware = GetDictionaryBoolean(displayMode, kCGDisplayModeIsSafeForHardware);
+    televisionoutput = GetDictionaryBoolean(displayMode, kCGDisplayModeIsTelevisionOutput);
+    w = GetDictionaryInt(displayMode, kCGDisplayWidth);
+    h = GetDictionaryInt(displayMode, kCGDisplayHeight);      
+    rate = GetDictionaryDouble(displayMode, kCGDisplayRefreshRate);
+
+
+    if( (bitsperpixel == 32)      && 
+        (safeForHardware == YES)  && 
+        (stretched == NO)         && 
+        (interlaced == NO)        &&
+        (w == width)              &&
+        (h == height)             &&
+        (rate == refreshrate || rate == 0)      )
+    {
+      CLog::Log(LOGDEBUG, "GetMode found a match!");    
+      return displayMode;
+    }
+  }
+  CLog::Log(LOGERROR, "GetMode - no match found!");  
+  return NULL;
+}
 
 //---------------------------------------------------------------------------------
 //---------------------------------------------------------------------------------
@@ -216,6 +442,8 @@ CWinSystemOSX::CWinSystemOSX() : CWinSystemBase()
   m_glContext = 0;
   m_SDLSurface = NULL;
   m_osx_events = NULL;
+  // check runtime, we only allow this on 10.5+
+  m_can_display_switch = (floor(NSAppKitVersionNumber) >= 949);
 }
 
 CWinSystemOSX::~CWinSystemOSX()
@@ -235,14 +463,41 @@ bool CWinSystemOSX::InitWindowSystem()
   
   m_osx_events = new CWinEventsOSX();
 
+  if (m_can_display_switch)
+    CGDisplayRegisterReconfigurationCallback(DisplayReconfigured, (void*)this);
+
+  NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+  windowDidMoveNoteClass *windowDidMove;
+  windowDidMove = [windowDidMoveNoteClass initWith: this];
+  [center addObserver:windowDidMove
+    selector:@selector(windowDidMoveNotification:)
+    name:NSWindowDidMoveNotification object:nil];
+  m_windowDidMove = windowDidMove;
+
+
+  windowDidReSizeNoteClass *windowDidReSize;
+  windowDidReSize = [windowDidReSizeNoteClass initWith: this];
+  [center addObserver:windowDidReSize
+    selector:@selector(windowDidReSizeNotification:)
+    name:NSWindowDidResizeNotification object:nil];
+  m_windowDidReSize = windowDidReSize;
+
   return true;
 }
 
 bool CWinSystemOSX::DestroyWindowSystem()
 {  
+  NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+  [center removeObserver:(windowDidMoveNoteClass*)m_windowDidMove name:NSWindowDidMoveNotification object:nil];
+  [center removeObserver:(windowDidReSizeNoteClass*)m_windowDidReSize name:NSWindowDidResizeNotification object:nil];
+
+  if (m_can_display_switch)
+    CGDisplayRemoveReconfigurationCallback(DisplayReconfigured, (void*)this);
+
   delete m_osx_events;
   m_osx_events = NULL;
 
+  UnblankDisplays();
   if (m_glContext)
   {
     NSOpenGLContext* oldContext = (NSOpenGLContext*)m_glContext;
@@ -278,6 +533,11 @@ bool CWinSystemOSX::CreateNewWindow(const CStdString& name, bool fullScreen, RES
   if (!view)
     return false;
   
+  // if we are not starting up windowed, then hide the initial SDL window
+  // so we do not see it flash before the fade-out and switch to fullscreen.
+  if (g_guiSettings.m_LookAndFeelResolution != RES_WINDOW)
+    ShowHideNSWindow([view window], false);
+
   // disassociate view from context
   [cur_context clearDrawable];
   
@@ -353,6 +613,8 @@ bool CWinSystemOSX::ResizeWindow(int newWidth, int newHeight, int newLeft, int n
   return true;
 }
 
+static bool needtoshowme = true;
+
 bool CWinSystemOSX::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays)
 {  
   static NSWindow* windowedFullScreenwindow = NULL;  
@@ -364,12 +626,18 @@ bool CWinSystemOSX::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
   bool was_fullscreen = m_bFullScreen;
   NSOpenGLContext* cur_context;
   
+  // Fade to black to hide resolution-switching flicker and garbage.
+  CGDisplayFadeReservationToken fade_token = DisplayFadeToBlack(needtoshowme);
+  
   // If we're already fullscreen then we must be moving to a different display.
   // Recurse to reset fullscreen mode and then continue.
   if (was_fullscreen && fullScreen)
   {
+    needtoshowme = false;
+    ShowHideNSWindow([last_view window], needtoshowme);
     RESOLUTION_INFO& window = g_settings.m_ResInfo[RES_WINDOW];
     CWinSystemOSX::SetFullScreen(false, window, blankOtherDisplays);
+    needtoshowme = true;
   }
   
   m_nWidth      = res.iWidth;
@@ -378,12 +646,16 @@ bool CWinSystemOSX::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
 
   cur_context = [NSOpenGLContext currentContext];
   if (!cur_context)
+  {
+    DisplayFadeFromBlack(fade_token, needtoshowme);  
     return false;
-  
+  }
+
   if(windowedFullScreenwindow != NULL)
   {
     [windowedFullScreenwindow close];
-    [windowedFullScreenwindow release];
+    if ([windowedFullScreenwindow isReleasedWhenClosed] == NO)
+      [windowedFullScreenwindow release];
     windowedFullScreenwindow = NULL;
   }
   
@@ -391,17 +663,26 @@ bool CWinSystemOSX::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
   {
     // FullScreen Mode
     NSOpenGLContext* newContext = NULL;
-  
-    // Fade to black to hide resolution-switching flicker and garbage.
-    CGDisplayFadeReservationToken fade_token = DisplayFadeToBlack();
-    
+
+    if (m_can_display_switch)
+    {
+      // send pre-configuration change now and do not
+      //  wait for switch videomode callback. This gives just
+      //  a little more advanced notice of the display pre-change.
+      if (g_guiSettings.GetBool("videoplayer.adjustrefreshrate"))
+        CheckDisplayChanging(kCGDisplayBeginConfigurationFlag);
+
+      // switch videomode
+      SwitchToVideoMode(res.iWidth, res.iHeight, res.fRefreshRate, res.iScreen);
+    }
+
     // Save info about the windowed context so we can restore it when returning to windowed.
     last_view = [cur_context view];
     last_view_size = [last_view frame].size;
     last_view_origin = [last_view frame].origin;
     last_window_screen = [[last_view window] screen];
     last_window_origin = [[last_view window] frame].origin;
-    
+   
     if (g_guiSettings.GetBool("videoscreen.fakefullscreen"))
     {
       // This is Cocca Windowed FullScreen Mode
@@ -497,15 +778,10 @@ bool CWinSystemOSX::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
     // activate context
     [newContext makeCurrentContext];
     m_lastOwnedContext = newContext;
-    
-    DisplayFadeFromBlack(fade_token);
   }
   else
   {
     // Windowed Mode
-       // Fade to black to hide resolution-switching flicker and garbage.
-    CGDisplayFadeReservationToken fade_token = DisplayFadeToBlack();
-    
     // exit fullscreen
     [cur_context clearDrawable];
     
@@ -524,7 +800,8 @@ bool CWinSystemOSX::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
       if(windowedFullScreenwindow != NULL)
       {
         [windowedFullScreenwindow close];
-        [windowedFullScreenwindow release];
+        if ([windowedFullScreenwindow isReleasedWhenClosed] == NO)
+          [windowedFullScreenwindow release];
         windowedFullScreenwindow = NULL;
       }
       
@@ -564,10 +841,11 @@ bool CWinSystemOSX::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
     // Activate context.
     [newContext makeCurrentContext];
     m_lastOwnedContext = newContext;
-    
-    DisplayFadeFromBlack(fade_token);
   }
 
+  DisplayFadeFromBlack(fade_token, needtoshowme);  
+
+  ShowHideNSWindow([last_view window], needtoshowme);
   // need to make sure SDL tracks any window size changes
   ResizeWindow(m_nWidth, m_nHeight, -1, -1);
 
@@ -581,32 +859,29 @@ void CWinSystemOSX::UpdateResolutions()
   // Add desktop resolution
   int w, h;
   double fps;
-  GetScreenResolution(&w, &h, &fps);
-  UpdateDesktopResolution(g_settings.m_ResInfo[RES_DESKTOP], 0, w, h, fps);
 
-  // Add full screen settings for additional monitors
-  int numDisplays = [[NSScreen screens] count];
-  for (int i = 1; i < numDisplays; i++)
+  //first screen goes into the current desktop mode
+  GetScreenResolution(&w, &h, &fps, 0);  
+  UpdateDesktopResolution(g_settings.m_ResInfo[RES_DESKTOP], 0, w, h, fps);
+  
+  //see resolution.h enum RESOLUTION for how the resolutions
+  //have to appear in the g_settings.m_ResInfo vector
+  //add the desktop resolutions of the other screens
+  for(int i = 1; i < GetNumScreens(); i++)
   {
-    CFDictionaryRef mode = CGDisplayCurrentMode( GetDisplayID(i) );
-    w = GetDictionaryInt(mode, kCGDisplayWidth);
-    h = GetDictionaryInt(mode, kCGDisplayHeight);
-    fps = GetDictionaryDouble(mode, kCGDisplayRefreshRate);
-    if ((int)fps == 0)
-    {
-      // NOTE: The refresh rate will be REPORTED AS 0 for many DVI and notebook displays.
-      fps = 60.0;
-    }
-    CLog::Log(LOGINFO, "Extra display %d is %dx%d\n", i, w, h);
-
-    RESOLUTION_INFO res;
-
+    RESOLUTION_INFO res;      
+    //get current resolution of screen i
+    GetScreenResolution(&w, &h, &fps, i);      
     UpdateDesktopResolution(res, i, w, h, fps);
-    g_graphicsContext.ResetOverscan(res);
     g_settings.m_ResInfo.push_back(res);
   }
   
-  //GetVideoModes();
+  if (m_can_display_switch)
+  {
+    //now just fill in the possible reolutions for the attached screens
+    //and push to the m_ResInfo vector
+    FillInVideoModes();
+  }
 }
 
 /*
@@ -720,10 +995,12 @@ void* CWinSystemOSX::CreateFullScreenContext(int screen_index, void* shareCtx)
   return newContext;
 }
 
-void CWinSystemOSX::GetScreenResolution(int* w, int* h, double* fps)
+void CWinSystemOSX::GetScreenResolution(int* w, int* h, double* fps, int screenIdx)
 {
   // Figure out the screen size. (default to main screen)
-  CGDirectDisplayID display_id = kCGDirectMainDisplay;
+  if(screenIdx >= GetNumScreens())
+    return;
+  CGDirectDisplayID display_id = GetDisplayID(screenIdx);
   CFDictionaryRef mode  = CGDisplayCurrentMode(display_id);
   
   NSOpenGLContext* context = [NSOpenGLContext currentContext];
@@ -763,88 +1040,112 @@ void CWinSystemOSX::EnableVSync(bool enable)
   [[NSOpenGLContext currentContext] setValues:(const long int*)&swapInterval forParameter:NSOpenGLCPSwapInterval];
 }
 
-bool CWinSystemOSX::SwitchToVideoMode(int width, int height, double refreshrate)
+bool CWinSystemOSX::SwitchToVideoMode(int width, int height, double refreshrate, int screenIdx)
 {
-  int match = 0;
+  // SwitchToVideoMode will not return until the display has actually switched over.
+  // This can take several seconds.
+  if( screenIdx >= GetNumScreens())
+    return false;
+
+  int match = 0;    
   CFDictionaryRef dispMode = NULL;
   // Figure out the screen size. (default to main screen)
-  CGDirectDisplayID display_id = kCGDirectMainDisplay;
-  
-  NSOpenGLContext* context = [NSOpenGLContext currentContext];
-  if (context)
-  {
-    NSView* view;
-  
-    view = [context view];
-    if (view)
-    {
-      NSWindow* window;
-      window = [view window];
-      if (window)
-      {
-        display_id = GetDisplayIDFromScreen( [window screen] );      
-      }
-    }
-  }
+  CGDirectDisplayID display_id = GetDisplayID(screenIdx);
 
-  // find mode that matches the desired size
-  dispMode = CGDisplayBestModeForParametersAndRefreshRate(
-    display_id, 32, width, height, (CGRefreshRate)(refreshrate), &match);
+  // find mode that matches the desired size, refreshrate
+  // non interlaced, nonstretched, safe for hardware
+  dispMode = GetMode(width, height, refreshrate, screenIdx);
 
-  if (!match)
+  //not found - fallback to bestemdeforparameters
+  if (!dispMode)
+  {
     dispMode = CGDisplayBestModeForParameters(display_id, 32, width, height, &match);
 
-  if (!match)
-    dispMode = CGDisplayBestModeForParameters(display_id, 16, width, height, &match);
+    if (!match)
+      dispMode = CGDisplayBestModeForParameters(display_id, 16, width, height, &match);
 
-  if (!match)
-    return false;
+    if (!match)
+      return false;
+  }
 
   // switch mode and return success
   CGDisplayCapture(display_id);
   CGDisplayConfigRef cfg;
   CGBeginDisplayConfiguration(&cfg);
-  CGConfigureDisplayFadeEffect(cfg, 0.3f, 0.5f, 0, 0, 0);
+  // we don't need to do this, we are already faded.
+  //CGConfigureDisplayFadeEffect(cfg, 0.3f, 0.5f, 0, 0, 0);
   CGConfigureDisplayMode(cfg, display_id, dispMode);
   CGError err = CGCompleteDisplayConfiguration(cfg, kCGConfigureForAppOnly);
   CGDisplayRelease(display_id);
   
+  Cocoa_CVDisplayLinkUpdate();
+
   return (err == kCGErrorSuccess);
 }
 
-//BOOL interlaced = (CGDisplayModeGetIOFlags((CGDisplayModeRef)displayMode) & kDisplayModeInterlacedFlag);
-
-void CWinSystemOSX::GetVideoModes(void)
+void CWinSystemOSX::FillInVideoModes()
 {
-  CGDirectDisplayID displayID = kCGDirectMainDisplay;
-  CFArrayRef displayModes = CGDisplayAvailableModes(displayID);
-  if (NULL == displayModes)
-    return;
-
-  Boolean stretched;
-  Boolean interlaced;
-  Boolean safeForHardware;
-  Boolean televisionoutput;
-  int width, height, bitsperpixel;
-  double refreshrate;
+  // Add full screen settings for additional monitors
+  int numDisplays = [[NSScreen screens] count];
 
-  for (int i=0; i<CFArrayGetCount(displayModes); ++i)
+  for (int disp = 0; disp < numDisplays; disp++)
   {
-    CFDictionaryRef displayMode = (CFDictionaryRef)CFArrayGetValueAtIndex(displayModes, i);
-
-    stretched = GetDictionaryBoolean(displayMode, kCGDisplayModeIsStretched);
-    interlaced = GetDictionaryBoolean(displayMode, kCGDisplayModeIsInterlaced);
-    bitsperpixel = GetDictionaryInt(displayMode, kCGDisplayBitsPerPixel);
-    safeForHardware = GetDictionaryBoolean(displayMode, kCGDisplayModeIsSafeForHardware);
-    televisionoutput = GetDictionaryBoolean(displayMode, kCGDisplayModeIsTelevisionOutput);
+    Boolean stretched;
+    Boolean interlaced;
+    Boolean safeForHardware;
+    Boolean televisionoutput;
+    int w, h, bitsperpixel;
+    double refreshrate;
+    RESOLUTION_INFO res;   
+
+    CFArrayRef displayModes = CGDisplayAvailableModes(GetDisplayID(disp));
+    NSString *dispName = screenNameForDisplay(GetDisplayID(disp));
+    CLog::Log(LOGDEBUG, "Display %i has name %s", disp, [dispName UTF8String]);
+    
+    if (NULL == displayModes)
+      continue;
 
-    if((bitsperpixel == 32) && (safeForHardware == YES) && (stretched == NO) && (interlaced == NO))
+    for (int i=0; i < CFArrayGetCount(displayModes); ++i)
     {
-      width = GetDictionaryInt(displayMode, kCGDisplayWidth);
-      height = GetDictionaryInt(displayMode, kCGDisplayHeight);
-      refreshrate = GetDictionaryDouble(displayMode, kCGDisplayRefreshRate);
-      if ((int)refreshrate == 0)  // LCD display?
-        refreshrate = 150.0;      // Divisible by 25Hz and 30Hz to minimise AV sync waiting
+      CFDictionaryRef displayMode = (CFDictionaryRef)CFArrayGetValueAtIndex(displayModes, i);
+
+      stretched = GetDictionaryBoolean(displayMode, kCGDisplayModeIsStretched);
+      interlaced = GetDictionaryBoolean(displayMode, kCGDisplayModeIsInterlaced);
+      bitsperpixel = GetDictionaryInt(displayMode, kCGDisplayBitsPerPixel);
+      safeForHardware = GetDictionaryBoolean(displayMode, kCGDisplayModeIsSafeForHardware);
+      televisionoutput = GetDictionaryBoolean(displayMode, kCGDisplayModeIsTelevisionOutput);
+
+      if( (bitsperpixel == 32)      && 
+          (safeForHardware == YES)  && 
+          (stretched == NO)         && 
+          (interlaced == NO)        )
+      {
+        w = GetDictionaryInt(displayMode, kCGDisplayWidth);
+        h = GetDictionaryInt(displayMode, kCGDisplayHeight);      
+        refreshrate = GetDictionaryDouble(displayMode, kCGDisplayRefreshRate);
+        if ((int)refreshrate == 0)  // LCD display?
+        {
+          // NOTE: The refresh rate will be REPORTED AS 0 for many DVI and notebook displays.
+          refreshrate = 60.0;
+        }
+        CLog::Log(LOGINFO, "Found possible resolution for display %d with %d x %d @ %f Hz\n", disp, w, h, refreshrate);
+        
+        UpdateDesktopResolution(res, disp, w, h, refreshrate);
+
+        //overwrite the mode str because  UpdateDesktopResolution adds a
+        //"Full Screen". Since the current resolution is there twice
+        //this would lead to 2 identical resolution entrys in the guisettings.xml.
+        //That would cause problems with saving screen overscan calibration
+        //because the wrong entry is picked on load.
+        //So we just use UpdateDesktopResolutions for the current DESKTOP_RESOLUTIONS
+        //in UpdateResolutions. And on all othere resolutions make a unique
+        //mode str by doing it without appending "Full Screen".
+        //this is what linux does - though it feels that there shouldn't be
+        //the same resolution twice... - thats why i add a FIXME here.
+        res.strMode.Format("%dx%d @ %.2f", w, h, refreshrate);
+        g_graphicsContext.ResetOverscan(res);
+        g_settings.m_ResInfo.push_back(res);
+      }
     }
   }
 }
@@ -925,6 +1226,25 @@ bool CWinSystemOSX::Hide()
   return true;
 }
 
+void CWinSystemOSX::OnMove(int x, int y)
+{
+  Cocoa_CVDisplayLinkUpdate();
+}
+
+void CWinSystemOSX::Register(IDispResource *resource)
+{
+  CSingleLock lock(m_resourceSection);
+  m_resources.push_back(resource);
+}
+
+void CWinSystemOSX::Unregister(IDispResource* resource)
+{
+  CSingleLock lock(m_resourceSection);
+  std::vector<IDispResource*>::iterator i = find(m_resources.begin(), m_resources.end(), resource);
+  if (i != m_resources.end())
+    m_resources.erase(i);
+}
+
 bool CWinSystemOSX::Show(bool raise)
 {
   NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
@@ -1000,4 +1320,51 @@ int CWinSystemOSX::GetNumScreens()
   return(numDisplays);
 }
 
+void CWinSystemOSX::CheckDisplayChanging(u_int32_t flags)
+{
+  if (flags)
+  {
+    CSingleLock lock(m_resourceSection);
+    // tell any shared resources
+    if (flags & kCGDisplayBeginConfigurationFlag)
+    {
+      CLog::Log(LOGDEBUG, "CWinSystemOSX::CheckDisplayChanging:OnLostDevice");
+      for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); i++)
+        (*i)->OnLostDevice();
+    }
+    if (flags & kCGDisplaySetModeFlag)
+    {
+      CLog::Log(LOGDEBUG, "CWinSystemOSX::CheckDisplayChanging:OnResetDevice");
+      for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); i++)
+        (*i)->OnResetDevice();
+    }
+  }
+}
+
+void CWinSystemOSX::DisplayReconfigured(CGDirectDisplayID display, 
+  CGDisplayChangeSummaryFlags flags, void* userData)
+{
+  CWinSystemOSX *winsys = (CWinSystemOSX*)userData;
+       if (!winsys)
+    return;
+
+  if (flags & kCGDisplaySetModeFlag || flags & kCGDisplayBeginConfigurationFlag)
+  {
+    // pre/post-reconfiguration changes
+    RESOLUTION res = g_graphicsContext.GetVideoResolution();
+    NSScreen* pScreen = [[NSScreen screens] objectAtIndex:g_settings.m_ResInfo[res].iScreen];
+    if (pScreen)
+    {
+      CGDirectDisplayID xbmc_display = GetDisplayIDFromScreen(pScreen);
+      if (xbmc_display == display)
+      {
+        // we only respond to changes on the display we are running on.
+        CSingleLock lock(winsys->m_resourceSection);
+        CLog::Log(LOGDEBUG, "CWinSystemOSX::DisplayReconfigured");
+        winsys->CheckDisplayChanging(flags);
+      }
+    }
+  }
+}
+
 #endif
index 4113ff1..1efd651 100644 (file)
@@ -27,6 +27,9 @@
 #include "Application.h"
 #include "input/XBMC_vkeys.h"
 #include "input/MouseStat.h"
+#if defined(HAS_SDL_JOYSTICK)
+#include "input/SDLJoystick.h"
+#endif
 #include "storage/MediaManager.h"
 #include "windowing/WindowingFactory.h"
 #include <dbt.h>
@@ -39,6 +42,7 @@
 #include "settings/Settings.h"
 #include "settings/AdvancedSettings.h"
 #include "peripherals/Peripherals.h"
+#include "utils/JobManager.h"
 
 #ifdef _WIN32
 
@@ -382,6 +386,8 @@ LRESULT CALLBACK CWinEventsWin32::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
     case WM_CLOSE:
     case WM_QUIT:
     case WM_DESTROY:
+      if (hDeviceNotify)
+        UnregisterDeviceNotification(hDeviceNotify);
       newEvent.type = XBMC_QUIT;
       m_pEventFunc(newEvent);
       break;
@@ -599,11 +605,25 @@ LRESULT CALLBACK CWinEventsWin32::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
       return(0);
     case WM_SIZE:
       newEvent.type = XBMC_VIDEORESIZE;
-      newEvent.resize.type = XBMC_VIDEORESIZE;
       newEvent.resize.w = GET_X_LPARAM(lParam);
       newEvent.resize.h = GET_Y_LPARAM(lParam);
-      if (newEvent.resize.w * newEvent.resize.h)
+
+      CLog::Log(LOGDEBUG, __FUNCTION__": window resize event");
+
+      if (!g_Windowing.IsAlteringWindow() && newEvent.resize.w > 0 && newEvent.resize.h > 0)
+        m_pEventFunc(newEvent);
+
+      return(0);
+    case WM_MOVE:
+      newEvent.type = XBMC_VIDEOMOVE;
+      newEvent.move.x = GET_X_LPARAM(lParam);
+      newEvent.move.y = GET_Y_LPARAM(lParam);
+
+      CLog::Log(LOGDEBUG, __FUNCTION__": window move event");
+
+      if (!g_Windowing.IsAlteringWindow())
         m_pEventFunc(newEvent);
+
       return(0);
     case WM_MEDIA_CHANGE:
       {
@@ -626,7 +646,7 @@ LRESULT CALLBACK CWinEventsWin32::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
             case SHCNE_MEDIAINSERTED:
               CLog::Log(LOGDEBUG, __FUNCTION__": Drive %s Media has arrived.", drivePath);
               if (GetDriveType(drivePath) == DRIVE_CDROM)
-                g_application.getApplicationMessenger().OpticalMount(drivePath, true);
+                CJobManager::GetInstance().AddJob(new CDetectDisc(drivePath, true), NULL);
               else
                 CWin32StorageProvider::SetEvent();
               break;
@@ -635,7 +655,12 @@ LRESULT CALLBACK CWinEventsWin32::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
             case SHCNE_MEDIAREMOVED:
               CLog::Log(LOGDEBUG, __FUNCTION__": Drive %s Media was removed.", drivePath);
               if (GetDriveType(drivePath) == DRIVE_CDROM)
-                g_application.getApplicationMessenger().OpticalUnMount(drivePath);
+              {
+                CMediaSource share;
+                share.strPath = drivePath;
+                share.strName = share.strPath;
+                g_mediaManager.RemoveAutoSource(share);
+              }
               else
                 CWin32StorageProvider::SetEvent();
               break;
@@ -658,14 +683,20 @@ LRESULT CALLBACK CWinEventsWin32::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
       break;
     case WM_DEVICECHANGE:
       {
-        PDEV_BROADCAST_DEVICEINTERFACE b = (PDEV_BROADCAST_DEVICEINTERFACE) lParam;
-        switch (wParam)
+        switch(wParam)
         {
-          case DBT_DEVICEARRIVAL:
-          case DBT_DEVICEREMOVECOMPLETE:
           case DBT_DEVNODES_CHANGED:
             g_peripherals.TriggerDeviceScan(PERIPHERAL_BUS_USB);
             break;
+          case DBT_DEVICEARRIVAL:
+          case DBT_DEVICEREMOVECOMPLETE:
+            if (((_DEV_BROADCAST_HEADER*) lParam)->dbcd_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
+            {
+              g_peripherals.TriggerDeviceScan(PERIPHERAL_BUS_USB);
+#if defined(HAS_SDL_JOYSTICK)
+              g_Joystick.Reinitialize();
+#endif
+            }
         }
         break;
       }
index d4b3cac..1fc4b0c 100644 (file)
@@ -44,6 +44,8 @@ CWinSystemWin32::CWinSystemWin32()
   PtrCloseGestureInfoHandle = NULL;
   PtrSetGestureConfig = NULL;
   PtrGetGestureInfo = NULL;
+  m_ValidWindowedPosition = false;
+  m_IsAlteringWindow = false;
 }
 
 CWinSystemWin32::~CWinSystemWin32()
@@ -285,6 +287,8 @@ void CWinSystemWin32::NotifyAppFocusChange(bool bGaining)
 
 bool CWinSystemWin32::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays)
 {
+  m_IsAlteringWindow = true;
+
   CLog::Log(LOGDEBUG, "%s (%s) on screen %d with size %dx%d, refresh %f%s", __FUNCTION__, !fullScreen ? "windowed" : (g_guiSettings.GetBool("videoscreen.fakefullscreen") ? "windowed fullscreen" : "true fullscreen"), res.iScreen, res.iWidth, res.iHeight, res.fRefreshRate, (res.dwFlags & D3DPRESENTFLAG_INTERLACED) ? "i" : "");
 
   bool forceResize = false;
@@ -302,6 +306,7 @@ bool CWinSystemWin32::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool
     GetWindowInfo(m_hWnd, &wi);
     m_nLeft = wi.rcClient.left;
     m_nTop = wi.rcClient.top;
+    m_ValidWindowedPosition = true;
   }
 
   m_bFullScreen = fullScreen;
@@ -317,6 +322,8 @@ bool CWinSystemWin32::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool
 
   BlankNonActiveMonitors(m_bBlankOtherDisplay);
 
+  m_IsAlteringWindow = false;
+
   return true;
 }
 
@@ -344,6 +351,16 @@ const MONITOR_DETAILS &CWinSystemWin32::GetMonitor(int screen) const
   return m_MonitorsInfo[m_nPrimary];
 }
 
+int CWinSystemWin32::GetCurrentScreen()
+{
+  HMONITOR hMonitor = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTOPRIMARY);
+  for (unsigned int monitor = 0; monitor < m_MonitorsInfo.size(); monitor++)
+    if (m_MonitorsInfo[monitor].hMonitor == hMonitor)
+      return m_MonitorsInfo[monitor].ScreenNumber;
+  // primary as fallback - v. strange if this ever happens
+  return 0;
+}
+
 RECT CWinSystemWin32::ScreenRect(int screen)
 {
   const MONITOR_DETAILS &details = GetMonitor(screen);
@@ -379,13 +396,25 @@ bool CWinSystemWin32::ResizeInternal(bool forceRefresh)
     dwStyle |= WS_OVERLAPPEDWINDOW;
     windowAfter = g_advancedSettings.m_alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST;
 
-    if(m_nTop <= 0 || m_nLeft <= 0)
-      CenterWindow();
-
     rc.left = m_nLeft;
     rc.right = m_nLeft + m_nWidth;
     rc.top = m_nTop;
     rc.bottom = m_nTop + m_nHeight;
+    
+    HMONITOR hMon = MonitorFromRect(&rc, MONITOR_DEFAULTTONULL);
+    HMONITOR hMon2 = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTOPRIMARY);
+
+    // hasn't been windowed yet, or windowed position would not fullscreen to the same screen we were fullscreen on?
+    // -> center on the screen that we were fullscreen on
+    if(!m_ValidWindowedPosition || hMon == NULL || hMon != hMon2)
+    {
+      RECT newScreenRect = ScreenRect(GetCurrentScreen());
+      rc.left = m_nLeft = newScreenRect.left + ((newScreenRect.right - newScreenRect.left) / 2) - (m_nWidth / 2);
+      rc.top  = m_nTop  =  newScreenRect.top + ((newScreenRect.bottom - newScreenRect.top) / 2) - (m_nHeight / 2);
+      rc.right = m_nLeft + m_nWidth;
+      rc.bottom = m_nTop + m_nHeight;
+    }
+
     AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, false );
   }
 
index 8dd39e3..a0ce070 100644 (file)
@@ -136,6 +136,7 @@ public:
   virtual bool CenterWindow();
   virtual void NotifyAppFocusChange(bool bGaining);
   virtual int  GetNumScreens() { return m_MonitorsInfo.size(); };
+  virtual int  GetCurrentScreen();
   virtual void ShowOSMouse(bool show);
   virtual bool WindowedMode() { return true; }
   virtual bool HasInertialGestures(){ return true; }//if win32 has touchscreen - it uses the win32 gesture api for inertial scrolling 
@@ -151,6 +152,7 @@ public:
 
   // CWinSystemWin32
   HWND GetHwnd() { return m_hWnd; }
+  bool IsAlteringWindow() { return m_IsAlteringWindow; }
 
   // touchscreen support
   typedef BOOL (WINAPI *pGetGestureInfo)(HGESTUREINFO, PGESTUREINFO);
@@ -182,6 +184,8 @@ protected:
   HICON m_hIcon;
   std::vector<MONITOR_DETAILS> m_MonitorsInfo;
   int m_nPrimary;
+  bool m_ValidWindowedPosition;
+  bool m_IsAlteringWindow;
 };
 
 extern HWND g_hWnd;
index 96648ea..ffef549 100644 (file)
@@ -72,6 +72,11 @@ bool CWinSystemWin32DX::ResizeWindow(int newWidth, int newHeight, int newLeft, i
   return true;
 }
 
+void CWinSystemWin32DX::OnMove(int x, int y)
+{
+  CRenderSystemDX::OnMove();
+}
+
 bool CWinSystemWin32DX::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays)
 {
   // When going DX fullscreen -> windowed, we must reset the D3D device first to
index ac75708..fbc51a2 100644 (file)
@@ -42,6 +42,7 @@ public:
 
   virtual bool CreateNewWindow(CStdString name, bool fullScreen, RESOLUTION_INFO& res, PHANDLE_EVENT_FUNC userFunction);
   virtual bool ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop);
+  virtual void OnMove(int x, int y);
   virtual bool SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays);
   virtual bool WindowedMode() { return CRenderSystemDX::m_useWindowedDX; }
 
index 57f9a78..0af0748 100644 (file)
@@ -217,6 +217,10 @@ bool CGUIMediaWindow::OnMessage(CGUIMessage& message)
       m_iSelectedItem = m_viewControl.GetSelectedItem();
       m_iLastControl = GetFocusedControlID();
       CGUIWindow::OnMessage(message);
+      CGUIDialogContextMenu* pDlg = (CGUIDialogContextMenu*)g_windowManager.GetWindow(WINDOW_DIALOG_CONTEXT_MENU);
+      if (pDlg && pDlg->IsActive())
+        pDlg->Close();
+      
       // Call ClearFileItems() after our window has finished doing any WindowClose
       // animations
       ClearFileItems();
@@ -906,7 +910,7 @@ bool CGUIMediaWindow::OnClick(int iItem)
         if (!strLockType.IsEmpty() && !g_passwordManager.IsItemUnlocked(pItem.get(), strLockType))
             return true;
 
-      if (!HaveDiscOrConnection(pItem->m_iDriveType))
+      if (!HaveDiscOrConnection(pItem->GetPath(), pItem->m_iDriveType))
         return true;
     }
 
@@ -966,19 +970,19 @@ bool CGUIMediaWindow::OnClick(int iItem)
     bool do_not_add_karaoke = g_guiSettings.GetBool("karaoke.enabled") &&
       g_guiSettings.GetBool("karaoke.autopopupselector") && pItem->IsKaraoke();
     bool autoplay = m_guiState.get() && m_guiState->AutoPlayNextItem();
-    int iPlaylist = m_guiState.get()?m_guiState->GetPlaylist():PLAYLIST_MUSIC;
 
-    if (pItem->IsPlugin())
+    if (m_vecItems->IsPlugin())
     {
-      CURL url(pItem->GetPath());
+      CURL url(m_vecItems->GetPath());
       AddonPtr addon;
       if (CAddonMgr::Get().GetAddon(url.GetHostName(),addon))
       {
         PluginPtr plugin = boost::dynamic_pointer_cast<CPluginSource>(addon);
-        if (plugin && plugin->Provides(CPluginSource::AUDIO) && pItem->IsAudio())
+        if (plugin && plugin->Provides(CPluginSource::AUDIO))
         {
-          iPlaylist = PLAYLIST_MUSIC;
-          autoplay = g_guiSettings.GetBool("musicplayer.autoplaynextitem");
+          CFileItemList items;
+          auto_ptr<CGUIViewState> state(CGUIViewState::GetViewState(GetID(), items));
+          autoplay = state.get() && state->AutoPlayNextItem();
         }
       }
     }
@@ -1004,11 +1008,11 @@ bool CGUIMediaWindow::OnSelect(int item)
 
 // \brief Checks if there is a disc in the dvd drive and whether the
 // network is connected or not.
-bool CGUIMediaWindow::HaveDiscOrConnection(int iDriveType)
+bool CGUIMediaWindow::HaveDiscOrConnection(const CStdString& strPath, int iDriveType)
 {
   if (iDriveType==CMediaSource::SOURCE_TYPE_DVD)
   {
-    if (!g_mediaManager.IsDiscInDrive())
+    if (!g_mediaManager.IsDiscInDrive(strPath))
     {
       CGUIDialogOK::ShowAndGetInput(218, 219, 0, 0);
       return false;
@@ -1192,6 +1196,8 @@ bool CGUIMediaWindow::OnPlayMedia(int iItem)
   g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_NONE);
   CFileItemPtr pItem=m_vecItems->Get(iItem);
 
+  CLog::Log(LOGDEBUG, "%s %s", __FUNCTION__, pItem->GetPath().c_str());
+
   bool bResult = false;
   if (pItem->IsInternetStream() || pItem->IsPlayList())
     bResult = g_application.PlayMedia(*pItem, m_guiState->GetPlaylist());
@@ -1417,7 +1423,7 @@ void CGUIMediaWindow::GetContextButtons(int itemNumber, CContextButtons &buttons
 
   // TODO: FAVOURITES Conditions on masterlock and localisation
   if (!item->IsParentFolder() && !item->GetPath().Equals("add") && !item->GetPath().Equals("newplaylist://") &&
-      !item->GetPath().Left(19).Equals("newsmartplaylist://") && !item->IsAddonsPath())
+      !item->GetPath().Left(19).Equals("newsmartplaylist://"))
   {
     if (CFavourites::IsFavourite(item.get(), GetID()))
       buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14077);     // Remove Favourite
index 944ff0e..3c2432e 100644 (file)
@@ -89,7 +89,7 @@ protected:
   void GetFilteredItems(const CStdString &filter, CFileItemList &items);
 
   // check for a disc or connection
-  virtual bool HaveDiscOrConnection(int iDriveType);
+  virtual bool HaveDiscOrConnection(const CStdString& strPath, int iDriveType);
   void ShowShareErrorMessage(CFileItem* pItem);
 
   void GetDirectoryHistoryString(const CFileItem* pItem, CStdString& strHistoryString);
index 1b2bafa..916b032 100644 (file)
@@ -97,17 +97,18 @@ void CGUIWindowDebugInfo::Process(unsigned int currentTime, CDirtyRegionList &di
   CStdString info;
   if (LOG_LEVEL_DEBUG_FREEMEM <= g_advancedSettings.m_logLevel)
   {
-    MEMORYSTATUS stat;
-    GlobalMemoryStatus(&stat);
+    MEMORYSTATUSEX stat;
+    stat.dwLength = sizeof(MEMORYSTATUSEX);
+    GlobalMemoryStatusEx(&stat);
     CStdString profiling = CGUIControlProfiler::IsRunning() ? " (profiling)" : "";
     CStdString strCores = g_cpuInfo.GetCoresUsageString();
 #if !defined(_LINUX)
-    info.Format("LOG: %sxbmc.log\nMEM: %d/%d KB - FPS: %2.1f fps\nCPU: %s%s", g_settings.m_logFolder.c_str(),
-                stat.dwAvailPhys/1024, stat.dwTotalPhys/1024, g_infoManager.GetFPS(), strCores.c_str(), profiling.c_str());
+    info.Format("LOG: %sxbmc.log\nMEM: %"PRIu64"/%"PRIu64" KB - FPS: %2.1f fps\nCPU: %s%s", g_settings.m_logFolder.c_str(),
+                stat.ullAvailPhys/1024, stat.ullTotalPhys/1024, g_infoManager.GetFPS(), strCores.c_str(), profiling.c_str());
 #else
     double dCPU = m_resourceCounter.GetCPUUsage();
     info.Format("LOG: %sxbmc.log\nMEM: %"PRIu64"/%"PRIu64" KB - FPS: %2.1f fps\nCPU: %s (CPU-XBMC %4.2f%%%s)", g_settings.m_logFolder.c_str(),
-                stat.dwAvailPhys/1024, stat.dwTotalPhys/1024, g_infoManager.GetFPS(), strCores.c_str(), dCPU, profiling.c_str());
+                stat.ullAvailPhys/1024, stat.ullTotalPhys/1024, g_infoManager.GetFPS(), strCores.c_str(), dCPU, profiling.c_str());
 #endif
   }
 
index bf201ba..e9d8896 100644 (file)
@@ -58,6 +58,7 @@
 #include "utils/FileOperationJob.h"
 #include "utils/FileUtils.h"
 #include "utils/URIUtils.h"
+#include "Autorun.h"
 
 using namespace std;
 using namespace XFILE;
@@ -173,7 +174,7 @@ bool CGUIWindowFileManager::OnAction(const CAction &action)
     {
 #ifdef HAS_DVD_DRIVE
       if (m_vecItems[list]->Get(GetSelectedItem(list))->IsDVD())
-        return MEDIA_DETECT::CAutorun::PlayDisc(!MEDIA_DETECT::CAutorun::CanResumePlayDVD() || CGUIDialogYesNo::ShowAndGetInput(341, -1, -1, -1, 13404, 12021));
+        return MEDIA_DETECT::CAutorun::PlayDiscAskResume(m_vecItems[list]->Get(GetSelectedItem(list))->GetPath());
 #endif
     }
   }
@@ -652,7 +653,7 @@ bool CGUIWindowFileManager::HaveDiscOrConnection( CStdString& strPath, int iDriv
 {
   if ( iDriveType == CMediaSource::SOURCE_TYPE_DVD )
   {
-    if ( !g_mediaManager.IsDiscInDrive() )
+    if ( !g_mediaManager.IsDiscInDrive(strPath) )
     {
       CGUIDialogOK::ShowAndGetInput(218, 219, 0, 0);
       int iList = GetFocusedList();
index 72fb75f..019991f 100644 (file)
@@ -56,7 +56,7 @@ void CGUIWindowHome::OnInitWindow()
   CGUIWindow::OnInitWindow();
 }
 
-void CGUIWindowHome::Announce(EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data)
+void CGUIWindowHome::Announce(AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data)
 {
   int ra_flag = 0;
 
index 4215404..50a695d 100644 (file)
@@ -34,7 +34,7 @@ public:
   CGUIWindowHome(void);
   virtual ~CGUIWindowHome(void);
   virtual void OnInitWindow();
-  virtual void Announce(ANNOUNCEMENT::EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data);
+  virtual void Announce(ANNOUNCEMENT::AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data);
 
   virtual bool OnMessage(CGUIMessage& message);
 
index 7115597..119d9c7 100644 (file)
@@ -29,6 +29,9 @@
 #ifdef HAS_PYTHON
 #include "interfaces/python/XBPython.h"
 #endif
+#ifdef HAS_JSONRPC
+#include "interfaces/json-rpc/JSONRPC.h"
+#endif
 #include "interfaces/Builtins.h"
 #include "utils/Weather.h"
 #include "network/Network.h"
@@ -42,6 +45,7 @@
 #include "settings/GUISettings.h"
 #include "FileItem.h"
 #include "guilib/LocalizeStrings.h"
+#include "addons/AddonManager.h"
 
 #define CONTROL_BIG_LIST               52
 #define CONTROL_LABEL_HEADER            2
@@ -133,7 +137,9 @@ bool CGUIWindowLoginScreen::OnAction(const CAction &action)
   // this forces only navigation type actions to be performed.
   if (action.GetID() == ACTION_BUILT_IN_FUNCTION)
   {
-    if (action.GetName().Find("shutdown") != 1)
+    CStdString actionName = action.GetName();
+    actionName.ToLower();
+    if (actionName.Find("shutdown") != -1)
       CBuiltins::Execute(action.GetName());
     return true;
   }
@@ -204,14 +210,6 @@ void CGUIWindowLoginScreen::Update()
 bool CGUIWindowLoginScreen::OnPopupMenu(int iItem)
 {
   if ( iItem < 0 || iItem >= m_vecItems->Size() ) return false;
-  // calculate our position
-  float posX = 200, posY = 100;
-  const CGUIControl *pList = GetControl(CONTROL_BIG_LIST);
-  if (pList)
-  {
-    posX = pList->GetXPosition() + pList->GetWidth() / 2;
-    posY = pList->GetYPosition() + pList->GetHeight() / 2;
-  }
 
   bool bSelect = m_vecItems->Get(iItem)->IsSelected();
   // mark the item
@@ -267,6 +265,9 @@ CFileItemPtr CGUIWindowLoginScreen::GetCurrentListItem(int offset)
 
 void CGUIWindowLoginScreen::LoadProfile(unsigned int profile)
 {
+  // stop service addons and give it some time before we start it again
+  ADDON::CAddonMgr::Get().StopServices(true);
+
   if (profile != 0 || !g_settings.IsMasterUser())
   {
     g_application.getNetwork().NetworkMessage(CNetwork::SERVICES_DOWN,1);
@@ -294,6 +295,14 @@ void CGUIWindowLoginScreen::LoadProfile(unsigned int profile)
 #ifdef HAS_PYTHON
   g_pythonParser.m_bLogin = true;
 #endif
+
+#ifdef HAS_JSONRPC
+  JSONRPC::CJSONRPC::Initialize();
+#endif
+
+  // start services which should run on login 
+  ADDON::CAddonMgr::Get().StartServices(false);
+
   g_windowManager.ChangeActiveWindow(g_SkinInfo->GetFirstWindow());
 
   g_application.UpdateLibraries();
index 1840016..dcd1fef 100644 (file)
@@ -116,7 +116,7 @@ void CGUIWindowSystemInfo::FrameMove()
     SetControlLabel(i++, "%s: %s", 149, NETWORK_MAC_ADDRESS);
 #endif
     SetControlLabel(i++, "%s: %s", 150, NETWORK_IP_ADDRESS);
-    SetControlLabel(i++, "%s: %s", 13159, NETWORK_SUBNET_ADDRESS);
+    SetControlLabel(i++, "%s: %s", 13159, NETWORK_SUBNET_MASK);
     SetControlLabel(i++, "%s: %s", 13160, NETWORK_GATEWAY_ADDRESS);
     SetControlLabel(i++, "%s: %s", 13161, NETWORK_DNS1_ADDRESS);
     SetControlLabel(i++, "%s: %s", 20307, NETWORK_DNS2_ADDRESS);
index 042101b..a172873 100644 (file)
@@ -60,11 +60,9 @@ using namespace ADDON;
 #define LOCALIZED_TOKEN_FIRSTID      370
 #define LOCALIZED_TOKEN_LASTID       395
 
-unsigned int timeToCallScript = 1000;
 /*
 FIXME'S
 >strings are not centered
->weather.com dev account is mine not a general xbmc one
 */
 
 CGUIWindowWeather::CGUIWindowWeather(void)
@@ -88,10 +86,6 @@ bool CGUIWindowWeather::OnMessage(CGUIMessage& message)
       }
       else if (iControl == CONTROL_SELECTLOCATION)
       {
-        // stop the script timer here, so the user has a full second
-        if (m_scriptTimer.IsRunning())
-          m_scriptTimer.Stop();
-
         CGUIMessage msg(GUI_MSG_ITEM_SELECTED,GetID(),CONTROL_SELECTLOCATION);
         g_windowManager.SendMessage(msg);
 
@@ -109,20 +103,6 @@ bool CGUIWindowWeather::OnMessage(CGUIMessage& message)
     {
       UpdateLocations();
       SetProperties();
-      if (g_windowManager.GetActiveWindow() == WINDOW_WEATHER)
-        m_scriptTimer.StartZero();
-      else
-        CallScript();
-    }
-    break;
-  case GUI_MSG_WINDOW_INIT:
-    {
-      if (!g_sysinfo.HasInternet())
-      {
-        CGUIDialogOK::ShowAndGetInput(8,21451,20022,20022);
-        g_windowManager.PreviousWindow();
-        return true;
-      }
     }
     break;
   case GUI_MSG_ITEM_SELECT:
@@ -138,9 +118,9 @@ bool CGUIWindowWeather::OnMessage(CGUIMessage& message)
     {
       if (message.GetSenderId() == 0) //handle only message from builtin
       {
-        // Clamp location between 1 and MAX_LOCATION
-        int v = (g_weatherManager.GetArea() + message.GetParam1() - 1) % MAX_LOCATION + 1;
-        if (v < 1) v += MAX_LOCATION;
+        // Clamp location between 1 and m_maxLocation 
+        int v = (g_weatherManager.GetArea() + message.GetParam1() - 1) % m_maxLocation + 1;
+        if (v < 1) v += m_maxLocation;
         SetLocation(v);
         return true;
       }
@@ -164,14 +144,23 @@ void CGUIWindowWeather::OnInitWindow()
 void CGUIWindowWeather::UpdateLocations()
 {
   if (!IsActive()) return;
-
+  m_maxLocation = strtol(GetProperty("Locations").asString().c_str(),0,10);
+  if (m_maxLocation < 1) return;
   CGUIMessage msg(GUI_MSG_LABEL_RESET,GetID(),CONTROL_SELECTLOCATION);
   g_windowManager.SendMessage(msg);
   CGUIMessage msg2(GUI_MSG_LABEL_ADD,GetID(),CONTROL_SELECTLOCATION);
 
   unsigned int iCurWeather = g_weatherManager.GetArea();
 
-  for (unsigned int i = 1; i <= MAX_LOCATION; i++)
+  if (iCurWeather > m_maxLocation)
+  {  
+    g_weatherManager.SetArea(m_maxLocation);
+    iCurWeather = m_maxLocation;
+    ClearProperties();
+    g_weatherManager.Refresh();
+  }
+  
+  for (unsigned int i = 1; i <= m_maxLocation; i++)
   {
     CStdString strLabel = g_weatherManager.GetLocation(i);
     if (strLabel.size() > 1) //got the location string yet?
@@ -245,13 +234,6 @@ void CGUIWindowWeather::FrameMove()
   // update our controls
   UpdateButtons();
 
-  // call weather script
-  if (m_scriptTimer.IsRunning() && m_scriptTimer.GetElapsedMilliseconds() > timeToCallScript)
-  {
-    m_scriptTimer.Stop();
-    CallScript();
-  }
-
   CGUIWindow::FrameMove();
 }
 
@@ -261,11 +243,12 @@ void CGUIWindowWeather::FrameMove()
  */
 void CGUIWindowWeather::SetLocation(int loc)
 {
-  if (loc < 1 || loc > MAX_LOCATION)
+  if (loc < 1 || loc > (int)m_maxLocation)
     return;
   // Avoid a settings write if old location == new location
   if (g_weatherManager.GetArea() != loc)
   {
+    ClearProperties();
     g_weatherManager.SetArea(loc);
     CStdString strLabel = g_weatherManager.GetLocation(loc);
     int iPos = strLabel.ReverseFind(", ");
@@ -282,9 +265,6 @@ void CGUIWindowWeather::SetProperties()
   int iCurWeather = g_weatherManager.GetArea();
   SetProperty("Location", g_weatherManager.GetLocation(iCurWeather));
   SetProperty("LocationIndex", iCurWeather);
-  CStdString strSetting;
-  strSetting.Format("weather.areacode%i", iCurWeather);
-  SetProperty("AreaCode", CWeather::GetAreaCode(g_guiSettings.GetString(strSetting)));
   SetProperty("Updated", g_weatherManager.GetLastUpdateTime());
   SetProperty("Current.ConditionIcon", g_weatherManager.GetInfo(WEATHER_IMAGE_CURRENT_ICON));
   SetProperty("Current.Condition", g_weatherManager.GetInfo(WEATHER_LABEL_CURRENT_COND));
@@ -315,39 +295,32 @@ void CGUIWindowWeather::SetProperties()
   }
 }
 
-void CGUIWindowWeather::CallScript()
+void CGUIWindowWeather::ClearProperties()
 {
-#ifdef HAS_PYTHON
-  if (!g_guiSettings.GetString("weather.script").Equals(DEFAULT_WEATHER_ADDON))
+  // Current weather
+  SetProperty("Location", "");
+  SetProperty("LocationIndex", "");
+  SetProperty("Updated", "");
+  SetProperty("Current.ConditionIcon", "");
+  SetProperty("Current.Condition", "");
+  SetProperty("Current.Temperature", "");
+  SetProperty("Current.FeelsLike", "");
+  SetProperty("Current.UVIndex", "");
+  SetProperty("Current.Wind", "");
+  SetProperty("Current.DewPoint", "");
+  SetProperty("Current.Humidity", "");
+  SetProperty("Current.FanartCode", "");
+  
+  // Future weather
+  CStdString day;
+  for (int i = 0; i < NUM_DAYS; i++)
   {
-    AddonPtr addon;
-    if (!ADDON::CAddonMgr::Get().GetAddon(g_guiSettings.GetString("weather.script"), addon, ADDON_SCRIPT_WEATHER))
-      return;
-
-    // initialize our sys.argv variables
-    std::vector<CStdString> argv;
-    argv.push_back(addon->LibPath());
-
-    // if script is running we wait for another timeout only when in weather window
-    if (g_windowManager.GetActiveWindow() == WINDOW_WEATHER)
-    {
-      int id = g_pythonParser.getScriptId(argv[0]);
-      if (id != -1 && g_pythonParser.isRunning(id))
-      {
-        m_scriptTimer.StartZero();
-        return;
-      }
-    }
-
-    // get the current locations area code
-    CStdString strSetting;
-    strSetting.Format("weather.areacode%i", g_weatherManager.GetArea());
-    argv.push_back(CWeather::GetAreaCode(g_guiSettings.GetString(strSetting)));
-
-    // call our script, passing the areacode
-    g_pythonParser.evalFile(argv[0], argv,addon);
-
-    CLog::Log(LOGDEBUG, "%s - Weather script called: %s (%s)", __FUNCTION__, argv[0].c_str(), argv[1].c_str());
+    day.Format("Day%i.", i);
+    SetProperty(day + "Title", "");
+    SetProperty(day + "HighTemp", "");
+    SetProperty(day + "LowTemp", "");
+    SetProperty(day + "Outlook", "");
+    SetProperty(day + "OutlookIcon", "");
+    SetProperty(day + "FanartCode", "");
   }
-#endif
-}
+}
\ No newline at end of file
index 6f6726f..8c914bd 100644 (file)
@@ -38,8 +38,8 @@ protected:
   void UpdateButtons();
   void UpdateLocations();
   void SetProperties();
-  void CallScript();
+  void ClearProperties();
   void SetLocation(int loc);
 
-  CStopWatch m_scriptTimer;
+  unsigned int m_maxLocation;
 };
index df09677..b6d3bac 100644 (file)
@@ -100,22 +100,3 @@ int main(int argc, char* argv[])
 
   return status;
 }
-
-extern "C"
-{
-  void mp_msg( int x, int lev, const char *format, ... )
-  {
-    va_list va;
-    static char tmp[2048];
-    va_start(va, format);
-#ifndef _LINUX
-    _vsnprintf(tmp, 2048, format, va);
-#else
-    vsnprintf(tmp, 2048, format, va);
-#endif
-    va_end(va);
-    tmp[2048 - 1] = 0;
-
-    OutputDebugString(tmp);
-  }
-}